Как правильно обработать выделеные строки

1. Raideres 8 14.09.20 12:30 Сейчас в теме
Есть ТЗ на форме в ней список документов и есть кнопка создать документы
Нужно при нажатие на кнопку создать документ по выделенным строкам но проблема в том что нужно сначала проверить что выделенные строки принадлежат одному контрагенту а потом только уже создавать документ.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
7. SlavaKron 14.09.20 13:45 Сейчас в теме
(4) Я бы сделал через колонку пометки, но если делать через выделенные, то как-то так:
&НаКлиенте
Процедура Команда1(Команда)
	
	Команда1НаСервере();
	
КонецПроцедуры

&НаСервере
Процедура Команда1НаСервере()
	
	ВыделенныеСтроки = Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки;
	МассивСтрок = Новый Массив;
	Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		МассивСтрок.Добавить(РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока));
	КонецЦикла;
	
	ТЗ = РаспоряженияНаОтгрузку.Выгрузить(МассивСтрок);
	
	Получатели = ТЗ.Скопировать(, "Получатель");
	Получатели.Свернуть("Получатель");
	Получатели = Получатели.ВыгрузитьКолонку(0);
	
	ТЗ.Индексы.Добавить("Получатель");
	
	Для Каждого Получатель Из Получатели Цикл
		
		СтрокиПолучателя = ТЗ.НайтиСтроки(Новый Структура("Получатель", Получатель));
		
		// создаете документ по текущему получателю и строкам ТЗ
		
	КонецЦикла;
	
КонецПроцедуры
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. malikov_pro 1292 14.09.20 13:11 Сейчас в теме
(1) Найти контрагента по ИНН или наименованию, проверить через ЗначениеЗаполнено() что найден, после в цикле
Если СтрокаТЗ.Контрагент = Найденный контрагент Тогда
...
3. SlavaKron 14.09.20 13:21 Сейчас в теме
На клиенте проверку можно сделать через Соответствие.
Соответствие = Новый Соответствие;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
	СтрокаТЗ = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока);
	Соответствие.Вставить(СтрокаТЗ.Получатель);
КонецЦикла;

Если Соответствие.Количество() > 1 Тогда
	
Иначе
	
КонецЕсли;
Показать
4. Raideres 8 14.09.20 13:32 Сейчас в теме
(3)
Соответствие = Новый Соответствие;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
СтрокаТЗ = РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока);
Соответствие.Вставить(СтрокаТЗ.Получатель);
КонецЦикла;

Если Соответствие.Количество() > 1 Тогда

Иначе

КонецЕсли;


а можете подсказать как сделать если например я выделел строки в тз и мне нужно наоборот создать


для каждого контрагента свой документ. например
ТЗ выделеных
Документ 1 иванов
Документ 2 Петрова
документ 3 иванов


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

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


пытаюсь по что то так изобрести
5. FatPanzer 14.09.20 13:38 Сейчас в теме
(4) Для Каждого Контрагент Из Соответствие Цикл... (это продолжение предыдущего автора)
6. FatPanzer 14.09.20 13:43 Сейчас в теме
(4) Продолжим ваш экзерсис:
1. Создаем ТЗ по вашему образцу. Перебором выделенных строк добавляем в неё информацию из выделенных строк и параллельно заполняем массив или соответствие контрагентов (как указал предыдущий коллега).
2. В цикле для каждого контрагента из массива или соответствия отбираем в ТЗ строки с распоряжениями.
3. Найденные распоряжения и контрагента отправляем на создание нового документа.
7. SlavaKron 14.09.20 13:45 Сейчас в теме
(4) Я бы сделал через колонку пометки, но если делать через выделенные, то как-то так:
&НаКлиенте
Процедура Команда1(Команда)
	
	Команда1НаСервере();
	
КонецПроцедуры

&НаСервере
Процедура Команда1НаСервере()
	
	ВыделенныеСтроки = Элементы.РаспоряженияНаОтгрузку.ВыделенныеСтроки;
	МассивСтрок = Новый Массив;
	Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		МассивСтрок.Добавить(РаспоряженияНаОтгрузку.НайтиПоИдентификатору(ВыделеннаяСтрока));
	КонецЦикла;
	
	ТЗ = РаспоряженияНаОтгрузку.Выгрузить(МассивСтрок);
	
	Получатели = ТЗ.Скопировать(, "Получатель");
	Получатели.Свернуть("Получатель");
	Получатели = Получатели.ВыгрузитьКолонку(0);
	
	ТЗ.Индексы.Добавить("Получатель");
	
	Для Каждого Получатель Из Получатели Цикл
		
		СтрокиПолучателя = ТЗ.НайтиСтроки(Новый Структура("Получатель", Получатель));
		
		// создаете документ по текущему получателю и строкам ТЗ
		
	КонецЦикла;
	
КонецПроцедуры
Показать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)