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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.03.2009, 09:34   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
паблик метод в студию! А вообще перенесите выполнение кода на сервер. Мож утечка памяти? КР какой? Аксапта какая?
Старый 05.03.2009, 09:49   #2  
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).
Старый 05.03.2009, 10:42   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от bobski Посмотреть сообщение
X++:
void SalesHeaderCreation(Container _Data_Container)
{
...
    if (conpeek(_Data_Container,6)=="да")
...
    SH.Dimension[5] = 'ДА';
}
Охерительно!
Вы бы в условии хотя бы strlwr использовали что-ли...
не говоря уже о значениях "Д","Y","Yes", "1".
__________________
полезное на axForum, github, vk, coub.
Старый 05.03.2009, 10:47   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Охерительно!
Вы бы в условии хотя бы strlwr использовали что-ли...
не говоря уже о значениях "Д","Y","Yes", "1".
В аксапте сравнение регистронезависимое. Для регистрозависимого надо использовать strCmp
За это сообщение автора поблагодарили: mazzy (2), petr (2).
Теги
asciio, createline, заказ, затяжка, скорость

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Расчеты с поставщиками\Функции\Создание на основе заказов\Резервирование заказанной номенклатуры slava09 DAX: Функционал 10 30.01.2007 13:57
Создание склад. журналов из заказов basanko DAX: Функционал 17 30.12.2006 11:49
Создание заказов пакетно chel DAX: Администрирование 5 01.07.2004 15:13
"Закупка на основе заказов" или "сводное планирование" Hamster DAX: Функционал 2 17.02.2004 01:47
Создание заказа? 2b4fITin DAX: Функционал 13 02.02.2004 15:52
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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