Загрузка актов сверки контрагентов в документ "Акт сверки взаиморасчетов"




Обработка, способная автоматизировать процесс сверки взаиморасчетов с контрагентами (загрузка электронных документов). Выберите нужный файл (ниже подробнее), укажите колонки/строки/ячейки (ниже подробнее) и она сама найдет номер/дату/сумму, загрузить данные в документ «Акт сверки взаиморасчетов».

Версия 2.0:
— добавлена возможность полностью автоматической загрузки документа;
— оптимизирована загрузка/отрисовка и т.д.;
— исправлены ошибки.

Мой код обработчика нажатия гиперссылки в форме документа "АктСверки":

Процедура фДокументКонтрагентаНажатие(Элемент)

Если СверкаСогласована И (ПустаяСтрока(ПредставлениеФайла) Или ПредставлениеФайла = "<>") Тогда
Предупреждение("Нельзя изменить документ в согласованной сверке.");
Возврат;
ИначеЕсли СверкаСогласована Тогда
вз = 1;
ИначеЕсли Не СверкаСогласована И (ПустаяСтрока(ПредставлениеФайла) Или ПредставлениеФайла = "<>") Тогда
вз = 2;
Иначе
врСписок = Новый СписокЗначений;
врСписок.Добавить(1, "открыть файл");
врСписок.Добавить(2, "открыть обработку");
врСписок.Добавить(3, "удалить файл");
вз = врСписок.ВыбратьЭлемент("Выберите действие:", врСписок[0]);
Если вз = Неопределено Тогда
Возврат;
Иначе
вз = вз.Значение;
КонецЕсли;
КонецЕсли;

Если вз > 1 И Модифицированность
И Вопрос("Перед открытием необходимо записать документ. Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда

Записать(РежимЗаписиДокумента.Запись);
ИначеЕсли вз > 1  И Модифицированность Тогда
Возврат;
КонецЕсли;

Обработка = Обработки.Парсер.Создать();
Обработка.ДокументОбъект = ЭтотОбъект;
Если вз = 2 Тогда
Форма = Обработка.ПолучитьФорму(,ЭтаФорма,ЗначениеВСтрокуВнутр(ЭтотОбъект.Ссылка));
Форма.мАвтоПодбор = Ложь;
Если ПредставлениеФайла <> "<>" Тогда
Форма.Открыть();
Возврат;
КонецЕсли;
Если Не Обработка.ВыбратьФайл(Форма.ПолныйПуть) Тогда
Сообщить("Не выбран файл", СтатусСообщения.Информация);
Возврат;
КонецЕсли;
Если Обработка.мОшибкиПриАвтоПодборе Или Вопрос("Загрузить данные автоматически?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Форма.Открыть();
Иначе
Обработка.мАвтоПодбор = Истина;
Обработка.Обработать();
Если Обработка.мОшибкиПриАвтоПодборе Тогда
Форма.Открыть();
Иначе
Обработка.СохранитьДанныеВДокумент();
ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = ЭлементыФормы.ОсновнаяПанель.Страницы.ПоДаннымКонтрагента;
Сообщить("Загрузка завершена", СтатусСообщения.Информация);
КонецЕсли;
КонецЕсли;
ИначеЕсли вз = 3 Тогда
ДокументКонтрагента = Неопределено;
ПредставлениеФайла  = "<>";
Иначе
Обработка.ПолучитьИзXML();
Попытка
ЗапуститьПриложение(Обработка.мФайл.ПолноеИмя);
Исключение
Сообщить("Не удалось открыть файл '" + Обработка.мФайл.ПолноеИмя + "' по причине: " + ОписаниеОшибки(), СтатусСообщения.Информация);
КонецПопытки;
КонецЕсли;

КонецПроцедуры

С помощью данной обработки можно осуществить импорт данных из документов различного формата (xls, xlsx, rtf, doc, txt, выгруженные в xml-таблица/xml-данные документы офисные документы). Загрузка тестировалась/работает на форматах именно MS Office, т.к. разработка велась под конкретные нужды.

Для импорта данных из проприетарных форматов MS Office (и rtf, т.к. в данном формате акты практически не приходили отдельно парсер не делал) необходимы соответствующие компоненты на клиентской машине (Excel как через Application так и через ADO). Для загрузки данных из xml используется ЧтениеXML (благо современные офисные пакеты умеют сохранять свои документы в формате файлов XML-таблиц 2003 (XMLSS)).
!!! Обработка разработана для конфигурации «Бухгалтерия для Беларуси версии 1.6.34.14» с интегрированной подсистемой «Розничная торговля» от ОДО «Юкола-Инфо» так что тексты запросов (скорее всего) изначально придется менять (комментировать некоторые строки).
!!! Для корректной работы требуется добавить реквизит в метаданные документа  с типом «ХранилищеЗначения», т.к. при действиях описанных в п.3 производиться создание xml-документа с данными форматирования, самим загруженным документом закодированным в Base64, при открытии обработки (если документ был ранее сохранен) создается временным файл с данными для обработки. Сам я добавлял для документа 2 реквизита – в первом хранится сам документ и данным форматирования/номера колонок/фразы, во втором – представление документа в форме акта сверки (использую для задания заголовка надписи/гиперссылки которая открывает саму обработку).

Загрузка производится в 3 этапа:
1. загрузка данных из внешнего источника данных в табличную часть с последующим выводом в поле табличного документа; поддерживается загрузка многотабличных документов (если это электронные таблицы); при загрузке данных из текстовых файлов (не размеченных) возникла потребность реализации некого распознания таблиц, что и было реализовано правда очень ограниченно, но при необходимости нет препятствий для доработки механизма «под себя»;
так же сделал возможность распознать/разбить уже загруженные данные по формату (об этом ниже);

2. разбиение документа на таблицы, если необходимо (отмечаем строки соответствующие началу/окончанию документа, жмем распознать); отмечаем колонки (навести на информационную надпись/гиперссылку в нижней части обработки) для получения информации по функционалу, при нажатии на данную надпись откроется форма в которой можно флажками отметить данные (номера колонок, ячеек, контрольные фразы) для очистки; для контроля загружаемых данных нажать на кнопку «Обновить» (расположена в верхней части обработки в виде стрелок);
3. нажимаем «Сохранить»;
это, пожалуй, главный этап, т.к. именно на этом этапе производится поиск/определение сумм, номеров документов, дат, поиск документов в ИБ-приемнике информации, добавление строк в т.ч. «По данным контрагента» документа «Акт сверки взаиморасчетов»; тут стоит сказать, что формат числа определяется автоматически, поиск даты производится по нескольким форматам, включая даты с наименованием месяца, различными разделителями (можно добавить/удалить т.к. код открыт);

Конечно все описанные выше действия нужны только для загрузки информации в базу, основные манипуляции производятся в базе (сделано 2 отчета).

Так же для полной интеграции требуется (по крайней мере в моем случае) доработка самого документа (манипуляций немного): сальдо на начало для контрагента, типовой отчет «Акт сверки» — тоже сальдо,  дополнительно можно/нужно сделать возможность распечатать акт без данных контрагента/итоговых надписей. Дополнительно реализована возможность анализа ручных проводок как при сохранении в документ, так и при формировании отчета по расхождениям.

2 Comments

  1. reflexcompani

    Добрый день. Скажите, а есть тоже самое но для управляемых форм (например БП 3.0)?

    Reply ↓
  2. c1nil

    (1) reflexcompani, добрый день. нету, но если есть реальная необходимость, то можно сделать для Вас за деньги (это, все-таки, такси+клиент-сервер).

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *