Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Объединение двух ТЗ с похожей структурой и вывод в табличный документ с группировкой строк
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
sanytch
Доброго времени суток форумчане. Имею 2(две) ТаблицыЗначений, полученых из запросов: Таб с одной колонкой Наименование и Таб2 с колонками Наименование, Дата, Сумма. В Таб полный перечень Наименований, а в Таб2 только те Наименования, у которых есть Дата и Сумма, причем для одного Наименования может быть несколько строчек Дата и Сумма, а может и вообще не быть. Нужно сформировать Таблицу из полного перечня Наименований и к ней присоединить записи из Дата и Сумма. Для наглядности рисунок:

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

заполнить её, НО всё хорошо когда Дата и Сумма для Наименования одна запись(на картинке Наименование В и Е), а вот если их 2 и более (Наименования А и Г), то в результирующую таблицу попадает только последнее значение Даты и Суммы. Также нет группировки по Наименованию в силу того что это ТЗ.
В общем помогите своими соображениями по этому поводу. Не прошу кодить - буду пробовать сам, мне нужна мысль, алгоритм... пробовал после внутреннего цикла снова проверять Наименование (не то же Нименование снова) но как не мучал Если..Тогда..Иначе так ничего и не добился существенно, лишь только сильнее запутался. Буду признателен за любую подсказку.
Flexy
Почему бы в самом запросе не объединить эти самые две таблицы и не описать итоги по наименованию?
logist
Запросом собрать нужную таблицу, например.
sanytch
logist @ Сегодня, 15:59 необходимо зарегистрироваться для просмотра ссылки ,
Первый запрос для Таб отбирает Наименования из Справочника, для Таб2 Запрос выдирает Дату и Сумму из ТабличнойЧасти Документа. Мне нужны в конечной таблице ВСЕ Наименования, поэтому если их нет в Документе то и Таб2 их содержать не будет. Данную задачу, точнее её начало я озвучивал необходимо зарегистрироваться для просмотра ссылки. Там использовал оборот по счёту, н если оборотов нет то и Наименование не попадало в запрос, поэтому сформировал ВСЕ Наименования в отдельном запросе а к нему пытаюсь присоединить данные из Таб2. Вроде бы устраивает такой подход но возникли трудности, описанные выше - в Таб попадает только одна последняя запись из Таб2 и как сгруппировать их.

Flexy @ Сегодня, 15:58 необходимо зарегистрироваться для просмотра ссылки ,
Ваша мысль повторяет ответ logist-а. В моём случае всё немного усложнено... ответил ему.
Flexy
sanytch @ Сегодня, 16:26 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(sanytch @ 09.12.16, 16:26) необходимо зарегистрироваться для просмотра ссылки
Мне нужны в конечной таблице ВСЕ Наименования, поэтому если их нет в Документе то и Таб2 их содержать не будет.

Используйте ЛЕВОЕ СОДИНЕНИЕ в запросе.
Как-то так:
ВЫБРАТЬ
Спр.Наименование,
Док.Дата,
Док.Сумма
ИЗ
Справочник... КАК Спр
ЛЕВОЕ СОЕДИНЕНИЕ Документ... КАК Док
ПО Спр.Наименование = Док.Наименование
ИТОГИ ПО Спр.Наименование

