В производственных процессах часто возникает необходимость оперативного доступа к технической документации, чертежам или формулам, привязанным к конкретным позициям номенклатуры в заказе. Чтобы исключить ручной поиск файлов рабочими, мы можем автоматизировать процесс сбора всех документов, относящихся к заказу, и их выгрузку в отдельную папку на диске. Рассмотрим подробнее, как реализовать этот функционал с помощью расширения конфигурации и программных средств 1С.
Наша цель — добавить кнопку в документ ЗаказПокупателя (в современных конфигурациях — ЗаказКлиента), которая при нажатии будет выполнять следующие действия:
Наиболее корректным способом внесения таких изменений является использование расширения конфигурации. Это позволит сохранить основную конфигурацию на поддержке и обеспечит легкость обновления системы.
Для начала создадим расширение и добавим в него форму документа ЗаказПокупателя. Разберем по шагам создание команды:
ВыгрузитьФайлыДляПроизводства.Для того чтобы файлы заказа хранились организованно, нам необходимо создать папку. Выясним причину, по которой стоит использовать стандартную функцию СоздатьКаталог. Эта функция позволяет подготовить файловую структуру еще до начала копирования данных. Проанализируем пример кода:
// Функция создает папку заказа в указанном сетевом каталоге
&НаСервере
Процедура СоздатьПапкуЗаказаНаСервере(НомерЗаказа)
ПутьКХранилищу = "C:\ProductionFiles\"; // Рекомендуется вынести в настройки
ИмяПапки = ПутьКХранилищу + "Заказ_" + СтрЗаменить(НомерЗаказа, "/", "_");
Если Не ФайлСуществует(ИмяПапки) Тогда
СоздатьКаталог(ИмяПапки);
КонецЕсли;
КонецПроцедуры
Важный нюанс: при работе в клиент-серверном варианте код создания каталога должен выполняться на стороне сервера, и у учетной записи, под которой запущена служба 1С, должны быть права на запись в целевую директорию.
Рассмотрим ситуацию, когда файлы хранятся в базе данных. В современных конфигурациях для каждого справочника с файлами создается вспомогательный справочник, например, НоменклатураПрисоединенныеФайлы. Проанализируем, как получить данные этих файлов программно:
&НаСервере
Процедура СобратьФайлыИзЗаказа(СсылкаНаЗаказ)
Для Каждого СтрокаТЧ Из СсылкаНаЗаказ.Товары Цикл
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураПрисоединенныеФайлы.Ссылка КАК ФайлСсылка
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
|ГДЕ
| НоменклатураПрисоединенныеФайлы.ВладелецФайла = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
// Используем функционал БСП для получения данных
ДанныеФайла = РаботаСФайлами.ДанныеФайла(Результат.ФайлСсылка);
Если ДанныеФайла.ЗначениеЗаполнено() Тогда
// Логика сохранения двоичных данных в созданный ранее каталог
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Здесь мы используем объект РаботаСФайлами из Библиотеки стандартных подсистем (БСП), что значительно упрощает работу с двоичными данными, так как система сама определяет, где лежит файл: в томах на диске или непосредственно в базе данных.
Часто возникает ситуация, когда один и тот же чертеж или схема (например, Контур_80.RD) используется для десятков разных наименований номенклатуры. Если мы прикрепим копию этого файла к каждой позиции, то при изменении чертежа нам придется вручную обновлять его везде. Рассмотрим способы решения этой проблемы:
Строка). При нажатии кнопки 1С просто перейдет по указанному пути C:/контуры/круг/Контур_80.RD и скопирует актуальную версию файла в папку заказа.БиблиотекаТехническойДокументации. В карточке номенклатуры добавим реквизит-ссылку на элемент этого справочника. Таким образом, файл хранится в одном месте, и при его обновлении изменения автоматически подхватятся всеми связанными заказами.Если ваши пользователи работают через браузер, прямая команда СоздатьКаталог на диске C: может не сработать из-за политик безопасности. В таком случае разберем по шагам альтернативный подход:
ЗаписьZipФайла.ПолучитьФайл().Резюмируем: Реализация кнопки выгрузки файлов требует понимания структуры справочников присоединенных файлов и навыков работы с файловой системой. Использование расширений и механизмов БСП позволяет сделать это решение надежным и удобным для поддержки. Для долгосрочной работы производства наиболее эффективным методом будет организация единой библиотеки чертежей, что исключит дублирование и ошибки при обновлении документации.