AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2012, 11:08   #1  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
Добавление InventTable в форму заказов на продажу
Попробовал добавить InventTable в датасорсы, т.к. хочется видеть некоторые другие поля при выборе номенклатуры из заказа. Метод ставлю InnerJoin, без задержек, в итоге ругается на то, что данный датасорс уже используется. Хорошо, меняем его название, например на InventTable_1, получаем, что при добавлении любого поля из InventTable на форму, например того же Краткого наименования (NameAlias) и создании любой новой строки заказа вылетает ошибка, что невозможно заполнить номенклатурную группу и т.д.
Как быть?
версия 2009
Старый 20.01.2012, 11:21   #2  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Выставить на датасорсе: AllowEdit, AllowCreate, AllowDelete = No.
Закомментировать вызов super() в методах write() и delete() датасорса.
В методах validateWrite(), validateDelete() датасорса возвращать true.
За это сообщение автора поблагодарили: niksen (1).
Старый 20.01.2012, 11:35   #3  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от pedrozzz Посмотреть сообщение
Закомментировать вызов super() в методах write() и delete() датасорса.
В методах validateWrite(), validateDelete() датасорса возвращать true.
Добавлю в этот список еще и create()
За это сообщение автора поблагодарили: niksen (1).
Старый 20.01.2012, 14:27   #4  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
спасибо, помогло!
а теперь расскажите, с чем это связано?

Последний раз редактировалось niksen; 20.01.2012 в 14:32.
Старый 20.01.2012, 14:56   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (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(). Они то и обнаруживают факт незаполнености обязательных полей. Но так как вставлять или удалять записи мы не собираемся, то смело убираем из этих методов проверки дабы избежать возникновения исключения.
Старый 20.01.2012, 15:02   #6  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
А create() нужно комментировать чтобы не отрабатывал initValue на таблице.
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 22.01.2012, 13:56   #7  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Коллеги, а как правильнее поступить, если надо в этой форме еще и чего-то редактировать в InventTable?
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 22.01.2012, 14:36   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Pustik Посмотреть сообщение
Коллеги, а как правильнее поступить, если надо в этой форме еще и чего-то редактировать в InventTable?
Из строках заказа редактировать карточку номенклатуры? На пракктике такое вряд ли понадобится. Или это гипотетический вопрос?

Технически необходимо лишь в методах Write и ValidateWrite суметь отличить событие вставки от события обновления. Сделать это можно по наличию значения в поле RecId обрабатываемой записи. Если запись ещё только вставляется, то её RecId будет пустым.
За это сообщение автора поблагодарили: Pustik (2).
Старый 22.01.2012, 14:37   #9  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Цитата:
Сообщение от Pustik Посмотреть сообщение
Коллеги, а как правильнее поступить, если надо в этой форме еще и чего-то редактировать в InventTable?
Ну что бы не совсем замучить форму Заказов на продажу, можно повесить edit метод. И при изменении значения апдейтить InventTable.
Чтобы меньше кода вешать на форму Заказов, edit метод можно повесить на таблицу SalesTable.
За это сообщение автора поблагодарили: Pustik (2).
Старый 22.01.2012, 17:46   #10  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Из строках заказа редактировать карточку номенклатуры? На пракктике такое вряд ли понадобится. Или это гипотетический вопрос?

Технически необходимо лишь в методах Write и ValidateWrite суметь отличить событие вставки от события обновления. Сделать это можно по наличию значения в поле RecId обрабатываемой записи. Если запись ещё только вставляется, то её RecId будет пустым.
Понадобилось, буквально недавно ))). Была добавлена галка в справочник номенклатур, редактирование которой предлогалось делать в новой форме.В нашей форме, где много других таблиц, из справочника номенклатур только она и видна. Конечно, мы все что нужно сделали. Просто хотелось узнать мнение коллег по этому поводу.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Динамическое добавление контролов на форму erudit DAX: Программирование 14 28.02.2013 07:05
Дыра в запрете редактирования шапок заказов на продажу/покупку gl00mie DAX: Функционал 6 20.09.2010 12:40
Передача переменного числа параметров в метод lemchey_white DAX: Программирование 16 14.12.2009 21:21
Как обойти ограничение на количество полей сортировки в DS отчета? Dronas DAX: Программирование 11 30.07.2009 10:19
Создание большого числа заказов на продажу. Падение скорости загрузки. bobski DAX: Программирование 30 29.04.2009 17:40

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:18.