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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.08.2007, 16:25   #1  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Программная разноска накладной со строками из нескольких заказов
Привет всем!
Сто лет здесь не писал, но вот приспичило.
Вопрос: у меня есть два заказа.
Как программно обработать накладную с одной строкой из одного заказа, а второй строкой - из второго заказа?

Я умею обрабатывать накладные по одному заказу вот так:
X++:
void createInvoice(
                        transDate       _invoiceDate,
                        Num             _numberInvoice  = "",
                        SalesUpdate     _SalesUpdate = SalesUpdate::All
                      )
{
    SalesFormLetter_Facture_RU      salesFormLetter;
    int                                             parmEnum    = DocumentStatus::Invoice;
    SalesParmTable                         xSalesParmTable;
    SalesParmLine                           xSalesParmLine;
    num                                          _NumInvoice;
    salesTable                                updSalesTable;
;

    ttsbegin;

    salesFormLetter = SalesFormLetter::construct(parmEnum);

    SalesFormLetter.multiForm(true);

    SalesFormLetter.specQty(_SalesUpdate);

    if (_numberInvoice)
    {
        SalesFormLetter.setNumAndVoucher(_numberInvoice);
    }

    SalesFormLetter.printFormLetter(false);     //printInvoice

    if (parmEnum    == DocumentStatus::Facture_RU)
        SalesFormLetter.parmPrintFacture_RU(false);  //printFacture

    SalesFormLetter.update( salesTable,
                            _invoiceDate,//systemdateGet(),
                            SalesUpdate::DeliverNow,
                            AccountOrder::Auto,
                            NoYes::No,
                            NoYes::No,
                            _numberInvoice
                            );


    ttscommit;

}

Последний раз редактировалось Ace of Database; 24.08.2007 в 16:32.
Старый 24.08.2007, 16:28   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Как программно обработать накладную с одной строкой из одного заказа, а второй строкой - из второго заказа?
Для начала сделайте это руками.

Расчеты с клиентами \ Периодические операции \ Обработка заказов \ Накладная.
Выберите несколько заказов в кнопке выбор.
Нажмите Ок.

Осталось только повторить аналогичные действия программно.
__________________
полезное на axForum, github, vk, coub.
Старый 24.08.2007, 16:29   #3  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
И еще добавлю на всякий случай, что выбирать из обоих заказов надо не все строки, а только конкретные.
Старый 24.08.2007, 16:39   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
И еще добавлю на всякий случай, что выбирать из обоих заказов надо не все строки, а только конкретные.
Опять же, сделайте это руками


Расчеты с клиентами \ Периодические операции \ Обработка заказов \ Накладная.
Выберите несколько заказов в кнопке выбор.
+ Перейдите на закладку строки и укажите нужное вам количество в строках
Нажмите Ок.

Осталось только повторить аналогичные действия программно.
__________________
полезное на axForum, github, vk, coub.
Старый 24.08.2007, 16:46   #5  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Если руками, то нагляднее выбрать несколько заказов в РК\Заказы на продажу и нажать Разноска\Накладная.
__________________
С уважением,
glibs®
Старый 24.08.2007, 16:50   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от glibs Посмотреть сообщение
Если руками, то нагляднее выбрать несколько заказов в РК\Заказы на продажу и нажать Разноска\Накладная.
Да, точно!

Я забыл указать пункт в инструкции

Расчеты с клиентами \ Периодические операции \ Обработка заказов \ Накладная.
Выберите несколько заказов в кнопке выбор.
Перейдите на закладку строки и укажите нужное вам количество в строках
+ Перейдите на закладку Прочее и включите Суммарная обработка (например по Счет на)
Нажмите Ок.

или как glibs говорит
__________________
полезное на axForum, github, vk, coub.
Старый 25.08.2007, 12:36   #7  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Получилось!