Или вариант для заморочкой с двумя ТЗ:
ВЫБРАТЬ *
ПОМЕСТИТЬ Т1
ИЗ &Таб КАК Т1
;
ВЫБРАТЬ *
ПОМЕСТИТЬ Т2
ИЗ &Таб2 КАК Т2
;
ВЫБРАТЬ
Т1.Наименование,
Т2.Дата,
Т2.Сумма
ИЗ
Т1
ЛЕВОЕ СОЕДИНЕНИЕ Т2
ПО Т1.Наименование = Т2.Наименование
ИТОГИ ПО Т1.Наименование
...
Запрос.УстановитьПараметр("Т1",Т1);
Запрос.УстановитьПараметр("Т2",Т2);
sanytch
Суть в том что, если в Таб2 следующее А после текущего Наименования тоже А, то в Таб нужно добавить новую строчку где Наименование А, Дата А2 и соответствующая Сумма.
если это прояснит ситуацию то вот оба запроса:
Запрос для Таб:
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Контрагенты.Наименование КАК ФИОКонтрагент,
    |    Контрагенты.ЭтоГруппа,
    |    Контрагенты.Родитель КАК Родитель
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.ЭтоГруппа = ЛОЖЬ
    |    И Контрагенты.Ссылка В ИЕРАРХИИ(&Группа)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Родитель,
    |    ФИОКонтрагент";

Запрос для Таб2:
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ИНАГРО_НачислениеПоПаямТовары.Контрагент.Родитель КАК КонтрагентРодитель,
    |    ИНАГРО_НачислениеПоПаямТовары.Ссылка.Дата КАК ДатаДок,
    |    ИНАГРО_НачислениеПоПаямТовары.Контрагент КАК Контрагент,
    |    ИНАГРО_НачислениеПоПаямТовары.Сумма КАК Сумма,
    |    ИНАГРО_НачислениеПоПаямТовары.Удержано КАК Удержано,
    |    ИНАГРО_НачислениеПоПаямТовары.УдержаноВЗ КАК УдержаноВЗ,
    |    ИНАГРО_НачислениеПоПаямТовары.Алименты КАК Алименты,
    |    ИНАГРО_НачислениеПоПаямТовары.КВыдаче КАК КВыдаче
    |ИЗ
    |    Документ.ИНАГРО_НачислениеПоПаям.Товары КАК ИНАГРО_НачислениеПоПаямТовары
    |ГДЕ
    |    ИНАГРО_НачислениеПоПаямТовары.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода
    |    И ИНАГРО_НачислениеПоПаямТовары.Контрагент.Родитель.Ссылка В ИЕРАРХИИ(&Группа)
    |    И ИНАГРО_НачислениеПоПаямТовары.Ссылка.Проведен = ИСТИНА
    |
    |УПОРЯДОЧИТЬ ПО
    |    КонтрагентРодитель,
    |    Контрагент,
    |    ДатаДок";

Может их и можно объединить, но для меня это пока картина не ясная...

Flexy @ Сегодня, 16:35 необходимо зарегистрироваться для просмотра ссылки ,
Добавил текст запросов, может картина станет яснее...

Flexy @ Сегодня, 16:35 необходимо зарегистрироваться для просмотра ссылки ,
попробую Ваш вариант с заморочкой с двумя ТЗ 32000000.gif
Petre
Цитата(sanytch @ 09.12.16, 16:46) необходимо зарегистрироваться для просмотра ссылки
Может их и можно объединить, но для меня это пока картина не ясная...

Объединять не надо. Надо соединять левым.
sava1
Напишите, что хотите получить в результате.
Там первой выборки вооще не надо.
во втором запросе - правое соединение справочника + итоги по нужному.
sanytch
sava1 @ Сегодня, 17:10 необходимо зарегистрироваться для просмотра ссылки ,
лучше покажу:

Это стандартный Отчет "Обороты счета", но в него не попадают контрагенты у которых нет оборотов, точнее ни оборотов ни остатков... а мне они тоже нужны...
sava1
Вам нужен отчет по бух данным или документу?
sanytch
sava1 @ Сегодня, 17:31 необходимо зарегистрироваться для просмотра ссылки ,
ни там ни там ведь нет Контрагентов у которых пусто. скорее все контрагенты и данные по тем, кто фигурирует в документу НачислениеПоПаям. Как то так... Может я в конце пятницы чего-то неправильно формулирую уже. 26000000.gif Думаю стоит к этому вернутся завтра на свежую голову 63000000.gif

На сегодня спасибо всем за советы, завтра попробую воплотить в жЫсть)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.