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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.10.2010, 18:04   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Как правильно связать таблицы в форме? Как показать параметры партии?
Есть исходная большая задача, связанная с отображением реквизитов партии в формах (заказ, журналы и т.п.).

Чтобы не загромождать излишними деталями, выделил суть и сформулировал вопрос на примере стандартной Аксапты 2009.

Итак есть строки заказов, строки журналов и прочие складские строки/проводки.
Эти строки связаны с таблицей InventDim, в которой хранится складская аналитика.

У разной номенклатуры может быть разный набор складских аналитик.
В частности, для некоторых номенклатур могут быть указаны партии

Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 321
Размер:	25.0 Кб
ID:	6299

Задача:
отобразить и дать возможность исправления параметров партии в форме заказов, в форме журнала, в форме проводок (если партия она указана, конечно).

Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 303
Размер:	53.5 Кб
ID:	6295 Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 601
Размер:	46.6 Кб
ID:	6296

Ограничения:
= пользователи могут указывать партию как в гриде, так и на отдельной закладке аналитика
= пользователи могут использовать настройку форм (могут переносить поля на другие закладки, могут вытягивать разрешенные поля на форму)
= пользователи могут использовать фильтры/сортировки
= пользователи могут делать автоотчеты
в общем, стандартный функционал нужно по возможности сохранить

Что есть сейчас:
Сейчас нигде параметры партии не выведены в форму со складской аналитикой
Сейчас можно перейти к основной таблице партий и там посмотреть доп.реквизиты
Нажмите на изображение для увеличения
Название: 5.PNG
Просмотров: 325
Размер:	75.9 Кб
ID:	6298

Хочется чтобы дополнительные реквизиты партии можно было бы выводить на любую закладку в форме со складской аналитикой.
Например, так
Нажмите на изображение для увеличения
Название: 4.png
Просмотров: 380
Размер:	21.0 Кб
ID:	6297

Проблема:
Проблема в том, что формы нигде не работают с InventDim напрямую.
создание, запись, обновление идет из методов, которые вызываются при работе со строками.

Следовательно связывать на форме таблицу InventBatch к InventDim особого смысла не имеет - InventBatch просто не получит событий и не будет обновляться на форме.

Что сделано:
Добавили InventBatch в датасорсы. Сделали его пассивным. В методе pageActivated у вкладки находим и позиционируем InventBatch.
Но при этом конечно пропадает возможность поиска/сортировки.
И при этом нельзя переносить параметры партии на другие вкладки.
мне этот способ чертовски не нравится.

Вопрос:
Может быть есть способ правильной привязки InventBatch, чтобы можно было работать с реквизитами партии непосредственно в заказах/журналах/etc?
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 18:37   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Партия в строках заказа на продажу, закупку, перемещение?
А в какой задаче это может понадобиться? Все-таки заказы на продажу, закупку, перемещение делают одни люди (товароведы, закупщики, аналитки), которым все равно какую партию обрабатывать, а партии подбирают другие (кладовщики, операторы склада), которых не следует пускать в задание, которым является заказ.
Или в данном случае партия это нечто не то, что подразумевается партией обычно?
За это сообщение автора поблагодарили: mazzy (2).
Старый 26.10.2010, 18:53   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Партия в строках заказа на продажу, закупку, перемещение?
А в какой задаче это может понадобиться? Все-таки заказы на продажу, закупку, перемещение делают одни люди (товароведы, закупщики, аналитки), которым все равно какую партию обрабатывать, а партии подбирают другие (кладовщики, операторы склада), которых не следует пускать в задание, которым является заказ.
Или в данном случае партия это нечто не то, что подразумевается партией обычно?
Еще есть складские журналы.
Еще есть производственные формы
Еще есть формы регистрации и комплектации.
Еще есть формы для работы с адресным складом.
Там принцип такой же и проблемы те же. И там работают в том числе и "операторы склада".

Кроме того, в реальной исходной задаче речь идет не о заказе. И на самом деле не о партии

Я очень ценю, что при ответах на вопрос отвечающий пытается понять суть задачи.
однако напомню:
Цитата:
Сообщение от mazzy Посмотреть сообщение
Есть исходная большая задача, связанная с отображением реквизитов партии в формах (заказ, журналы и т.п.).

Чтобы не загромождать излишними деталями, выделил суть и сформулировал вопрос на примере стандартной Аксапты 2009.
В данном случае хочется спросить именно о том как реализовать отображение параметров складской аналитики на форме со складской аналитикой. При условии, что складская аналитика InventDim обрабатывается программно, а не формой.
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 19:03   #4  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Решение не совсем красивое, но возможно решит проблему. К строкам приджойнить ещё один InventDim. Нигде на форму его не выводить, закомментировать у него write, delete, create и на этот InventDim уже повесить партии.
За это сообщение автора поблагодарили: mazzy (10), PavelX (2).
Старый 26.10.2010, 19:42   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
К строкам приджойнить ещё один InventDim.
В этом случае придется постоянно отслеживать синхронизацию основного InventDim и вспомогательного. Причем, делать это придется в каждой форме, а обновление форм при выпуске новых SP каждый знает - задача не очень приятная.
Малая кровь, это edit методы на InventDim (включенные в группу полей InventoryDimensions) и вынос управления отображением/доступность в классы InventDimCtrl. Получаем, что формы не трогаем, а меняем классы (что проще при обновлении).
Но:
  • теряем сортировку/фильтрацию.
  • нужно отслеживать введен ли номер партии (иначе непонятно куда писать значения), правда существование партии отслеживать не нужно - в отличии от серийного номера, партию нельзя ввести, если нет записи в InventBatch.
  • вынос поля в какое-то другое место формы ломает управление видимостью/доступностью (впрочем, это относится и к обычным полям InventDim).
  • в группе InventoryDimensions и так достаточно полей, дополнительные могут сломать внешний вид формы (не в гриде, а на соответствующей закладке).
