Как исключить пустые строки при загрузке товаров из табличного документа в 1С-Рарус: Ювелирный магазин?

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

При работе с отраслевым решением 1С-Рарус: Розница. Ювелирный магазин пользователи часто сталкиваются с необходимостью массовой загрузки данных о поступлении товаров из внешних файлов (Excel, CSV, табличные документы). Для этого используется стандартная или модифицированная обработка «Загрузка данных из табличного документа». Одной из распространенных проблем является появление «фантомных» пустых строк в документе поступления после завершения процесса загрузки, а также необходимость автоматического создания карточек номенклатуры, если их еще нет в базе.

В данной статье мы разберем, как правильно настроить алгоритм загрузки, реализовать проверку на существование товара по артикулу и, самое главное, как предотвратить попадание пустых строк в итоговый документ.

Анализ проблемы: почему появляются пустые строки?

Проанализируем ситуацию: когда мы используем режим Вычислять для заполнения реквизитов в обработке загрузки, система выполняет написанный нами программный код для каждой строки таблицы-источника. Если в исходном файле Excel после основных данных идут пустые строки (которые 1С часто считывает как строки, содержащие пустые значения или пробелы), обработка пытается их обработать. Если в коде нет жесткого условия прерывания, создается пустая строка в табличной части документа ПоступлениеТоваров.

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

Решение 1: Фильтрация строк через событие «Перед обработкой строки»

Самый эффективный способ борьбы с лишними строками — это их отсечение еще на этапе предварительного анализа, до того как данные начнут записываться в объект. В настройках обработки «Загрузка из табличного документа» найдем вкладку или поле для ввода кода события «Перед обработкой строки».

Рассмотрим пример кода, который проверяет ключевое поле (например, Артикул в колонке №9) на заполненность. Если поле пустое, мы даем системе команду пропустить эту строку:


// Проверяем, заполнена ли ячейка с артикулом
// Используем СокрЛП для удаления невидимых пробелов
Если СокрЛП(ТекстыЯчеек[9]) = "" Тогда
    // Устанавливаем стандартный параметр Отказ в Истина
    Отказ = Истина;
КонецЕсли;

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

Решение 2: Программное создание номенклатуры при загрузке

Часто требуется, чтобы система не просто искала товар, но и создавала его «на лету», если поиск по артикулу не дал результатов. Выясним, как правильно реализовать этот алгоритм в вычисляемом поле для реквизита Номенклатура (или Имя в терминологии обработки).

Разберем по шагам алгоритм, представленный ниже:

  1. Проверяем, не пуста ли ячейка с артикулом.
  2. Выполняем поиск существующей номенклатуры в базе.
  3. Если товар не найден, создаем новый объект СправочникОбъект.Номенклатура.
  4. Заполняем обязательные реквизиты: Наименование, Артикул, Ставка НДС, Единицы измерения.
  5. Записываем объект и возвращаем ссылку на него.

Пример реализации:


Если НЕ СокрЛП(ТекстыЯчеек[9]) = "" Тогда
    // Ищем номенклатуру по артикулу
    СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", СокрЛП(ТекстыЯчеек[9]));
    
    Если СсылкаНоменклатуры.Пустая() Тогда
        // Создаем новый элемент, если не нашли
        НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйОбъект.Наименование = СокрЛП(ТекстыЯчеек[5]); // Допустим, наименование в 5-й колонке
        НовыйОбъект.Артикул = СокрЛП(ТекстыЯчеек[9]);
        
        // Важно: в актуальных версиях используйте НДС 20%
        НовыйОбъект.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
        
        // Поиск базовой единицы измерения
        НовыйОбъект.ЕдиницаИзмерения = Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию("шт");
        
        // Специфика Ювелирного магазина: установка вида номенклатуры
        НовыйОбъект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Ювелирное изделие");
        
        Попытка
            НовыйОбъект.Записать();
            Результат = НовыйОбъект.Ссылка;
        Исключение
            Сообщить("Ошибка при записи новой номенклатуры: " + ОписаниеОшибки());
            Результат = Справочники.Номенклатура.ПустаяСсылка();
        КонецПопытки;
    Иначе
        // Если нашли — возвращаем ссылку на существующий товар
        Результат = СсылкаНоменклатуры;
    КонецЕсли;
КонецЕсли;

Почему возникала ошибка «Метод объекта не обнаружен (записать)»?

Проанализируем ситуацию из сообщения №2, где пользователь пытался удалять строки и вызывать Объект.Записать(). В 1С контекст выполнения кода крайне важен. Внутри обработки загрузки Объект — это чаще всего сама обработка, у которой нет метода Записать, так как она не является документом или справочником.

Если вы хотите программно модифицировать документ после того, как в него добавлена строка, следует использовать доступ к табличной части через ЭтотОбъект (если код пишется в модуле объекта документа) или через параметры, передаваемые в обработку загрузки. Однако, правильнее всего не допускать добавления пустой строки (как в Решении 1), чем пытаться удалять её после добавления.

Особенности загрузки в ювелирных конфигурациях

Работая с решением от Рарус, важно помнить о дополнительных реквизитах, которые критичны для ювелирного учета:

Работа с форматом DBF

Для пользователей, переходящих на «1С-Рарус: Ювелирный магазин», часто актуален вопрос загрузки из формата DBF (сообщение №9). В данной конфигурации рекомендуется использовать не ручное написание кода, а встроенные профили обмена данными. В справочнике «Настройки загрузки данных» можно создать профиль, выбрать тип файла DBF и визуально сопоставить поля файла с реквизитами документа. Это избавит от необходимости писать сложные запросы к объекту XBase вручную.

Таким образом, комбинируя фильтрацию пустых строк в событии Перед обработкой строки и грамотное создание объектов через Справочники.Номенклатура.СоздатьЭлемент(), мы получаем надежный инструмент для автоматизации складского учета в ювелирном магазине.

← На главную