|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Recoilme
Можно ли добавить запись средствами СУБД без доработок?
Цитата:
Сообщение от Гений 1С
Значит верно ли я думаю, что в аксапте получаем некий курсор из таблицы Sales_Talbe, где содерждатся заказы по контрагенту, затем получаем одним запросом все строчки, принадлежащие этим таблицам или, наоборот, перебираем по одному заказу и получаем для него все строчки, ну и далее изменяем цену.
Ну и соответственно после завершения вызов метода update у выборки строк. Пока я правильно иду? |
|
![]() |
#2 |
Участник
|
![]() Цитата:
А конкретно твой пример некорректен ,ведь мало изменить цены, нужно пересчитать некоторые связанные данные.
Цитата:
Зависит от задачи и взаимосвязей в системе. Можнешь делать любым перечисленным способом, включая обновление какого-либо поля совокупности записей одной командой.
Или ты имеешь ввиду, что я могу записать одной командой сразу 10 записей? Но в общем понятно. А теперь вопрос: 1. Могу ли я сделать штатно (или написать класс), которому передаю id записи из Sales_Table, она считывает все связанные строки из всех табличных частей в один объект в памяти, чтобы можно было в памяти его исправить и сделать обратную запись? (аналог документа в 80) 2. Хранятся ли в базе данных некие метаданные, где описывается, что таблица Sales_Line ссылается на Sales_Table в отношении M:1 (думаю такая информация может храниться в описании ключа таблицы Sales_Line). Кроме этого, можно ли получить из Sales_Line отдельные списки: табличных частей и таблиц, в которых генерятся некоторые записи в различных табличках (ну так выразился один из участников или движения по 1С). Эти таблицы тоже соотносятся с Sales_Table в отношении 1:М, но имеют другое назначение. Может ли программа на Axapte узнать, какая из связанных таблиц является табличной частью, а какая - движениями или еще чем-то? |
|
![]() |
#3 |
Administrator
|
Цитата:
Сообщение от Гений 1С
1. Могу ли я сделать штатно (или написать класс), которому передаю id записи из Sales_Table, она считывает все связанные строки из всех табличных частей в один объект в памяти, чтобы можно было в памяти его исправить и сделать обратную запись? (аналог документа в 80)
Далее - по хорошему - этот код оформляется в класс, которому дается указание создаться на сервере. Соотв этот код отрабатывает на сервере. Т.е. в память как в 1С ничего не грузится. Хотя в принципе - возможно (и нужно с помощью специальных механизмов) при массовой вставке данных действовать через память Цитата:
Сообщение от Гений 1С
2. Хранятся ли в базе данных некие метаданные, где описывается, что таблица Sales_Line ссылается на Sales_Table в отношении M:1 (думаю такая информация может храниться в описании ключа таблицы Sales_Line). Кроме этого, можно ли получить из Sales_Line отдельные списки: табличных частей и таблиц, в которых генерятся некоторые записи в различных табличках (ну так выразился один из участников или движения по 1С). Эти таблицы тоже соотносятся с Sales_Table в отношении 1:М, но имеют другое назначение. Может ли программа на Axapte узнать, какая из связанных таблиц является табличной частью, а какая - движениями или еще чем-то?
Чтобы узнать про таблицы в которых хранятся проводки обычно действуют так (если не знают как они называются): Вариант 1: Открываем форму в которой отображаются данные из этих таблиц. Из формы можно достучаться до таблицы. Вариант 2: Идентифицируем по названию (ну как SalesTable - заказы) Вариант 3: Строим перекрестные ссылки. Они показывают - что где и в каком виде используется в коде, связях и пр.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 06.05.2006 в 15:52. |
|
![]() |
#4 |
Участник
|
![]() Цитата:
Если действовать в рамках как принято в Аксапте - то это делается через транзакции. Т.е. открывается транзакция, далее идет цикл по курсору с обновлением (вызовом update()), затем транзакци закрывается. Очевидно - что пишется либо все либо ничего.
Далее - по хорошему - этот код оформляется в класс, которому дается указание создаться на сервере. Соотв этот код отрабатывает на сервере. Т.е. в память как в 1С ничего не грузится. Хотя в принципе - возможно (и нужно с помощью специальных механизмов) при массовой вставке данных действовать через память Вот здесь методическая разница видна. Окей, вопрос прояснен. Цитата:
У таблицы (это же объект) есть такие понятия как Relations (отношения) - которые делают намеки на это. Эти же понятия присутствуют и в расширенном типе данных. Он тоже может показывать информацию
Чтобы узнать про таблицы в которых хранятся проводки обычно действуют так (если не знают как они называются): Вариант 1: Открываем форму в которой отображаются данные из этих таблиц. Из формы можно достучаться до таблицы. Вариант 2: Идентифицируем по названию (ну как SalesTable - заказы) Вариант 3: Строим перекрестные ссылки. Они показывают - что где и в каком виде используется в коде, связях и пр Вообще выяснять что означает таблица через форму - ИМХО явное извращение, возможно только в системах, где формы годами не меняются. ![]() По крайней мере в этом вопросе в 1С лучше. Хотя казалось бы, почему бы Аксапте не помечать типы таблиц в некой служебной таблице, как она это делает с именами таблиц? Ну видимо, т.к. у Аксапты стабильное ядро (в отличие от 1С, где таблицы могут быть разными), программист в коде может сам указать что значит какая таблица, ориентируясь на заранее известные имена. Но в этом вобщем говоря, недоделка Аксапты, хотя наверное аксаптерам она не сильно жить мешает. ![]() Последний раз редактировалось Гений 1С; 06.05.2006 в 16:01. |
|
![]() |
#5 |
Administrator
|
Цитата:
Сообщение от Гений 1С
А вот для этого в 1С есть метаданные, которые описывают назначение таблиц и для выяснения who is who обращаются к метаданным без всяких анализов.
Вообще выяснять что означает таблица через форму - ИМХО явное извращение, возможно только в системах, где формы годами не меняются. ![]() По крайней мере в этом вопросе в 1С лучше. Хотя казалось бы, почему бы Аксапте не помечать типы таблиц в некой служебной таблице, как она это делает с именами таблиц? Ну видимо, т.к. у Аксапты стабильное ядро (в отличие от 1С, где таблицы могут быть разными), программист в коде может сам указать что значит какая таблица, ориентируясь на заранее известные имена. Но в этом вобщем говоря, недоделка Аксапты, хотя наверное аксаптерам она не сильно жить мешает. ![]()
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#6 |
Участник
|
![]() Цитата:
Сообщение от sukhanchik
описанные варианты - лишь предполагают как будет действовать программист (не система). А тут Вы правы - система предполагает - что названия таблиц меняться не будут. Тут нельзя забывать про то, что чем крупнее бизнес, тем более стандартны механизмы учета в нем. В связи с этим чем более крупных клиентов обслуживает та или иная система - тем меньше она (система) предполагает разработок. Отсюда и все последствия. Т.е. нельзя это назвать недоделкой. Это как вопрос - можно ли авто с правым рулем считать недоделкой? Дело привычки. Зато смотря на БД без Аксапты - хорошо понимаешь ее структуру
|
|
![]() |
#7 |
Administrator
|
Цитата:
Сообщение от Гений 1С
Вот видите, мы потихоньку продвигаемся, исходя из возможных способов построения СУБД и даже не зная Аксапты. А вы не верили!
![]() ![]() По статусам: Цитата:
Сообщение от Гений 1С
Если не затруднит, еще вопрос по статусам.
У документа в 1С есть такие статусы: Проведен-Не проведен. Помечен на удаление. Помеченный на удаление не может быть проведенным, но может быть снят с удаления. Проведенный может быть снят с проведения и наоборот. Движения могут быть только у проведенного документа. Проведенный документ можно еще раз провести - при этом в одной транзакции он сначала снимается с проведения, потом проводится. Как с этим в аксапте? Удалять очевидно также нельзя (если были проводки). Поэтому из вышеприведенного перечня остается только понятие проведен-не проведен. А это сильно зависит от места (я уже говорил - нет понятия документа). Например у заказа 4 статуса. У накладной на услуги - 2. У ПКО/РКО - 3. Более того - отсутствие распроведения - позволяет Аксе оставлять "аудиторский след", что в случае сертификации для выхода на IPO весьма нелишне. Напоминаю - что АКса - это изначально европейская система (Дания)
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 06.05.2006 в 16:31. |
|
![]() |
#8 |
Пенсионер
|
Цитата:
Сообщение от Гений 1С
Окей, в 1С происходит именно так, как я сказал - т.е. через объект в памяти, в который считываются все строки из всех табличных частей. Напрямую строки менять нельзя. Т.е. можно сказать что 1С проще, Аксапта гибче.
Вот здесь методическая разница видна. Окей, вопрос прояснен. Что значит "объект в памяти, в который считываются все строки из всех табличных частей" это и есть то что в аксе называется "табличная переменная" или экземпляр объекта-таблица и в Аксе напрямую никто ничего не меняет, а исключительно в "памяти" т.е. в "табличной переменной" и только после запуска специального метода update() этого объекта, происходит физическая запись изменений собственно в таблицу. ИМХО эти механизмы, по крайней мере внешне, одинаковы и в 1с и в Аксе.
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
![]() |
#9 |
Участник
|
Цитата:
Сообщение от blokva
Что значит "объект в памяти, в который считываются все строки из всех табличных частей" это и есть то что в аксе называется "табличная переменная" или экземпляр объекта-таблица и в Аксе напрямую никто ничего не меняет, а исключительно в "памяти" т.е. в "табличной переменной" и только после запуска специального метода update() этого объекта, происходит физическая запись изменений собственно в таблицу.
ИМХО эти механизмы, по крайней мере внешне, одинаковы и в 1с и в Аксе. Так работает метод Записать() документа в 1С. Причем связанные строки загружаются в объект сами по метаданным. Не говорю, плохо это или хорошо. Так работает в 1С. |
|
![]() |
#10 |
Пенсионер
|
Цитата:
Сообщение от Гений 1С
Это понятно, вопрос был глубже - можно ли завести как вы называете табличную переменную, содержащую одновременно строку из текущей таблицы и все связанные строки из нескольких других таблиц и метод update в таком случае в одной транзакции обновит как строку таблицы, так и связанные строки.
Так работает метод Записать() документа в 1С. Причем связанные строки загружаются в объект сами по метаданным. Не говорю, плохо это или хорошо. Так работает в 1С. НО! Если таблицы связаны логикой, то метод update() на главной таблице может включать в себя запуск таких же методов на связанных таблицах, что в принципе полностью соответствует приведенной схеме в 1с, если резюмировать, то это не жесткое правило и формируется исходя из требований бизнес-лгики. Если в 1с этот механизм реализован на уровне ядра, то в аксе нет, тогда Вы правы по поводу "проще" и "гибче"
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
Теги |
сравнение систем, 1c |
|
|