Помогите разобраться с КД, при выгрузке из 1 ТЧ в 2 ТЧ
Здравствуйте.
Пробую сделать правила обмена, между БП.
В базе Источник есть документ "Отчет комитента", в котором есть одна общая табличная часть, в ней список товаров, которые продали, но разными отчетами о розничных продажах, т.е. разные даты. 18.05 продали два товара, и 21.05 продали один товар.
А в базе приемник документ "Отчет комиссионера", но в нем 2 табличные части.
в верхней ТЧ идет список этих дат, а в нижней ТЧ проданные товары, относящиеся к этой дате.
Я в правилах конвертации Объекта указал, что нужно преобразовать "ОтчетКомитентуОПродажах" в "ОтчетКомиссионераОпродажах", создал ПКГС "Товары", они заполняются ВСЕМИ товарами
так же создал вторую ПКГС "Покупатели", пока пробую просто хоть что то в ней заполнить.
Для этого сформировал запрос, где пока что выбрал просто дату.
в результате, естественно, загружается 2 строки с нужными датами, а в нижней табличной части загружается общий список товаров.
А как сделать, так чтобы загрузился не общий список товаров, а только относящийся к нужной дате, я не знаю.
Дело в том, что нижняя табличная часть она одна, но в ней появляются разные данные, когда щелкаешь по строкам верхней ТЧ, они как то связаны между собой.
А еще в верхней ТЧ есть поля "Всего" и "НДС", их нет в реквизитах, это я так понимаю реквизиты формы, их как то можно заполнить?
прошу подсказать, последовательность, где написать запрос, может я не там его пишу, в ПВД, или в ПКГС.
может кто сталкивался с подобной задачей? я не нашел похожих примеров.
заранее спасибо.
Пробую сделать правила обмена, между БП.
В базе Источник есть документ "Отчет комитента", в котором есть одна общая табличная часть, в ней список товаров, которые продали, но разными отчетами о розничных продажах, т.е. разные даты. 18.05 продали два товара, и 21.05 продали один товар.
А в базе приемник документ "Отчет комиссионера", но в нем 2 табличные части.
в верхней ТЧ идет список этих дат, а в нижней ТЧ проданные товары, относящиеся к этой дате.
Я в правилах конвертации Объекта указал, что нужно преобразовать "ОтчетКомитентуОПродажах" в "ОтчетКомиссионераОпродажах", создал ПКГС "Товары", они заполняются ВСЕМИ товарами
так же создал вторую ПКГС "Покупатели", пока пробую просто хоть что то в ней заполнить.
Для этого сформировал запрос, где пока что выбрал просто дату.
в результате, естественно, загружается 2 строки с нужными датами, а в нижней табличной части загружается общий список товаров.
А как сделать, так чтобы загрузился не общий список товаров, а только относящийся к нужной дате, я не знаю.
Дело в том, что нижняя табличная часть она одна, но в ней появляются разные данные, когда щелкаешь по строкам верхней ТЧ, они как то связаны между собой.
А еще в верхней ТЧ есть поля "Всего" и "НДС", их нет в реквизитах, это я так понимаю реквизиты формы, их как то можно заполнить?
прошу подсказать, последовательность, где написать запрос, может я не там его пишу, в ПВД, или в ПКГС.
может кто сталкивался с подобной задачей? я не нашел похожих примеров.
заранее спасибо.
Прикрепленные файлы:





