Прерывание операции при использовании польз-х алгоритмов

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Прерывание операции при использовании польз-х алгоритмов

Сообщение Zver »

В настройках Галактики при проведении различных документов есть возможность выбрать алгоритм который будет выполняться как до, так и после обработки документа.

Например для приходной накладной ( Логистика/Управление снабжением/Приходная накладная/Запуск алгоритмов).

Есть ли возможность написать этот алгоритм таким образом, чтобы в случает необходимости можно было отменить оприходование приходной накладной?

То есть, в алгоритме реализуется механизм проверки на возможность оприходования накладной, и если требования не выполняются, то оприходование не начинается.
Программист-самоучка
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Прерывание операции при использовании польз-х алгоритмов

Сообщение edward_K »

Ну вот как это прописано для приходной накладной

Код: Выделить всё

  if (KatSopr.VidSopr = 101 Or KatSopr.VidSopr = 108)
    if (coGetTune('Oper.Buy.Nakl.BeforeOrder') <> 0)
    {
      wResult := RunInterface( 'SimpleWayToRunAlgorithm'
                             , coGetTune('Oper.Buy.Nakl.BeforeOrder')
                             , word(2101)
                             , KatSopr.NRec
                             , comp(0));
      ReReadRecord(#KatSopr);
    }

  if (wResult = cmNo) Or (wResult = cmDefault)
  {
    if (ShowMess)
    {
      Message(''#3+'По результатам выполнения алгоритма'+''#13+
              ''#3+'формирование ордеров запрещено',Information);
    }

    LogMessage1('По результатам выполнения алгоритма, заданного настройкой "Перед оприходованием выполнить алгоритм", формирование ордера запрещено.', 0, wMode);
    Exit;
  }

Фейс закрывается так

Код: Выделить всё

  aAccount.RunInter(cAlg, word(0), pt);
  CloseInterface(if(pt.Binding = 8, cmNo,
                  if(pt.Binding = 1, cmDefault,
                   if(pt.Error = 0, cmOk, cmCancel))))
то есть вам нужно будет pt.Binding выставить в 8 или 1.
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Прерывание операции при использовании польз-х алгоритмов

Сообщение Zver »

Эдвард, как всегда, огромное спасибо.
Программист-самоучка
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Прерывание операции при использовании польз-х алгоритмов

Сообщение Masygreen »

в 9.1 это работает или уже нет?
что-то печаль меня там одолела
Собрал такое..

Код: Выделить всё

#define ComponentVersion
#component "M_MnPlan"
VipInterface Algoritm_77777 implements oAlgoritm_Sys Licensed(Free);
Interface Algoritm_77777;
create view;

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Номер системного алгоритма
Function GetNum: word;
{
  GetNum := 77777;
} // Function GetNum
Function GetName: string;
{
  GetName := '77777 Проверка';
}; // Function GetName
Function GetMemo(st: oSteckCommonString): boolean;
{
  st.Push('');
  GetMemo := true;
}; // Function GetMemo
Function GetNameInter: string;
{
  GetNameInter := 'Algoritm_77777';
}; // Function GetNameInter
Function GetNameInterPr: string;
{
  GetNameInterPr := ''; // настройка не требуется
}; // Function GetNameInterPr

Function InitInter(var pt: TRecAcc): boolean;
begin
  InitInter := true;
end;

Function RunInter(wflag: word; var pt: TRecAcc): boolean;
begin
  if (Message('Сформировать ордер?', yesNo + Confirmation) <> cmYes)
    pt.Binding := 1;
  else
    pt.Binding := 8;

  RunInter := true;
end;

end. 


сделал Userscript.lst
'M_MNPLAN::Algoritm_77777'

в перечне интерфейсов есть, при инициализации пишет 'группа функций M_MNPLAN::Algoritm_77777 не найдена в ресурсе', хотя в перечне запускаемых интерфейсов он есть ..
Время ведет!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Прерывание операции при использовании польз-х алгоритмов

Сообщение edward_K »

смущает ComponentVersion в интерфейсе. А описание объекта oAlgoritm_Sys
где подключено? В проекте?
#define ComponentVersion должен быть объявлен до #include Algor.vih
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прерывание операции при использовании польз-х алгоритмов

Сообщение Den »

Может 7ок многовато )

замени кругом 77777 на какое нить 5777
и пропиши в UserAlgor.lst :
Algorithm5777 = 'Algoritm_5777'
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Прерывание операции при использовании польз-х алгоритмов

Сообщение edward_K »

а да - там word наверняка в номере алгоритма- это 65 штук с копейками.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Прерывание операции при использовании польз-х алгоритмов

Сообщение Masygreen »

для начала спасибо Userscript.lst это совсем не UserAlgor.lst ) по функционалу смотрю..
Время ведет!
Ответить