Да, верно, забыл указать версию. 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;
}