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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.12.2011, 10:12   #1  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Новая вкладка на форме InventTable
Доброго дня, уважаемые!
Возникла проблема:
Создал новую вкладку на форме "InventTable" на которой поля также нового датасорса. Тип связи Delayed. (Relations прописаны)
При создании новой строки, заполняя данные этой номенклатуры, перехожу на эту вкладку и также пытаюсь заполнить. При нажатии на любое поле выполняется ValidateWrite Inventtable и InventtableModule, и не дает поставить курсор на поле.
К примеру, если заполнять поля датасорса InventTableModule validateWrite не вызывается и все хорошо. =)
Как правильно реализовать, аналогично InventTableModule?

p.s. Вижу что InventTable и InventTableModule связаны InnerJoin'ом, в мое случаем он не подходит.
Старый 27.12.2011, 10:24   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Borsugg Посмотреть сообщение
Доброго дня, уважаемые!
Возникла проблема:
Создал новую вкладку на форме "InventTable" на которой поля также нового датасорса. Тип связи Delayed. (Relations прописаны)
При создании новой строки, заполняя данные этой номенклатуры, перехожу на эту вкладку и также пытаюсь заполнить. При нажатии на любое поле выполняется ValidateWrite Inventtable и InventtableModule, и не дает поставить курсор на поле.
К примеру, если заполнять поля датасорса InventTableModule validateWrite не вызывается и все хорошо. =)
Как правильно реализовать, аналогично InventTableModule?

p.s. Вижу что InventTable и InventTableModule связаны InnerJoin'ом, в мое случаем он не подходит.
при переходе на Вашу вкладку с таблицей, система автоматически пытается сохранить записи в InventTable и InventTableModule, и если там не заполнено то что нужно, то соответственно отрабатывают их ValidateWrite().
В Вашем случае, мне кажется нужно в начале заполнить и сохранить InventTable и InventTableModule, а уже после этого переходить на вкладку и создавать записи в вашей таблице.

Ну или можно попробовать сделать немного по другому, не вкладку на форме добавить, а вызывать новую форму с нужной таблицей связанной с inventTable, и уже в ней вносить необходимые данные. Это предложение конечно допустимо если оно подходит для Вашего бизнес-процесса.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.12.2011, 10:26   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Borsugg Посмотреть сообщение
При нажатии на любое поле выполняется ValidateWrite Inventtable и InventtableModule, и не дает поставить курсор на поле.
Я правильно понимаю что ValidateWrite обнаруживает некие ошибки в данных? Т.е. вы начинаете ввод данных в подчинённую таблицу незавершив вставку в главную? Зачем это вам?

Вы же например не пытаетесь создавать строчки заказа не создав шапку заказа.

P.S.: К слову сказать, возможно в AX2012 c вводом паттерна "Unit Of Work" что-то может измениться.
Старый 27.12.2011, 10:51   #4  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я правильно понимаю что ValidateWrite обнаруживает некие ошибки в данных? Т.е. вы начинаете ввод данных в подчинённую таблицу незавершив вставку в главную? Зачем это вам?
При создании новой строки в InventTable надо также создать строку в таблице, расположенной на этой вкладке ( к слову это новая таблица, названной "Упаковка", где хранятся данные упаковки (более 25 полей) по данной номенклатуре. На каждую номенклатуру может приходится несколько строк в Упаковке. А в таблице Inventtable уже есть поле Активная упаковка, которая хранит действующую упаковку для данной номенклатуры). Вот при создании номенклатуры, требуется также (в обязательно порядке) создавать упаковку для этого товара.

Цитата:
Сообщение от lev Посмотреть сообщение
Ну или можно попробовать сделать немного по другому, не вкладку на форме добавить, а вызывать новую форму с нужной таблицей связанной с inventTable, и уже в ней вносить необходимые данные. Это предложение конечно допустимо если оно подходит для Вашего бизнес-процесса.
Тоже так хотелось, но к сожалению надо сделать, так чтобы обязательно для номенклатуры была заполнены данные Упаковки (см. выше)
Старый 27.12.2011, 11:19   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Borsugg Посмотреть сообщение
При создании новой строки в InventTable надо также создать строку в таблице, расположенной на этой вкладке ( к слову это новая таблица, названной "Упаковка", где хранятся данные упаковки (более 25 полей) по данной номенклатуре. На каждую номенклатуру может приходится несколько строк в Упаковке. А в таблице Inventtable уже есть поле Активная упаковка, которая хранит действующую упаковку для данной номенклатуры). Вот при создании номенклатуры, требуется также (в обязательно порядке) создавать упаковку для этого товара.
Мне кажется можно пойти следующим путем.
1. Заполнять все необходимое в InventTable и InventTableModule.
2. После сохранения записей в таблицах из первого пункта, автоматически переходить на вкладку "Упаковка" и создавать там запись.
3. В таблице Упаковка сделать обязательными для ввода необходимые поля.
4. Запретить удаление строки по упаковке по "крестику" с формы номенклатурного справочника.

в итоге пользоатель не сможет уйти с вкладки, и перейти на другую номенклатуру, пока не заполнит необходимые поля в таблице упаковок. А когда все заполнит, даже если перейдет на другую номенклатуру, или ещё куда на форме, запись сохранится.

Тут только остается вопрос как обрабатывать выход из формы по нажатию "ESC", или сочетания клавиш ctrl+Q (закрывает форму забивая на все). На вскидку ничего в голову не пришло, но нужно это продумать (по крайней мере выход по ESC точно).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: Borsugg (1).
Старый 27.12.2011, 11:21   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Borsugg Посмотреть сообщение
в таблице Inventtable уже есть поле Активная упаковка, которая хранит действующую упаковку для данной номенклатуры). Вот при создании номенклатуры, требуется также (в обязательно порядке) создавать упаковку для этого товара.
Вам нужно в определённых случаях запретить ввод номенклатуры, если не введена активная упаковка? А для ввода активной упаковки вы сначала требуете ввести эту упаковку в подчинённую таблицу?
Старый 27.12.2011, 11:24   #7  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вам нужно в определённых случаях запретить ввод номенклатуры, если не введена активная упаковка?
Да, для отдельных номенклатурных групп.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А для ввода активной упаковки вы сначала требуете ввести эту упаковку в подчинённую таблицу?
Да. если создается номенклатура, то нужно создать для нее и упаковку, никак иначе.
Старый 27.12.2011, 13:45   #8  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Поменяйте процесс.
1. Создаете номенклатуру. По умолчанию она заблокирована.
2. Создаете нужно количество упаковок.
3. Указываете активную упаковку в номенклатуре.
4. Снимаете блокировку с номенклатуры, при этом проверка, что указана активная упаковка. Или автоматическое снятие блокировки при выполнении п.3.

Так и проще запрограммировать, и проще наладить процесс управления номенклатурами. Достаточно часто в компаниях есть целый регламент заведения новой номенклатуры - как раз в него и можно встроить создание этих самых упаковок.

P.S. сорри, но вышеприведенные варианты, имхо, - типично программистский подход
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: Bega (2), Borsugg (1).
Старый 27.12.2011, 14:06   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
P.S. сорри, но вышеприведенные варианты, имхо, - типично программистский подход
Ну не знаю, я исходил из следующих соображений:
1. минимизировать количество действий пользователя.
2. помня о пункте 1, сделать ввод упаковки обязательным.

в общем в любом подходе есть свои плюсы и минусы
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: Pustik (3).
Старый 27.12.2011, 14:19   #10  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Цитата:
Сообщение от lev Посмотреть сообщение
Мне кажется можно пойти следующим путем.
1. Заполнять все необходимое в InventTable и InventTableModule.
На данный момент к сожалению, нельзя заполнить поле Quantity в InventTableModule, не заполнив все поля в таблице "Упаковка". То есть при переходе на поля "Упаковки" срабатывает ValidateWrite и просто не дает его заполнить. Хочется это обойти...
Старый 27.12.2011, 16:26   #11  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Поменяйте процесс.
1. Создаете номенклатуру. По умолчанию она заблокирована.
2. Создаете нужно количество упаковок.
3. Указываете активную упаковку в номенклатуре.
4. Снимаете блокировку с номенклатуры, при этом проверка, что указана активная упаковка. Или автоматическое снятие блокировки при выполнении п.3.

Так и проще запрограммировать, и проще наладить процесс управления номенклатурами. Достаточно часто в компаниях есть целый регламент заведения новой номенклатуры - как раз в него и можно встроить создание этих самых упаковок.

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


Предложили еще такой вариант, но он мне никаким образом не нравится и я всеми силами противлюсь:
Заполнить вкладку контроллами, не привязанных к какой-либо таблице (что дает не вызывать лишний раз ValidateWrite) и после заполнения их, пройдя все проверки по этим полям (которые тоже надо писать вручную) и проверки по всем датасорсам, сохранить эти значения в таблицу упаковки.. %)
Вот такое странное решение, с которым я пытаюсь бороться %)
Старый 27.12.2011, 16:35   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Borsugg Посмотреть сообщение
Предложили еще такой вариант, но он мне никаким образом не нравится и я всеми силами противлюсь
Тогда уж проще будет сворганить диалог для вставки номенклатуры. Вызывать его из метода create датасурса. На диалоге запросить все обязательные значения и потом программно осуществить создание строк во всех связанных таблицах.

Пример: создание заказа на продажу

Последний раз редактировалось S.Kuskov; 27.12.2011 в 16:39.
Старый 27.12.2011, 16:39   #13  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Тогда уж проще будет сворганить диалог для вставки номенклатуры. Вызывать его из метода create датасурса. На диалоге запросить все обязательные значения и потом программно осуществить создание строк во всех связанных таблицах.
Тогда получается форма Inventtable нужна только для просмотра и изменения текущих строк. Хм.

Может мастером попробовать? Представляю диалог с адовой тучей контроллов, ужасть..
Старый 27.12.2011, 20:06   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Так у Вас исходная постановка задачи "тупиковая". Вы хотите одновременно и незвисимо другу от друга создать записи в двух разных таблицах. Причем, насколько я понимаю, в каждую из таблиц необходимо проставить взаимные ссылки друг на друга. Это тупик. "Мертвая блокировка".

Вы одновременно хотите и не сохранять (проверка - первый шаг сохранения. Отключение проверки - отказ от сохранения), но при этом умудрится все-таки как-то сохранить по окончании ввода. А как сохранять-то, если Вы сохранение отключили?

Соответственно, я тут вижу две принципиальные схемы работы:
  1. Использовать мастер создания
  2. Использовать шаблоны записей для создания "базовой" (основной) упаковки

Ну, первый вариант и так понятен. А второй вариант - это при создании нового артикула автоматически создается запись в таблице упаковок с признаком "Основная". В качестве образца для создания берется запись, помеченная как шаблон. У нее заполняются только некоторые базовые характеристики (например, тот же признак "Основная").

Собственно, это почти полный аналог работы с InventTableModule. Поскольку, минимум одна запись в таблице упаковок должна быть всегда. Для любых артикулов. Соответственно, и для нового артикула также. Пусть и с фиктивными (пустыми) значениями ряда полей.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Borsugg (1).
Старый 27.12.2011, 21:10   #15  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от Borsugg Посмотреть сообщение
Как по мне ваше решение меня полностью устраивает в плане "правильности" что-ли (по моему скромному мнению). Но к сожалению - это будет стоить не малых трудозатрат, что на данный момент неприемлимо.
Блокировка новой номенклатуры - три строки в методе insert().
Проверка при снятии блокировки - еще строк пять в методе validatefield() / validatewrite().

Блокировка стандартная - галка "Остановлено" для закупок, склада, продаж.

