Перенос объектов 1С и загрузка данных из внешних файлов — одна из самых частых задач при внедрении или обновлении базы данных 1С:Управление нашей фирмой (УНФ) 3.0. Особую сложность вызывает перенос не только базовых полей (наименование, артикул, цена), но и дополнительных реквизитов, которые в УНФ тесно связаны с категориями номенклатуры. В этой статье мы подробно разберем, как эффективно решить эту задачу, используя как стандартные инструменты, так и программные методы.
Прежде чем приступать к написанию собственного кода или покупке дорогостоящих обработок, проанализируем возможности современной платформы 1С:Предприятие 8.3 и конфигурации УНФ 3.0. В состав Библиотеки стандартных подсистем (БСП), на которой построена УНФ, входит мощный механизм загрузки.
Разберем по шагам, как воспользоваться штатным средством:
ЗагрузкаДанныхИзФайла).Важный нюанс: Если ваш дополнительный реквизит имеет тип «Дополнительное значение» (выпадающий список), штатный помощник умеет автоматически создавать новые значения, если их еще нет в базе. Это избавляет от необходимости предварительного заполнения словарей.
Если штатный механизм не подходит (например, требуется сложная логика очистки данных или специфический поиск), используя генератор структуры метаданных, рассмотрим, как программно работать с доп. реквизитами. В УНФ 3.0 они хранятся в табличной части ДополнительныеРеквизиты каждого объекта номенклатуры.
Проанализируем структуру этой табличной части. Она содержит два основных поля: Свойство (ссылка на План видов характеристик ДополнительныеРеквизитыИСведения) и Значение.
Рассмотрим пример кода для записи дополнительного реквизита в объект номенклатуры:
// Предположим, у нас уже есть ссылка на номенклатуру и мы получили объект для редактирования
ОбъектНоменклатура = СсылкаНаНоменклатуру.ПолучитьОбъект();
// Находим нужное свойство по наименованию (лучше искать по ГУИД или коду)
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Цвет (Номенклатура)");
Если Не СвойствоСсылка.Пустая() Тогда
// Ищем, есть ли уже такая строка в ТЧ
СтрокаРеквизита = ОбъектНоменклатура.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");
Если СтрокаРеквизита = Неопределено Тогда
СтрокаРеквизита = ОбъектНоменклатура.ДополнительныеРеквизиты.Добавить();
СтрокаРеквизита.Свойство = СвойствоСсылка;
КонецЕсли;
// Устанавливаем значение (учитывайте тип данных свойства!)
СтрокаРеквизита.Значение = "Красный";
ОбъектНоменклатура.Записать();
КонецЕсли;
При написании собственной обработки загрузки, как упоминалось в обсуждении на форуме, важно уделить внимание типизации. Если доп. реквизит — это ссылка на «Дополнительное значение», то в поле Значение нельзя просто записать строку «Красный». Нужно сначала найти или создать элемент в справочнике ЗначенияСвойствОбъектов, владельцем которого является наше Свойство.
Рассмотрим ситуацию, когда писать свой код некогда, а штатный функционал кажется неудобным. В сообществе 1С популярны решения вроде «Загрузка данных из табличного документа». Однако, как верно подметили участники форума, старые версии этой обработки (созданные под обычные формы) не поддерживают работу с табличными частями дополнительных реквизитов напрямую.
Выделим ключевые критерии выбора готовой обработки для УНФ 3.0:
Выясним причину, по которой многие загрузки завершаются ошибкой. При работе с Excel-файлами от разных поставщиков мы часто сталкиваемся с нечитаемыми символами, лишними пробелами или невидимыми знаками переноса строки. Проанализируем, как минимизировать риск ошибок:
1. Очистка данных: Перед записью в базу обязательно используйте функцию СокрЛП() и, при необходимости, регулярные выражения для удаления спецсимволов.
2. Использование SpreadsheetDocument: При программном чтении файлов .xlsx лучше использовать встроенный объект 1С ТабличныйДокумент, загружая в него файл методом Прочитать(). Это работает быстрее, чем через COM-объект Excel, и стабильнее на серверных ОС (включая Linux).
Проанализировав опыт участников обсуждения, мы можем составить «золотой стандарт» процесса загрузки:
В заключение отметим, что для разовой загрузки в УНФ 3.0 вполне достаточно штатного помощника, если предварительно настроить категории и свойства. Для регулярной работы лучше один раз инвестировать время (от 3 до 8 часов, как оценивают эксперты) в создание расширения, которое будет учитывать специфику ваших файлов и бизнес-логику компании.