Как программно добавить временную колонку в табличную часть документа 1С для отметки сканированного товара?

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

Часто в процессе автоматизации складских операций, например, при приемке товаров, возникает необходимость визуально отмечать строки, которые были считаны сканером штрих-кода. Внесение изменений в структуру метаданных (добавление новых реквизитов) не всегда оправдано, особенно если данные нужны временно и не подлежат сохранению в базе. Давайте разберем, как реализовать такую задачу программно.

Основные этапы реализации задачи

Для решения поставленной задачи мы будем использовать программное добавление колонки в табличную часть формы и создание ТаблицыЗначений для хранения признака сканирования в оперативной памяти. Такой подход позволяет избежать модификации конфигурации и упрощает процесс обновления базы в будущем.

  1. Создание колонки в табличном поле: Необходимо программно добавить новую колонку, в которой будет отображаться признак выполнения операции.
  2. Инициализация хранилища данных: В модуле формы создадим переменную типа ТаблицаЗначений, где будем фиксировать связь между номенклатурой и фактом сканирования.
  3. Заполнение данных при сканировании: При срабатывании события сканирования штрих-кода нужно обновлять нашу таблицу.
  4. Визуальное отображение: В событии ПриВыводеСтроки будем проверять наличие записи в таблице и выводить соответствующий индикатор.

Шаг 1: Инициализация переменной и создание колонки

Для начала нам нужно объявить переменную, которая будет доступна во всех процедурах модуля формы. Сделаем это в самом начале модуля:

Перем ТаблицаЗначенийШКСчитан Экспорт;

Далее, в процедуре ПриОткрытии, мы инициализируем эту таблицу и добавим колонку на форму документа:


Процедура ПриОткрытии()
    // Создаем колонки для учета признака сканирования
    ТаблицаЗначенийШКСчитан = Новый ТаблицаЗначений;
    ТаблицаЗначенийШКСчитан.Колонки.Добавить("КодНоменклатуры");
    ТаблицаЗначенийШКСчитан.Колонки.Добавить("ШКСчитан");

    // Добавляем колонку в табличное поле Товары
    ЭлементыФормы.Товары.Колонки.Добавить("ШКСчитан", "Штрих-код считан");
КонецПроцедуры

Шаг 2: Обработка сканирования товара

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


Процедура СШКНоменклатура(Номенклатура)
    // Добавляем запись в таблицу значений
    Стр = ТаблицаЗначенийШКСчитан.Добавить();
    Стр.КодНоменклатуры = Номенклатура.Код;
    Стр.ШКСчитан = "ШК"; 
    
    // Обновляем отображение, чтобы изменения стали видны пользователю
    ЭлементыФормы.Товары.ОбновитьСтроки();
КонецПроцедуры

Шаг 3: Отображение данных в строках

Чтобы пользователь видел, какой именно товар был считан, используем событие ПриВыводеСтроки табличного поля. Это событие срабатывает для каждой отрисовываемой строки и позволяет нам динамически менять оформление:


Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Ищем товар в нашей таблице по коду
    СтрокаТаблицы = ТаблицаЗначенийШКСчитан.Найти(ДанныеСтроки.Номенклатура.Код, "КодНоменклатуры");
    
    Если СтрокаТаблицы <> Неопределено И СтрокаТаблицы.ШКСчитан = "ШК" Тогда
        ОформлениеСтроки.Ячейки.ШКСчитан.УстановитьТекст("ШК");
    Иначе
        ОформлениеСтроки.Ячейки.ШКСчитан.УстановитьТекст("--");
    КонецЕсли;
КонецПроцедуры

Важные рекомендации

При использовании данного метода стоит помнить о нескольких нюансах:

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

← На главную