В общем, придумать что-то универсальное достаточно сложно, поэтому я и спрашивал, для каких случаев это нужно. Надеялся, что есть возможность ограничить все это несколькими формами, с которыми работают кладовщики (регистрация отборочной, регистрация/комплектация для поводок, формы в WMS).
PS: на клиенте проще - я бы своих заставил лезть в форму карточки партии и менять там, а на форму бы выводил только display поля
За это сообщение автора поблагодарили: mazzy (2).
Старый 26.10.2010, 19:51   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Решение не совсем красивое, но возможно решит проблему. К строкам приджойнить ещё один InventDim. Нигде на форму его не выводить, закомментировать у него write, delete, create и на этот InventDim уже повесить партии.

Вах! Неожиданно. В эту сторону я еще не думал.

На самом деле, не помогает.
Но после ряда экспериментов с дополнительным датасорсом оказалось, что помогает неожиданное решение с типом связи Delayed.

Как и ожидалось, такая связь приводит к глюкам, если параметры партии вывести в грид.
Но зато отлично работает (без избыточного программирования) в остальных случаях.
Причем, что удивительно, корректно работает даже на строчках с номенклатурой с выключенной партией.

И пришлось все-таки перехватить метод modified у поля InventDim.InventBatchId, чтобы параметры обновлялись при изменении партии.

приложил проект для ax2009 RU5.

теперь решить бы вопрос с полем в гриде при типе join = Delayed
Вложения
Тип файла: rar Form_SalesTable.rar (33.1 Кб, 129 просмотров)
__________________
полезное на axForum, github, vk, coub.
Старый 27.10.2010, 08:25   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
С Delayed в гриде ничего не получится. Ну и с фильтрацией, сортировками и т.п.

Кстати, связь InventBatch, по хорошему, надо делать не только с InventDim, но и с SalesLine - если номера партий неуникальны, то могут быть сюрпризы

Как вариант, можно создать в InventBatch пустую запись (если номер партии уникален только в разрезе номенклатур, то придется создавать для каждой - при заведении новой, например) и иннерджойнить с InventDim. Тогда любая фильтрация и сортировка будет работать корректно.
Ну а в классах InventDimCtrl_Frm* прописать код, управляющий этим датасорсом так же, как и InventDim.
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: mazzy (2).
Старый 27.10.2010, 08:56   #8  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,200 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
...
для некоторых номенклатур могут быть указаны партии
...
речь идет не о заказе. И на самом деле не о партии
В связи с вышенаписанным, можешь ли дать количественную оценку? Может быть, "дешевле" будет сделать отдельную таблицу, дублирующую партии (обеспечив её синхронизацию с inventbatch) и привязать новую таблицу напрямую к строкам заказов/журналов ?
Старый 27.10.2010, 09:46   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Zabr Посмотреть сообщение
В связи с вышенаписанным, можешь ли дать количественную оценку? Может быть, "дешевле" будет сделать отдельную таблицу, дублирующую партии (обеспечив её синхронизацию с inventbatch) и привязать новую таблицу напрямую к строкам заказов/журналов ?
не знаю.
отдельную таблицу придется делать не одну. сейчас InventBatch привязан к InventDim.

Пока сделали затычку с Delayed.
Затычка - не очень хорошо. Но все равно лучше, чем делать поиск в базе при открытии вкладки.
__________________
полезное на axForum, github, vk, coub.
Старый 27.10.2010, 15:13   #10  
PavelX is offline
PavelX
MCTS
MCBMSS
 
46 / 97 (4) ++++
Регистрация: 08.09.2006
Адрес: Красноярск
А что если сделать View из InventDim и InventBatch, в которое поместить все поля из InventBatch и InventDimId? И это представление джойнить уже к SalesLine по InventDimId. Может в этом случае заработают и в гриде поля...
За это сообщение автора поблагодарили: mazzy (2).
Старый 27.10.2010, 15:56   #11  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от PavelX Посмотреть сообщение
А что если сделать View из InventDim и InventBatch, в которое поместить все поля из InventBatch и InventDimId? И это представление джойнить уже к SalesLine по InventDimId. Может в этом случае заработают и в гриде поля...
Опять влетаем на то, что InventBatch имеет уникальность не по номеру артии, а по сочетанию номенклатура/партия и на то, что партии действительны не для всех номенклатур, а для которых действительны, может не существовать партии, соответственно, join сработает таким образом, что строки в форме пропадут..
Мне больше всего понравилось предложение AndyD, создавать пустые партии для каждой номенклатуры (точнее, мне больше нравится заставлять работать с карточкой партии, но по условиям задачи этого нужно избежать).
Теги
ax2009, как правильно, партии, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Правильно ли выбран PrimaryIndex для таблицы Address? Morpheus DAX: Программирование 3 01.08.2007 23:43
Связать две таблицы madproger DAX: Программирование 3 26.10.2006 13:17
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16
Данные из Tmp таблицы в QueryRun на форме Berty Wooster DAX: Программирование 1 23.09.2003 10:10
Возврат товара по партии, проданной в минус axot DAX: Функционал 2 18.11.2002 18:22
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:46.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.