Найти значения одной табличной части в другой
Нужна помощь! Имеется самописный справочник автоматических скидок. При разработке логики столкнулся с проблемой обработки условий. Логика добавления подарочной номенклатуры при выполнении условий.
Например есть одна ТЧ1 в ней 2 позиции номенклатуры и ее количество - это условия.
Есть другая ТЧ2 это ТЧ заказа где при добавлении номенклатуры в которую - те самые условия должны проверяться.
Как найти все указанные строки из первой ТЧ1(справочника) в ТЧ2(заказа), чтобы проверить строки на соответствие и добавить подарок к заказу.
Как это описать программно: "Если строки 1 ТЧ находятся во 2 ТЧ то все ок"
Например есть одна ТЧ1 в ней 2 позиции номенклатуры и ее количество - это условия.
Есть другая ТЧ2 это ТЧ заказа где при добавлении номенклатуры в которую - те самые условия должны проверяться.
Как найти все указанные строки из первой ТЧ1(справочника) в ТЧ2(заказа), чтобы проверить строки на соответствие и добавить подарок к заказу.
Как это описать программно: "Если строки 1 ТЧ находятся во 2 ТЧ то все ок"
По теме из базы знаний
- Перенос данных из одной табличной части в другую в Документе "Корректировка записей регистров"
- Программное добавление кнопок копирования табличных частей во все документы с минимальными изменениями конфигурации (или вообще без изменения)
- "Расширяемые" регистры и табличные части
- Универсальный редактор табличных частей документов РеСольДо
- Пример аналогичной функции ЗначенияРеквизитовОбъектов в БСП для табличных частей
Найденные решения
(17) Так попробуйте, не помню уже
ФлВсеОк = Истина;
Для Каждого Стр Из ТЗ2 Цикл
НайденныеСтроки = ТЗ1.НайтиСтроки(Новый Структура("Номенклатура", Стр.Номенклатура));
Если НайденныеСтроки.Количество() = 0 Тогда
ФлВсеОк = Ложь;
Прервать;
Иначе
ВремКоличество = 0;
Для Индекс = 0 По НайденныеСтроки.Количество() - 1 Цикл
ВремКоличество = ВремКоличество + НайденныеСтроки[Индекс]["Количество"];
КонецЦикла;
Если Стр.Количество > ВремКоличество Тогда
ФлВсеОк = Ложь;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| *
|ПОМЕСТИТЬ ВТ_НазваниеВременнойТаблицы
|ИЗ
| &ТаблицаПараметр КАК ПсевдонимТаблицы";
Запрос.УстановитьПараметр("ТаблицаПараметр ", ТЧ.Выгрузить());
Запрос.Выполнить();
Показать
(9)
Выбрать
ТЗ1.Номенклатура
ТЗ1.Количество
Поместить втТЗ1
Из &ТЗ1 Как ТЗ1
;
Выбрать
ТЗ2.Номенклатура
ТЗ2.Количество
Поместить ВТТЗ2
Их &ТЗ2 Как ТЗ2
;
Выбрать
1 Как Поле1
Из втТЗ1 как ВТЗТЗ1
Где (втТЗ1.Номенклатура, втТЗ1.Количество) в (Выбрать ВТТЗ2.Номенклатура, ВТТЗ2.Количество)
это если необходимо на точное равенство
Если не точное, а "не меньше", то делаем внутренне соединение тип
ВТТЗ1. Номенклатура = втТз2.Номенклатура
И ВТТЗ1.Количество >= втТз2.Количество
Показать
Примерно так:
ТЗ1 - справочник
ТЗ2 - Заказ
ТЗ1 - справочник
ТЗ2 - Заказ
ФлВсеОк = Истина;
Для Каждого Стр Из ТЗ2 Цикл
НайденнаяСтрока = ТЗ1.Найти(Стр.Номенклатура);
Если НайденнаяСтрока = Неопределено Тогда
ФлВсеОк = Ложь;
Прервать;
ИначеЕсли Стр.Количество > НайденнаяСтрока.Количество Тогда
ФлВсеОк = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
ПоказатьФлВсеОк = Истина;
Для Каждого Стр Из ТЗ2 Цикл
НайденныеСтроки = ТЗ1.НайтиСтроки(Новый Структура("Номенклатура", Стр.Номенклатура));
Если НайденныеСтроки.Количество() = 0 Тогда
ФлВсеОк = Ложь;
Прервать;
Иначе
ВремКоличество = 0;
Для Индекс = 0 По НайденныеСтроки.Количество() - 1 Цикл
ВремКоличество = ВремКоличество + НайденныеСтроки[Индекс, "Количество"];
КонецЦикла;
Если Стр.Количество > ВремКоличество Тогда
ФлВсеОк = Ложь;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
(17) Так попробуйте, не помню уже
ФлВсеОк = Истина;
Для Каждого Стр Из ТЗ2 Цикл
НайденныеСтроки = ТЗ1.НайтиСтроки(Новый Структура("Номенклатура", Стр.Номенклатура));
Если НайденныеСтроки.Количество() = 0 Тогда
ФлВсеОк = Ложь;
Прервать;
Иначе
ВремКоличество = 0;
Для Индекс = 0 По НайденныеСтроки.Количество() - 1 Цикл
ВремКоличество = ВремКоличество + НайденныеСтроки[Индекс]["Количество"];
КонецЦикла;
Если Стр.Количество > ВремКоличество Тогда
ФлВсеОк = Ложь;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
Мне кажется, у вас постановка задачи изначально некорректная – вы сами говорите, что есть справочник автоматических скидок, следовательно, необходимо найти все скидки, которые сработали для данного заказа, так?
Тогда в оперативной памяти у нас только одна табличная часть – Товары заказа и нам надо найти ссылки скидок, удовлетворяющих условию – скидочный набор полностью присутствует в заказе в количестве, не меньшим, чем указано в условиях скидки.
Тогда в оперативной памяти у нас только одна табличная часть – Товары заказа и нам надо найти ссылки скидок, удовлетворяющих условию – скидочный набор полностью присутствует в заказе в количестве, не меньшим, чем указано в условиях скидки.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот