Как автоматически объединять одинаковые строки в табличной части документа 1С?

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

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

Метод 1: Свертка табличной части при записи документа

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

Рассмотрим реализацию данного метода по шагам:

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

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


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // Предположим, табличная часть называется Товары
    // Мы сворачиваем колонку Номенклатура, суммируя данные в колонке Количество
    // Если нужно учитывать характеристики или единицы измерения, укажите их через запятую
    Товары.Свернуть("Номенклатура, Характеристика, Упаковка", "Количество, Сумма");
КонецПроцедуры

Преимущество этого метода: простота реализации и гарантия отсутствия дублей в базе данных. Недостаток: пользователь видит дубли в интерфейсе до тех пор, пока не нажмет кнопку «Записать».

Метод 2: Поиск и объединение строк «на лету»

Если вы хотите, чтобы строки объединялись сразу же после выбора товара (по аналогии с типовыми решениями для сканеров штрихкодов), необходимо использовать событийную модель формы. Для этого мы будем использовать поиск существующих строк перед добавлением новой.

Разберем логику действий:

  1. Вместо стандартной кнопки «Добавить» используйте собственную команду или обработчик события ПриИзменении поля выбора номенклатуры.
  2. При выборе товара выполните поиск аналогичной позиции в коллекции строк Объект.Товары.
  3. Если позиция найдена, увеличьте её количество. Если нет — добавьте новую строку.

Рассмотрим пример кода для серверной процедуры, вызываемой из формы:


&НаСервере
Процедура ДобавитьТоварСервер(Номенклатура, Количество)
    // Пытаемся найти строку с такой же номенклатурой
    НайденнаяСтрока = Объект.Товары.Найти(Номенклатура, "Номенклатура");
    
    Если НайденнаяСтрока <> Неопределено Тогда
        // Строка найдена, просто увеличиваем количество
        НайденнаяСтрока.Количество = НайденнаяСтрока.Количество + Количество;
    Иначе
        // Строка не найдена, добавляем новую
        НоваяСтрока = Объект.Товары.Добавить();
        НоваяСтрока.Номенклатура = Номенклатура;
        НоваяСтрока.Количество = Количество;
    КонецЕсли;
КонецПроцедуры

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

Что выбрать для вашего проекта?

Проанализируем ситуацию: если ваш документ часто заполняется сканером штрихкодов или терминалом сбора данных, оптимальным решением будет комбинация обоих подходов. Для автоматизации работы с внешними данными от торговых площадок используется автоматическая загрузка отчётов о продажах из Excel, которая обеспечивает заполнение документов в 1С:Бухгалтерии без ручного ввода каждой строки.

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

← На главную