Как автоматически присвоить коды номенклатуре при загрузке в 1С:Управление торговлей 8.3

Пользователь 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Часто при импорте данных из внешних файлов (Excel, CSV), когда выполняется загрузка номенклатуры из Excel, пользователи 1С:Управление торговлей (УТ 11) сталкиваются с ситуацией: карточки товаров созданы, но поле Код остается пустым. Это происходит из-за того, что внешние обработки часто работают в специальном режиме, который отключает стандартные проверки платформы. В этой статье мы разберем, почему так происходит, и изучим несколько эффективных способов «заставить» систему присвоить коды уже созданным позициям.

Почему коды не присваиваются автоматически?

Проанализируем техническую сторону вопроса. Когда мы записываем объект программно, 1С может использовать режим ОбменДанными.Загрузка = Истина. В этом режиме платформа «считает», что данные приходят из другой базы, где они уже проверены, и отключает механизмы автозаполнения и подписки на события. В результате, если в файле загрузки колонка с кодом была пуста, объект так и записывается с пустым значением.

Также стоит проверить длину кода в метаданных справочника Номенклатура. Если длина установлена в «0», поле просто не будет отображаться. Однако в типовой УТ 11 причина чаще всего кроется именно в способе записи данных или сбитой нумерации.

Способ 1. Использование обработки «Групповое изменение реквизитов»

Рассмотрим самый безопасный и универсальный метод, который не требует навыков программирования. Мы воспользуемся встроенным инструментом для массового пересохранения объектов в обычном режиме.

  1. Перейдем в раздел НСИ и администрированиеОбслуживаниеКорректировка данныхГрупповое изменение реквизитов.
  2. В поле «Выбирать элементы типа» укажем Номенклатура.
  3. Нажмем «Все элементы» и настроим отбор: КодПустое. Это позволит нам работать только с проблемными карточками.
  4. Нажмем кнопку Дополнительные параметры. Это критически важный шаг!
  5. В открывшемся окне снимем галочку «Выполнять в режиме загрузки». Именно эта настройка заставит платформу при записи объекта вызвать стандартный механизм генерации кода.
  6. В основной таблице реквизитов ничего менять не нужно. Просто нажмем кнопку Изменить реквизиты. Программа «пробежится» по всем карточкам, и так как режим загрузки выключен, 1С автоматически присвоит им следующие по порядку свободные коды.

Способ 2. Метод «Пометка на удаление»

Проанализируем интересную особенность платформы, упомянутую опытными пользователями. При интерактивной установке пометки на удаление система инициирует запись объекта с проверкой заполнения. Рассмотрим этот алгоритм:

  1. Откроем справочник Номенклатура и выделим все позиции без кода (можно воспользоваться поиском или настроенным списком).
  2. Нажмем правую кнопку мыши и выберем Пометить на удаление / Снять пометку.
  3. В момент записи пометки система автоматически генерирует код для пустых полей.
  4. Сразу после этого снимем пометку на удаление. Коды останутся в базе.

Важно: этот метод подходит для небольшого количества позиций. Если номенклатуры десятки тысяч, лучше использовать первый способ или программный скрипт.

Способ 3. Перенумерация через «Универсальный подбор и обработку»

Если коды в базе перемешались или имеют разную длину (например, «123» и «000000124»), стандартная автонумерация может «споткнуться». В таких случаях полезно выполнить полную перенумерацию.

Для этого можно воспользоваться внешней обработкой УниверсальныйПодборИОбработкаОбъектов. В ней существует специальный алгоритм «Перенумерация объектов». Мы выбираем справочник, задаем начальный номер и префикс (если нужно), и система по порядку перезаписывает коды всех элементов. Это гарантирует отсутствие дублей и «дырок» в нумерации.

Способ 4. Программная установка нового кода

Выясним, как решить задачу с помощью небольшого фрагмента кода, если у вас есть доступ к Консоли кода или вы создаете собственную обработку. В языке 1С существует встроенный метод УстановитьНовыйКод(). Разберем пример кода, который обходит справочник и заполняет пустые значения:


Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    Если ПустаяСтрока(Выборка.Код) Тогда
        ОбъектНоменклатура = Выборка.ПолучитьОбъект();
        // Метод анализирует префиксы и текущий максимальный номер
        ОбъектНоменклатура.УстановитьНовыйКод(); 
        ОбъектНоменклатура.Записать();
    КонецЕсли;
КонецЦикла;

Этот метод гораздо надежнее, чем ручное присвоение чисел, так как он корректно обрабатывает префиксы информационной базы и организации (например, если код должен выглядеть как УТ-000001).

Как избежать проблемы в будущем?

Чтобы при следующей загрузке коды присваивались сразу, рекомендуем использовать встроенный механизм 1С: Функции для технического специалиста — Загрузка данных из файла.

Посмотрим на важные нюансы настройки этого инструмента:

  1. При сопоставлении колонок из вашего Excel-файла с реквизитами 1С, просто не выбирайте колонку Код.
  2. Если система видит, что соответствие для кода не задано, она сама инициирует создание нового номера при записи каждой строки.
  3. Убедитесь, что в самом файле нет лишних пробелов в колонках, которые могут быть восприняты как «пустой код». Лучше вовсе удалить этот столбец из файла перед импортом.

Таким образом, мы проанализировали ситуацию и нашли несколько путей решения: от простых пользовательских манипуляций с пометкой на удаление до профессионального использования групповых обработок и программного кода. Выбор метода зависит от объема данных и ваших прав доступа в системе.

← На главную