С учётом вышеизложенного в ПО Finist-Retail использование нового мемориального и банковского ордера начато одновременно с 01/01/2010.
Если ранее для формирования мемордера использовался tpl файл, в который данные выводились из скрипта, то теперь вывод нового мемордера происходит полностью в скрипте (tpl файлы не используются).
Введен системный параметр "ДатаНачалаНовогоМемОрдера"Date. Если параметр задан и его значение меньше даты опердня, в котором совершается операция, то печатается новый мемордер. Иначе используется старый режим (через tpl). Рекомендуемое значение = "01/01/2010"Date.
В операциях класса «ПриемВыдачаПлатежа» при формировании платежа анализируется значение системного параметра "МОДляПБОСВнутриБанка"Bool.
Если его значение = "1"Bool, то для внутренних переводов без открытия счета печатается мемордер; если значение = "0"Bool, то в любом случае печатается платежное поручение.
В случае, если для переводов без открытия счета внутри банка следует формировать новый мемордер, нужно задать этому системному параметру значение "1"Bool.
Банковский ордер формируется для платежей внутри банка по клиентским счетам (ранее для таких платежей формировался мемориальный ордер). Формирование банковского ордера происходит также в скриптах печати.
Проверка на принадлежность счетов платежа к клиентским происходит в скриптах печати по номеру балансового счета. Таким образом, банковский ордер формируется, если в платеже есть счета с номерами балансовых 42301,.. 42315, 42601,..42615, 40817, 40820.
Формирование банковского ордера зависит от системного параметра "ДатаНачалаНовогоМемОрдера"Date. Если параметр задан и его значение меньше даты опердня, в котором совершается операция, то формируется банковский ордер. Иначе – формируется мемориальный ордер (через tpl).
Для операций, дата проведения которых больше либо равна дате, указанной в значении системного параметра "ДатаНачалаНовогоМемОрдера"Date, существует возможность автоматической установки рода операции в зависимости от счета и направления платежа (внутренний или внешний).
Автоматическое определение рода операции на форме операции осуществляется в зависимости от значения системного параметра "РежимАвтоУстановкиРодаОперацииПлатежа"Int. Возможные значения:Принадлежность счетов к клиентским определяется с помощью системного параметра "БалансовыеСчетаКлиентскихСчетов"Text (по умолчанию значение параметра не задано).
В значении данного параметра может содержаться перечень балансовых счетов (5 знаков) и счетов первого порядка (3 знака), которые следует считать клиентскими, в формате «{b1}...{bN}», где b1,..bN – номера счетов.
Если значение данного параметра не задано, то клиентскими считаются счета с балансовыми 423, 426, 40817, 40820 (аналогично значению параметра "БалансовыеСчетаКлиентскихСчетов"="{423}{426}{40817}{40820}"Text).
В случае если по определенным счетам следует формировать платежное поручение, даже когда платеж является внутренним, необходимо задать:
В экспорт данных из системы FinistRetail внесены изменения в связи с введением новых ордеров.
При экспорте данных из системы FinistRetail сравнивается ДатаОпердня с датой, указанной в системном параметре "ДатаНачалаНовогоМемОрдера"Date. Если дата в значении системного параметра НЕ больше ДатыОпердня, то выгрузка в новом режиме, иначе – в старом.
Основные изменения экспорта данныхНовый мемориальный ордер и банковский ордер формируются непосредственно в скриптах. В связи с этим добавлен библиотечный скрипт LibPrintMemOrder. В скрипте создан класс TMemOrder, можно использовать его напрямую, а можно через дополнительные функции. Для хранения и преобразования данных в скриптах используется XPL.
Существует возможность банкам самим переопределить параметры печати ордеров. Для этого следует в скрипте BankLib использовать функцию UserFormatInitPrintParam. Данная функция вызывается из скрипта LibPrintMemOrder. В случае, если она не переопределена в BankLib, используются стандартные параметры печати в ордере.
Описание данной функции: Sub UserFormatInitPrintParam(bBankOrder, bCurr, countDt, countCt _ , ByRef sAutor, ByRef bOutOKUD, ByRef iLenAcntName, ByRef iLenSumRub, ByRef iLenSumVal, ByRef iCountAllLine, ByRef bSmallSum) ' 'ф-ия переопределения параметров печати ордеров ' 'находится в BankLibEmpty, переопределять нужно в BankLib ' '#### входные параметра ' 'bBankOrder = true- печатается банковский ордер, = false - мемориальный ордер ' 'bCurr = true (есть валютные счета), = false - нет валютных счетов ' 'countDt - количество счетов по дебету (число) ' 'countCt - количество счетов по кредиту (число) ' '#### выходные параметры ' 'sAutor - составитель (строка) (по умолчанию = сист. параметру "КраткоеНаименованиеБанка") ' 'bOutOKUD - выводить или нет ОКУД (по умолчанию = true). ' 'iLenAcntName - длина поля наименования счета (число)(по умолчанию = 40). ' 'iLenSumRub - длина поля суммы рублей (число)(по умолчанию = 10). ' 'iLenSumVal -длина поля суммы валюты (число)(по умолчанию = 10). ' 'iCountAllLine - длина поля наименования счета (число)(по умолчанию = 80). ' 'bSmallSum признак сжатой суммы (=true - "10=", =else - "10-00")(по умолчанию = true). End Sub
Существует возможность банкам самим переопределить формат вывода сумм при печати ордеров. Для этого следует в скрипте BankLib использовать функцию UserFormatForSumms. Данная функция вызывается из скрипта LibPrintMemOrder. В случае, если она не переопределена в BankLib, используются стандартные параметры печати в ордере.
Описание данной функции: Sub UserFormatForSumms(bBankOrder, AcntXPL, Index, bCt, ByRef sSumRub, ByRef sSumCur) ' 'ф-ия переопределения формата вывода значений сумм в поля ордера ' 'находится в BankLibEmpty, переопределять нужно в BankLib ' '#### входные параметра ' 'bBankOrder = true- печатается банковский ордер, = false - мемориальный ордер ' 'AcntXPL - XPL с данными мемордера, формат хранения данных: ' ' xxAcntN - номер счета ' ' xxNameN - наименование счета ' ' xxRubN - сумма в рублях ' ' xxValN - сумма в валюте ' ', где: ' ' xx=Dt для дебета и xx=Ct для кредита ' ' N - номер позиции ' 'Index - индекс позиции суммы ' 'bCt = true - по кредиту, = false - по дебету ' '#### выходные параметры ' 'sSumRub - строковая переменная для установки в поле по рублям ' 'sSumCur - строковая переменная для установки в поле по валюте End Sub
'ф-ия для массового упрощенного добавления строк по Query. Public Sub AddPrintOrderLineByXPL(xplMO, sDtAcntName, sDtAcnt, sCtAcntName, sCtAcnt, sSumRubl, sDtSumCurr, sCtSumCurr) 'xplMO - xpl с данными мемордера 'DtAcntName, DtAcnt - имя и номер счета по дебету. 'СtAcntName, СtAcnt - имя и номер счета по кредиту. 'sSumRubl - рублевая сумма (может быть строковой или числом) 'sDtSumCurr - валютная сумма по дебету, (может быть строковой или числом) (необяз., может быть Empty) 'sCtSumCurr - валютная сумма по дебету(может быть строковой или числом) (необяз., может быть Empty) .... End Sub 'ф-ия для печати МО по сформированному xpl Public Sub PrintMemOrderByXPL(xplMO, sNum, sDate, sDest, sFileName, bShowFile, bOEM) 'xplMO - xpl с данными мемордера 'sNum - номер мемордера 'sDate - дата мемордера 'sFileName - имя файла 'bShowFile - показать файл (открыть в WPad'e) 'bOEM - кодировка OEM(DOS cp866) .... End Sub 'ф-ия для печати БО по сформированному xpl Public Sub PrintBankOrderByXPL(xplMO, sNum, sDate, sDest, sOtch, sFileName, bShowFile, bOEM) 'xplMO - xpl с данными мемордера 'sNum - номер мемордера 'sDate - дата мемордера 'sFileName - имя файла 'bShowFile - показать файл (открыть в WPad'e) 'bOEM - кодировка OEM(DOS cp866) .... End Sub Перед вызовом печати автоматически: - все общие суммы вычисляются, - вызываются проверки на корректность данных по счетам. Пример для сложного МО: Set sum = Shell.CreatePsProperty("Numeric") sum.SetStr "10" Set xplMO = Shell.CreateXPL() 'создаем xpl для данных МО 'добавляем первую проводку AddPrintOrderLineByXPL xplMO , "Требования DT по поставке д/ср по до", "47408840500005002085", _ "Требования по поставке д/ср по договору 4511 от 23/07/2008 к *Inkomp1&Inkomp1_for10_0409&Inkomp1_for10_0331", "47408840500005002082", 10, 1, Empty 'добавляем вторую строчку AddPrintOrderLineByXPL xplMO , "Требования DT по поставке д/ср по до", "47408840500005002085", _ "Требования по поставке д/ср по договору 4511 от 23/07/2008 к *Inkomp1&Inkomp1_for10_0409&Inkomp1_for10_0331", "47408840500005002083", 10, Empty, Empty 'печатаем МО (для БО нужно PrintBankOrderByXPL) PrintMemOrderByXPL xplMO, "321", "01/01/2001", "Перевод средств согласно договору", "111.txt", True, False Set xplMO = Nothing В скрипте PrintExt реализованы для упрощенной печати в Retail ордеров две функции: Function PrintFTplNewMemOrderAdv(sNum, sDate, sDest, sOtch, sDt, sDtName, sCt, sCtName, sSum, sSumDt, sSumCt, sFN) '#8107 Sega ф-ия упрощенной печати МО и БО для Retail'а 'универсальная '###### входные параметры 'sNum - номер ордера 'sDate - дата 'sDest - назначение платежа (переводы строк игнорируются) 'sOtch - очередность (необходима для Банковского ордера, если пусто, то возьмется из сист. параметра "Очередность платежа по умолчанию" 'sDt - счет дебета 'sDtName - наименование плательщика-счета (*) 'sCt - кредит 'sCtName - наименование счета получателя-счета (*) 'sSum - сумма в рублях 'sSumDt - сумма в валюте дебета (для рублевых счетов будет проигнорирована) 'sSumCt - сумма в валюте кредита (для рублевых счетов будет проигнорирована) 'sFN - имя файла для печати, если пусто, то для МО будет memOrder.txt, для БО bankOrder.txt '(*) - реальное печатаемое наименование счета вычисляется исходя из номера счета по следующему алгоритму: 'МО - 1. ищется наименование лицевого счета с данным номером, если пусто то далее ' 2. ищется наименование счета в балансе банка с данным номером, если пусто то далее ' 3. берется переданное в функцию значение наименование счета (sDtName), если пусто то далее ' 4. берется значение сист. параметра "КраткоеНаименованиеБанка" 'БО - 1. если счет НЕ клиенсткий, то берется значение сист. параметра "КраткоеНаименованиеБанка", если клиентский, то далее ' 2. берется переданное в функцию значение наименование счета (sDtName), если пусто то далее ' 3. ищется наименование лицевого счета с данным номером, если пусто то далее ' 4. ищется наименование счета в балансе банка с данным номером, если пусто то далее ' 5. берется значение сист. параметра "КраткоеНаименованиеБанка" '###### возращаемое значение = имени файла, куда была произведена печать ', если пусто то значит печати не было и необходимо воспользоватся старой логикой печати .... End Function Function PrintFTplNewMemOrder(sNum, sDate, sDest, sOtch, sDt, sDtName, sCt, sCtName, sCurr, sSum, sFN) '#8107 Sega ф-ия упрощенной печати МО и БО для Retail'а для одновалютных МО 'практически аналогична PrintFTplNewMemOrderAdv (см. выше ее описание), но дополнительно считает рублевый эквивалент: 'sCurr - валюта операции 'sSum - сумма в валюте операции 'если валюта не рубли, то ф-ия ф-ия автоматически рассчитывает рублевый эквивалент по курсу ЦБ. .... End Function