Фильтр на ТЗ

1. jimli 10 20.04.22 16:22 Сейчас в теме
Может и простой вопрос, но для меня сложный
Есть написанная функция. В нее передается ТЗ с товарами для создания заказа.
Необходимо сделать фильтр на ТЗ и передавать часть позиций (для конкретного помещения на складе).
Как это можно сделать?

Может немножко сумбурно, вот код. Читаются в ТЗ из Excel. В ТЗ я уже протянула поле "Помещение".
ТЗ = ПолучитьТоварыДляЗаказа()
...
СформироватьЗаказВ1С(Дата, Контрагент, ТЗ)


Хотелось бы
ТЗ = ПолучитьТоварыДляЗаказа()
...
ПомещенияВЗаказе = ТЗ.Свернуть("Помещение");
Для каждого стр из ПомещенияВЗаказе 
    ТЗ_Фильтр = ???
    СформироватьЗаказВ1С(Дата, Контрагент, ТЗ_Фильтр)
КонецЦикла;
По теме из базы знаний
Найденные решения
2. antz 20.04.22 16:25 Сейчас в теме
Скопировать(<ПараметрыОтбора>, <Колонки>)
Параметры:
<ПараметрыОтбора> (необязательный)
Тип: Структура.
Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.
<Колонки> (необязательный)
Тип: Строка.
Список колонок для копирования в формате: "Колонка1, Колонка2...".
triviumfan; +1 Ответить
8. jimli 10 20.04.22 18:45 Сейчас в теме
Спасибо всем, это я торможу...

ТЗ = ПолучитьТоварыДляЗаказа()
ПараметрыСклада = ТЗ.Скопировать();
ПараметрыСклада.Свернуть("Этаж, Линия");
...
Для каждого Стр из ПараметрыСклада цикл 
	Отбор = Новый Структура;
	Отбор.Вставить("Этаж", стр.Этаж);
	Отбор.Вставить("Линия", стр.Линия);
	ДанныеЗаказа = ТЗ.Скопировать(Отбор); 

	СформироватьЗаказВ1С(Дата, Контрагент, ДанныеЗаказа )
КонецЦикла;
Показать


ДанныеЗаказа , ТЗ - это ТаблицаЗначений
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 20.04.22 16:25 Сейчас в теме
Скопировать(<ПараметрыОтбора>, <Колонки>)
Параметры:
<ПараметрыОтбора> (необязательный)
Тип: Структура.
Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.
<Колонки> (необязательный)
Тип: Строка.
Список колонок для копирования в формате: "Колонка1, Колонка2...".
triviumfan; +1 Ответить
4. starjevschik 20.04.22 16:29 Сейчас в теме
Зависит от сложности фильтра. Если предполагается обойтись условиями "равно" на значения колонок, то фильтром можно сделать структуру и потом пользоваться процедурами вроде НайтиСтроки или как в (2). Если условия сложнее, то можно, конечно, устроить запрос, но (дальше любителям академически правильного оптимального программирования лучше не смотреть) я бы использовал перебор строк.
3. parker_j 20.04.22 16:29 Сейчас в теме
(1)Парам = Новый Структура("Помещение",Стр);
ТЗ_Фильтр = ТЗ.НайтиСтроки(Парам);
5. antz 20.04.22 16:30 Сейчас в теме
6. jimli 10 20.04.22 18:02 Сейчас в теме
(5) Вот и я про то, что в результате ТЗ не получается. Ни через Отбор, ни через НайтиСтроки...
7. tetraren 37 20.04.22 18:24 Сейчас в теме
А зачем вам именно ТЗ на выходе? Почему не подходит массив строк или соответствие по ключу?
9. jimli 10 20.04.22 18:48 Сейчас в теме
(7) Чтобы функцию не переписывать...
10. tetraren 37 20.04.22 18:53 Сейчас в теме
(9) Если у вас в функции один большой цикл Для Каждого, то передав массив ничего переписывать и не придется.

И это будет экономней по памяти (т.к. будут ссылки на те же строки), чем делать копию таблицы, пусть и с отбором (если мы говорим о большой ТЗ, конечно).
8. jimli 10 20.04.22 18:45 Сейчас в теме
Спасибо всем, это я торможу...

ТЗ = ПолучитьТоварыДляЗаказа()
ПараметрыСклада = ТЗ.Скопировать();
ПараметрыСклада.Свернуть("Этаж, Линия");
...
Для каждого Стр из ПараметрыСклада цикл 
	Отбор = Новый Структура;
	Отбор.Вставить("Этаж", стр.Этаж);
	Отбор.Вставить("Линия", стр.Линия);
	ДанныеЗаказа = ТЗ.Скопировать(Отбор); 

	СформироватьЗаказВ1С(Дата, Контрагент, ДанныеЗаказа )
КонецЦикла;
Показать


ДанныеЗаказа , ТЗ - это ТаблицаЗначений
11. parker_j 21.04.22 08:02 Сейчас в теме
(5) Пусть переименует переменную)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот