Версия 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 отчета).
Так же для полной интеграции требуется (по крайней мере в моем случае) доработка самого документа (манипуляций немного): сальдо на начало для контрагента, типовой отчет «Акт сверки» — тоже сальдо, дополнительно можно/нужно сделать возможность распечатать акт без данных контрагента/итоговых надписей. Дополнительно реализована возможность анализа ручных проводок как при сохранении в документ, так и при формировании отчета по расхождениям.
Добрый день. Скажите, а есть тоже самое но для управляемых форм (например БП 3.0)?
(1) reflexcompani, добрый день. нету, но если есть реальная необходимость, то можно сделать для Вас за деньги (это, все-таки, такси+клиент-сервер).