Автоматическое заполнение второй табличной части документа с данными из справочника.

1. oleg703 30.03.23 10:38 Сейчас в теме
Помогите, как автоматически заполнить табличную часть. Есть документ реализация товара и справочник Технологическая Карта. В реализации товара две табличные части, первая заполняется на основании документа заказ клиента. Мне нужно заполнить вторую табличную часть ингредиентами для пиццы, взяв их из справочника. Ингредиенты заполняются для каждой пиццы из табличной части товары.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
11. parker_j 30.03.23 12:57 Сейчас в теме
(10)

|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТехнологическаяКарта.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл

//заполнение второй ТЧ

КонецЦикла;

КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
14. YozZzhik 30.03.23 14:19 Сейчас в теме
Алгоритм следующий у вас должен быть:
1. Запросом вытаскиваете строки из табличной части заказа
2. К ней левым соединением присоединяете таблицу с расходами (Технологическая карта). В ней ставите условие на родителя, чтобы коробки не попали в расход нового документа
3. Ставите итог по номенклатуре
4. Обходите результат запроса по группировкам (Номенклатура и детальные записи), заполняя по группировке номенклатура - табличную часть Товары, а по группировке детальные записи - табличную часть Ингридиенты
5. Устанавливаете отбор строк, чтобы при кликании в таблице с пиццами на определенную пиццу в нижней таблице с расходами отображались данные по конкретной пицце.

А дальше гуглите как это сделать, скачайте консоль запросов и в ней постепенно смотрите какой результат получается при выборе той или иной таблицы, используйте временные таблицы

