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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.05.2008, 16:29   #1  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (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).
Старый 17.05.2008, 08:59   #2  
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   #3  
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, время: 07:47.