7.3.4.2. Экспорт платежей за охрану объектов физических лиц

 
Пакетная операция 'Экспорт платежей за охрану объектов физических лиц' предназначена для выгрузки платежей за охрану объектов физических лиц в файл с произвольной структурой (в качестве примера выбран формат файла XML).
 
В момент формирования пакета выбираются платежи за охрану объектов физических лиц.
 
В момент выгрузки пакета формируется файл с информацией о платежах в формате XML. Файл с информацией о платежах можно загрузить в стороннем ПО (например, в 1С).
 
Импорт пакетной операции
 
Файл с пакетной операций "Private Contract Payment Script.xml" расположен в подкаталоге Script каталога, куда установлена программа CRM Охранная компания.
 
Импорт пакетной операции из файла выполняется в справочнике пакетных операций.
 
Поля пакетной операции
 
Поля пакета отсутствуют.
 
Поля записи имеют следующую структуру:
 
 
Поля операции имеют следующую структуру:
 
 
Скрипты пакетной операции
 
Скрипт модуля создания -> Блок создания пакета имеет вид:
 
var
  FLastPaymentId : integer;
  FPaymentId     : integer;
  FRecordCount   : integer;
begin
 
  FLastPaymentId := GetScriptField('LastPaymentId');
 
  SQLOpen('viBillPrivatePayment', 'PaymentId > ' + IntToStr(FLastPaymentId), 'PaymentId');
 
  FRecordCount := SQLRecordCount;
 
  if FRecordCount = 0 then
  begin
    DialogInform('Создание пакета', 'Нет данных для формирование пакета!');
    SQLClose();
    Exit;
  end;
 
  DialogProgressInit('Создание пакета', FRecordCount);
 
  CreatePacket();
 
  while SQLEOF() = 0 do
  begin
 
    FPaymentId := SQLGetInt('PaymentId');
 
    CreateRecord();
    SetRecordField('PaymentId',       FPaymentId);
    SetRecordField('ContractNo',      SQLGetStr('ContractNo'));
    SetRecordField('ContractName',    SQLGetStr('ContractName'));
    SetRecordField('PaymentModeName', SQLGetStr('PaymentModeName'));
    SetRecordField('DocNo',           SQLGetInt('DocNo'));
    SetRecordField('PaymentDate',     SQLGetDate('PaymentDate'));
    SetRecordField('Summa',           SQLGetCurrency('Summa'));
    SetRecordField('ExternalId',      SQLGetStr('ExternalId'));
    WriteRecord();
 
    DialogProgressInc();
 
    SQLNext();
 
  end;
 
  SQLClose();
 
  if FPaymentId > FLastPaymentId then
    SetScriptField('LastPaymentId', FPaymentId);
 
  WritePacket();
 
  DialogProgressDown();
 
end;
 
Скрипты модуля обработки отсутствуют.
 
Скрипт модуля выгрузки -> Блок выгрузки пакета имеет вид:
 
var
  FPacketNo    : integer;
  FRecordCount : integer;
begin
 
  FPacketNo := GetPacketNo;
 
  RecordCursorOpen;
 
  FRecordCount := RecordCursorCount;
 
  if FRecordCount = 0 then
  begin
    DialogInform('Выгрузка пакета', 'Нет данных для выгрузки пакета!');
    RecordCursorClose();
    Exit;
  end;
 
  DialogProgressInit('Выгрузка пакета', FRecordCount);
 
  XMLWriterCreate('d:\privatecontractpayment_' + IntToStr(FPacketNo) + '.xml', 'Windows-1251', 'PrivateContractPayment');
 
  XMLWriterComment('Платежи за охрану объектов физических лиц');
 
  while RecordCursorEOF() = 0 do
  begin
 
    XMLWriterStartElement('Payment');
    XMLWriterAttribute('Id',           GetRecordField('PaymentId'));
    XMLWriterAttribute('ContractNo',   GetRecordField('ContractNo'));
    XMLWriterAttribute('PaymentMode',  GetRecordField('PaymentModeName'));
    XMLWriterAttribute('DocNo',        GetRecordField('DocNo'));
    XMLWriterAttribute('PaymentDate',  GetRecordField('PaymentDate'));
    XMLWriterAttribute('Summa',        ConvertMoneyToStr(GetRecordField('Summa')));
    XMLWriterAttribute('ExternalId',   GetRecordField('ExternalId'));
    XMLWriterEndElement;
 
    DialogProgressInc();
 
    RecordCursorNext();
 
  end;
 
  RecordCursorClose;
 
  XMLWriterClose;
 
  DialogProgressDown();
 
end;
 
Работа с пакетной операцией
 
В CRM Охранная компания на закладке 'Управление' необходимо нажать кнопку 'Пакетные операции'.
В диалоге выбора пакетных операций необходимо выбрать пакетную операцию 'Экспорт платежей за охрану объектов физических лиц'.
 
Пакетная операция подразумевает функционал создания и выгрузки пакета. Обработка пакета не требуется.
 
В момент формирования пакета выбираются платежи за охрану объектов физических лиц, код платежа которых больше значения поля пакетной операции 'Последний код платежа'.
После успешного формирования пакета поле пакетной операции 'Последний код платежа' автоматически обновится до значения последнего кода платежа, попавшего в сформированный пакет.
 
Если в момент формирования пакета новые платежи не найдены, на экране отобразится сообщение 'Нет данных для формирование пакета'.
 
В момент выгрузки пакета на диске d: (каталог и имя файла можно самостоятельно изменить в скрипте) появится файл формата XML с платежами (например, d:\privatecontractpayment_1.xml).
 
При необходимости можно изменить номер последнего кода платежа на более ранний для повторной выгрузки платежей. Для этого в справочнике пакетных операций в редактировании поля 'Последний код платежа' необходимо установить новое значение кода платежа, например:
 
 
Пример файла
 
<?xml version="1.0" encoding="Windows-1251"?>
<PrivateContractPayment>
  <!--Платежи за охрану объектов физических лиц-->
  <Payment Id="3835" ContractNo="0214.6" PaymentMode="Безналичный" DocNo="0" PaymentDate="14.03.2020" Summa="400.00" ExternalId="76003217" />
  <Payment Id="3836" ContractNo="0902.6" PaymentMode="Безналичный" DocNo="0" PaymentDate="14.03.2020" Summa="960.00" ExternalId="76003409" />
  <Payment Id="3837" ContractNo="0791.6" PaymentMode="Безналичный" DocNo="0" PaymentDate="14.03.2020" Summa="1000.00" ExternalId="76001671" />
</PrivateContractPayment>