X++:
static void Job1(Args _args)
{
    SalesFormLetter letter=SalesFormLetter::construct(DocumentStatus::Invoice);
    SalesParmLine   parmLine;
    salesLine       salesLine;
    SalesParmTable  SalesParmTable;
    salesParmUpdate salesParmUpdate;
;
    ttsBegin;
    letter.transDate(systemDateGet());
    letter.multiForm(true);
    letter.specQty(SalesUpdate::All);
    letter.printFormLetter    (true);

    letter.createParmUpdate();
    select forupdate firstonly salesParmUpdate where
        salesParmUpdate.RecId == letter.salesParmUpdate().RecId;
    salesParmUpdate.SumBy = AccountOrder::Account;
    salesParmUpdate.update();
    letter.salesParmUpdate(salesParmUpdate);

    letter.initParameters(letter.salesParmUpdate(),
                        PrintOut::Current);  // Printout

    //1-й заказ
    letter.createParmTable(SalesParmTable, SalesTable::find("000151482"));
    SalesParmTable.DocumentDate = SalesTable::find("000151482").DeliveryDate;
    SalesParmTable.Transdate = SalesTable::find("000151482").DeliveryDate;
    SalesParmTable.insert();

    //2-й заказ
    SalesParmTable.clear();
    letter.createParmTable(SalesParmTable, SalesTable::find("000151483"));
    SalesParmTable.DocumentDate = SalesTable::find("000151482").DeliveryDate;
    SalesParmTable.Transdate = SalesTable::find("000151482").DeliveryDate;
    SalesParmTable.insert();

    //строка 1-го заказа
    select firstonly salesLine where salesLine.SalesId == "000151482" && salesLine.ItemId == "114014010";
    letter.createParmLine(salesLine);
    //строка 2-го заказа
    select firstonly salesLine where salesLine.SalesId == "000151483" && salesLine.ItemId == "11401401004";
    letter.createParmLine(salesLine);

    letter.run();
    ttscommit;
}
Старый 25.08.2007, 13:08   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Сделал метод, с помощью которого можно создавать одну накладную по нескольким строкам из разных заказов.

PHP код:
static void createOneInvoiceFromMultiSales(
            
container       _conSales//Перечень заказов (SalesId заказов)
            
container       _conLines//Перечень строк заказов (RecId строк заказов)
            
TransDate       _invoiceDate//Дата накладной
            
TransDate       _documentDate//Дата документа
            
SalesUpdate     _specQty,
            
AccountOrder    _sumBy
            
)
{
    
int             iSalesiLines;
    
SalesFormLetter letter=SalesFormLetter::construct(DocumentStatus::Invoice);
    
SalesParmLine   parmLine;
    
SalesLine       salesLine;
    
SalesParmTable  SalesParmTable;
    
salesParmUpdate salesParmUpdate;
    
SalesId         salesId;
    
SalesTable      salesTable;
    
RecId           recId;
    ;

    
ttsBegin;
    
letter.transDate(systemDateGet());
    
letter.multiForm(true);
    
letter.specQty(_specQty);
    
letter.printFormLetter    (true);

    
letter.createParmUpdate();
    
select forupdate firstonly salesParmUpdate where
        salesParmUpdate
.RecId == letter.salesParmUpdate().RecId;
    
salesParmUpdate.SumBy _sumBy;
    
salesParmUpdate.update();
    
letter.salesParmUpdate(salesParmUpdate);

    
letter.initParameters(letter.salesParmUpdate(),
                        
PrintOut::Current);  // Printout

    
for (iSales 1iSales <= conlen(_conSales); iSales ++)
    {
        
salesId conpeek(_conSalesiSales);
        
salesTable salesTable::find(salesId);
        
SalesParmTable.clear();
        
letter.createParmTable(SalesParmTablesalesTable);
        
SalesParmTable.DocumentDate _documentDate;
        
SalesParmTable.Transdate _invoiceDate;
        
SalesParmTable.insert();
    }

    for (
iLines 1iLines <= conlen(_conLines); iLines ++)
    {
        
recId conpeek(_conLinesiLines);
        
select firstonly salesLine where salesLine.RecId == recId;
        
letter.createParmLine(salesLine);
    }

    
letter.run();
    
ttscommit;


Вот так можно вызвать этот метод:
PHP код:
static void Job13(Args _args)
{
    
Container   conSalesconLines;
    
salesLine   salesLine;
    ;
    
conSales conins(conSales1"000151482");
    
conSales conins(conSales2"000151483");
    
select firstonly salesLine where salesLine.SalesId == "000151482" && salesLine.ItemId == "114014010";
    
conLines conins(conLines1salesLine.RecId);
    
select firstonly salesLine where salesLine.SalesId == "000151483" && salesLine.ItemId == "11401401004";
    
conLines conins(conLines2salesLine.RecId);
    
MyClass::createOneInvoiceFromMultiSales(
        
conSales
        
conLines
        
01\08\2007
        
02\08\2007
        
SalesUpdate::All
        
AccountOrder::Account);

Теги
заказ на продажу, законченный пример, накладная, программно, разноска

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Разноска накладной по проектам Ark DAX: Функционал 3 27.02.2009 13:16
Производство.Разноска отгрузочной накладной в главную книгу. AlexeyBP DAX: Функционал 1 10.04.2007 12:01
Разноска накладной при переходе с 2.5 на 3.0 sred DAX: Функционал 0 09.10.2006 10:51
разноска счета на оплату после разноски накладной OlegKocherga DAX: Функционал 14 12.03.2004 17:48
Разноска операций Закупка, Заказ по счетам ГК по отборочной накладной. Как настроить? May DAX: Функционал 5 01.08.2003 11:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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