Показать сообщение отдельно
Старый 26.09.2008, 12:15   #16  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
тут-то как раз все просто. Если в Вашей таблице есть ключевое поле с EDT, который смотрит на эту же таблицу (аналогично полю SalesId в таблице SalesTable с EDT SalesId) - то Вы просто делаете форму с тем же датасорсом. При переходе из одной формы в другую - у Вас просто свяжутся две записи по этому ID и ядро физически не позволит перейти на другую запись.

Проблема будет в другом. Аксапта в большинстве своих форм предполагает редактирование непосредственно на форме с автоматическим сохранением - так что если Вам вдруг придет в голову идея добавить кнопки Сохранить-Отмена - то гоните эту идею прочь .
Хотя - вполне можно поступить также как в форме SalesCreateOrder - перекрыть метод write на датасорсе и потом анализировать методы closedOk/closedCancel

Цитата:
Сообщение от sweeper Посмотреть сообщение
А способ с временными таблицами проще или нет?
Он другой. Его может объяснить тяжелее. Идея такова - делается форма с датасорсом. На методе init датасорса после super делается из датасорса временная табличка (MyTable_ds.cursor().setTmp()). Далее - все работает как обычно.
Но в конце надо будет из этой временной таблички - все слить в постоянную табличку (объявляется новая переменная, потом копируются все поля из временной таблички и вызывается метод insert()).
За кажущейся простотой - стоят особенности работы с временными таблицами в аксапте (нельзя терять курсор), возможное отсутствие возможности использовать существующий функционал (если он есть), и вообще сам факт использования временных таблиц. Одно дело - когда все работает стандартно с БД, другое дело - когда Аксапта должна сама создавать еще отдельный файл (пусть временный) - куда чего-то еще записывать.
Плюс - если у вас при формировании записи выделяется номер из номерной серии - то для записи во временной табличке его либо не нужно выделять, либо рисковать потерей выделенного номера (если пользователь нажмет кнопку Отмена).

Поэтому - если Вы новичок - то я бы Вам советовал бы сначала освоить первый способ. Потом - отдельно - познакомиться с особенностью работы с временными таблицами в Аксапте - а потом - сделать вывод - что проще.
В любом случае - с т.з. оценки работы программиста - лучше - когда он пишет в стиле стандартного функционала и по максимуму использует возможности уже написанного кода или поведение ядра для минимизации кода. Нет смысла за Аксапту делать insert(), лучше уж заставить работать метод write на датасорсе - так как надо. Но и палку перегибать не надо. В разобранном мною примере - как раз insert() оправдан в рамках минимизации перекрытия кол-ва методов навигации (см сообщение от AndyD)

Цитата:
Сообщение от sweeper Посмотреть сообщение
Меня как новичка в Ахапте ужасает что шаг налево, шаг на право и ничего не работает и потом понять где ошибка может только человек который уже успел в Ахапте натереть мозоли
Не забывайте - что Аксапта - не затачивалась и не будет затачиваться под среду разработки. Ее цель - это несение функционала. А как этот функционал в МС предподнесут - в открытом коде или в ядре - это уже второй вопрос.
Поэтому ряд методов в ядре слабо оттестирован, либо еще и незадокументирован - поэтому - гарантию работоспособности может дать только тот код, который уже работает в каком-то месте. Поэтому - самый лучший способ программирования в Аксапте - "посмотреть как работает там и сделать по аналогии".
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 26.09.2008 в 12:19.