TXO API
Добавлено: 02 дек 2005, 17:55
				
				Ситуация следующая:
по приходной накладной надо сформировать проводки так, чтобы:
- счет/субсчет по дебету определялся складом, на который приходуется
- субсчет по кредиту определялся партией
- КАУ1 дебета определялось из пользовательской аналитики в соответствии с партией
- КАУ2 кредита определялось из каталога МЦ в соответствии со складом оприходования (есть некая виртуальная связь склад - матценность).
Большая просьба, не выяснять, почему так криво поставлен учет. Объяснить все равно не смогу, принимаем как данность.
Пытаюсь написать ТХО АРИ.
Добавление в меню:
В самой реализации TXO view-ха и процедура StoreCycles:
Интерфейс Sel_KAU_MC нужен для выбора МЦ в аналитику, т.к. формализовать полностью связь МЦ <-> склад невозможно.
Настройка ТХО:
Дебет: счет <режим №> субсчет <режим №>
Кредит: счет <режим источника> субсчет <режим источника>
Алгоритм - &VIP_[Obj:"мой интерфейс"]
Циклическая обработка счет/субсчет, КАУ152, Материальные ценности
Проблемы:
- КАУ не формируется категорически
- при оприходовании на 2 разных склада выдается ошибка "Проводка не сформирована, т.к. не определен счет по дебету"
Все константы описаны, все функции отрабатывают (строчки с TXODebugMSG я сознательно убрала)
Где и чего я напортачила, подскажите, пожалуйста
			по приходной накладной надо сформировать проводки так, чтобы:
- счет/субсчет по дебету определялся складом, на который приходуется
- субсчет по кредиту определялся партией
- КАУ1 дебета определялось из пользовательской аналитики в соответствии с партией
- КАУ2 кредита определялось из каталога МЦ в соответствии со складом оприходования (есть некая виртуальная связь склад - матценность).
Большая просьба, не выяснять, почему так криво поставлен учет. Объяснить все равно не смогу, принимаем как данность.
Пытаюсь написать ТХО АРИ.
Добавление в меню:
Код: Выделить всё
VipInterface TxoMenu_SlideIn implements ObjTxoMenuPlugin;
Interface TxoMenu_Slidein;
create view;
procedure OnMakeMenu(hMenu : ObjTxoMenuServer);
{   
    hMenu.AddTxoMenu(mnuFlUserKau, 0, 0,    'separator', '');
    hMenu.AddTxoMenu(mnuFlUserKau, 0,6002, '<авто - текст/слайд>', '<Из КАУ 152>');
    hMenu.AddTxoMenu(mnuFlUserKau,0,6003, '<авто - № издания>',  '<По KatMC>');
    hMenu.AddTxoMenu(mnuFlSchSub,  0, 0,    'separator', '');
    hMenu.AddTxoMenu(mnuFlSchSub,  0,6000 , '<авто - номер № или в РП>',  '<режим №>');
    hMenu.AddTxoMenu(mnuFlSchSub,  0,6001 , '<авто - откуда>',   '<режим источника>');
}
procedure OnSetEnableMenu(hMenu : ObjTxoMenuServer; TiDkGal, SysOper : word);
{
   // определить доступность добавленных нами режимов формирования счета и аналитики
   //
   if TidkGal=word(101)
   {
      hMenu.EnableMenu(mnuFlUserKau, 0, 6002);
      hMenu.EnableMenu(mnuFlUserKau, 0, 6003);
      hMenu.EnableMenu(mnuFlSchSub,  0, 6000);
      hMenu.EnableMenu(mnuFlSchSub,  0, 6001);
   }
   else
   {
      hMenu.DisableMenu(mnuFlUserKau, 0, 6002);   
      hMenu.DisableMenu(mnuFlUserKau, 0, 6003);   
      hMenu.DisableMenu(mnuFlSchSub,  0, 6000);  
      hMenu.DisableMenu(mnuFlSchSub,  0, 6001);   
   }
}
end.
Код: Выделить всё
create view SlideIn
var
  CurSoprDoc  : comp;
  sumPr       : double;
as select
  *
from
  sklorder, sporder, katparty
where
((
// ордера, склады и партии
    CurSoprDoc     == sklorder.csopr
and Sklorder.nrec  == sporder.csklorder
and sklorder.cpodr == katpodr.nrec
and sporder.cparty == katparty.nrec
))
;
procedure StoreCycles(hTxo: longint; buf: TTxoApiInfoDoc);
{
  //установим ограничения на логическую таблицу
  set CurSoprDoc := buf.cSoprDoc;
  s_sch_deb:=''; s_subsch_deb:=''; s_sch_kr:=0; s_subsch_kr:='';
  all_correct:=false;
  if (getfirst Sklorder = tsOK) then
     if (getfirst katpodr = tsOK) then
        if (getfirst katparty = tsOK) then  
           all_correct:=substr(katpodr.kod,1,4)='1602';
  if all_correct then {
     _loop sklorder {
        _loop sporder {
           // формирование счетов и субсчетов
           s_sch_deb:=Schet_debet(...);
           s_subsch_deb:=SubSch_Debet(...);
           s_sch_kr:=Schet_Kredit(...); 
           s_subSch_kr:=SubSch_Kredit(...);    
           TXOBodyClear(hTxo);
           TxoBodyAddSchet(hTxo, 6000, s_sch_deb, s_subsch_deb);
           TxoBodyAddSchet(hTxo, 6001, s_sch_kr, s_subsch_kr);
           // формируем КАУ по партии и МЦ
           if instr('что-то там', katpodr.name)=0 then {
              if RunInterface('Sel_KAU_MC',katpodr.kod,katpodr.name,ckau_MC)<> cmCancel then {
                 if katparty.kod=own_slide then 
                    TXOBodyAddKau(htxo,0,tbl_kau_20,ckau_slide);
                 if katparty.kod=own_text then
                    TXOBodyAddKau(htxo,0,tbl_kau_20,ckau_text);
                 TXOBodyAddKau(htxo,0,cgKau_KatMC,ckau_mc);
              }
           }
           //для 'что-то там' КАУ не формируется
           // формирование суммы
           sum_pr:=sporder.kol*sporder.srprice;
           TXOBodySetSum(htxo,sum_pr,0,sporder.kol);
           TXOBodyInsert(htxo);          
        }
     }
  }
}
Настройка ТХО:
Дебет: счет <режим №> субсчет <режим №>
Кредит: счет <режим источника> субсчет <режим источника>
Алгоритм - &VIP_[Obj:"мой интерфейс"]
Циклическая обработка счет/субсчет, КАУ152, Материальные ценности
Проблемы:
- КАУ не формируется категорически
- при оприходовании на 2 разных склада выдается ошибка "Проводка не сформирована, т.к. не определен счет по дебету"
Все константы описаны, все функции отрабатывают (строчки с TXODebugMSG я сознательно убрала)
Где и чего я напортачила, подскажите, пожалуйста