27.12.2011, 10:12 | #1 |
Участник
|
Новая вкладка на форме InventTable
Доброго дня, уважаемые!
Возникла проблема: Создал новую вкладку на форме "InventTable" на которой поля также нового датасорса. Тип связи Delayed. (Relations прописаны) При создании новой строки, заполняя данные этой номенклатуры, перехожу на эту вкладку и также пытаюсь заполнить. При нажатии на любое поле выполняется ValidateWrite Inventtable и InventtableModule, и не дает поставить курсор на поле. К примеру, если заполнять поля датасорса InventTableModule validateWrite не вызывается и все хорошо. =) Как правильно реализовать, аналогично InventTableModule? p.s. Вижу что InventTable и InventTableModule связаны InnerJoin'ом, в мое случаем он не подходит. |
|
27.12.2011, 10:24 | #2 |
Ищущий знания...
|
Цитата:
Сообщение от Borsugg
Доброго дня, уважаемые!
Возникла проблема: Создал новую вкладку на форме "InventTable" на которой поля также нового датасорса. Тип связи Delayed. (Relations прописаны) При создании новой строки, заполняя данные этой номенклатуры, перехожу на эту вкладку и также пытаюсь заполнить. При нажатии на любое поле выполняется ValidateWrite Inventtable и InventtableModule, и не дает поставить курсор на поле. К примеру, если заполнять поля датасорса InventTableModule validateWrite не вызывается и все хорошо. =) Как правильно реализовать, аналогично InventTableModule? p.s. Вижу что InventTable и InventTableModule связаны InnerJoin'ом, в мое случаем он не подходит. В Вашем случае, мне кажется нужно в начале заполнить и сохранить InventTable и InventTableModule, а уже после этого переходить на вкладку и создавать записи в вашей таблице. Ну или можно попробовать сделать немного по другому, не вкладку на форме добавить, а вызывать новую форму с нужной таблицей связанной с inventTable, и уже в ней вносить необходимые данные. Это предложение конечно допустимо если оно подходит для Вашего бизнес-процесса.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.12.2011, 10:26 | #3 |
Участник
|
Цитата:
Вы же например не пытаетесь создавать строчки заказа не создав шапку заказа. P.S.: К слову сказать, возможно в AX2012 c вводом паттерна "Unit Of Work" что-то может измениться. |
|
27.12.2011, 10:51 | #4 |
Участник
|
Цитата:
Тоже так хотелось, но к сожалению надо сделать, так чтобы обязательно для номенклатуры была заполнены данные Упаковки (см. выше) |
|
27.12.2011, 11:19 | #5 |
Ищущий знания...
|
Цитата:
Сообщение от Borsugg
При создании новой строки в InventTable надо также создать строку в таблице, расположенной на этой вкладке ( к слову это новая таблица, названной "Упаковка", где хранятся данные упаковки (более 25 полей) по данной номенклатуре. На каждую номенклатуру может приходится несколько строк в Упаковке. А в таблице Inventtable уже есть поле Активная упаковка, которая хранит действующую упаковку для данной номенклатуры). Вот при создании номенклатуры, требуется также (в обязательно порядке) создавать упаковку для этого товара.
1. Заполнять все необходимое в InventTable и InventTableModule. 2. После сохранения записей в таблицах из первого пункта, автоматически переходить на вкладку "Упаковка" и создавать там запись. 3. В таблице Упаковка сделать обязательными для ввода необходимые поля. 4. Запретить удаление строки по упаковке по "крестику" с формы номенклатурного справочника. в итоге пользоатель не сможет уйти с вкладки, и перейти на другую номенклатуру, пока не заполнит необходимые поля в таблице упаковок. А когда все заполнит, даже если перейдет на другую номенклатуру, или ещё куда на форме, запись сохранится. Тут только остается вопрос как обрабатывать выход из формы по нажатию "ESC", или сочетания клавиш ctrl+Q (закрывает форму забивая на все). На вскидку ничего в голову не пришло, но нужно это продумать (по крайней мере выход по ESC точно).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Borsugg (1). |
27.12.2011, 11:21 | #6 |
Участник
|
Вам нужно в определённых случаях запретить ввод номенклатуры, если не введена активная упаковка? А для ввода активной упаковки вы сначала требуете ввести эту упаковку в подчинённую таблицу?
|
|
27.12.2011, 11:24 | #7 |
Участник
|
Цитата:
Да. если создается номенклатура, то нужно создать для нее и упаковку, никак иначе. |
|
27.12.2011, 13:45 | #8 |
Участник
|
Поменяйте процесс.
1. Создаете номенклатуру. По умолчанию она заблокирована. 2. Создаете нужно количество упаковок. 3. Указываете активную упаковку в номенклатуре. 4. Снимаете блокировку с номенклатуры, при этом проверка, что указана активная упаковка. Или автоматическое снятие блокировки при выполнении п.3. Так и проще запрограммировать, и проще наладить процесс управления номенклатурами. Достаточно часто в компаниях есть целый регламент заведения новой номенклатуры - как раз в него и можно встроить создание этих самых упаковок. P.S. сорри, но вышеприведенные варианты, имхо, - типично программистский подход
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: Bega (2), Borsugg (1). |
27.12.2011, 14:06 | #9 |
Ищущий знания...
|
Цитата:
1. минимизировать количество действий пользователя. 2. помня о пункте 1, сделать ввод упаковки обязательным. в общем в любом подходе есть свои плюсы и минусы
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Pustik (3). |
27.12.2011, 14:19 | #10 |
Участник
|
На данный момент к сожалению, нельзя заполнить поле Quantity в InventTableModule, не заполнив все поля в таблице "Упаковка". То есть при переходе на поля "Упаковки" срабатывает ValidateWrite и просто не дает его заполнить. Хочется это обойти...
|
|
27.12.2011, 16:26 | #11 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Поменяйте процесс.
1. Создаете номенклатуру. По умолчанию она заблокирована. 2. Создаете нужно количество упаковок. 3. Указываете активную упаковку в номенклатуре. 4. Снимаете блокировку с номенклатуры, при этом проверка, что указана активная упаковка. Или автоматическое снятие блокировки при выполнении п.3. Так и проще запрограммировать, и проще наладить процесс управления номенклатурами. Достаточно часто в компаниях есть целый регламент заведения новой номенклатуры - как раз в него и можно встроить создание этих самых упаковок. P.S. сорри, но вышеприведенные варианты, имхо, - типично программистский подход Предложили еще такой вариант, но он мне никаким образом не нравится и я всеми силами противлюсь: Заполнить вкладку контроллами, не привязанных к какой-либо таблице (что дает не вызывать лишний раз ValidateWrite) и после заполнения их, пройдя все проверки по этим полям (которые тоже надо писать вручную) и проверки по всем датасорсам, сохранить эти значения в таблицу упаковки.. %) Вот такое странное решение, с которым я пытаюсь бороться %) |
|
27.12.2011, 16:35 | #12 |
Участник
|
Цитата:
Пример: создание заказа на продажу Последний раз редактировалось S.Kuskov; 27.12.2011 в 16:39. |
|
27.12.2011, 16:39 | #13 |
Участник
|
Цитата:
Может мастером попробовать? Представляю диалог с адовой тучей контроллов, ужасть.. |
|
27.12.2011, 20:06 | #14 |
Участник
|
Так у Вас исходная постановка задачи "тупиковая". Вы хотите одновременно и незвисимо другу от друга создать записи в двух разных таблицах. Причем, насколько я понимаю, в каждую из таблиц необходимо проставить взаимные ссылки друг на друга. Это тупик. "Мертвая блокировка".
Вы одновременно хотите и не сохранять (проверка - первый шаг сохранения. Отключение проверки - отказ от сохранения), но при этом умудрится все-таки как-то сохранить по окончании ввода. А как сохранять-то, если Вы сохранение отключили? Соответственно, я тут вижу две принципиальные схемы работы:
Ну, первый вариант и так понятен. А второй вариант - это при создании нового артикула автоматически создается запись в таблице упаковок с признаком "Основная". В качестве образца для создания берется запись, помеченная как шаблон. У нее заполняются только некоторые базовые характеристики (например, тот же признак "Основная"). Собственно, это почти полный аналог работы с InventTableModule. Поскольку, минимум одна запись в таблице упаковок должна быть всегда. Для любых артикулов. Соответственно, и для нового артикула также. Пусть и с фиктивными (пустыми) значениями ряда полей.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Borsugg (1). |
27.12.2011, 21:10 | #15 |
Участник
|
Цитата:
Проверка при снятии блокировки - еще строк пять в методе validatefield() / validatewrite(). Блокировка стандартная - галка "Остановлено" для закупок, склада, продаж. Вот если вы про переобучение пользователей - то, возможно, это действительно затратно. Но в любом случае что-то подобное придется делать. Например, мне еще импонирует предложенный вариант с созданием упаковки по умолчанию (сам хотел предложить но там также придется вводить контроль правильного заполнения полей (и, я думаю, контроль этот не только в форме номенклатур, а то успеете продать / купить, когда еще не завели правильную упаковку) - т.е. опять же нужно на некоторое время "заблокировать" недозаполненную номенклатуру.
__________________
Ivanhoe as is.. |
|
27.12.2011, 21:49 | #16 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Поменяйте процесс.
1. Создаете номенклатуру. По умолчанию она заблокирована. 2. Создаете нужно количество упаковок. 3. Указываете активную упаковку в номенклатуре. 4. Снимаете блокировку с номенклатуры, при этом проверка, что указана активная упаковка. Или автоматическое снятие блокировки при выполнении п.3. Так и проще запрограммировать, и проще наладить процесс управления номенклатурами. Достаточно часто в компаниях есть целый регламент заведения новой номенклатуры - как раз в него и можно встроить создание этих самых упаковок. P.S. сорри, но вышеприведенные варианты, имхо, - типично программистский подход А программировать тут не более получаса. |
|
28.12.2011, 07:15 | #17 |
Участник
|
Цитата:
Хотелось бы поподробнее узнать про галку "Остановлено". На таблице InventTable такого поля не обнаружил. =( |
|
28.12.2011, 08:23 | #18 |
Участник
|
Цитата:
Цитата:
Цитата:
InventTableModule.Blocked AX2009: InventItemPurchSetup.Stopped InventItemSalesSetup.Stopped InventItemInventSetup.Stopped Последний раз редактировалось S.Kuskov; 28.12.2011 в 08:28. |
|
|
За это сообщение автора поблагодарили: Borsugg (1). |
28.12.2011, 18:02 | #19 |
Участник
|
Разделения процесса ввода чего-либо на этапы (Предварительные данные, Одобренные данные) имеет смысл только в том случае, если есть чего делить!
Ну, например, сам процесс ввода достаточно протяженный по времени: сегодня начали, а закончили только завтра. Или разделение ответственности: набивает (вводит) один, а отвечает за это другой. Или часть информации вводит один сотрудник, а часть - другой. В данном конкретном случае ничего этого нет. Ввод как самого артикула, так и его упаковки выполняется "одномоментно" одним и тем же сотрудником и нет никакого разделения ответственности. Аргумент же о том, что пока вводили часть реквизитов нового артикула кто-то другой его уже использовал в документе - явно надуманный. Нет, теоретически такое возможно, только на практике - сильно сомнительно. Это вопрос организационный, а не программный. Если же рассматривать идею одобрения только и исключительно в связи с вводом упаковок, то это вообще бессмысленно. "Не стоит овчинка выделки" (с). Просто тут начинаются разные сопутствующие вопросы именно по упаковкам, что очень усложняет как предварительный анализ, так и реализацию. В этом случае программирования здесь будет далеко не на полчаса. Это пара суток на анализ и еще несколько часов на "программизм". Результат - искусственное усложнение процесса. Бессмысленно это.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|