При интеграции 1С с внешними сервисами и API часто возникает задача отправки данных не по одной активной строке, а по нескольким выбранным позициям табличной части. Рассмотрим различные способы реализации такого сценария на управляемых формах 1С: от классического флага выбора до метода НайтиСтроки и механизма множественного выделения строк.
Проанализируем базовый подход, когда в табличную часть добавлен пользовательский реквизит с типом Булево (например, ВыбраннаяСтрока или ВыбратьУченика). Пользователь отмечает нужные позиции галочками, после чего нажимает кнопку отправки.
Разберем по шагам, как организовать обработку отмеченных строк:
ОтправитьВыбранныеСтроки) и размещаем соответствующую кнопку в командной панели таблицы.Посмотрим на пример кода на клиенте и сервере:
&НаКлиенте
Процедура ОтправитьВыбранныеСтроки(Команда)
// Перебираем строки табличной части формы
Для Каждого СтрокаТЧ Из Объект.СкладскойЖурнал Цикл
Если СтрокаТЧ.ВыбраннаяСтрока Тогда
ОтправитьДанныеСтрокиНаСервере(СтрокаТЧ.НомерСтроки);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Рассмотрим более лаконичный и производительный вариант выборки. Коллекция строк управляемой формы (ДанныеФормыКоллекция), как и табличная часть на сервере, поддерживает метод НайтиСтроки(). Это позволяет избежать ручной проверки каждой строки в общем цикле.
Посмотрим на пример выборки строк по структуре отбора:
&НаКлиенте
Процедура ОтправитьОтмеченныеЧерезНайтиСтроки(Команда)
// Формируем структуру отбора по флагу
Отбор = Новый Структура("ВыбраннаяСтрока", Истина);
НайденныеСтроки = Объект.СкладскойЖурнал.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, "Не выбрано ни одной строки для отправки!");
Возврат;
КонецЕсли;
// Перебираем только те строки, где установлен флаг
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
// Выполняем обработку или отправку данных
ОтправитьДанныеСтроки(ТекСтрока);
КонецЦикла;
КонецПроцедуры
Разберем альтернативный вариант, который не требует добавления дополнительного реквизита типа Булево в структуру данных. Платформа 1С поддерживает множественное выделение строк пользователем с помощью клавиш Ctrl или Shift.
Для реализации этого способа выполним следующие действия:
РежимВыделения в значение Множественный.ВыделенныеСтроки.НайтиПоИдентификатору().Посмотрим на пример программной обработки выделенных строк:
&НаКлиенте
Процедура ОтправитьВыделенныеСтроки(Команда)
МассивИдентификаторов = Элементы.СкладскойЖурнал.ВыделенныеСтроки;
Если МассивИдентификаторов.Количество() = 0 Тогда
ПоказатьПредупреждение(, "Выделите строки в таблице для отправки!");
Возврат;
КонецЕсли;
Для Каждого Идентификатор Из МассивИдентификаторов Цикл
ТекСтрока = Объект.СкладскойЖурнал.НайтиПоИдентификатору(Идентификатор);
Если ТекСтрока <> Неопределено Тогда
ОтправитьДанныеСтроки(ТекСтрока);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Рассмотрим важные архитектурные нюансы при последовательной отправке данных нескольких строк:
HTTPСоединение, HTTPЗапрос и сериализацию данных через ЗаписьJSON следует выполнять в процедурах с директивой &НаСервере или &НаСервереБезКонтекста.Попытка ... Исключение. Это гарантирует, что ошибка при передаче одной записи не прервет обработку остальных выбранных строк.ВыбраннаяСтрока или заполнять реквизит статуса (например, «Отправлено»), чтобы исключить повторную передачу данных.