Подключение функционала БСП "Присоединенные файлы" к функционалу Диадок

Публикация № 1779959 23.12.22

Интеграция - ЭДО и ОФД

эдо Диадок БСП

Альтернативный вариант хранения файлов документов и подписей ЭДО Диадок на сетевом ресурсе.

Постановка задачи

После завершения основного этапа внедрения модуля Диадок в корпоративную систему принялись за оптимизацию модулей, в частности, вынести хранение файлов Диадок из СУБД в файловое хранилище, с использованием возможностей БСП.
Так же нам требовалось внедриться максимально аккуратно, чтобы иметь возможность максимально просто устанавливать обновления поставляемого модуля без риска поломать наш функционал.

Первым делом изучили штатный функционал. В обработке Диадока (на момент добавления функционала версия 4.10.6) есть настройка для хранения файлов документов и подписей на диске:

 

 

Но данная реализация нас не устроила т.к. нужно было вводить ещё один адрес хранения на сетевом ресурсе, осуществлять передачу нового ресурса системным администраторам для поддержки, организовать мероприятия, необходимые для корректной работы системы.

В своей работе уже используем функционал присоединенных файлов (версия БСП 2.3.3.66):

1. установлена настройка «хранить файлы в томах на диске»;

2. настроена работа с томом на сетевом диске: проверка на вирусы;

3. включен мониторинг объема занимаемых присоединённых файлов и контроль свободного места на диске;

4. штатный механизм очистки файлов для старых документов;

5. со временем планируется даже миграция файлов в облако (что БСПшным функционалом будет реализовать гораздо проще.

 

Реализация

За основу реализации задачи был взят механизм Диадок «Хранить файлы документов и подписей на диске» с небольшими дополнениями.

Можно выделить следующие доработки:

  1. Подключение подсистемы хранения вложенных файлов БСП
  2. Добавление настроек на форму НастройкиУправляемая;
  3. Сохранение значение настройки для использования в модулях;
  4. Изменение функций записи файлов на сетевой том;
  5. Изменение функция чтения файлов из сетевого тома;

Добавили механизм БСП «Присоединенные файлы» для справочника Диадок_Документы. Как это сделать подробно написано на сайте ИТС (инструкция для БСП версии 2.3).

 

Добавление опции хранения в присоединенных файлах

Далее уже правили обработку «КонтурЭДО». Тексты процедур и функций штатной обработки публиковать не буду, а только тот код, который сами добавляли.

Добавили настройку, которая переключает хранение файлов по нашему алгоритму. Для этого в обработке Диадок на форму «НастройкиУправляемая» добавили новый реквизит формы ХранитьДокументыВПрикрепленныхФайлах тип Булево.

 

 

И вынесли на форму рядом со штатной настройкой:

 

 

В обработчике события «При изменении» сохраняем значение нашего реквизита в настройках Диадок (был скопирован штатный код с небольшими правками):

Процедура ХранитьДокументыВПрикрепленныхФайлахПриИзменении
 

 

Далее написали функционал для обработки настройки. Для этого выгрузили макеты «Ядро_epf» и «ХранениеДанных_epf» из обработки в файлы «Ядро.epf» и «ХранениеДанных.epf».

В модуле объекта обработки «Ядро.epf» в функцию Контракт_ОбщиеНастройки() добавили к стандартным настройкам нашу настройку:

Результат.Вставить("ХранитьДокументыВПрикрепленныхФайлах", Ложь);

В функцию ОбщиеНастройки_ОбработанныеЗначенияПередЗаписью(СтруктураНастроек) добавили проверку на нашу переменную:

Если НЕ (СтруктураНастроек.ХранитьДокументыНаДиске ИЛИ СтруктураНастроек.ХранитьДокументыВПрикрепленныхФайлах) Тогда
	СтруктураНастроек.УдалятьСодержимоеУстаревшихДокументов = Ложь;	
КонецЕсли;

На этом изменения в «Ядро.epf» готовы. Импортировали обработку обратно в макет обработки «КонтурЭДО».

Запись файлов документов и подписей в присоединенные файлы.

Настала очередь «ХранениеДанных.epf».

Для установки настройки по умолчанию, не заданной в предыдущем релизе модуля в процедуру Настройки_ОбщиеНастройки() прописали условие:

Если Результат.Свойство("ХранитьДокументыВПрикрепленныхФайлах") И ТипЗнч(Результат.ХранитьДокументыВПрикрепленныхФайлах) <> Тип("Булево") Тогда
	Результат.ХранитьДокументыВПрикрепленныхФайлах = Ложь;
КонецЕсли;

Для добавления файлов в присоединенные в процедуре  Документы_ЗаписатьДанныеХранилища_Диадок(ДанныеХранения, ИмяХранилища, ДокументЭДО) добавили обработку переменной:

Если Данные <> Неопределено Тогда
...
 ИначеЕсли Настройки_ОбщиеНастройки().ХранитьДокументыВПрикрепленныхФайлах Тогда
  Документы_ЗаписатьДанныеХранилища_ПрикрепленныеФайлы(Данные, ДокументЭДО, ИмяХранилища);
...
КонецЕсли;
И далее, когда определили ЗашифрованныеДанные допиcали условие:
Если ЗашифрованныеДанные <> Неопределено Тогда
…
 ИначеЕсли Настройки_ОбщиеНастройки().ХранитьДокументыВПрикрепленныхФайлах Тогда
  Документы_ЗаписатьДанныеХранилища_ПрикрепленныеФайлы(ЗашифрованныеДанные, ДокументЭДО, ИмяХранилища, Истина);
…
КонецЕсли;

Процедура из условия:

 
 Процедура Документы_ЗаписатьДанныеХранилища_ПрикрепленныеФайлы

 

Получение файлов подписей и документов из присоединенных файлов.

Для получения данных из присоединенных файлов добавили изменения в функцию Документы_КонтрактДанныхХранилищаПоВыборке_Диадок(Выборка, ИмяХранилища) условие:

Если Настройки_ОбщиеНастройки().ХранитьДокументыНаДиске Тогда	
…
 ИначеЕсли Настройки_ОбщиеНастройки().ХранитьДокументыВПрикрепленныхФайлах Тогда	
  УстановитьПривилегированныйРежим(Истина);
  СтруктураДанных = Документы_ДвоичныеДанныеХранилища_ПрикрепленныеФайлы(Результат, Выборка.КодПакета, Выборка.КодДокумента, ИмяХранилища);
  ЗаполнитьЗначенияСвойств(Результат, СтруктураДанных, "Данные, ЗашифрованныеДанные");

Функция из условия:

 
 Функция Документы_ДвоичныеДанныеХранилища_ПрикрепленныеФайлы

Для получения данных подписи нужно добавить в функцию Документы_КонтрактПодписиПоВыборке_Диадок ветку условия:

Если Настройки_ОбщиеНастройки().ХранитьДокументыНаДиске Тогда
…
 ИначеЕсли Настройки_ОбщиеНастройки().ХранитьДокументыВПрикрепленныхФайлах Тогда
  ДанныеПодписи = Документы_ДвоичныеДанныеПодписи_ПрикрепленныеФайлы(Выборка.КодПакета, Выборка.КодДокумента, ИмяХранилища);
  Результат.ДанныеПодписи = ДанныеПодписи;

И сама функция:

 
Функция Документы_ДвоичныеДанныеПодписи_ПрикрепленныеФайлы

На этом сохранили «ХранениеДанных.epf» и импортировали в макет обработки «КонтурЭДО».

 

Результат

Для справочника «Диадок: Документы» подключен функционал БСП «Присоединенные файлы»

 

 

Для документов Диадок список присоединенных файлов

 

 

Проблемы, которые возникли в процессе

  1. Исторические данные. После установки настройки, все документы, которые получили до установки параметра, перестали подписываться. Поэтому в процедуре Документы_КонтрактДанныхХранилищаПоВыборке_Диадок добавили проверку на тот случай если присоединенного файла нет, то данные брать из базы.
    Позже написали обработку, которая для старых документов перекладывала файлы из базы в присоединенные файлы.
  1. При переносе исторических данных стала возникать ошибка: «Ошибка при добавлении файла в том: Access is denied».
    В ходе анализа выяснили, что БСП при сохранении файла, проверяет наличие в этой папке файла с таким же именем. Если файл уже есть в папке, то создается вложенная папка со случайными именем A, B, ... Z,  A1, B1, .. Z1, ..  A2, B2, …, Z99 и в неё сохраняется файл.
    Наименование файлов для всех документов Диадок постоянны (ХранилищеКонтента, ПодписьПокупателя, ОтказВПодписанииДокумента и т.д.), поэтому при сохранении файла средствами БСП в сетевую папку возникли проблемы: БСП не могла создать новую папку т.к. закончился лимит на наименование папки и вызывала исключение.
    У нас стоит версия БСП 2.3.3.66 и функция (ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем), которая определяет путь для сохранения файлов, может сгенерировать всего 2600 папок с различными именами. Если за день придёт документов ЭДО свыше 2600 шт, то БСП уже не сможет сохранить присоединенный файл.
    Проблему решили просто, обновили процедуру из новых версий БСП. В новых версиях переписали алгоритм и теперь количество папок для присоединенных файлов может быть 26 в степени 5. Такое количество нас устраивает и ошибок больше не возникало.
    Но даже для старых версий БСП можно было бы избежать ошибки. В процедуре Документы_ЗаписатьДанныеХранилища_ПрикрепленныеФайлы при формировании структуры ПараметрыФайла для ключа ИмяБезРасширения добавлять значение по маске «номер пакета»-«номер документа»-«Имя файла без расширения». В таком виде файлы были бы уникальны и хранились бы все в папке с наименованием равной текущей дате.
  1. Обновление обработки «КонтурЭДО». Теперь нужно помнить, что у нас есть изменения в макетах. Поэтому это нужно учитывать при переходе на новую версию обработки КонтурЭДО. Для каждой новой версии обработки нужно добавлять изменения в макеты «Ядро_epf» и «ХранениеДанных_epf». Для упрощения обновления макетов используем Git. Более подробно как это реализовали расскажу в другой статье.

 

Заключение

После доработки системы хранения входящих файлов ЭДО удалось сократить размер базы примерно на 6% (30.4 Гб) и получили единый сетевой ресурс для хранения всех файлов в 1С.

После доработки системы хранения входящих файлов ЭДО удалось сократить размер базы примерно на 6% (30.4 Гб) и получили единый сетевой ресурс для хранения всех файлов в 1С.

Специальные предложения

Оставьте свое сообщение

См. также

Переход на КЭДО: как настроить и внедрить сервис «1С:Кабинет сотрудника»

Кадровый учет ЭДО и ОФД Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Сервис «1С:Кабинет сотрудника» позволяет перейти на КЭДО быстро и с небольшими трудозатратами. После внедрения 1С:КС просто работает, требуя минимальной сервисной поддержки. Рассказываем, как организовать процесс с самого начала.

18.08.2022    7003    Infostart    4    

31

Не удалось сделать проверку отзыва сертификата в 1С (при маркировке, директ-банк, 1С-Отчетность, ЭДО)

Адаптация типовых решений ЭДО и ОФД Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Если возникает ошибка при подписании ЭЦП документов в 1С, при проверке и подписании маркировки и документов в ЧЗ, при подключении к директ-банку и всем, что связано с электронной подписью.

18.03.2022    5770    ClickUp    10    

19

Доработка УПП 1.3 для выгрузки без ЭДО файлов всех сотрудников из документа "Сведения о застрахованных лицах, ФСС" для СБИС

Зарплата Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет ФОМС, ЕФС Бесплатно (free)

ФСС потребовал предоставить полные списки работников при переходе на безбумажные больничные. Если сотрудников в УПП довольно много, становится проблематично каждого сотрудника выгружать в ФСС вручную. Можно даже сказать - довольно кропотливо. Вариант работы с ЭДО не требует жмакать кнопку для каждого сотрудника, но это платно (для второй и последующих организаций). Оказывается к ЭДО можно пока не подключаться. Предлагаю вариант автоматической выгрузки.

22.02.2022    2997    ksnik    12    

9

Исправление ошибок 1С-ЭДО

Корректировка данных ЭДО и ОФД Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Исправление ошибок 1С-ЭДО: "internalID не соответствует формату" и "документ не соответствует формату".

09.08.2021    9778    Power_0N    3    

6

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Как вносить изменения в новое ЭДО от 1С в БП 3? Июнь 2021, БП 3.0.93.20

Документооборот и делопроизводство Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Бесплатно (free)

Обновились на 3.0.93.20, и все мои расширения под ЭДО перестали работать. Разберем, где вообще искать код, который выводит данные электронного документа в XML, где вмешиваться в ход этого вывода?

03.06.2021    11141    fixin    34    

19

API ОФД-Я разбор документации с примерами

WEB-интеграция ЭДО и ОФД Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Примеры запросов 1С для получения данных с ОФД-Ярус через API.

20.04.2021    2777    www76    0    

2

Маркировка табака. Формирование тега 1162 "код товара" для передачи в ККТ и ОФД

Розничная торговля Адаптация типовых решений ЭДО и ОФД Платформа 1С v8.3 Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Россия Бесплатно (free)

С 01.07.2019 стартует новый этап маркировки сигарет. Теперь в кассе обязательно надо будет считывать марку с пачек табака, если она там есть. Считывать и передавать в ОФД через тег 1162 в онлайн-кассе. А как сформировать данные этого тега? Не все так просто...

27.06.2019    19309    kirlog    62    

11

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

Переход на новые форматы ЭДО после 01.07.2017. (использование УПД)

Инструкции пользователю Документооборот и делопроизводство ЭДО и ОФД Платформа 1С v8.3 Конфигурации 1cv8 Россия Бухгалтерский учет Бесплатно (free)

В статье я постарался кратко расписать, какие варианты обмена ЭДО с контрагентами доступны в 1С (любой конфигурации 1С) по новым форматам. Скрины новых форматов в списке картинок к статье. Добавил исправление поведения УПД при формировании ЭД.

25.07.2017    21654    igo1    12    

16

1C + ЭДО Мегафон

ЭДО и ОФД Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Тестируем модуль обмена 1С с ЭДО Мегафон (модуль прилагается пользователям ресурса ЭДО Мегафон бесплатно).

1 стартмани

21.12.2015    14681    JetBrain    4    

3