Конвертация данных - Как свернуть несколько документов в один
Задача: выгружаются несколько документов по каким либо условиям, а при загрузки их нужно свернуть в один.
Пробую на пример Поступления товаров и услуг:
В ПВО - Перед обработкой написал запрос:
В ПКО всё оставил, как есть, только источника у свойств нету.
Документы выгружаются, но не сворачиваются.
Не сворачиваются, потому что нет группировки в запросе, но при таком формировании запроса это и нельзя сделать.
Как вобще поступают в таких случаях?
Через Исходящие данные или может нужно обходом выборки в ПВО вручную сформировать ТЗ с одной строкой, где будут реквизиты шапки и одна колонка ТЗ табчасти товары?
Долго самому изобретать велосипед, направьте в нужную сторону.
Пробую на пример Поступления товаров и услуг:
В ПВО - Перед обработкой написал запрос:
Сообщить("Перед выгрузкой");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка.ВалютаДокумента,
| ПоступлениеТоваровУслуг.Ссылка.ВидОперации,
| ПоступлениеТоваровУслуг.Ссылка.ДоговорКонтрагента,
| ПоступлениеТоваровУслуг.Ссылка.Контрагент,
| ПоступлениеТоваровУслуг.Ссылка.КратностьВзаиморасчетов КАК КратностьВзаиморасчетов,
| ПоступлениеТоваровУслуг.Ссылка.КурсВзаиморасчетов КАК КурсВзаиморасчетов,
| ПоступлениеТоваровУслуг.Ссылка.НДСВключенВСтоимость,
| ПоступлениеТоваровУслуг.Ссылка.Организация,
| ПоступлениеТоваровУслуг.Ссылка.Склад,
| ПоступлениеТоваровУслуг.Ссылка.СуммаВключаетНДС,
| ПоступлениеТоваровУслуг.Ссылка.СчетУчетаРасчетовПоАвансам,
| ПоступлениеТоваровУслуг.Ссылка.СчетУчетаРасчетовСКонтрагентом,
| ПоступлениеТоваровУслуг.Ссылка.ТипЦен,
| ПоступлениеТоваровУслуг.Ссылка.УчитыватьНДС,
| ПоступлениеТоваровУслуг.Ссылка.СпособЗачетаАвансов,
| ПоступлениеТоваровУслуг.Товары.(
| Номенклатура,
| СУММА(КоличествоМест),
| ЕдиницаИзмерения,
| СУММА(Коэффициент),
| СУММА(Количество),
| СУММА(Цена),
| СУММА(Сумма),
| СтавкаНДС,
| СУММА(СуммаНДС),
| НомерГТД,
| СтранаПроисхождения,
| СчетУчета,
| СчетУчетаНДС,
| ОтражениеВУСН,
| СУММА(ЦенаВРознице),
| СУММА(СуммаВРознице),
| СтавкаНДСВРознице
| )
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ПоступлениеТоваровУслуг.Ссылка.Контрагент = &Контрагент
|
|СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровУслуг.Товары.(Номенклатура,
| ЕдиницаИзмерения,
| СтавкаНДС,
| НомерГТД,
| СтранаПроисхождения,
| СчетУчета,
| СчетУчетаНДС,
| ОтражениеВУСН,
| СтавкаНДСВРознице)";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Запрос.УстановитьПараметр("Контрагент", Параметры.Контрагент);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ВыборкаДанных= Результат.Выгрузить();
ПоказатьВ ПКО всё оставил, как есть, только источника у свойств нету.
Документы выгружаются, но не сворачиваются.
Не сворачиваются, потому что нет группировки в запросе, но при таком формировании запроса это и нельзя сделать.
Как вобще поступают в таких случаях?
Через Исходящие данные или может нужно обходом выборки в ПВО вручную сформировать ТЗ с одной строкой, где будут реквизиты шапки и одна колонка ТЗ табчасти товары?
Долго самому изобретать велосипед, направьте в нужную сторону.
По теме из базы знаний
- Перенумерация документов и справочников с учетом префиксов (учет уникальности кодов) для обычных и управляемых форм
- Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3
- Пример переноса справочников, документов и движений через Эксель и "Конвертацию данных 2" из оптовой учетной системы 1С 7.7 Комплексной 4.2 и розничной учетной системы Рарус Торговый комплекс -> в 1С 8.3 ЕРП 2.4 (расширение и дополнительные реквизиты)
- Заполнение чека ККМ из Реализации или Заказа через штрихкод документа
- Поиск отчета по документам
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) FreeArcher, Тебе надо в ПВД этот запрос писать и поставить галку произвольный алгоритм. В ПК0 все получить из входящих данный
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ВходящиеДанные=Новый Структура();
//Заполняешь ВходящиеДанные
ВыгрузитьПоПравилу(,,ВходящиеДанные,,<Твое правило конвертации объекта>);
КонейЦикла;
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ВходящиеДанные=Новый Структура();
//Заполняешь ВходящиеДанные
ВыгрузитьПоПравилу(,,ВходящиеДанные,,<Твое правило конвертации объекта>);
КонейЦикла;
А можно поподробнее что где проставить чтоб работало? Переделал запрос как мне надо но что не работает...
Вставил в обработчик Конвертация_ПередВыгрузкойОбъекта, а дальше то как из ТЗ в приемник отправить данные?
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Ссылка.ВалютаДокумента,
| РеализацияТоваровУслугТовары.Ссылка.ВидОперации,
| РеализацияТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
| РеализацияТоваровУслугТовары.Ссылка.Контрагент,
| МАКСИМУМ(1) КАК КратностьВзаиморасчетов,
| МАКСИМУМ(1) КАК КурсВзаиморасчетов,
| РеализацияТоваровУслугТовары.Ссылка.Организация,
| РеализацияТоваровУслугТовары.Ссылка.Склад,
| РеализацияТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
| РеализацияТоваровУслугТовары.Ссылка.ТипЦен,
| РеализацияТоваровУслугТовары.Ссылка.УчитыватьНДС,
| РеализацияТоваровУслугТовары.Номенклатура,
| МАКСИМУМ(1) КАК КоличествоМест,
| РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
| МАКСИМУМ(1) КАК Коэффициент,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
| РеализацияТоваровУслугТовары.Цена,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
| РеализацияТоваровУслугТовары.СтавкаНДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслугТовары.Ссылка.Проведен
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.СтавкаНДС,
| РеализацияТоваровУслугТовары.Ссылка.Контрагент,
| РеализацияТоваровУслугТовары.Ссылка.ВидОперации,
| РеализацияТоваровУслугТовары.Ссылка.Организация,
| РеализацияТоваровУслугТовары.Ссылка.УчитыватьНДС,
| РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
| РеализацияТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
| РеализацияТоваровУслугТовары.Ссылка.Склад,
| РеализацияТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Ссылка.ТипЦен,
| РеализацияТоваровУслугТовары.Цена,
| РеализацияТоваровУслугТовары.Ссылка.ВалютаДокумента";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
ТЗ = Запрос.Выполнить().Выгрузить();
ТЗРез= ТЗ.СкопироватьКолонки();
ТЗРез.Колонки.Добавить("Товары");
НоваяСтрока= ТЗРез.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[0]);
НоваяСтрока.Товары= ТЗ;
ВыборкаДанных= ТЗРез;
ПоказатьВставил в обработчик Конвертация_ПередВыгрузкойОбъекта, а дальше то как из ТЗ в приемник отправить данные?
Ну сначала я считаю нужно загрузить данные в ТЗ, после этого свернуть по определенным полям (Метод Свернуть())
В данном случае по Контрагенту и его договору, складу и организации. После этого эту ТЗ можно использовать при формировании объединенных документов, а сделать это не сложно
В данном случае по Контрагенту и его договору, складу и организации. После этого эту ТЗ можно использовать при формировании объединенных документов, а сделать это не сложно
(3) ты объяснил что и ежу понятно, а вот как это использовать вопрос более интересный.
(2) возможно так и прокаркает, даже наверняка, но я иду своим путем, как описал. Мне кажется так проще.
Вот весь код Перед обработкой в ПВО:
В ПКО все, как обычно, т.е. так же как если бы выгружал документ в документ, только пустой источник.
Вот вариант, который работает.
Причем замете, нет лишних трат времени на создание Структур повторяя реквизиты документа.
(2) возможно так и прокаркает, даже наверняка, но я иду своим путем, как описал. Мне кажется так проще.
Вот весь код Перед обработкой в ПВО:
Сообщить("Перед выгрузкой");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Ссылка.ВалютаДокумента,
| ПоступлениеТоваровУслугТовары.Ссылка.ВидОперации,
| ПоступлениеТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
| ПоступлениеТоваровУслугТовары.Ссылка.Контрагент,
| МАКСИМУМ(1) КАК КратностьВзаиморасчетов,
| МАКСИМУМ(1) КАК КурсВзаиморасчетов,
| ПоступлениеТоваровУслугТовары.Ссылка.НДСВключенВСтоимость,
| ПоступлениеТоваровУслугТовары.Ссылка.Организация,
| ПоступлениеТоваровУслугТовары.Ссылка.Склад,
| ПоступлениеТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
| ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовПоАвансам,
| ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовСКонтрагентом,
| ПоступлениеТоваровУслугТовары.Ссылка.ТипЦен,
| ПоступлениеТоваровУслугТовары.Ссылка.УчитыватьНДС,
| ПоступлениеТоваровУслугТовары.Ссылка.СпособЗачетаАвансов,
| ПоступлениеТоваровУслугТовары.Номенклатура,
| МАКСИМУМ(1) КАК КоличествоМест,
| ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
| МАКСИМУМ(1) КАК Коэффициент,
| СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
| СРЕДНЕЕ(ПоступлениеТоваровУслугТовары.Цена) КАК Цена,
| СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма,
| ПоступлениеТоваровУслугТовары.СтавкаНДС,
| СУММА(ПоступлениеТоваровУслугТовары.СуммаНДС) КАК СуммаНДС,
| ПоступлениеТоваровУслугТовары.НомерГТД,
| ПоступлениеТоваровУслугТовары.СтранаПроисхождения,
| ПоступлениеТоваровУслугТовары.СчетУчета,
| ПоступлениеТоваровУслугТовары.СчетУчетаНДС
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент
|
|СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровУслугТовары.СтавкаНДС,
| ПоступлениеТоваровУслугТовары.Ссылка.Контрагент,
| ПоступлениеТоваровУслугТовары.Ссылка.ВидОперации,
| ПоступлениеТоваровУслугТовары.Ссылка.Организация,
| ПоступлениеТоваровУслугТовары.Ссылка.СпособЗачетаАвансов,
| ПоступлениеТоваровУслугТовары.Ссылка.УчитыватьНДС,
| ПоступлениеТоваровУслугТовары.НомерГТД,
| ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
| ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовСКонтрагентом,
| ПоступлениеТоваровУслугТовары.СтранаПроисхождения,
| ПоступлениеТоваровУслугТовары.СчетУчета,
| ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовПоАвансам,
| ПоступлениеТоваровУслугТовары.Ссылка.НДСВключенВСтоимость,
| ПоступлениеТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
| ПоступлениеТоваровУслугТовары.Ссылка.Склад,
| ПоступлениеТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.Ссылка.ТипЦен,
| ПоступлениеТоваровУслугТовары.Ссылка.ВалютаДокумента,
| ПоступлениеТоваровУслугТовары.СчетУчетаНДС";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Запрос.УстановитьПараметр("Контрагент", Параметры.Контрагент);
ТЗ = Запрос.Выполнить().Выгрузить();
ТЗРез= ТЗ.СкопироватьКолонки();
ТЗРез.Колонки.Добавить("Товары");
НоваяСтрока= ТЗРез.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[0]);//Так мы создали шапку документа
НоваяСтрока.Товары= ТЗ;//А так создали табличную чать
//лишние колонки в ПКО просто проигнорировались
ВыборкаДанных= ТЗРез;
ПоказатьВ ПКО все, как обычно, т.е. так же как если бы выгружал документ в документ, только пустой источник.
Вот вариант, который работает.
Причем замете, нет лишних трат времени на создание Структур повторяя реквизиты документа.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот