Показать сообщение отдельно
Старый 05.03.2009, 09:49   #6  
bobski is offline
bobski
Участник
 
38 / 11 (1) +
Регистрация: 01.10.2008
Да, верно, забыл указать версию. AX 4.0 SP2 международный функционал.
А вот собственно и код.
Получаем строку файла в контейнер, проверяем её. Если проверка true, то выполняется след. код. Дальше всё повторяется до самого конца файла.
X++:
void SalesHeaderCreation(Container _Data_Container)
{
  SalesTable            SH;
  SalesLine             SL;
  InventTable           IT;
  CustTable             CT;
  SalesTableType        SalesTableType;
  Boolean               IncreaseLineNo;
  SalesType             SalesType; //Заказ на продажу/Возвраты : 3/4
  NumberSeq             NumberSeq;
  InventDim             InventDim;
  SysDim                JurFace;
  InventLocation        InventLocation;
  NumberSequenceCode    SeriesNum;
  NumberSequenceReference NumberSequenceReference;
  ReturnActionDefaults  ReturnActionDefaults;
  #define.Return("Возврат")
  #define.Sells("Продажа")
  #define.KZT("ТНГ")
  #define.VAT0("НДС0")
  #define.VATWOUT("БЕЗНДС")
  #define.VATTRUE("НДС ТРУ")
  ;
 
  // СОЗДАЕМ ЗАГОЛОВОК ДОКУМЕНТА, если предыдущий номер был такой же
  if (PreviousDocNoSm != conpeek(_Data_Container,3))
  {
    //нужен новый номер документа.
    ttsbegin;
    SH.initValue();
    NumberSeq = NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(SalesId))), true);
    SH.SalesId = NumberSeq.num();
    PreviousDocNoSm = conpeek(_Data_Container,3);
    PreviousDocNoAx = SH.SalesId;
    LineNo = 1;                                             //Номер строки в таблице строк
    SH.SalesType = 3;
    JurFace = conpeek(_Data_Container,23);
    SH.CustAccount = conpeek(_Data_Container,5);            //Счет клиента
    SH.initFromCustTable();
    SH.SalesStatus = 1;                                     //Открытый заказ
    if (conpeek(_Data_Container,6)=="да")
    {
       SH.InclTax = true;
    } else {
       SH.InclTax = false;
    }
    SH.CurrencyCode = conpeek(_Data_Container,10);          //Валюта
    if (!SH.CurrencyCode)
        SH.CurrencyCode = #KZT;                             //Валюта
    SH.ShippingDateRequested = str2date(conpeek(_Data_Container,2),123);  //Дата отгрузки
    SH.ReceiptDateRequested = SH.ShippingDateRequested;
    sh.FixedDueDate = str2date(conpeek(_Data_Container,9),123);
    SH.DlvMode = strfmt(conpeek(_Data_Container,7));        //Способ оплаты
    SH.PaymMode = conpeek(_Data_Container,8);               //Способ поставки
    SH.Dimension[1] =  JurFace;         //Юр Лицо
    SH.Dimension[5] = 'ДА';
    SH.insert();
    increaseLineNo = false;
    ttscommit;
  } else {
    increaseLineNo = true;
  }
 
                                // СОЗДАЕМ СТРОКИ ДОКУМЕНТА через PreviousDocNo
 
  ttsbegin;
  Select firstfast * from SH where SH.SalesId == PreviousDocNoAx;
  JurFace = SH.Dimension[1];
  SL.clear();
  SL.initValue();
  SL.SalesId = PreviousDocNoAx;
  If (IncreaseLineNo)
    {LineNo+=1;}
  else
    {LineNo=1;}
  SL.LineNum=LineNo;
  SL.ItemId = conpeek(_Data_Container,11);                  //Номенклатура Номер
  Select firstfast * from IT index hint ItemIdx where IT.ItemId == SL.ItemId;
  SL.initFromSalesTable(SH);
  SL.initFromCustTable();
  InventDim.initValue();
  InventDim.inventLocationId = conpeek(_Data_Container,12);
  InventDim = InventDim::findOrCreate(InventDim);
  SL.InventDimId = InventDim.inventDimId;
  switch (conpeek(_Data_Container,20))
  {
  case "0" :
    SL.TaxItemGroup = #VAT0;
    break;
  case "Нет" :
    SL.TaxItemGroup = #VATWOUT;
    break;
  default :
    //SL.TaxItemGroup = #VATTRUE;
    break;
  }
  SL.LedgerAccount = conpeek(_Data_Container,22);
  SL.Dimension[1] = SH.Dimension[1];
  SL.SalesQty = conpeek(_Data_Container,13);                //Количество.
  if (SL.SalesQty > 0)
  {
    SL.QtyOrdered = SL.SalesQty;
    SL.RemainSalesPhysical = SL.SalesQty;
  }
  SL.createLine(true,true,true,true,false,false,true,false,SL.InventTransId);
  SL.ChangeCreatedDateLine(str2date(conpeek(_Data_Container,2),123));
  
  SL.lineAmount = conpeek(_Data_Container,18);              //Чистая сумма ТМЦ
  select firstfast ReturnActionDefaults;
  if (conpeek(_Data_Container,1)==#Return)
            SL.ReturnActionId = ReturnActionDefaults.ReturnActionId;
  Sl.QtyOrdered = Sl.SalesQty;
  SL.ReceiptDateRequested = str2date(conpeek(_Data_Container,2),123);
  SL.ShippingDateRequested = SL.ReceiptDateRequested;
  SL.update();
  ttscommit;
}
За это сообщение автора поблагодарили: maximka (1).