26.10.2010, 18:04 | #1 |
Участник
|
Как правильно связать таблицы в форме? Как показать параметры партии?
Есть исходная большая задача, связанная с отображением реквизитов партии в формах (заказ, журналы и т.п.).
Чтобы не загромождать излишними деталями, выделил суть и сформулировал вопрос на примере стандартной Аксапты 2009. Итак есть строки заказов, строки журналов и прочие складские строки/проводки. Эти строки связаны с таблицей InventDim, в которой хранится складская аналитика. У разной номенклатуры может быть разный набор складских аналитик. В частности, для некоторых номенклатур могут быть указаны партии Задача: отобразить и дать возможность исправления параметров партии в форме заказов, в форме журнала, в форме проводок (если партия она указана, конечно). Ограничения: = пользователи могут указывать партию как в гриде, так и на отдельной закладке аналитика = пользователи могут использовать настройку форм (могут переносить поля на другие закладки, могут вытягивать разрешенные поля на форму) = пользователи могут использовать фильтры/сортировки = пользователи могут делать автоотчеты в общем, стандартный функционал нужно по возможности сохранить Что есть сейчас: Сейчас нигде параметры партии не выведены в форму со складской аналитикой Сейчас можно перейти к основной таблице партий и там посмотреть доп.реквизиты Хочется чтобы дополнительные реквизиты партии можно было бы выводить на любую закладку в форме со складской аналитикой. Например, так Проблема: Проблема в том, что формы нигде не работают с InventDim напрямую. создание, запись, обновление идет из методов, которые вызываются при работе со строками. Следовательно связывать на форме таблицу InventBatch к InventDim особого смысла не имеет - InventBatch просто не получит событий и не будет обновляться на форме. Что сделано: Добавили InventBatch в датасорсы. Сделали его пассивным. В методе pageActivated у вкладки находим и позиционируем InventBatch. Но при этом конечно пропадает возможность поиска/сортировки. И при этом нельзя переносить параметры партии на другие вкладки. мне этот способ чертовски не нравится. Вопрос: Может быть есть способ правильной привязки InventBatch, чтобы можно было работать с реквизитами партии непосредственно в заказах/журналах/etc? |
|
26.10.2010, 18:37 | #2 |
Участник
|
Партия в строках заказа на продажу, закупку, перемещение?
А в какой задаче это может понадобиться? Все-таки заказы на продажу, закупку, перемещение делают одни люди (товароведы, закупщики, аналитки), которым все равно какую партию обрабатывать, а партии подбирают другие (кладовщики, операторы склада), которых не следует пускать в задание, которым является заказ. Или в данном случае партия это нечто не то, что подразумевается партией обычно? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
26.10.2010, 18:53 | #3 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Партия в строках заказа на продажу, закупку, перемещение?
А в какой задаче это может понадобиться? Все-таки заказы на продажу, закупку, перемещение делают одни люди (товароведы, закупщики, аналитки), которым все равно какую партию обрабатывать, а партии подбирают другие (кладовщики, операторы склада), которых не следует пускать в задание, которым является заказ. Или в данном случае партия это нечто не то, что подразумевается партией обычно? Еще есть производственные формы Еще есть формы регистрации и комплектации. Еще есть формы для работы с адресным складом. Там принцип такой же и проблемы те же. И там работают в том числе и "операторы склада". Кроме того, в реальной исходной задаче речь идет не о заказе. И на самом деле не о партии Я очень ценю, что при ответах на вопрос отвечающий пытается понять суть задачи. однако напомню: В данном случае хочется спросить именно о том как реализовать отображение параметров складской аналитики на форме со складской аналитикой. При условии, что складская аналитика InventDim обрабатывается программно, а не формой. |
|
26.10.2010, 19:03 | #4 |
Участник
|
Решение не совсем красивое, но возможно решит проблему. К строкам приджойнить ещё один InventDim. Нигде на форму его не выводить, закомментировать у него write, delete, create и на этот InventDim уже повесить партии.
|
|
|
За это сообщение автора поблагодарили: mazzy (10), PavelX (2). |
26.10.2010, 19:42 | #5 |
Участник
|
В этом случае придется постоянно отслеживать синхронизацию основного InventDim и вспомогательного. Причем, делать это придется в каждой форме, а обновление форм при выпуске новых SP каждый знает - задача не очень приятная.
Малая кровь, это edit методы на InventDim (включенные в группу полей InventoryDimensions) и вынос управления отображением/доступность в классы InventDimCtrl. Получаем, что формы не трогаем, а меняем классы (что проще при обновлении). Но:
PS: на клиенте проще - я бы своих заставил лезть в форму карточки партии и менять там, а на форму бы выводил только display поля |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
26.10.2010, 19:51 | #6 |
Участник
|
Цитата:
Вах! Неожиданно. В эту сторону я еще не думал. На самом деле, не помогает. Но после ряда экспериментов с дополнительным датасорсом оказалось, что помогает неожиданное решение с типом связи Delayed. Как и ожидалось, такая связь приводит к глюкам, если параметры партии вывести в грид. Но зато отлично работает (без избыточного программирования) в остальных случаях. Причем, что удивительно, корректно работает даже на строчках с номенклатурой с выключенной партией. И пришлось все-таки перехватить метод modified у поля InventDim.InventBatchId, чтобы параметры обновлялись при изменении партии. приложил проект для ax2009 RU5. теперь решить бы вопрос с полем в гриде при типе join = Delayed |
|
27.10.2010, 08:25 | #7 |
Участник
|
С Delayed в гриде ничего не получится. Ну и с фильтрацией, сортировками и т.п.
Кстати, связь InventBatch, по хорошему, надо делать не только с InventDim, но и с SalesLine - если номера партий неуникальны, то могут быть сюрпризы Как вариант, можно создать в InventBatch пустую запись (если номер партии уникален только в разрезе номенклатур, то придется создавать для каждой - при заведении новой, например) и иннерджойнить с InventDim. Тогда любая фильтрация и сортировка будет работать корректно. Ну а в классах InventDimCtrl_Frm* прописать код, управляющий этим датасорсом так же, как и InventDim.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
27.10.2010, 08:56 | #8 |
Участник
|
В связи с вышенаписанным, можешь ли дать количественную оценку? Может быть, "дешевле" будет сделать отдельную таблицу, дублирующую партии (обеспечив её синхронизацию с inventbatch) и привязать новую таблицу напрямую к строкам заказов/журналов ?
|
|
27.10.2010, 09:46 | #9 |
Участник
|
Цитата:
отдельную таблицу придется делать не одну. сейчас InventBatch привязан к InventDim. Пока сделали затычку с Delayed. Затычка - не очень хорошо. Но все равно лучше, чем делать поиск в базе при открытии вкладки. |
|
27.10.2010, 15:13 | #10 |
MCTS
|
А что если сделать View из InventDim и InventBatch, в которое поместить все поля из InventBatch и InventDimId? И это представление джойнить уже к SalesLine по InventDimId. Может в этом случае заработают и в гриде поля...
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
27.10.2010, 15:56 | #11 |
Участник
|
Цитата:
Мне больше всего понравилось предложение AndyD, создавать пустые партии для каждой номенклатуры (точнее, мне больше нравится заставлять работать с карточкой партии, но по условиям задачи этого нужно избежать). |
|
Теги |
ax2009, как правильно, партии, форма |
|
|