Как обработать и отправить данные нескольких выбранных строк в табличной части 1С?

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

При интеграции 1С с внешними сервисами и API часто возникает задача отправки данных не по одной активной строке, а по нескольким выбранным позициям табличной части. Рассмотрим различные способы реализации такого сценария на управляемых формах 1С: от классического флага выбора до метода НайтиСтроки и механизма множественного выделения строк.

Способ 1. Обход строк таблицы с проверкой реквизита-флажка

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

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

  1. Добавляем команду на форму (например, ОтправитьВыбранныеСтроки) и размещаем соответствующую кнопку в командной панели таблицы.
  2. В обработчике команды выполняем перебор коллекции строк таблицы формы.
  3. Для каждой строки проверяем значение булева реквизита и вызываем процедуру отправки.

Посмотрим на пример кода на клиенте и сервере:


&НаКлиенте
Процедура ОтправитьВыбранныеСтроки(Команда)
    
    // Перебираем строки табличной части формы
    Для Каждого СтрокаТЧ Из Объект.СкладскойЖурнал Цикл
        Если СтрокаТЧ.ВыбраннаяСтрока Тогда
            ОтправитьДанныеСтрокиНаСервере(СтрокаТЧ.НомерСтроки);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Способ 2. Использование метода НайтиСтроки

Рассмотрим более лаконичный и производительный вариант выборки. Коллекция строк управляемой формы (ДанныеФормыКоллекция), как и табличная часть на сервере, поддерживает метод НайтиСтроки(). Это позволяет избежать ручной проверки каждой строки в общем цикле.

Посмотрим на пример выборки строк по структуре отбора:


&НаКлиенте
Процедура ОтправитьОтмеченныеЧерезНайтиСтроки(Команда)
    
    // Формируем структуру отбора по флагу
    Отбор = Новый Структура("ВыбраннаяСтрока", Истина);
    НайденныеСтроки = Объект.СкладскойЖурнал.НайтиСтроки(Отбор);
    
    Если НайденныеСтроки.Количество() = 0 Тогда
        ПоказатьПредупреждение(, "Не выбрано ни одной строки для отправки!");
        Возврат;
    КонецЕсли;
    
    // Перебираем только те строки, где установлен флаг
    Для Каждого ТекСтрока Из НайденныеСтроки Цикл
        // Выполняем обработку или отправку данных
        ОтправитьДанныеСтроки(ТекСтрока);
    КонецЦикла;
    
КонецПроцедуры

Способ 3. Использование стандартного множественного выделения строк

Разберем альтернативный вариант, который не требует добавления дополнительного реквизита типа Булево в структуру данных. Платформа 1С поддерживает множественное выделение строк пользователем с помощью клавиш Ctrl или Shift.

Для реализации этого способа выполним следующие действия:

  1. В свойствах элемента формы «Таблица» переключаем свойство РежимВыделения в значение Множественный.
  2. Считываем массив выделенных строк через свойство таблицы ВыделенныеСтроки.
  3. По полученным идентификаторам находим строки с помощью метода НайтиПоИдентификатору().

Посмотрим на пример программной обработки выделенных строк:


&НаКлиенте
Процедура ОтправитьВыделенныеСтроки(Команда)
    
    МассивИдентификаторов = Элементы.СкладскойЖурнал.ВыделенныеСтроки;
    
    Если МассивИдентификаторов.Количество() = 0 Тогда
        ПоказатьПредупреждение(, "Выделите строки в таблице для отправки!");
        Возврат;
    КонецЕсли;
    
    Для Каждого Идентификатор Из МассивИдентификаторов Цикл
        ТекСтрока = Объект.СкладскойЖурнал.НайтиПоИдентификатору(Идентификатор);
        Если ТекСтрока <> Неопределено Тогда
            ОтправитьДанныеСтроки(ТекСтрока);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Рекомендации по отправке данных во внешние API

Рассмотрим важные архитектурные нюансы при последовательной отправке данных нескольких строк:

  1. Перенос сетевых вызовов на сервер: Формирование объектов HTTPСоединение, HTTPЗапрос и сериализацию данных через ЗаписьJSON следует выполнять в процедурах с директивой &НаСервере или &НаСервереБезКонтекста.
  2. Обработка исключений: Оборачивайте отправку каждой строки в конструкцию Попытка ... Исключение. Это гарантирует, что ошибка при передаче одной записи не прервет обработку остальных выбранных строк.
  3. Пакетная передача: Если внешнее API поддерживает прием массивов данных, эффективнее собрать данные всех выбранных строк в один массив структур на клиенте или сервере и отправить их единым HTTP-запросом вместо множества последовательных сетевых обращений.
  4. Сброс флагов и фиксация статуса: После успешной отправки рекомендуется программно снимать флаг ВыбраннаяСтрока или заполнять реквизит статуса (например, «Отправлено»), чтобы исключить повторную передачу данных.
← На главную