Re: Еще о выводе документов из файла-коэффициента



Posted by Анимица Анатолий on April 18, 1999 at 22:34:40:

In Reply to: О выводе документов из файла-коэффициента posted by Анимица Анатолий on April 17, 1999 at 12:15:49:

Еще один пример построения начала файла-коэффициента, который выполняет свои обычные функции и выводит ПД.

В этом варианте ultra пишет в \txa как и сервер, если только у операции есть [stamp 3].
И только созданные в ultra операции без штампов попадают в report.aaa. Кстати, потом их можно оттуда вырезать и позаписывать на свои места под нужными именами (например, проштамповав предварительно операции утилитой restamp). Надо обратить внимание на следующее: в этих вариантах получение документа инициируется, если сигнатуры не совпадают. Это может быть следствием редактирования порождающей операции и изменением [stamp 2]. Идея, кстати, принадлежит В.Секретеву, за что ему отдельное спасибо.

В практических системах у меня более сложные сигнатуры: документ зависит не только от этой операции, но и от всех предыдущих (в общем случае), поэтому вычисляется некая характеристическая строка - ну хотя бы сумма документа (это, собственно, и есть сигнатура в аналитическом значении слова) и записывается по ее индексу.

В примере программы fcpr - собственно подпрограмма файла-коэффициента, а printpr - подпрограмма вывода.
dout - тестер сигнатуры.


Принимаются пожелания для публикации подобных этим фрагментов, которые можно использовать в практическом программировании.


* (c) ФБПА
OP=[get %%,'floatoper'] текущий оператор
co=[strip [cp [co],1,32]] комментарий
m2=[stamp 2];m3=[stamp 3] штампы 2..3
m4=[strip [cp m2,5,2]]+':'+[strip [cp m2,7,2]] время чч:мм из штампа 2
si=m3+'si' индекс сигнатуры=штамп+si
sj=[strip [ged si]] сигнатура в extrd.dat
eq=(sj=m2) признак неизменности сигнатуры
db=[n1 $D];kr=[n1 $K] дебет и кредит
sv=[ro 0.5] cервер=1, ultra=0
$=0
call fcpr вызов расчета и проводок
call dout тест и вызов вывода
stop
************************************************************************************************************
:dout тест вывода
if (sj=m2) return;endif не изменено, выход
dt=[dt dc,mc] дата
ff=[ch 12];fi=[dir 0] директория
if (sv|[length m3]>=2) fi='txa\'+m3+'.txa' в сервере и штампованные ultra
else fi=fi+'report.aaa' в ultra без штампа
lg=fi+' '+dt;if [length m3]>=2 lg=m3+' '+dt;endif
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^lg >> file fi
endif
*[sed si,m2] запомнить новую сигнатуру
call printpr
return


Пpишедшие ответы: