gifts2017

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

Опубликовал Yauhen Makei (mrDSide) в раздел Обмен - Загрузка и выгрузка в Excel

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

Версия 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 отчета).

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка
.epf 37,77Kb
13.11.15
7
.epf 2.0.1 37,77Kb 7 Скачать
Анализ по дата документов ИБ
.epf 10,64Kb
19.03.14
4
.epf 10,64Kb 4 Скачать
Анализ расходжений
.epf 12,54Kb
19.03.14
5
.epf 12,54Kb 5 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий М (reflexcompani) 04.06.15 12:32
Добрый день. Скажите, а есть тоже самое но для управляемых форм (например БП 3.0)?
2. Yauhen Makei (mrDSide) 04.06.15 15:50
(1) reflexcompani, добрый день. нету, но если есть реальная необходимость, то можно сделать для Вас за деньги (это, все-таки, такси+клиент-сервер).
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа