Автоматическое заполнение второй табличной части документа с данными из справочника.
Помогите, как автоматически заполнить табличную часть. Есть документ реализация товара и справочник Технологическая Карта. В реализации товара две табличные части, первая заполняется на основании документа заказ клиента. Мне нужно заполнить вторую табличную часть ингредиентами для пиццы, взяв их из справочника. Ингредиенты заполняются для каждой пиццы из табличной части товары.
Прикрепленные файлы:
По теме из базы знаний
- Всякие полезности
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Расширенная установка цен номенклатуры по документу Поступление товаров и услуг и подбору
- РеСольДо - редактор строк документов
- Конвертация данных 3.0: приемы работы. Обзор. Часть 2
Найденные решения
(10)
|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТехнологическаяКарта.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
//заполнение второй ТЧ
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТехнологическаяКарта.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
//заполнение второй ТЧ
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Алгоритм следующий у вас должен быть:
1. Запросом вытаскиваете строки из табличной части заказа
2. К ней левым соединением присоединяете таблицу с расходами (Технологическая карта). В ней ставите условие на родителя, чтобы коробки не попали в расход нового документа
3. Ставите итог по номенклатуре
4. Обходите результат запроса по группировкам (Номенклатура и детальные записи), заполняя по группировке номенклатура - табличную часть Товары, а по группировке детальные записи - табличную часть Ингридиенты
5. Устанавливаете отбор строк, чтобы при кликании в таблице с пиццами на определенную пиццу в нижней таблице с расходами отображались данные по конкретной пицце.
А дальше гуглите как это сделать, скачайте консоль запросов и в ней постепенно смотрите какой результат получается при выборе той или иной таблицы, используйте временные таблицы
И не используйте запрос в цикле, лучше сразу учитесь сперва получать данные одним запросом, а потом обрабатывать их
1. Запросом вытаскиваете строки из табличной части заказа
2. К ней левым соединением присоединяете таблицу с расходами (Технологическая карта). В ней ставите условие на родителя, чтобы коробки не попали в расход нового документа
3. Ставите итог по номенклатуре
4. Обходите результат запроса по группировкам (Номенклатура и детальные записи), заполняя по группировке номенклатура - табличную часть Товары, а по группировке детальные записи - табличную часть Ингридиенты
5. Устанавливаете отбор строк, чтобы при кликании в таблице с пиццами на определенную пиццу в нижней таблице с расходами отображались данные по конкретной пицце.
А дальше гуглите как это сделать, скачайте консоль запросов и в ней постепенно смотрите какой результат получается при выборе той или иной таблицы, используйте временные таблицы
И не используйте запрос в цикле, лучше сразу учитесь сперва получать данные одним запросом, а потом обрабатывать их
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) Условие добавьте.
Так как вы пока не "алё" сделайте в цикле хотя бы (так делать плохо). В цикле, то есть, запрос и обработка его результата добавить внутрь цикла сверху. Последними строками в процедуре будут КонецЦикла; КонецЕсли; КонецПроцедуры
Так как вы пока не "алё" сделайте в цикле хотя бы (так делать плохо). В цикле, то есть, запрос и обработка его результата добавить внутрь цикла сверху. Последними строками в процедуре будут КонецЦикла; КонецЕсли; КонецПроцедуры
Прикрепленные файлы:
(9)А можете всю процедуру написать? Я вообще в этом новичок :(
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
// Заполнение шапки
Покупатель = ДанныеЗаполнения.ИмяКлиента;
Ответственный = ДанныеЗаполнения.Ответственный;
ДокументОснования = ДанныеЗаполнения.Ссылка;
СуммаДокумента = ДанныеЗаполнения.СуммаДокумента;
Для Каждого ТекСтрокаЗаказ Из ДанныеЗаполнения.Заказ Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.ЕдиницаПродажи = ТекСтрокаЗаказ.ЕдиницаПродажи;
НоваяСтрока.Количество = ТекСтрокаЗаказ.Количество;
НоваяСтрока.НДС = ТекСтрокаЗаказ.НДС;
НоваяСтрока.Номенклатура = ТекСтрокаЗаказ.Номенклатура;
НоваяСтрока.Сумма = ТекСтрокаЗаказ.Сумма;
НоваяСтрока.СуммаСНДС = ТекСтрокаЗаказ.СуммаСНДС;
НоваяСтрока.Цена = ТекСтрокаЗаказ.Цена;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТехнологическаяКарта.Номенклатура КАК Номенклатура,
| ТехнологическаяКарта.ЕдиницыИзмерения КАК ЕдиницыИзмерения,
| ТехнологическаяКарта.Склад КАК Склад,
| ТехнологическаяКарта.Расход КАК Расход,
| ТехнологическаяКарта.Владелец КАК Владелец
|ИЗ
| Справочник.ТехнологическаяКарта КАК ТехнологическаяКарта,
| Документ.РеализацияТоваров КАК РеализацияТоваров
|ГДЕ
| ТехнологическаяКарта.Владелец = ТехнологическаяКарта.Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
Для
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
// Заполнение шапки
Покупатель = ДанныеЗаполнения.ИмяКлиента;
Ответственный = ДанныеЗаполнения.Ответственный;
ДокументОснования = ДанныеЗаполнения.Ссылка;
СуммаДокумента = ДанныеЗаполнения.СуммаДокумента;
Для Каждого ТекСтрокаЗаказ Из ДанныеЗаполнения.Заказ Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.ЕдиницаПродажи = ТекСтрокаЗаказ.ЕдиницаПродажи;
НоваяСтрока.Количество = ТекСтрокаЗаказ.Количество;
НоваяСтрока.НДС = ТекСтрокаЗаказ.НДС;
НоваяСтрока.Номенклатура = ТекСтрокаЗаказ.Номенклатура;
НоваяСтрока.Сумма = ТекСтрокаЗаказ.Сумма;
НоваяСтрока.СуммаСНДС = ТекСтрокаЗаказ.СуммаСНДС;
НоваяСтрока.Цена = ТекСтрокаЗаказ.Цена;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТехнологическаяКарта.Номенклатура КАК Номенклатура,
| ТехнологическаяКарта.ЕдиницыИзмерения КАК ЕдиницыИзмерения,
| ТехнологическаяКарта.Склад КАК Склад,
| ТехнологическаяКарта.Расход КАК Расход,
| ТехнологическаяКарта.Владелец КАК Владелец
|ИЗ
| Справочник.ТехнологическаяКарта КАК ТехнологическаяКарта,
| Документ.РеализацияТоваров КАК РеализацияТоваров
|ГДЕ
| ТехнологическаяКарта.Владелец = ТехнологическаяКарта.Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
Для
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
(10)
|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТехнологическаяКарта.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
//заполнение второй ТЧ
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТехнологическаяКарта.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
//заполнение второй ТЧ
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
(11)Почти получилось...
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
// Заполнение шапки
Покупатель = ДанныеЗаполнения.ИмяКлиента;
Ответственный = ДанныеЗаполнения.Ответственный;
ДокументОснования = ДанныеЗаполнения.Ссылка;
СуммаДокумента = ДанныеЗаполнения.СуммаДокумента;
Для Каждого ТекСтрокаЗаказ Из ДанныеЗаполнения.Заказ Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.ЕдиницаПродажи = ТекСтрокаЗаказ.ЕдиницаПродажи;
НоваяСтрока.Количество = ТекСтрокаЗаказ.Количество;
НоваяСтрока.НДС = ТекСтрокаЗаказ.НДС;
НоваяСтрока.Номенклатура = ТекСтрокаЗаказ.Номенклатура;
НоваяСтрока.Сумма = ТекСтрокаЗаказ.Сумма;
НоваяСтрока.СуммаСНДС = ТекСтрокаЗаказ.СуммаСНДС;
НоваяСтрока.Цена = ТекСтрокаЗаказ.Цена;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТехнологическаяКарта.Номенклатура КАК Номенклатура,
| ТехнологическаяКарта.ЕдиницыИзмерения КАК ЕдиницыИзмерения,
| ТехнологическаяКарта.Склад КАК Склад,
| ТехнологическаяКарта.Расход КАК Расход,
| ТехнологическаяКарта.Владелец КАК Владелец
|ИЗ
| Справочник.ТехнологическаяКарта КАК ТехнологическаяКарта,
| Документ.РеализацияТоваров КАК РеализацияТоваров
|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТекСтрокаЗаказ.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока1 = Ингредиенты.Добавить();
НоваяСтрока1.Номенклатура = Выборка.Номенклатура;
НоваяСтрока1.ЕдиницыИзмерения = Выборка.ЕдиницыИзмерения;
НоваяСтрока1.Склад = Выборка.Склад;
НоваяСтрока1.Расход = Выборка.Расход;
НоваяСтрока1.Количество = ТекСтрокаЗаказ.Количество;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
// Заполнение шапки
Покупатель = ДанныеЗаполнения.ИмяКлиента;
Ответственный = ДанныеЗаполнения.Ответственный;
ДокументОснования = ДанныеЗаполнения.Ссылка;
СуммаДокумента = ДанныеЗаполнения.СуммаДокумента;
Для Каждого ТекСтрокаЗаказ Из ДанныеЗаполнения.Заказ Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.ЕдиницаПродажи = ТекСтрокаЗаказ.ЕдиницаПродажи;
НоваяСтрока.Количество = ТекСтрокаЗаказ.Количество;
НоваяСтрока.НДС = ТекСтрокаЗаказ.НДС;
НоваяСтрока.Номенклатура = ТекСтрокаЗаказ.Номенклатура;
НоваяСтрока.Сумма = ТекСтрокаЗаказ.Сумма;
НоваяСтрока.СуммаСНДС = ТекСтрокаЗаказ.СуммаСНДС;
НоваяСтрока.Цена = ТекСтрокаЗаказ.Цена;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТехнологическаяКарта.Номенклатура КАК Номенклатура,
| ТехнологическаяКарта.ЕдиницыИзмерения КАК ЕдиницыИзмерения,
| ТехнологическаяКарта.Склад КАК Склад,
| ТехнологическаяКарта.Расход КАК Расход,
| ТехнологическаяКарта.Владелец КАК Владелец
|ИЗ
| Справочник.ТехнологическаяКарта КАК ТехнологическаяКарта,
| Документ.РеализацияТоваров КАК РеализацияТоваров
|ГДЕ
| ТехнологическаяКарта.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",ТекСтрокаЗаказ.Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока1 = Ингредиенты.Добавить();
НоваяСтрока1.Номенклатура = Выборка.Номенклатура;
НоваяСтрока1.ЕдиницыИзмерения = Выборка.ЕдиницыИзмерения;
НоваяСтрока1.Склад = Выборка.Склад;
НоваяСтрока1.Расход = Выборка.Расход;
НоваяСтрока1.Количество = ТекСтрокаЗаказ.Количество;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Прикрепленные файлы:
Алгоритм следующий у вас должен быть:
1. Запросом вытаскиваете строки из табличной части заказа
2. К ней левым соединением присоединяете таблицу с расходами (Технологическая карта). В ней ставите условие на родителя, чтобы коробки не попали в расход нового документа
3. Ставите итог по номенклатуре
4. Обходите результат запроса по группировкам (Номенклатура и детальные записи), заполняя по группировке номенклатура - табличную часть Товары, а по группировке детальные записи - табличную часть Ингридиенты
5. Устанавливаете отбор строк, чтобы при кликании в таблице с пиццами на определенную пиццу в нижней таблице с расходами отображались данные по конкретной пицце.
А дальше гуглите как это сделать, скачайте консоль запросов и в ней постепенно смотрите какой результат получается при выборе той или иной таблицы, используйте временные таблицы
И не используйте запрос в цикле, лучше сразу учитесь сперва получать данные одним запросом, а потом обрабатывать их
1. Запросом вытаскиваете строки из табличной части заказа
2. К ней левым соединением присоединяете таблицу с расходами (Технологическая карта). В ней ставите условие на родителя, чтобы коробки не попали в расход нового документа
3. Ставите итог по номенклатуре
4. Обходите результат запроса по группировкам (Номенклатура и детальные записи), заполняя по группировке номенклатура - табличную часть Товары, а по группировке детальные записи - табличную часть Ингридиенты
5. Устанавливаете отбор строк, чтобы при кликании в таблице с пиццами на определенную пиццу в нижней таблице с расходами отображались данные по конкретной пицце.
А дальше гуглите как это сделать, скачайте консоль запросов и в ней постепенно смотрите какой результат получается при выборе той или иной таблицы, используйте временные таблицы
И не используйте запрос в цикле, лучше сразу учитесь сперва получать данные одним запросом, а потом обрабатывать их
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот