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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.05.2008, 15:03   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
! Добавления поля для разноски в производственном журнале.
Модуль Производство\Журналы(все) далее "производственные журналы".
В шапку журналов добавил поле Shift расширенного типа данных(поле Lookup на табличку рабочих смен) в таблицу ProdJournalTable.
Его значение надо разнести в журнал складские проводки (InventTrans), там тоже добавил поле Shift.

читаю Denis Fedotenko: Новые поля в складских проводках
"· В классе inventMovement создадим метод salesResponsible(), возвращающий значение типа emplId. В базовом классе этот метод будет возвращать пустую строку.
· В классе inventMov_sales (связанном со строкой заказа) переопределяем этот метод таким образом, чтобы он возвращал значение salesResponsible из шапки"

и не могу понять. Как выяснили что надо именно в классе inventMov_sales переопределять метод?
Для разностки производственных журналов таблицы ProdJournalTable какой надо класс использовать? InventMov_* ????
А если разностка складских журналов (таблица InventJournalTable) то какой дальше класс использовать? поля для разноски только в шапке журнала.

Мож кто знает где есть большое описание классов и для чего они нужны?

Последний раз редактировалось Poleax; 16.05.2008 в 15:09.
Старый 16.05.2008, 15:22   #2  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Большого описания классов нет по определению А понять какой класс за какой вид складского документа отвечает, можно изучив метод inventMovement::constructNoThrow(). Он на входе получает таблицу, а затем по tableId создает экземпляр нужного наследника от inventMovement.
Старый 16.05.2008, 15:41   #3  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
fed
Да уж изучить.
Что то я там таблички ProdJournalTable не вижу
есть ProdJournalProd но что это не понятно?

так какие классы InventMov_* использовать для разноски для производственных(ProdJournalTable) и складских (InventJournalTable) журналов ?
Можно по точнее сказать?

Последний раз редактировалось Poleax; 16.05.2008 в 16:01.
Старый 16.05.2008, 15:56   #4  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от fed Посмотреть сообщение
Большого описания классов нет по определению А понять какой класс за какой вид складского документа отвечает, можно изучив метод inventMovement::constructNoThrow(). Он на входе получает таблицу, а затем по tableId создает экземпляр нужного наследника от inventMovement.
fed, а можно спросить, может разбирался последний параметр в этом методе childBuffer он для чего.
static InventMovement constructNoThrow(Common buffer,boolean transferReceipt = false,Common childBuffer = NULL)
Чё-то полез смотреть, он практически нигде не используется, а там где используется не разрушив мозг я не смог понять что это.
Мысль была похоже красивая какая-то, но смысла так и не понял.
Спасибо.
Старый 16.05.2008, 15:59   #5  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
To Poleax
Вы плохо знаете функционал а затеваете достаточно сложную модификацию. Для начала советую почитать форум.

По существу.
1. Информационные поля в шапке журнала - значение по-умолчанию для строк (в 99% случаев так должно быть) - поэтому в нет класса InventMov_* для ProdJournalTable, поместите свое поля в строки журнала.
2. Прочитайте про класс InventHook.
Старый 16.05.2008, 16:10   #6  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
petr
ЧТо на все так сложно и опасно?
Форму читаю не первый день, но ответа на вопроса пока не нашел.