И не используйте запрос в цикле, лучше сразу учитесь сперва получать данные одним запросом, а потом обрабатывать их
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
17. user1874969 29.04.23 20:31 Сейчас в теме
(1) Добрый вечер! Для меня очень актуальна тема Вашего обращения. Если не составит труда могли бы Вы прислать конечный код процедуры и способ её использования (как вы к ней обращаетесь), можно в скринах
18. user1826630 29.04.23 21:55 Сейчас в теме
2. coollerinc 196 30.03.23 10:51 Сейчас в теме
А в чем проблема? В момент ввода на основании, запросом читаем ингредиенты и добавляем в нужную табличную часть
3. oleg703 30.03.23 11:31 Сейчас в теме
(2) не знаю как вытащить ингредиенты для конкретной пиццы, то есть у каждой свой состав и если в табличной части товары, например, сырная пицца, мне нужны только её ингредиенты
4. parker_j 30.03.23 12:18 Сейчас в теме
(3) Обращайтесь к справочнику ТК по полю владелец(пицца), полученный результат грузить во вторую таблицу
5. oleg703 30.03.23 12:20 Сейчас в теме
(4)Можете примерно по этому коду подсказать?
Прикрепленные файлы:
6. parker_j 30.03.23 12:27 Сейчас в теме
(5) Условие добавьте.
Так как вы пока не "алё" сделайте в цикле хотя бы (так делать плохо). В цикле, то есть, запрос и обработка его результата добавить внутрь цикла сверху. Последними строками в процедуре будут КонецЦикла; КонецЕсли; КонецПроцедуры
Прикрепленные файлы:
7. oleg703 30.03.23 12:35 Сейчас в теме
(6)Вот так?
Прикрепленные файлы:
8. parker_j 30.03.23 12:37 Сейчас в теме
(7) Не совсем. Условие кривое
но вы же понимаете что запрос нужно обработать? То есть не хватает еще кода добавления ингридиентов во вторую таблицу?
9. parker_j 30.03.23 12:40 Сейчас в теме
(7)&Владелец оставьте. Но параметр значение - это ТекСтрокаЗаказ.Номенклатура
Прикрепленные файлы:
10. oleg703 30.03.23 12:50 Сейчас в теме
(9)А можете всю процедуру написать? Я вообще в этом новичок :(
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
// Заполнение шапки
Покупатель = ДанныеЗаполнения.ИмяКлиента;
Ответственный = ДанныеЗаполнения.Ответственный;
ДокументОснования = ДанныеЗаполнения.Ссылка;
СуммаДокумента = ДанныеЗаполнения.СуммаДокумента;
Для Каждого ТекСтрокаЗаказ Из ДанныеЗаполнения.Заказ Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.ЕдиницаПродажи = ТекСтрокаЗаказ.ЕдиницаПродажи;
НоваяСтрока.Количество = ТекСтрокаЗаказ.Количество;
НоваяСтрока.НДС = ТекСтрокаЗаказ.НДС;
НоваяСтрока.Номенклатура = ТекСтрокаЗаказ.Номенклатура;
НоваяСтрока.Сумма = ТекСтрокаЗаказ.Сумма;
НоваяСтрока.СуммаСНДС = ТекСтрокаЗаказ.СуммаСНДС;
НоваяСтрока.Цена = ТекСтрокаЗаказ.Цена;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТехнологическаяКарта.Номенклатура КАК Номенклатура,
| ТехнологическаяКарта.ЕдиницыИзмерения КАК ЕдиницыИзмерения,
| ТехнологическаяКарта.Склад КАК Склад,
| ТехнологическаяКарта.Расход КАК Расход,
| ТехнологическаяКарта.Владелец КАК Владелец
|ИЗ
| Справочник.ТехнологическаяКарта КАК ТехнологическаяКарта,
| Документ.РеализацияТоваров КАК РеализацияТоваров
|ГДЕ
| ТехнологическаяКарта.Владелец = ТехнологическаяКарта.Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
Для
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
11. parker_j 30.03.23 12:57 Сейчас в теме
(10)

|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТехнологическаяКарта.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл

//заполнение второй ТЧ

КонецЦикла;

КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
12. oleg703 30.03.23 13:11 Сейчас в теме
(11)Почти получилось...
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
// Заполнение шапки
Покупатель = ДанныеЗаполнения.ИмяКлиента;
Ответственный = ДанныеЗаполнения.Ответственный;
ДокументОснования = ДанныеЗаполнения.Ссылка;
СуммаДокумента = ДанныеЗаполнения.СуммаДокумента;
Для Каждого ТекСтрокаЗаказ Из ДанныеЗаполнения.Заказ Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.ЕдиницаПродажи = ТекСтрокаЗаказ.ЕдиницаПродажи;
НоваяСтрока.Количество = ТекСтрокаЗаказ.Количество;
НоваяСтрока.НДС = ТекСтрокаЗаказ.НДС;
НоваяСтрока.Номенклатура = ТекСтрокаЗаказ.Номенклатура;
НоваяСтрока.Сумма = ТекСтрокаЗаказ.Сумма;
НоваяСтрока.СуммаСНДС = ТекСтрокаЗаказ.СуммаСНДС;
НоваяСтрока.Цена = ТекСтрокаЗаказ.Цена;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТехнологическаяКарта.Номенклатура КАК Номенклатура,
| ТехнологическаяКарта.ЕдиницыИзмерения КАК ЕдиницыИзмерения,
| ТехнологическаяКарта.Склад КАК Склад,
| ТехнологическаяКарта.Расход КАК Расход,
| ТехнологическаяКарта.Владелец КАК Владелец
|ИЗ
| Справочник.ТехнологическаяКарта КАК ТехнологическаяКарта,
| Документ.РеализацияТоваров КАК РеализацияТоваров
|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТекСтрокаЗаказ.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока1 = Ингредиенты.Добавить();
НоваяСтрока1.Номенклатура = Выборка.Номенклатура;
НоваяСтрока1.ЕдиницыИзмерения = Выборка.ЕдиницыИзмерения;
НоваяСтрока1.Склад = Выборка.Склад;
НоваяСтрока1.Расход = Выборка.Расход;
НоваяСтрока1.Количество = ТекСтрокаЗаказ.Количество;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Прикрепленные файлы:
13. YozZzhik 30.03.23 14:10 Сейчас в теме
(11) Такими темпами они там пиццу из коробок есть будут)
15. oleg703 30.03.23 14:26 Сейчас в теме
(13)Коробки и салфетки отдельная тема)
14. YozZzhik 30.03.23 14:19 Сейчас в теме
Алгоритм следующий у вас должен быть:
1. Запросом вытаскиваете строки из табличной части заказа
2. К ней левым соединением присоединяете таблицу с расходами (Технологическая карта). В ней ставите условие на родителя, чтобы коробки не попали в расход нового документа
3. Ставите итог по номенклатуре
4. Обходите результат запроса по группировкам (Номенклатура и детальные записи), заполняя по группировке номенклатура - табличную часть Товары, а по группировке детальные записи - табличную часть Ингридиенты
5. Устанавливаете отбор строк, чтобы при кликании в таблице с пиццами на определенную пиццу в нижней таблице с расходами отображались данные по конкретной пицце.

А дальше гуглите как это сделать, скачайте консоль запросов и в ней постепенно смотрите какой результат получается при выборе той или иной таблицы, используйте временные таблицы

И не используйте запрос в цикле, лучше сразу учитесь сперва получать данные одним запросом, а потом обрабатывать их
16. oleg703 30.03.23 16:16 Сейчас в теме
Оставьте свое сообщение

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