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




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

Версия 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 не будет опубликован. Обязательные поля помечены *