По теме из базы знаний
- Инфостарт. Восьмерка. Лучшее
- Молчание "best practices": тестовые и эталонные данные, структура и связность, падения и новая функциональность, и другие неудобные вопросы к сценарному тестированию
- А вот и Шина подъехала! Часть 3. Итоги
- Интеграция 1С и Sentry для мониторинга ошибок и расчета Apdex
- Анализ отчета о сравнении
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Я понял что есть у обоих ТЧ реквизит КлючСтроки, и его тоже можно при выгрузке заполнить, мне в целом не понятно в каком месте и в каком обработчике получать запросом данные и заполнить их в две ТЧ.
может это не в ПКГС делается, т.к. тут я могу писать код в обработчиках Конкретной ТЧ, а если у меня результат для двоих ТЧ, то может это ПВД?
может это не в ПКГС делается, т.к. тут я могу писать код в обработчиках Конкретной ТЧ, а если у меня результат для двоих ТЧ, то может это ПВД?
Если после загрузки я для верхней ТЧ задам КлючСтроки 0, и для нижней ТЧ задам для всех строк КлючСтроки 0, то они и будут относиться к верхней строке, не понятно, в каком месте это нужно получить запросом и как это заполнить
(6) Заполнять нужно в обработчике ПКО ПередВыгрузкой. Вот для примера код
В самом ПКО для таб частей ставите получение из входящих данных.
p.s. пример старый и не очень оптимальный, но сама идея там понятна.
ТЗ = Источник.Товары;
ТЗТовары = Новый ТаблицаЗначений;
ТЗТовары.Колонки.Добавить("КлючСтроки");
ТЗТовары.Колонки.Добавить("Номенклатура");
ТЗТовары.Колонки.Добавить("Единица");
ТЗТовары.Колонки.Добавить("Количество");
ТЗТовары.Колонки.Добавить("Сумма");
ТЗТовары.Колонки.Добавить("СуммаНДС");
ТЗПокупатели = Новый ТаблицаЗначений;
ТЗПокупатели.Колонки.Добавить("Ссылка");
ТЗПокупатели.Колонки.Добавить("КлючСтрокиПокупатели");
ТЗПокупатели.Колонки.Добавить("ВыставленСФ");
ТЗПокупатели.Колонки.Добавить("ДатаСФ");
ТЗПокупатели.Колонки.Добавить("Контрагент");
ТЗПокупатели.Колонки.Добавить("НомерСФвУправленке");
НомерСтрокиТЗПокупатели = 0;
Для Каждого ТекСтрока Из ТЗ Цикл
//Сообщить( "Обрабатываем строку результата запроса № " + ТЗ.Индекс(ТекСтрока) );
// ищем в ТЗПокупатели строку с документом, если есть то получаем КлючСтрокиПокупателя и пишем его в ТЗТовары, если нет то создаем строку в ТЗПокупатели
СтрокаТЗПокупатели = ТЗПокупатели.Найти(ТекСтрока.Ссылка, "Ссылка");
Если СтрокаТЗПокупатели = Неопределено Тогда
// добавляем строку в ТЗПокупатели
НомерСтрокиТЗПокупатели = НомерСтрокиТЗПокупатели + 1; // КлючСтроки
//Сообщить("Новая строка ТЗПокупатели: №" + НомерСтрокиТЗПокупатели + " для " + ТекСтрока.Ссылка);
НоваяСтрокаТЗПокупатели = ТЗПокупатели.Добавить();
НоваяСтрокаТЗПокупатели.Ссылка = ТекСтрока.Ссылка;
//Проба найти номер СФ
Построитель = ПолучитьПостроитель("ДокументСсылка.СчетФактураВыданный");
НайтиДобавитьЭлементОтбора(Построитель, "Ссылка.ОбъектОснование", , , , ТекСтрока.Ссылка);
НайтиДобавитьЭлементОтбора(Построитель, "Ссылка.ПометкаУдаления", , , , ЛОЖЬ);
НайтиДобавитьЭлементОтбора(Построитель, "Ссылка.Проведен", , , , Истина);
СчетФактура = ПолучитьОбъектИлиКоллекцию(Построитель);
Если СчетФактура = Неопределено ИЛИ СчетФактура.Пустая() Тогда
НомерСчетФактуры = "";
Иначе
НомерСчетФактуры = Прав(СчетФактура.Номер, 12);
КонецЕсли;
НоваяСтрокаТЗПокупатели.НомерСФВУправленке = НомерСчетФактуры;
НоваяСтрокаТЗПокупатели.КлючСтрокиПокупатели = НомерСтрокиТЗПокупатели;
НоваяСтрокаТЗПокупатели.ВыставленСФ = Ложь;
НоваяСтрокаТЗПокупатели.ДатаСФ = ТекСтрока.Ссылка.Дата;
НоваяСтрокаТЗПокупатели.Контрагент = ТекСтрока.Контрагент;
КлючСтроки = НомерСтрокиТЗПокупатели;
Иначе
//Сообщить("Найдена строка ТЗПокупатели: №" + КлючСтроки + " для " + ТекСтрока.Ссылка);
КлючСтроки = СтрокаТЗПокупатели.КлючСтрокиПокупатели;
КонецЕсли;
НоваяСтрокаТЗТовары = ТЗТовары.Добавить();
НоваяСтрокаТЗТовары.КлючСтроки = КлючСтроки;
НоваяСтрокаТЗТовары.Номенклатура = ТекСтрока.Номенклатура;
НоваяСтрокаТЗТовары.Единица = ТекСтрока.ЕдиницаПоКлассификатору;
НоваяСтрокаТЗТовары.Количество = ТекСтрока.КоличествоУЧ;
НоваяСтрокаТЗТовары.Сумма = ТекСтрока.СуммаУЧ;
НоваяСтрокаТЗТовары.СуммаНДС = ТекСтрока.СуммаНДС;
//Сообщить("ТЗТовары -> Номенклатура: " + ТекСтрока.Номенклатура + " Ссылка: " + ТекСтрока.Ссылка);
КонецЦикла;
ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить("Номер",НомерДок);
ВходящиеДанные.Вставить("Товары", ТЗТовары);
ПоказатьВ самом ПКО для таб частей ставите получение из входящих данных.
p.s. пример старый и не очень оптимальный, но сама идея там понятна.
Решил делать через ПВД, потихоньку по очереди заполняя все реквизиты.
Запросом получаю различные результаты и затем заполняю.
Первый запрос - данные для самого документа, пока это (Дата, ВидОперации, СуммаДокумента) - все хорошо
Второй запрос - данные для верхней ТЧ, сгруппированные по датам и имеющие КлючСтроки - тоже все хорошо
Третий запрос - получаю данные для нижней ТЧ, по товарам, но почему то выходит ошибка.
//второй запрос для заполнения верхней ТЧ
|//////////////////////////////////////////////////////////// ////////////////////
на скринах виден результат запросов в консоли. Последний результат, там всего 5 строк.
подскажите пжст. очень застрял тут
Запросом получаю различные результаты и затем заполняю.
Первый запрос - данные для самого документа, пока это (Дата, ВидОперации, СуммаДокумента) - все хорошо
Второй запрос - данные для верхней ТЧ, сгруппированные по датам и имеющие КлючСтроки - тоже все хорошо
Третий запрос - получаю данные для нижней ТЧ, по товарам, но почему то выходит ошибка.
//добавление загружаемых реквизитов
ВыборкаДанных = Новый ТаблицаЗначений();
ВыборкаДанных.Колонки.Добавить("Ссылка");
ВыборкаДанных.Колонки.Добавить("Дата");
ВыборкаДанных.Колонки.Добавить("ВидОперации");
ВыборкаДанных.Колонки.Добавить("ПометкаУдаления");
ВыборкаДанных.Колонки.Добавить("ВалютаДокумента");
ВыборкаДанных.Колонки.Добавить("Контрагент");
ВыборкаДанных.Колонки.Добавить("Организация");
ВыборкаДанных.Колонки.Добавить("КратностьВзаиморасчетов");
ВыборкаДанных.Колонки.Добавить("КурсВзаиморасчетов");
ВыборкаДанных.Колонки.Добавить("СуммаДокумента");
ВыборкаДанных.Колонки.Добавить("СчетУчетаРасчетовСКонтрагентом");
ВыборкаДанных.Колонки.Добавить("СчетУчетаРасчетовЗаПосредническиеУслуги");
ВыборкаДанных.Колонки.Добавить("СчетУчетаРасчетовПоАвансамВыданным");
ВыборкаДанных.Колонки.Добавить("СчетУчетаРасчетовПоАвансамПолученным");
ВыборкаДанных.Колонки.Добавить("СчетУчетаНДС");
ВыборкаДанных.Колонки.Добавить("СпособЗачетаАвансов");
ВыборкаДанных.Колонки.Добавить("СчетУчетаЗатрат");
ВыборкаДанных.Колонки.Добавить("СпособРасчетаКомиссионногоВознаграждения");
ВыборкаДанных.Колонки.Добавить("ДатаВходящегоДокумента");
ВыборкаДанных.Колонки.Добавить("НомерВходящегоДокумента");
ВыборкаДанных.Колонки.Добавить("Покупатели"); //добавляем верхнюю ТЧ
ВыборкаДанных.Колонки.Добавить("Товары"); // Добавляем нижнюю ТЧ
Запрос = Новый Запрос;
Запрос.Текст =
//данные самого документа
"ВЫБРАТЬ
| ОтчетКомитентуОПродажахТовары.Ссылка КАК Ссылка,
| ОтчетКомитентуОПродажахТовары.Ссылка.Дата КАК Дата,
| ОтчетКомитентуОПродажахТовары.Ссылка.ВидОперации КАК ВидОперации,
| ОтчетКомитентуОПродажахТовары.Ссылка.СуммаДокумента КАК СуммаДокумента
|ИЗ
| Документ.ОтчетКомитентуОПродажах.Товары КАК ОтчетКомитентуОПродажахТовары
|;
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ОтчетКомитентуОПродажахТовары.Ссылка.Организация КАК Организация,
| ОтчетКомитентуОПродажахТовары.ДатаРеализации КАК ДатаРеализации,
| АВТОНОМЕРЗАПИСИ() КАК Номер
|ПОМЕСТИТЬ втСгруппированныеДаты
|ИЗ
| Документ.ОтчетКомитентуОПродажах.Товары КАК ОтчетКомитентуОПродажахТовары
|СГРУППИРОВАТЬ ПО
| ОтчетКомитентуОПродажахТовары.ДатаРеализации,
| ОтчетКомитентуОПродажахТовары.Ссылка.Организация
|;
Показать//второй запрос для заполнения верхней ТЧ
|////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втСгруппированныеДаты.Организация КАК Покупатель,
| втСгруппированныеДаты.ДатаРеализации КАК ДатаСф,
| втСгруппированныеДаты.Номер - 1 КАК КлючСтроки,
| ОтчетКомитентуОПродажахТовары.Номенклатура КАК Номенклатура,
| ОтчетКомитентуОПродажахТовары.Количество КАК Количество,
| ОтчетКомитентуОПродажахТовары.Сумма КАК Сумма,
| ОтчетКомитентуОПродажахТовары.ДатаРеализации КАК ДатаРеализации
|ИЗ
| Документ.ОтчетКомитентуОПродажах.Товары КАК ОтчетКомитентуОПродажахТовары
| ЛЕВОЕ СОЕДИНЕНИЕ втСгруппированныеДаты КАК втСгруппированныеДаты
| ПО ОтчетКомитентуОПродажахТовары.ДатаРеализации = втСгруппированныеДаты.ДатаРеализации
|УПОРЯДОЧИТЬ ПО
| ДатаРеализации
|ИТОГИ
| МИНИМУМ(Покупатель),
| МИНИМУМ(КлючСтроки)
|ПО
| ДатаРеализации
|;
//третий запрос для заполнения нижней ТЧ
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| втСгруппированныеДаты.Организация КАК Покупатель,
| втСгруппированныеДаты.ДатаРеализации КАК ДатаСф,
| втСгруппированныеДаты.Номер - 1 КАК КлючСтроки,
| ОтчетКомитентуОПродажахТовары.Номенклатура КАК Номенклатура,
| ОтчетКомитентуОПродажахТовары.Количество КАК Количество,
| ОтчетКомитентуОПродажахТовары.Сумма КАК Сумма,
| ОтчетКомитентуОПродажахТовары.ДатаРеализации КАК ДатаРеализации
|ИЗ
| Документ.ОтчетКомитентуОПродажах.Товары КАК ОтчетКомитентуОПродажахТовары
| ЛЕВОЕ СОЕДИНЕНИЕ втСгруппированныеДаты КАК втСгруппированныеДаты
| ПО (ОтчетКомитентуОПродажахТовары.ДатаРеализации = втСгруппированныеДаты.ДатаРеализации)
|УПОРЯДОЧИТЬ ПО
| ДатаРеализации";
РезультатыЗапросов = Запрос.ВыполнитьПакет();
РезультатДокументы = РезультатыЗапросов[0];
ВыборкаДокументы = РезультатДокументы.Выбрать();
Пока ВыборкаДокументы.Следующий() Цикл
СтрокаДокумент = ВыборкаДанных.Добавить();
СтрокаДокумент.Дата = ВыборкаДокументы.Дата;
СтрокаДокумент.Ссылка = ВыборкаДокументы.Ссылка;
СтрокаДокумент.СуммаДокумента = ВыборкаДокументы.СуммаДокумента;
СтрокаДокумент.ВидОперации = ВыборкаДокументы.ВидОперации;
//Верхняя ТЧ
СтрокаДокумент.Покупатели = Новый ТаблицаЗначений;
СтрокаДокумент.Покупатели.Колонки.Добавить("Покупатель");
СтрокаДокумент.Покупатели.Колонки.Добавить("ДатаСф");
СтрокаДокумент.Покупатели.Колонки.Добавить("КлючСтроки");
РезультатРеализация = РезультатыЗапросов[2];
ВыборкаРеализация = РезультатРеализация.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаРеализация.Следующий() Цикл
СтрокаРеализация = СтрокаДокумент.Покупатели.Добавить();
СтрокаРеализация.Покупатель = ВыборкаРеализация.Покупатель;
СтрокаРеализация.ДатаСф = ВыборкаРеализация.ДатаРеализации;
СтрокаРеализация.КлючСтроки = ВыборкаРеализация.КлючСтроки;
КонецЦикла;
//Нижняя ТЧ
СтрокаДокумент.Товары = Новый ТаблицаЗначений;
СтрокаДокумент.Товары.Колонки.Добавить("Номенклатура");
СтрокаДокумент.Товары.Колонки.Добавить("КлючСтроки");
РезультатТовар = РезультатыЗапросов[3];
ВыборкаТовары = РезультатТовар.Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
Сообщить(ВыборкаТовары.Номенклатура);
// СтрокаТовар = СтрокаДокумент.Товары.Добавить();
// СтрокаТовар.Номенклатура = ВыборкаТовары.Номенклатура;
// СтрокаТовар.КлючСтроки = ВыборкаТовары.КлючСтроки;
КонецЦикла;
КонецЦикла;
Показатьна скринах виден результат запросов в консоли. Последний результат, там всего 5 строк.
подскажите пжст. очень застрял тут
Прикрепленные файлы:



Изначально я попробовал делать обходи результата по итоговым записям (их 3, т.к. 3 даты) и заполнял верхнюю ТЧ, а внутри цикла делал выборку по детальным записям и уже заполнял нижнюю ТЧ (по товарам), в результате ошибок не было, но заполнились в верхней ТЧ 3 строки, а в нижней ТЧ заполнился один товар, относящийся к последней строке верхней табличной части.
такое ощущение, что на каждой итерации по итоговой записи таблица затирается и создается новая, хотя ТЧ то одна. т.е. данное решение тоже не верно
такое ощущение, что на каждой итерации по итоговой записи таблица затирается и создается новая, хотя ТЧ то одна. т.е. данное решение тоже не верно
//Верхняя ТЧ
СтрокаДокумент.Покупатели = Новый ТаблицаЗначений;
СтрокаДокумент.Покупатели.Колонки.Добавить("Покупатель");
СтрокаДокумент.Покупатели.Колонки.Добавить("ДатаСф");
СтрокаДокумент.Покупатели.Колонки.Добавить("КлючСтроки");
РезультатРеализация = РезультатыЗапросов[2];
ВыборкаРеализация = РезультатРеализация.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаРеализация.Следующий() Цикл
СтрокаРеализация = СтрокаДокумент.Покупатели.Добавить();
СтрокаРеализация.Покупатель = ВыборкаРеализация.Покупатель;
СтрокаРеализация.ДатаСф = ВыборкаРеализация.ДатаРеализации;
СтрокаРеализация.КлючСтроки = ВыборкаРеализация.КлючСтроки;
//Нижняя ТЧ
СтрокаДокумент.Товары = Новый ТаблицаЗначений;
СтрокаДокумент.Товары.Колонки.Добавить("Номенклатура");
СтрокаДокумент.Товары.Колонки.Добавить("КлючСтроки");
ВыборкаТовары = ВыборкаРеализация.Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
СтрокаТовар = СтрокаДокумент.Товары.Добавить();
СтрокаТовар.Номенклатура = ВыборкаТовары.Номенклатура;
СтрокаТовар.КлючСтроки = ВыборкаТовары.КлючСтроки;
КонецЦикла;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот