20.01.2012, 11:08 | #1 |
Участник
|
Добавление InventTable в форму заказов на продажу
Попробовал добавить InventTable в датасорсы, т.к. хочется видеть некоторые другие поля при выборе номенклатуры из заказа. Метод ставлю InnerJoin, без задержек, в итоге ругается на то, что данный датасорс уже используется. Хорошо, меняем его название, например на InventTable_1, получаем, что при добавлении любого поля из InventTable на форму, например того же Краткого наименования (NameAlias) и создании любой новой строки заказа вылетает ошибка, что невозможно заполнить номенклатурную группу и т.д.
Как быть? версия 2009 |
|
20.01.2012, 11:21 | #2 |
Молодой, подающий надежды
|
Выставить на датасорсе: AllowEdit, AllowCreate, AllowDelete = No.
Закомментировать вызов super() в методах write() и delete() датасорса. В методах validateWrite(), validateDelete() датасорса возвращать true. |
|
|
За это сообщение автора поблагодарили: niksen (1). |
20.01.2012, 11:35 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: niksen (1). |
20.01.2012, 14:27 | #4 |
Участник
|
спасибо, помогло!
а теперь расскажите, с чем это связано? Последний раз редактировалось niksen; 20.01.2012 в 14:32. |
|
20.01.2012, 14:56 | #5 |
Участник
|
Цитата:
Цитата:
Сообщение от niksen
Хорошо, меняем его название, например на InventTable_1, получаем, что при добавлении любого поля из InventTable на форму, например того же Краткого наименования (NameAlias) и создании любой новой строки заказа вылетает ошибка, что невозможно заполнить номенклатурную группу и т.д.
Для того чтобы заблокировать вставку строк в связанный датасурс достаточно перекрыть метод write() и не позволить там выполниться команде super(). Аналогично для блокировки удаления строки из связанной таблицы комментируем super() в методе delete(). Но это ещё не всё. Перед вызовом методов write() и delete() аксапта осуществляет соответствующие проерки при помощи методов validateWrite() и validateDelte(). Они то и обнаруживают факт незаполнености обязательных полей. Но так как вставлять или удалять записи мы не собираемся, то смело убираем из этих методов проверки дабы избежать возникновения исключения. |
|
20.01.2012, 15:02 | #6 |
Участник
|
А create() нужно комментировать чтобы не отрабатывал initValue на таблице.
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
22.01.2012, 13:56 | #7 |
Участник
|
Коллеги, а как правильнее поступить, если надо в этой форме еще и чего-то редактировать в InventTable?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
22.01.2012, 14:36 | #8 |
Участник
|
Цитата:
Технически необходимо лишь в методах Write и ValidateWrite суметь отличить событие вставки от события обновления. Сделать это можно по наличию значения в поле RecId обрабатываемой записи. Если запись ещё только вставляется, то её RecId будет пустым. |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
22.01.2012, 14:37 | #9 |
Участник
|
Цитата:
Чтобы меньше кода вешать на форму Заказов, edit метод можно повесить на таблицу SalesTable. |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
22.01.2012, 17:46 | #10 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Из строках заказа редактировать карточку номенклатуры? На пракктике такое вряд ли понадобится. Или это гипотетический вопрос?
Технически необходимо лишь в методах Write и ValidateWrite суметь отличить событие вставки от события обновления. Сделать это можно по наличию значения в поле RecId обрабатываемой записи. Если запись ещё только вставляется, то её RecId будет пустым.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
|