Загрузка данных из внешних файлов Excel — одна из самых частых задач, с которыми сталкивается разработчик или администратор 1С. Несмотря на кажущуюся простоту, этот процесс скрывает множество нюансов: от иерархической структуры справочников до специфических ошибок в запросах. В рамках данной статьи мы подробно разберем, как реализовать импорт номенклатуры, штрихкодов и цен, а также проанализируем техническую ошибку, возникшую у автора темы.
Проанализируем ситуацию, описанную в сообщении №14. При выполнении обработки система выдала ошибку: «Ошибка обработки представления РегистрСведений.ЦеныНоменклатуры.СрезПоследних: Несоответствие типов (Параметр номер "1")». Это классическая проблема, возникающая при работе с виртуальными таблицами в 1С.
Выясним причину. Первым параметром виртуальной таблицы СрезПоследних является Период. Система ожидает здесь значение типа Дата. Ошибка возникает в следующих случаях:
Неопределено.УстановитьПараметр().Чтобы избежать подобных проблем, рассмотрим пример правильной установки параметров запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних";
// Обязательная проверка и приведение типа
Если ТипЗнч(ДатаИзФайла) <> Тип("Дата") Тогда
Попытка
ПараметрПериод = Дата(ДатаИзФайла);
Исключение
ПараметрПериод = ТекущаяДата(); // Значение по умолчанию
КонецПопытки;
Иначе
ПараметрПериод = ДатаИзФайла;
КонецЕсли;
Запрос.УстановитьПараметр("Период", ПараметрПериод);
Запрос.УстановитьПараметр("Номенклатура", СсылкаНаТовар);
Результат = Запрос.Выполнить();
Если нам нужно быстро перебросить данные без написания кода, рассмотрим штатный инструмент от фирмы 1С. Для платформы 8.2 в обычных формах эта обработка является незаменимой. Она позволяет сопоставлять колонки файла с реквизитами справочника в визуальном режиме.
Разберем по шагам процесс настройки:
Номенклатура.Наименование, Артикул и ПолноеНаименование.Артикула или Штрихкода. Если программа найдет товар с таким кодом, она обновит существующий, а не создаст новый.Посмотрим на ситуацию шире. Как отметил пользователь в сообщении №9, ему нужно загрузить не только имя, но и единицу измерения со штрихкодом. В 1С 8.2 (например, в Управлении Торговлей 10.3) эти данные хранятся в разных местах.
Единицы измерения: Это подчиненный справочник. Мы не можем просто записать в карточку товара строку «шт». Нам нужно:
КлассификаторЕдиницИзмерения (ОКЕИ).ЕдиницыИзмерения, где владельцем будет наш товар.БазоваяЕдиницаИзмерения карточки номенклатуры.Штрихкоды: Они хранятся в регистре сведений. Рассмотрим пример кода, который создает запись штрихкода для только что загруженного товара:
МенеджерЗаписи = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Владелец = СсылкаНаНоменклатуру;
МенеджерЗаписи.ЕдиницаИзмерения = СсылкаНаЕдиницу;
МенеджерЗаписи.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
МенеджерЗаписи.Штрихкод = СтрокаШтрихкодаИзExcel;
МенеджерЗаписи.Записать(Истина);
Проанализируем ситуацию, когда стандартная обработка не справляется (например, если файл имеет сложную структуру с объединенными ячейками). В этом случае мы используем COM-объект Excel.Application.
Рассмотрим пример открытия и чтения файла:
Попытка
Эксель = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Excel не установлен!");
Возврат;
КонецПопытки;
Книга = Эксель.Workbooks.Open(ПутьКФайлу);
Лист = Книга.Sheets(1);
Для НомерСтроки = 2 По Лист.UsedRange.Rows.Count Цикл
Наименование = Лист.Cells(НомерСтроки, 1).Value;
Артикул = СокрЛП(Строка(Лист.Cells(НомерСтроки, 2).Value));
// Здесь логика поиска или создания номенклатуры
КонецЦикла;
Книга.Close(Ложь);
Эксель.Quit();
Важное замечание: При использовании этого метода 1С часто считывает числовые штрихкоды в научном формате (например, 4.6E+12). Чтобы этого избежать, всегда приводите значение к строке и предварительно настраивайте формат ячеек в Excel как «Текстовый».
Выясним, как минимизировать ошибки еще на этапе подготовки данных. Большинство проблем с типами данных в 1С возникает из-за «грязных» исходных файлов. Проделаем следующие шаги:
Excel 97-2003 (.xls), так как он более предсказуем для старых версий платформы 8.2.Подводя итог, можно сказать, что решение проблем загрузки в 1С требует комплексного подхода: от контроля типов данных в запросе (как в случае с СрезПоследних) до правильной работы с объектной моделью справочников и регистров. Понимая структуру подчиненных объектов, мы сможем эффективно автоматизировать перенос данных любой сложности.