Показать сообщение отдельно
Старый 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);