![]() |
#1 |
Модератор
|
![]()
Модуль Производство\Журналы(все) далее "производственные журналы".
В шапку журналов добавил поле Shift расширенного типа данных(поле Lookup на табличку рабочих смен) в таблицу ProdJournalTable. Его значение надо разнести в журнал складские проводки (InventTrans), там тоже добавил поле Shift. читаю Denis Fedotenko: Новые поля в складских проводках "· В классе inventMovement создадим метод salesResponsible(), возвращающий значение типа emplId. В базовом классе этот метод будет возвращать пустую строку. · В классе inventMov_sales (связанном со строкой заказа) переопределяем этот метод таким образом, чтобы он возвращал значение salesResponsible из шапки" и не могу понять. Как выяснили что надо именно в классе inventMov_sales переопределять метод? Для разностки производственных журналов таблицы ProdJournalTable какой надо класс использовать? InventMov_* ???? А если разностка складских журналов (таблица InventJournalTable) то какой дальше класс использовать? поля для разноски только в шапке журнала. Мож кто знает где есть большое описание классов и для чего они нужны? Последний раз редактировалось Poleax; 16.05.2008 в 15:09. |
|
![]() |
#2 |
Moderator
|
Большого описания классов нет по определению
![]() |
|
![]() |
#3 |
Модератор
|
fed
Да уж изучить. Что то я там таблички ProdJournalTable не вижу есть ProdJournalProd но что это не понятно? так какие классы InventMov_* использовать для разноски для производственных(ProdJournalTable) и складских (InventJournalTable) журналов ? Можно по точнее сказать? Последний раз редактировалось Poleax; 16.05.2008 в 16:01. |
|
![]() |
#4 |
Участник
|
Цитата:
static InventMovement constructNoThrow(Common buffer,boolean transferReceipt = false,Common childBuffer = NULL) Чё-то полез смотреть, он практически нигде не используется, а там где используется не разрушив мозг я не смог понять что это. Мысль была похоже красивая какая-то, но смысла так и не понял. Спасибо. |
|
![]() |
#5 |
Участник
|
To Poleax
Вы плохо знаете функционал а затеваете достаточно сложную модификацию. Для начала советую почитать форум. По существу. 1. Информационные поля в шапке журнала - значение по-умолчанию для строк (в 99% случаев так должно быть) - поэтому в нет класса InventMov_* для ProdJournalTable, поместите свое поля в строки журнала. 2. Прочитайте про класс InventHook. |
|
![]() |
#6 |
Модератор
|
petr
ЧТо на все так сложно и опасно? Форму читаю не первый день, но ответа на вопроса пока не нашел. К сожалению по заданию только в шапку журнала добавить поле надо и разнести его в таблицу складские проводки. Помоги мне с модификацией, а потом посмотрим на сколько она сложная. |
|
![]() |
#7 |
Модератор
|
Может все надо сделать как описано в Запись в InventTrans данных и приёмка ???
|
|
![]() |
#8 |
Moderator
|
Цитата:
Сообщение от miklenew
![]() fed, а можно спросить, может разбирался последний параметр в этом методе childBuffer он для чего.
static InventMovement constructNoThrow(Common buffer,boolean transferReceipt = false,Common childBuffer = NULL) Чё-то полез смотреть, он практически нигде не используется, а там где используется не разрушив мозг я не смог понять что это. Мысль была похоже красивая какая-то, но смысла так и не понял. Спасибо. По понятным причинам, подход жизнеспособен и применим только в тех видах складских движений, в которых допустимо частичное движение. Если мы все складское движение делаем сразу на полное количество - подход не сработает. Последний раз редактировалось fed; 16.05.2008 в 16:37. |
|
|
За это сообщение автора поблагодарили: miklenew (4). |
![]() |
#9 |
Участник
|
Цитата:
Сообщение от Poleax
![]() Может все надо сделать как описано в Запись в InventTrans данных и приёмка ???
Что мне не понравилось, это то, что вы искали в InventMovement::constructNoThrow() таблицу ProdJouralTable. Это показывает, что вы не до конца понимаете разноску произв. журналов. Если сказать грубо, то в Аксапте разносятся на шапки журналов, а строки, поэтому если вы хотите добавить новое поле в проводку, то оно должно быть в строке соотв. журнала, или возвращаться методом строки журнала. |
|
![]() |
#10 |
Модератор
|
pert
Вот уже лучше.. а кто обьяснить если не вы.. Как я понимаю таблица строк ProdJournalBOM и дальше класс InventMov_ProdLine или InventMov_ProdLine_JournalBOM в методе initInventTransFromBuffer и присваиваем поле? про это: "в Аксапте разносятся на шапки журналов, а строки, поэтому если вы хотите добавить новое поле в проводку, то оно должно быть в строке соотв. журнала, или возвращаться методом строки журнала." подробнее почитать как и что за чем и по порядку происходит в процессе разноски? |
|
![]() |
#11 |
Участник
|
Спасибо fed.
Помогло ключевое слово “дочерние”. Теперь мозги встали на место. ![]() Если взять к примеру заказ. Смысл параметр childbuffer имеет только если включена регистрация отгрузочной накладной. При обычной разноске документа по строке сначала изменяется строка, изменение строки приводит к изменению проводок. А документ создаётся как бы рехешем(тавар вдогонку), непосредственно никак не влияя на проводки. С salesPickingLisJournalLine дело обстоит по другому. При создании отгрузочной накладной (если включена регистрация. Если не включена, то всё происходит как с обычным документом по строке заказа) не происходит изменение строки и проводки. Просто происходит рождение шариков в буферной зоне salesPickingLisJournalLine при этом в строках документа и в проводках осталось всё по прежнему и только при регистрации отгрузочной накладной эти шарики перетекая начинают влиять на строку заказа изменяя проводки. Поэтому и нужно главный буфер (salesLine) и дочерний буфер (salesPickingLisJournalLine), чтобы слепить эти шарики вместе, и получить другие шарики. Последний раз редактировалось miklenew; 17.05.2008 в 09:30. |
|
![]() |
#12 |
MCITP
|
![]() Цитата:
![]() Проводки меняются, там прописываются поля TransChildType и TransChildRefId. И в случае когда эти поля прописаны, работать с этим "мувментом" можно только с использованием "ChildBuffer". Резервировать, например - не зря ж там в классах InventUpdate везде условия "понатыканы" типа: X++: inventTrans.TransChildType == movement.transChildType() && inventTrans.TransChildRefId == movement.transChildRefId() && X++: movement = InventMovement::construct(inventTrans);
if (movement.childBuffer().RecId)
{
buffer = movement.childBuffer();
movement = InventMovement::construct(buffer);
} Сорри что старую тему поднял, просто случайно наткнулся...
__________________
Zhirenkov Vitaly |
|
Теги |
производство, склад, crm2011 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|