Часто при работе с крупными клиентами или маркетплейсами возникает задача: сформировать в 1С счет на оплату на основе файла Excel, который прислал покупатель. Стандартная загрузка в 1С:Бухгалтерии 3.0 позволяет находить товары по наименованию или артикулу. Но что делать, если в файле заказчика эти данные отличаются от тех, что хранятся в вашей базе, а единственное надежное совпадение — это штрихкод товара? Рассмотрим, как решить эту проблему.
Исходная ситуация: имеется файл Excel со списком товаров для счета. В файле есть колонки со штрихкодом, количеством и ценой. Необходимо автоматически заполнить табличную часть документа Счет покупателю, находя номенклатуру в базе 1С именно по штрихкоду.
Давайте разберемся, почему стандартный механизм не подходит. В документе Счет покупателю есть кнопка "Загрузить из файла". Этот инструмент действительно позволяет загружать данные из электронных таблиц, но при настройке сопоставления колонок мы увидим, что для идентификации номенклатуры можно использовать только:
К сожалению, поля "Штрихкод" в списке реквизитов для поиска нет. Это означает, что типовой функционал программы не предусматривает загрузку с идентификацией по штрихкоду. При этом сама программа отлично умеет хранить и использовать штрихкоды: в карточке номенклатуры есть специальная ссылка "Штрихкоды", где можно задать один или несколько кодов для товара. Эти штрихкоды хранятся в регистре сведений Штрихкоды номенклатуры, и именно к нему нам нужно будет обращаться.
Поскольку готового решения "из коробки" нет, для реализации такой загрузки потребуется доработка. Рассмотрим наиболее правильный и безопасный способ.
Полностью избежать доработки в данном случае не получится. Однако это не означает, что нужно менять саму конфигурацию программы. Наиболее современный и безопасный подход — создать расширение конфигурации. Это небольшой программный модуль, который добавляет новый функционал, не затрагивая основной код программы. Такой подход гарантирует, что ваши доработки не слетят при очередном обновлении 1С.
Задача для программиста будет выглядеть следующим образом. Разберем ее по шагам.
Добавление кнопки на форму документа
Первым делом в расширении необходимо добавить на форму документа Счет покупателю новую кнопку, например, "Загрузить из Excel (по штрихкоду)". Ее можно разместить рядом со стандартной кнопкой "Загрузить из файла".
Создание процедуры обработки
К этой кнопке привязывается команда, которая будет запускать процедуру загрузки. Эта процедура должна выполнять следующие действия:
COMОбъект("Excel.Application") или через работу с табличными документами, если файл сохранен в формате .mxl или .xlsx.Поиск номенклатуры по штрихкоду
Это ключевой этап. Для каждой строки из файла Excel мы извлекаем значение из колонки со штрихкодом. Затем необходимо выполнить запрос к базе данных 1С, чтобы найти, какой номенклатуре принадлежит этот штрихкод. Запрос будет обращаться к регистру сведений Штрихкоды номенклатуры.
Пример такого запроса на языке 1С может выглядеть так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Владелец КАК Номенклатура
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Штрихкод = &Штрихкод";
Запрос.УстановитьПараметр("Штрихкод", ШтрихкодИзФайла);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если запрос вернул результат (Выборка.Следующий()), значит, номенклатура найдена, и мы можем использовать ее (Выборка.Номенклатура) для добавления в счет.
Заполнение табличной части счета
Если номенклатура по штрихкоду найдена, создаем новую строку в табличной части Товары документа Счет покупателю и заполняем ее данными из файла:
Если Выборка.Следующий() Тогда
// Номенклатура найдена
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.Количество = КоличествоИзФайла;
НоваяСтрока.Цена = ЦенаИзФайла;
// Остальные реквизиты, например, ставка НДС, могут подставиться автоматически
// из карточки номенклатуры.
Иначе
// Номенклатура не найдена
Сообщить("Для штрихкода '" + ШтрихкодИзФайла + "' номенклатура не найдена в базе!");
КонецЕсли;
Важно продумать обработку ошибок. Что делать, если для какого-то штрихкода из файла номенклатура в базе не найдена? Обработка должна информировать об этом пользователя, например, выводя сообщение со списком "проблемных" штрихкодов в конце загрузки.
Автор исходного вопроса также интересовался, как можно вывести штрихкод в самом счете. Здесь есть два варианта:
Администрирование – Печатные формы, отчеты и обработки.
Хотя стандартные средства 1С:Бухгалтерии 3.0 не позволяют загружать данные в счет по штрихкоду, эта задача является стандартной и решается с помощью небольшой доработки. Самый правильный и рекомендуемый путь — создание расширения конфигурации, которое добавит необходимую кнопку и логику загрузки. Это позволит автоматизировать рутинную операцию, сэкономить время и избежать ошибок ручного ввода, особенно при работе с большими заказами от клиентов, использующих свою систему наименований.