Приветствую уважаемое сообщество, хотел бы предложить Вашему вниманию механизм универсальной выгрузки в текстовый файл. Прошу сразу помидорами не забрасывать, так как эта статья, как говориться, проба пера.
Данный механизм разрабатывался для настройки обмена с клиентом банка в режиме Предприятие (у нас, в Белоруссии, большинство подобных программных продуктов поддерживает загрузку из текстовых файлов), для выгрузки платежных документов и списков для зачисления на карт-счета.
Итак, нам понадобится добавить в конфигурацию 3 объекта:
Перечисление.ТипДанныхВыгрузки
Значения:
— Текст
— РеквизитДокумента
— ПереносСтроки
— ВыгрузкаТаблицы
— РеквизитТабличнойЧасти
— Запрос
— ТекстИсполняемогоКода
Справочник.НастройкаВыгрузки
Реквизиты:
-НаименованиеДокумента (строка, 50)
-НаименованиеТабличнойЧасти (строка, 50)
-ИмяТекстовогоФайла (строка, 50)
-ПутьВыгрузки (строка, 100)
-Табличные части: ШаблонВыгрузкиШапки и ШаблонВыгрузкиТабличнойЧасти
Структура данных табличной части идентичная:
— ТипДанных (Перечисление.ТипДанныхВыгрузки)
— Значение (Строка неограниченной длины)
— ФорматнаяСтрока (Строка, 20)
Обработка. ВыгрузкаДокументов. Собственно, данная обработка формирует по заданному пользователем шаблону многострочный текстовый документ и записывает на диск. Строки для добавления в документ формируются в зависимости от значения перечисления ТипДанныхВыгрузки :
Значение РеквизитДокумента добавляет к строке значение реквизита документа, по его имени, заданному в конфигураторе. Значение элемента справочника получается по основному представлению . Для примитивных типов данных можно указывать значение форматной строки.
Если нет возможности получить из документа нужного значения, применяется запрос. Требование к запросу – получение единственного значения
ТекстИсполняемогоКода содержит текст, который система может преобразовать в выполняемый код (может содержать, например, ссылку на процедуру общего модуля)
ПереносСтроки добавляет символ переноса строки.
ВыгрузкаТаблицы перебирает в цикле все строки табличной части, наименование которой задано реквизитом НаименованиеТабличнойЧасти и формирует на ее основании строки для добавления в текстовый документ
Для примера, рассмотрим некоторые элементы настройки, используемой для выгрузки списков на зачисления средств на карт-счета для одного из наиболее распространенного клиента банка «Электронные платежи» разработка компании «Системные технологии» (его используют, например, «Приорбанк», «Белинвестбанк», банк «БелВЭБ» , банк «Москва-Минск» ).
Необходимо добавить в текстовый документ следующую строку: «***** #k8SjZc9DxkType=61#k8SjZc9Dxk #k8SjZc9DxkAcc=0000000000000#k8SjZc9Dxk — Список для зачисления денежных средств на счета физических лиц». Для этого в настройку выгрузки необходимо добавить 2 строки:
Для добавления текста «#k8SjZc9DxkDate=10.12.2012#k8SjZc9Dxk» необходимо добавить в настройку 4 строки, при этом представить дату документа в нужном формате:
Для преобразования суммы документа в число прописью в строке «#k8SjZc9DxkAccountBYRByWords=Два миллиона шестьсот три тысячи белорусских рублей#k8SjZc9Dxk» пришлось добавить в общий модуль соответствующую процедуру, и вызвать ее с помощью метода Выполнить()
Список сотрудников с указанием лицевого счета и сумы к зачислению должны выглядеть в виде строки: «#k8SjZc9Dxk_Table=Npp=1~Name1=Иванов Иван Петрович~Nch1=1111111111~Sum1=500000~Npp=2~Name1=Смирнова Наталья Васильевна~Nch1=2222222222~Sum1=300000~#k8SjZc9Dxk» , для этого в табличную часть Настройка выгрузки добавлены следующие строки:
Когда обработка встречает тип данных ВыгрузкаТаблицы , делается выборка строк соответствующей табличной части, на каждом витке цикла обрабатываются данные строки по правилам, аналогичным описанным выше:
Если необходимо получить некоторое значение, которое в явном виде нельзя получить из данных документа используется запрос. Например, нужно получить строку «#k8SjZc9DxkUNN=200452784#k8SjZc9Dxk», где 200425784 это учетный номер плательщика, для этого используется запрос, и настройка выглядит следующим образом:
В выгрузке каркасной конфигурации реализована настройка выгрузки списка для зачисления средств на карт-счета физических лиц.
Для Бухгалтерия для Беларуси, редакция 2.1 есть готовое решение, которое не требует настроекОбмен с клиентом банка для Беларуси (расширение)