К сожалению по заданию только в шапку журнала добавить поле надо и разнести его в таблицу складские проводки.
Помоги мне с модификацией, а потом посмотрим на сколько она сложная.
Старый 16.05.2008, 16:18   #7  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Может все надо сделать как описано в Запись в InventTrans данных и приёмка ???
Старый 16.05.2008, 16:29   #8  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от miklenew Посмотреть сообщение
fed, а можно спросить, может разбирался последний параметр в этом методе childBuffer он для чего.
static InventMovement constructNoThrow(Common buffer,boolean transferReceipt = false,Common childBuffer = NULL)
Чё-то полез смотреть, он практически нигде не используется, а там где используется не разрушив мозг я не смог понять что это.
Мысль была похоже красивая какая-то, но смысла так и не понял.
Спасибо.
Я до конца тоже не разбирался. Общая идея такая: В некоторых случаях, складское движение собирается ИЗ ДВУХ таблиц. Конкретнее - списание в производство собирается из спецификации производственного заказа (ProdBOM) и из собственно строк журнала отгрузочных накладных (ProdJournalBOM; Приемка из производства складывается из производственного заказа (ProdTable) и строк журнала приемки (ProdJournalBOM); Отгрузка по заказу или заказу на перенос из самого заказа (salesLine или InventTransferLine) и строк отгрузочной накладной (inventPickingListJournalLine). При этом, фактически 90% данных для движения берется из родительской таблицы (такой как строки заказа или спецификации ПЗ) и только 10% - из дочерней таблицы (типа строк журнала отгрузочных накладных). Вот для таких ситуаций и предназначен механизм дочерней таблицы (childBuffer). Фактически - в класс перемещения передаются обе таблицы.

По понятным причинам, подход жизнеспособен и применим только в тех видах складских движений, в которых допустимо частичное движение. Если мы все складское движение делаем сразу на полное количество - подход не сработает.

Последний раз редактировалось fed; 16.05.2008 в 16:37.
За это сообщение автора поблагодарили: miklenew (4).
Старый 16.05.2008, 17:12   #9  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Цитата:
Сообщение от Poleax Посмотреть сообщение
Может все надо сделать как описано в Запись в InventTrans данных и приёмка ???
Это, плюс упомянутая вами статья Дениса. Насчет сложной я неправильно выразился, точнее будет не сложная, а ответственная.

Что мне не понравилось, это то, что вы искали в InventMovement::constructNoThrow() таблицу ProdJouralTable. Это показывает, что вы не до конца понимаете разноску произв. журналов.

Если сказать грубо, то в Аксапте разносятся на шапки журналов, а строки, поэтому если вы хотите добавить новое поле в проводку, то оно должно быть в строке соотв. журнала, или возвращаться методом строки журнала.
Старый 16.05.2008, 18:24   #10  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
pert
Вот уже лучше..
а кто обьяснить если не вы..

Как я понимаю таблица строк ProdJournalBOM и дальше класс InventMov_ProdLine или InventMov_ProdLine_JournalBOM
в методе initInventTransFromBuffer и присваиваем поле?

про это: "в Аксапте разносятся на шапки журналов, а строки, поэтому если вы хотите добавить новое поле в проводку, то оно должно быть в строке соотв. журнала, или возвращаться методом строки журнала."
подробнее почитать как и что за чем и по порядку происходит в процессе разноски?
Старый 17.05.2008, 08:59   #11  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Спасибо fed.
Помогло ключевое слово “дочерние”. Теперь мозги встали на место.
Если взять к примеру заказ.
Смысл параметр childbuffer имеет только если включена регистрация отгрузочной накладной.
При обычной разноске документа по строке сначала изменяется строка, изменение строки приводит к изменению проводок. А документ создаётся как бы рехешем(тавар вдогонку), непосредственно никак не влияя на проводки.
С salesPickingLisJournalLine дело обстоит по другому. При создании отгрузочной накладной (если включена регистрация. Если не включена, то всё происходит как с обычным документом по строке заказа) не происходит изменение строки и проводки. Просто происходит рождение шариков в буферной зоне salesPickingLisJournalLine при этом в строках документа и в проводках осталось всё по прежнему и только при регистрации отгрузочной накладной эти шарики перетекая начинают влиять на строку заказа изменяя проводки.
Поэтому и нужно главный буфер (salesLine) и дочерний буфер (salesPickingLisJournalLine), чтобы слепить эти шарики вместе, и получить другие шарики.

Последний раз редактировалось miklenew; 17.05.2008 в 09:30.
Старый 12.02.2009, 17:22   #12  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от miklenew Посмотреть сообщение
При создании отгрузочной накладной (если включена регистрация. Если не включена, то всё происходит как с обычным документом по строке заказа) не происходит изменение строки и проводки.
А вот и не правильно!

Проводки меняются, там прописываются поля TransChildType и TransChildRefId.
И в случае когда эти поля прописаны, работать с этим "мувментом" можно только с использованием "ChildBuffer".
Резервировать, например - не зря ж там в классах InventUpdate везде условия "понатыканы" типа:
X++:
                      inventTrans.TransChildType        == movement.transChildType()   &&
                      inventTrans.TransChildRefId       == movement.transChildRefId()  &&
По этому, если отталкиваться от InventTrans, то если по движению есть childBuffer, то и "мувмент" надо брать с его использованием, если нет, то не надо. Примерно так:
X++:
movement = InventMovement::construct(inventTrans);
            if (movement.childBuffer().RecId)
            {
                buffer = movement.childBuffer();
                movement = InventMovement::construct(buffer);
            }
Ну и дальше его уже передавать в InventUpdate...

Сорри что старую тему поднял, просто случайно наткнулся...
__________________
Zhirenkov Vitaly
Теги
производство, склад, crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
поля Платежка на и Счет в журнале платежей поставщикам Andromache DAX: Функционал 1 11.03.2009 18:38
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Автоматическое заполнение поля себестоимость в журнале Инвентаризация? Hidden DAX: Функционал 2 15.02.2007 12:53
Добавление поля в диалог разноски складского журнала. Кирен DAX: Программирование 11 12.02.2007 05:19
Предложение и потребление в производственном журнале strannikstrannik DAX: Функционал 1 04.11.2006 08:49

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

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

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