Как правильно обработать выделеные строки
По теме из базы знаний
Найденные решения
(4) Я бы сделал через колонку пометки, но если делать через выделенные, то как-то так:
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
&НаСервере
Процедура Команда1НаСервере()
ВыделенныеСтроки = Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки;
МассивСтрок = Новый Массив;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
МассивСтрок.Добавить(РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока));
КонецЦикла;
ТЗ = РаспоряженияНаОтгрузку.Выгрузить(МассивСтрок);
Получатели = ТЗ.Скопировать(, "Получатель");
Получатели.Свернуть("Получатель");
Получатели = Получатели.ВыгрузитьКолонку(0);
ТЗ.Индексы.Добавить("Получатель");
Для Каждого Получатель Из Получатели Цикл
СтрокиПолучателя = ТЗ.НайтиСтроки(Новый Структура("Получатель", Получатель));
// создаете документ по текущему получателю и строкам ТЗ
КонецЦикла;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
На клиенте проверку можно сделать через Соответствие.
Соответствие = Новый Соответствие;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
СтрокаТЗ = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока);
Соответствие.Вставить(СтрокаТЗ.Получатель);
КонецЦикла;
Если Соответствие.Количество() > 1 Тогда
Иначе
КонецЕсли;
Показать
(3)
а можете подсказать как сделать если например я выделел строки в тз и мне нужно наоборот создать
для каждого контрагента свой документ. например
ТЗ выделеных
Документ 1 иванов
Документ 2 Петрова
документ 3 иванов
по выделеным строкам должно создаться 2 документ 1 с получателем ивановым а второй с получателем петровым
пытаюсь по что то так изобрести
Соответствие = Новый Соответствие;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
СтрокаТЗ = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока);
Соответствие.Вставить(СтрокаТЗ.Получатель);
КонецЦикла;
Если Соответствие.Количество() > 1 Тогда
Иначе
КонецЕсли;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
СтрокаТЗ = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока);
Соответствие.Вставить(СтрокаТЗ.Получатель);
КонецЦикла;
Если Соответствие.Количество() > 1 Тогда
Иначе
КонецЕсли;
а можете подсказать как сделать если например я выделел строки в тз и мне нужно наоборот создать
для каждого контрагента свой документ. например
ТЗ выделеных
Документ 1 иванов
Документ 2 Петрова
документ 3 иванов
по выделеным строкам должно создаться 2 документ 1 с получателем ивановым а второй с получателем петровым
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Распоряжение", Новый ОписаниеТипов("ДокументСсылка.РасходнаяНакладная"));
ТЗ.Колонки.Добавить("Получатель", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
Для Каждого СтрИД Из Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки Цикл
СтрТабл = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(СтрИД);
Если СтрТабл = Неопределено Тогда
ТекстПредупреждения = НСтр("ru = 'Выберите распоряжение на отгрузку товаров.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);
Возврат;
КонецЕсли;
КонецЦикла
НовыйДокумент = Документы.АМ_ОтгрузкаТоваров.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДатаСеанса();
НовыйДокумент.ДатаОтгрузки = ТекущаяДатаСеанса();
НовыйДокумент.Получатель = ДокументОснование.Контрагент;
НовыйДокумент = ПараметрыСеанса.ТекущийПользователь();
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| АМ_ТоварыКОтгрузкеОстатки.Номенклатура КАК Номенклатура,
| АМ_ТоварыКОтгрузкеОстатки.Характеристика КАК Характеристика,
| АМ_ТоварыКОтгрузкеОстатки.Упаковка КАК Упаковка,
| АМ_ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток КАК Количество,
| АМ_ТоварыКОтгрузкеОстатки.ДокументОтгрузки КАК Распоряжение
|ИЗ
| РегистрНакопления.АМ_ТоварыКОтгрузке.Остатки КАК АМ_ТоварыКОтгрузкеОстатки
|ГДЕ
| АМ_ТоварыКОтгрузкеОстатки.ДокументОтгрузки В (&ДокументОтгрузки)";
Запрос.УстановитьПараметр("ДокументОтгрузки", ДанныеЗаполнения.Ссылка);
ТаблицаАМТоварыКОтгрузке = Запрос.Выполнить().Выгрузить();
Если ТаблицаАМТоварыКОтгрузке.Количество() <> 0 Тогда
ТоварыПоРаспоряжениям.Загрузить(ТаблицаАМТоварыКОтгрузке);
ОтгружаемыеТовары.Загрузить(ТаблицаАМТоварыКОтгрузке);
ОтгружаемыеТовары.Свернуть("Номенклатура,Характеристика,Упаковка","Количество");
КонецЕсли;
Показатьпытаюсь по что то так изобрести
(4) Продолжим ваш экзерсис:
1. Создаем ТЗ по вашему образцу. Перебором выделенных строк добавляем в неё информацию из выделенных строк и параллельно заполняем массив или соответствие контрагентов (как указал предыдущий коллега).
2. В цикле для каждого контрагента из массива или соответствия отбираем в ТЗ строки с распоряжениями.
3. Найденные распоряжения и контрагента отправляем на создание нового документа.
1. Создаем ТЗ по вашему образцу. Перебором выделенных строк добавляем в неё информацию из выделенных строк и параллельно заполняем массив или соответствие контрагентов (как указал предыдущий коллега).
2. В цикле для каждого контрагента из массива или соответствия отбираем в ТЗ строки с распоряжениями.
3. Найденные распоряжения и контрагента отправляем на создание нового документа.
(4) Я бы сделал через колонку пометки, но если делать через выделенные, то как-то так:
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
&НаСервере
Процедура Команда1НаСервере()
ВыделенныеСтроки = Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки;
МассивСтрок = Новый Массив;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
МассивСтрок.Добавить(РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока));
КонецЦикла;
ТЗ = РаспоряженияНаОтгрузку.Выгрузить(МассивСтрок);
Получатели = ТЗ.Скопировать(, "Получатель");
Получатели.Свернуть("Получатель");
Получатели = Получатели.ВыгрузитьКолонку(0);
ТЗ.Индексы.Добавить("Получатель");
Для Каждого Получатель Из Получатели Цикл
СтрокиПолучателя = ТЗ.НайтиСтроки(Новый Структура("Получатель", Получатель));
// создаете документ по текущему получателю и строкам ТЗ
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот