Часто при импорте данных из внешних файлов (Excel, CSV), когда выполняется загрузка номенклатуры из Excel, пользователи 1С:Управление торговлей (УТ 11) сталкиваются с ситуацией: карточки товаров созданы, но поле Код остается пустым. Это происходит из-за того, что внешние обработки часто работают в специальном режиме, который отключает стандартные проверки платформы. В этой статье мы разберем, почему так происходит, и изучим несколько эффективных способов «заставить» систему присвоить коды уже созданным позициям.
Проанализируем техническую сторону вопроса. Когда мы записываем объект программно, 1С может использовать режим ОбменДанными.Загрузка = Истина. В этом режиме платформа «считает», что данные приходят из другой базы, где они уже проверены, и отключает механизмы автозаполнения и подписки на события. В результате, если в файле загрузки колонка с кодом была пуста, объект так и записывается с пустым значением.
Также стоит проверить длину кода в метаданных справочника Номенклатура. Если длина установлена в «0», поле просто не будет отображаться. Однако в типовой УТ 11 причина чаще всего кроется именно в способе записи данных или сбитой нумерации.
Рассмотрим самый безопасный и универсальный метод, который не требует навыков программирования. Мы воспользуемся встроенным инструментом для массового пересохранения объектов в обычном режиме.
Номенклатура.Код — Пустое. Это позволит нам работать только с проблемными карточками.Проанализируем интересную особенность платформы, упомянутую опытными пользователями. При интерактивной установке пометки на удаление система инициирует запись объекта с проверкой заполнения. Рассмотрим этот алгоритм:
Номенклатура и выделим все позиции без кода (можно воспользоваться поиском или настроенным списком).Важно: этот метод подходит для небольшого количества позиций. Если номенклатуры десятки тысяч, лучше использовать первый способ или программный скрипт.
Если коды в базе перемешались или имеют разную длину (например, «123» и «000000124»), стандартная автонумерация может «споткнуться». В таких случаях полезно выполнить полную перенумерацию.
Для этого можно воспользоваться внешней обработкой УниверсальныйПодборИОбработкаОбъектов. В ней существует специальный алгоритм «Перенумерация объектов». Мы выбираем справочник, задаем начальный номер и префикс (если нужно), и система по порядку перезаписывает коды всех элементов. Это гарантирует отсутствие дублей и «дырок» в нумерации.
Выясним, как решить задачу с помощью небольшого фрагмента кода, если у вас есть доступ к Консоли кода или вы создаете собственную обработку. В языке 1С существует встроенный метод УстановитьНовыйКод(). Разберем пример кода, который обходит справочник и заполняет пустые значения:
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если ПустаяСтрока(Выборка.Код) Тогда
ОбъектНоменклатура = Выборка.ПолучитьОбъект();
// Метод анализирует префиксы и текущий максимальный номер
ОбъектНоменклатура.УстановитьНовыйКод();
ОбъектНоменклатура.Записать();
КонецЕсли;
КонецЦикла;
Этот метод гораздо надежнее, чем ручное присвоение чисел, так как он корректно обрабатывает префиксы информационной базы и организации (например, если код должен выглядеть как УТ-000001).
Чтобы при следующей загрузке коды присваивались сразу, рекомендуем использовать встроенный механизм 1С: Функции для технического специалиста — Загрузка данных из файла.
Посмотрим на важные нюансы настройки этого инструмента:
Код.Таким образом, мы проанализировали ситуацию и нашли несколько путей решения: от простых пользовательских манипуляций с пометкой на удаление до профессионального использования групповых обработок и программного кода. Выбор метода зависит от объема данных и ваших прав доступа в системе.