Показать сообщение отдельно
Старый 20.01.2012, 14:56   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от niksen Посмотреть сообщение
а теперь расскажите, с чем это связано?
Цитата:
Сообщение от niksen Посмотреть сообщение
ставлю InnerJoin, без задержек, в итоге ругается на то, что данный датасорс уже используется.
В коде какого-то метода формы или контрола объявленна локальная переменная с именем InventTable. Имя датасурса в асапте также используется в качестве переменной (AutoDeclaration). В результате получается конфликт имён.

Цитата:
Сообщение от niksen Посмотреть сообщение
Хорошо, меняем его название, например на InventTable_1, получаем, что при добавлении любого поля из InventTable на форму, например того же Краткого наименования (NameAlias) и создании любой новой строки заказа вылетает ошибка, что невозможно заполнить номенклатурную группу и т.д.
При вставке строки аксапта автоматически создаёт связанные строки во всех связанных (с типом связи InnerJoin) таблицах. Из-за того что обязательные поля InventTable не проинициализированы ValidateWrite датасурса Inventtable выдаёт ошибку.

Для того чтобы заблокировать вставку строк в связанный датасурс достаточно перекрыть метод write() и не позволить там выполниться команде super(). Аналогично для блокировки удаления строки из связанной таблицы комментируем super() в методе delete(). Но это ещё не всё. Перед вызовом методов write() и delete() аксапта осуществляет соответствующие проерки при помощи методов validateWrite() и validateDelte(). Они то и обнаруживают факт незаполнености обязательных полей. Но так как вставлять или удалять записи мы не собираемся, то смело убираем из этих методов проверки дабы избежать возникновения исключения.