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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.03.2004, 15:04   #1  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Разбиение складских проводок при закупке
Есть необходимость выполнить разбиение складских проводок на форме регистрации. Стандартная кнопка отделяет от одной проводки указанное количество номенклатур. Дополнительно к этому мне нужно чтоб система генерировала новый номер партии для новой проводки по складу. Какой класс мне нужно изучить и какими методами стоит для этого воспользоваться?
Старый 17.03.2004, 15:08   #2  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Я так понимаю мне нужно найти механизм как привязать к записи таблицы InventTrans в классе InventTransSplit.run новую запись таблицы InventDim и новую запись связанную с ней в таблице InventBatch. Думаю что есть для этого стандартная функциональность, не хочется делать свою.
Старый 17.03.2004, 16:17   #3  
Vals is offline
Vals
Аманд
Аватар для Vals
Компания АМАНД
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2009
 
1,766 / 507 (20) +++++++
Регистрация: 27.02.2002
Адрес: Pass partout, Москва
В настройке номерной серии для нумерации партий (Группы нумерации) есть группа полей "распределение" состоящая из:
- вручную;
- только для складских операций;
- в момент физического проведения;
- за количество.

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

А именно: вам нужны "только для складских операций" и "в момент физического проведения".
Старый 18.03.2004, 09:21   #4  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Это понятно и было настроено. Проблема в том, что номера партий генерятся только при закупке, а мне нужно чтоб номер партии генерировался на форме Регистрация при разбивке складской проводки.
Старый 18.03.2004, 11:23   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Поясните
Я не очень понял.
Вы хотите автоматизировать последовательность действий пользователя
1. Открыть форму Регистрация
2. Поставить галочку автосоздание
3. На поле 'Номер партии' переход к основной таблице (в группе 'К регистрации')
4. Создание новой партии
5. Закрыть форму 'Партии'
6. Ввести нужное количество
7. Нажать 'Обработка'
так?

Тогда посмотрите класс InventUpd_Registered - выполняет регистрацию заданного количества на заданную аналитику. Посмотрите как он используется в форме 'Регистрация'
Старый 18.03.2004, 13:49   #6  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Нет, мне нужно не это. Мне нужно следующее: при нажатии кнопки разбиение чтоб в новой проводке появлялся новый номер партии, а не копировался из проводки которую я разбиваю.
Старый 18.03.2004, 14:34   #7  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Думаю, что можно сделать так:
В классе InventSplittrans в методе update перед созданием новой строки
_splitTrans.insert(NoYes::Yes);
получить складскую аналитику из splitTrans и сгенерировать новый номер партии
пример генерации смотри в класса InventUpd_Estimated метод updateAutoDimBatchId
нужным образом его переработав. И новый код аналитики записать обратно в splitTrans.
Но! Этот метод может вызываться и из других мест, так что нужно ловить именно регистрацию!
Успехов
Старый 18.03.2004, 14:39   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Разбиение складских проводок при закупке
Цитата:
Изначально опубликовано Mystery
Есть необходимость выполнить разбиение складских проводок на форме регистрации. Стандартная кнопка отделяет от одной проводки указанное количество номенклатур. Дополнительно к этому мне нужно чтоб система генерировала новый номер партии для новой проводки по складу. Какой класс мне нужно изучить и какими методами стоит для этого воспользоваться?
вы ничего не путаете с постановкой?
вы случайно раньше не с торговлей работали?
скорее всего то, что вы хотите сделать, в Аксапте делается при помощи лотов, а не партий.

партия в аксапте - это признак физического реального мира.

посмотрите на автоматическую геренацию серийных номеров.
Но мне кажется, что у вас что-то с постановкой не так. Можно у вас попросить рассказать подробнее про вашу задачу?
Старый 18.03.2004, 15:45   #9  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Руки прочь от InventTransSplit ! Он предназначен ТОЛЬКО для разбиение проводки!
Если вам очень надо разбить зарегистрированную проводку напишите свой класс\метод который уменьшает зарегистрированое на одной аналитике и увеличивает на другой.
Старый 18.03.2004, 16:01   #10  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
+++ Можно у вас попросить рассказать подробнее про вашу задачу?

Совершено верно, то что мы делаем в стандарте аксапты находится в номере палеты. Но мы не купили этот модуль и решили использовать номер партии.

Еще раз опишу ситуацию. При приходе заказанной номенклатуре нужно сгенерировать проводки по складу на форме Регистрации. Скажем заказано 1000 тонн мяса. Оно приходит в 100 европаддоннах по 1 тонне каждый. Каждому подону мы приписываем номера партий. Оператор должен разбивать эти 1000 тонн на 100 проводок. В ручную разбивать используя кнопку Разбиение можно упарится, к тому же нужно генерировать номера партий, для этого оператор должен кликать на перейти к основной таблице создавать номер партии и возвращаться назад выбирать его в выпадающем списке поля номера партии. Мы сделали отдельную кнопку разбиения на партии и реализовали в ней весь механизм класса InventTransSplit. В нашем классе (M046_InventTransSplit) в методе main переписали вызов метода run следующим образом:
PHP код:
            if (!inventTransSplit.prompt())
                return;

            for (
stepCount=inventTransSplit.parmSplitNumber(); stepCount>1stepCount-=1)
            {
                
M046_InventTransSplit::newInventTransSplit(inventtrans.RecId).run();
            } 
То есть пользователь в диалоге указывает число партий которое он хочет получить (parmSplitNumber) и класс разбивает проводку на заданное количество в цикле вызывая разбиение. Заранее соответственно вычисляем количества номенклатуры которое будет в новых проводках.

Это все работает прекрасно. Но нам дополнительно нужно чтоб в новых проводках номера партии были новыми, а не копировались из разбиваемой проводки.
Старый 18.03.2004, 16:53   #11  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Вот небольшой кусок, который создаст новую партию и аналитику
PHP код:
    NumberSeq       numberSeq 
                 
NumberSeq::newGetNum(InventParameters::numRefInventBatchSerialId());
    
InventDim       masterInventDimtmpInventDim;
    
InventBatch     masterInventBatchtmpInventBatch;
    ;

    if (!
inventTransSplit.prompt())
        return;

    
masterInventDim inventTrans.inventDim();
    
masterInventBatch InventBatch::find(masterInventDim.inventBatchIdinventTrans.ItemId);

    for (
stepCount=inventTransSplit.parmSplitNumber(); stepCount>1stepCount-=1)
    {
        
tmpInventBatch.data(masterInventBatch);
        
tmpInventBatch.inventBatchId numberSeq.num();
        
tmpInventBatch.insert();

        
masterInventDim.inventBatchId tmpInventBatch.inventBatchId;
        
tmpInventDim InventDim::findOrCreate(masterInventDim);

        
M046_InventTransSplit::newInventTransSplit(inventtrans.RecId).run();
    } 
которые пока нигде не используются.
Где-то должно быть последние действие
newInventTrans.inventDimId = tmpInventDim.InventDimId;
newInventTrans.update();

кстати, в каком статусе разбиваемые проводки?
Старый 18.03.2004, 19:28   #12  
Vals is offline
Vals
Аманд
Аватар для Vals
Компания АМАНД
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2009
 
1,766 / 507 (20) +++++++
Регистрация: 27.02.2002
Адрес: Pass partout, Москва
Цитата:
Вручную разбивать используя кнопку Разбиение можно упарится
Это вы погорячились
Если в упомянутой группе нумерации вы определите параметр "За количество" (например =1 , т.е. одна тонна), то система разобъёт 1000 по 1 тонне, по кнопке "обработка" и сформирует на каждую тонну уникальный номер партии.
Причём сама! И никаких :
Цитата:
для этого оператор должен кликать на перейти к основной таблице создавать номер партии и возвращаться назад выбирать его в выпадающем списке поля номера партии
ИМХО, если это нужно делать оператору, то неправильно настроена система
Опять же ИМХО: Axapta позволяет много чего сделать, что по своей сути не совсем верно по бизнесу. Поэтому "следует очень аккуратно подходить к настройке аналитики". (В кавычках цитата из Рук. пользователя)
Старый 18.03.2004, 20:32   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Mystery
Совершено верно, то что мы делаем в стандарте аксапты находится в номере палеты. Но мы не купили этот модуль и решили использовать номер партии.
А... понятно.
Смотрите на автонумерацию серийных номеров.
Старый 19.03.2004, 14:28   #14  
Mystery is offline
Mystery
Участник
 
43 / 11 (1) +
Регистрация: 28.01.2004
Спасибо всем кто помог, все прекрасно работает за одним маленьким исключением. Номера партий генерятся в какой-то странной нумерации (просто присваивается номер 201, 202... и так далее). Хотелось бы чтоб генерировался в стандартной функциональности для настроек, например дата + номер лота... Исследовал класс InventUpd_Estimated и метод updateAutoDimBatchId и взял кусок из него. Заменил вызов numberSeq.num() на inventNumGroup.buildNumber. Но у меня почемуто выдает при созданнии партии ее текущий номер, а не следующий. Может у меня в коде что-то не так? Привожу пример кода

PHP код:
void run()
{
    
InventTrans inventTransCopy;
    
NumberSeq       numberSeq NumberSeq::newGetNum(InventParameters::numRefInventBatchSerialId());
    
InventDim       masterInventDimtmpInventDim;
    
InventBatch     masterInventBatchtmpInventBatch;
    
// -->
    
inventNumGroup      inventNumGroup;
    
// <--
;

    
setPrefix(InventTransSplit::description());

    try
    {
        
ttsbegin;

        if (!
this.validate())
            throw 
error("@SYS18447");

        
select forupdate inventTransCopy
            index hint RecId
            where inventTransCopy
.recId== inventTrans.recId;

        if (!
inventTransCopy.checkIsChanged(inventTrans))
            throw 
error("@SYS18447");



        
masterInventDim inventTransCopy.inventDim();
        
masterInventBatch InventBatch::find(masterInventDim.inventBatchIdinventTransCopy.ItemId);

        
tmpInventBatch.data(masterInventBatch);
        
//tmpInventBatch.inventBatchId = numberSeq.num();
        
inventNumGroup inventNumGroup::find(inventTransCopy.inventMovement().inventTable().batchNumGroupId);
        
tmpInventBatch.inventBatchId inventNumGroup.buildNumber(inventTransCopy.inventMovement(), typeId2ExtendedTypeId(typeId(InventBatchId)));

        
tmpInventBatch.initFromInventMovement(inventTransCopy.inventMovement());
        
tmpInventBatch.prodDate inventTransCopy.purchLine().M069_prodDate;
        
tmpInventBatch.expDate inventTransCopy.purchLine().M069_expDate;
        
tmpInventBatch.insert();

        
masterInventDim.inventBatchId tmpInventBatch.inventBatchId;
        
tmpInventDim InventDim::findOrCreate(masterInventDim);

        
inventTransCopy.updateSplit(splitQty);

        
inventTransCopy.inventDimId tmpInventDim.InventDimId;
        
inventTransCopy.update();

        
updRecId inventTransCopy.recId;

        
ttscommit;
    }
    catch (
Exception::Deadlock)
    {
        
retry;
    }


Старый 18.09.2008, 16:34   #15  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
В продолжение темы про разбиение проводок..
Возникла проблема. при обработке накладной нужно разбить проводки.
нажимаю Склад - Проводки - Функции - Разбиение.
создаётся две проводки с нужным количеством.
Обрабатываю накладную.. смотрю - одна проводка. в чём может быть причина.
Подскажите пожалуйста...
Старый 18.09.2008, 17:05   #16  
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
Возможно - выставлена галка "Автоматическое добавление" в параметрах модуля управления запасами. При включении этого режима, система автоматически пытается схлопнуть подходящие складские проводки при любом обновлении данного inventTrans.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Свёртывание складских проводок tricky DAX: Программирование 3 29.03.2007 12:47
Сумма и количество складских проводок при разноске складских журналов vasiliy DAX: Программирование 0 04.08.2005 11:04
Разбиение проводок при сопоставлении по поставщикам lugachy DAX: Функционал 11 24.05.2005 17:10
Сторно складских проводок IvanHARD DAX: Функционал 8 14.03.2005 14:15
Неверное формирование проводок по Закупке (3 по Дт и 5 по Кт) mpa DAX: Функционал 2 06.04.2004 05:44

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

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

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