Вот если вы про переобучение пользователей - то, возможно, это действительно затратно. Но в любом случае что-то подобное придется делать. Например, мне еще импонирует предложенный вариант с созданием упаковки по умолчанию (сам хотел предложить но там также придется вводить контроль правильного заполнения полей (и, я думаю, контроль этот не только в форме номенклатур, а то успеете продать / купить, когда еще не завели правильную упаковку) - т.е. опять же нужно на некоторое время "заблокировать" недозаполненную номенклатуру.
__________________
Ivanhoe as is..
Старый 27.12.2011, 21:49   #16  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Поменяйте процесс.
1. Создаете номенклатуру. По умолчанию она заблокирована.
2. Создаете нужно количество упаковок.
3. Указываете активную упаковку в номенклатуре.
4. Снимаете блокировку с номенклатуры, при этом проверка, что указана активная упаковка. Или автоматическое снятие блокировки при выполнении п.3.

Так и проще запрограммировать, и проще наладить процесс управления номенклатурами. Достаточно часто в компаниях есть целый регламент заведения новой номенклатуры - как раз в него и можно встроить создание этих самых упаковок.

P.S. сорри, но вышеприведенные варианты, имхо, - типично программистский подход
Полностью согласен, напрашивается процедура одобрения, при которой и будут происходить все проверки. В данном случае снятие блокировки и означает это одобрение. Все другие попытки проверки в связанных данных непосредственно при вводе приведут к отсутствию гибкости, модальности, неудобству для пользователей, возникновению тупиковых ситуаций. Представьте себе, что позже появятся еще данные, которые нужно вводить и проверять для номенклатуры, тогда логика запутается еще больше.

А программировать тут не более получаса.
Старый 28.12.2011, 07:15   #17  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Блокировка новой номенклатуры - три строки в методе insert().
Проверка при снятии блокировки - еще строк пять в методе validatefield() / validatewrite().
Блокировка стандартная - галка "Остановлено" для закупок, склада, продаж.
.
Три строки в методе insert таблиц, где используется справочник номенклатур? Это столько таблиц надо пробежать, что не очень быстро Поправьте, если вас не понял.
Хотелось бы поподробнее узнать про галку "Остановлено". На таблице InventTable такого поля не обнаружил. =(
Старый 28.12.2011, 08:23   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Borsugg Посмотреть сообщение
Три строки в методе insert таблиц, где используется справочник номенклатур? Это столько таблиц надо пробежать, что не очень быстро Поправьте, если вас не понял.
Ещё раз. Ivanhoe правильно вам подсказывает
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Блокировка стандартная - галка "Остановлено" для закупок, склада, продаж.

Цитата:
Сообщение от Borsugg Посмотреть сообщение
Хотелось бы поподробнее узнать про галку "Остановлено". На таблице InventTable такого поля не обнаружил. =(
AX 4:
InventTableModule.Blocked

AX2009:
InventItemPurchSetup.Stopped
InventItemSalesSetup.Stopped
InventItemInventSetup.Stopped

Последний раз редактировалось S.Kuskov; 28.12.2011 в 08:28.
За это сообщение автора поблагодарили: Borsugg (1).
Старый 28.12.2011, 18:02   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Разделения процесса ввода чего-либо на этапы (Предварительные данные, Одобренные данные) имеет смысл только в том случае, если есть чего делить!

Ну, например, сам процесс ввода достаточно протяженный по времени: сегодня начали, а закончили только завтра. Или разделение ответственности: набивает (вводит) один, а отвечает за это другой. Или часть информации вводит один сотрудник, а часть - другой.

В данном конкретном случае ничего этого нет. Ввод как самого артикула, так и его упаковки выполняется "одномоментно" одним и тем же сотрудником и нет никакого разделения ответственности.

Аргумент же о том, что пока вводили часть реквизитов нового артикула кто-то другой его уже использовал в документе - явно надуманный. Нет, теоретически такое возможно, только на практике - сильно сомнительно. Это вопрос организационный, а не программный.

Если же рассматривать идею одобрения только и исключительно в связи с вводом упаковок, то это вообще бессмысленно. "Не стоит овчинка выделки" (с). Просто тут начинаются разные сопутствующие вопросы именно по упаковкам, что очень усложняет как предварительный анализ, так и реализацию.

В этом случае программирования здесь будет далеко не на полчаса. Это пара суток на анализ и еще несколько часов на "программизм". Результат - искусственное усложнение процесса. Бессмысленно это.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Теги
inventtable

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не отображаются значения поля на форме InventTable Ulyxess DAX: Программирование 17 07.04.2010 13:27
Передача переменного числа параметров в метод lemchey_white DAX: Программирование 16 14.12.2009 21:21
Как обойти ограничение на количество полей сортировки в DS отчета? Dronas DAX: Программирование 11 30.07.2009 10:19
Работа Range на форме Pustik DAX: Программирование 14 18.07.2005 12:25
Программно записи в InventTable djoker DAX: Программирование 8 02.12.2004 16:59

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

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

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