Версия для печати темы (https://pro1c.org.ua/index.php?s=67ce841d5102cb9487f5d8004927ed6e&showtopic=40553)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Вывод в ПолеТабличногоДокумента

Автор: sanytch 26.09.17, 11:08

Доброго времени суток форумчане! Имею:
1. 1С:Предприятие 8.3 (8.3.10.2505)
2. Бухгалтерия сельскохозяйственного предприятия для Украины, редакция 1.2 Разработка конфигурации: ЧП "ИН-АГРО", 2016 (1.2.36.2)

Внешний отчет. Запросом делаю выборку данных. Т.к. результат запроса приходится еще сортировать и сворачивать, то вывести его сразу нельзя. Сразу скажу что если отсортировать можно непосредственно и прямо в запросе, то свернуть так как мне нужно запросом не получается(не утверждаю что сделать это вообще нельзя, может это у меня не получилось). Далее выгружаю результат в ТаблицуЗначений(ТабЗнач), можно и в ТабличныйДокумент(ТабДок). После всех манипуляций с запросом хочу его вывести в ПолеТабличногоДокумента на форме. НО куда бы я не выгружал результат запроса, хоть в ТабЗнач, хоть в ТабДок - вывести в ПолеТабличногоДокумента никак не могу. Возможно ли это и если да, то как именно. Спасибо за помощь.
предполагал что как то так, но...

Код

    ТабЗнач = Новый ТаблицаЗначений;
    
// текст собственно самого запроса

    РезультатЗапроса = Запрос.Выполнить();
    
    ТабЗнач = РезультатЗапроса.Выгрузить();
    ТабЗнач.Сортировать("Пайщик Возр");
    ТабЗнач.Свернуть("Сельсовет, Пайщик", "Сумма, Удержано, КВыдаче");    
    
    ЭлементыФормы.ПолеТабличногоДокумента.Вывести(ТабЗнач);//ВОТ ЗДЕСЬ и вся проблема. Выдает ошибку: {ВнешнийОтчет.ВнешнийОтчет1.Форма.ФормаОтчета.Форма(68)}: Ошибка при вызове метода контекста (Вывести)
                                                                                                      //ЭлементыФормы.ПолеТабличногоДокумента.Вывести(ТабЗнач);
                                                                                                      //по причине:
                                                                                                      //Несоответствие типов (параметр номер '1')

Автор: pablo 26.09.17, 11:21

Попытайтесь запустить в коде через контекстное меню Конструктор запроса с обработкой результата и скопируйте в конструктор текст запроса. Посмотрите, сколько кода Вам вывалит конструктор и сравните со своей 1 строчкой.

Автор: salton 26.09.17, 11:33

Цитата(sanytch @ 26.09.17, 12:08) *
ЭлементыФормы.ПолеТабличногоДокумента.Вывести(ТабЗнач);

А на форме точно есть "ПолеТабличногоДокумента"? Табличное поле с названием "ПолеТабличногоДокумента" присутствует?

Автор: sava1 26.09.17, 12:12

Цитата(sanytch @ 26.09.17, 12:08) *
ЭлементыФормы.ПолеТабличногоДокумента.Вывести(ТабЗнач);

В этом случае ТабЗнач долно быть Табличным Документом. :

ТабДок = Новый ТабличныйДокумент;
//  тут заполняем ТабДок из ТабЗнач
ЭлементыФормы.ПолеТабличногоДокумента.Вывести(ТабДок);


типо так....

Автор: sanytch 26.09.17, 14:31

salton @ Сегодня, 12:33 * ,
да, есть.

Автор: sanytch 26.09.17, 15:45

sava1 @ Сегодня, 13:12 * ,
пытался и из ТабличногоДокумента вывести данные в ПолеТабличногоДокумента - никак. Правда я заполнял его не из ТабЗнач, а прям результатами запроса, потом сортировал и сворачивал... Думаю что это не принципиально как заполнил. Все равно не выводит sad.gif

Автор: podcast 26.09.17, 16:13

sanytch @ Сегодня, 16:45 * ,
Добавьте колонки такие как у вас в запросе, и должно заполнить.

Автор: sanytch 26.09.17, 16:33

sava1 @ Сегодня, 13:12 * ,
Прошу прощения. Получилось. Вывел. Получилась чисто таблица. Попутно на быструю руку состряпал ВнешнийОтчет без форм - только СхемаКомпоновкиДанных.
Здесь есть Группировка что мне необходимо, но без свертки получаю дубли записей.

Может подскажите как их убрать? Данные получаю через вот такой запрос

ВЫБРАТЬ
    Контрагенты.Наименование КАК Пайщик,
    Контрагенты.Родитель КАК Сельсовет,
    NULL КАК Сумма,
    NULL КАК Удержано,
    NULL КАК КВыдаче
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.Родитель В ИЕРАРХИИ(&Пайщики)
    И Контрагенты.ЭтоГруппа = ЛОЖЬ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ИНАГРО_НачислениеПоПаямТовары.Контрагент,
    ИНАГРО_НачислениеПоПаямТовары.Контрагент.Родитель,
    СУММА(ИНАГРО_НачислениеПоПаямТовары.Сумма),
    СУММА(ИНАГРО_НачислениеПоПаямТовары.Удержано + ИНАГРО_НачислениеПоПаямТовары.УдержаноВЗ + ИНАГРО_НачислениеПоПаямТовары.Алименты),
    СУММА(ИНАГРО_НачислениеПоПаямТовары.КВыдаче)
ИЗ
    Документ.ИНАГРО_НачислениеПоПаям.Товары КАК ИНАГРО_НачислениеПоПаямТовары
ГДЕ
    ИНАГРО_НачислениеПоПаямТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
    ИНАГРО_НачислениеПоПаямТовары.Контрагент.Родитель,
    ИНАГРО_НачислениеПоПаямТовары.Контрагент

УПОРЯДОЧИТЬ ПО
    Пайщик

Понятно что если у контрагента-пайщика нет начислений по паям то напротив его фамилии пусто (получаю из первого запроса), а если у пайщика были начисления то получаю 2 строки, и из первого с пустыми значениями и из второго с начислениями. Для этого придумал свернуть но тогда нужно выгружать в ТабДок, сворачивать и из него выгружать в ПолеТабличногоДокумента, но тогда пропадает группировка по Сельсовету. Может на уровне СКД можно либо запрос грамотнее построить или есть возможность свернуть его результаты "без танцев с бубнами". Заранее спасибо.

podcast @ Сегодня, 17:13 * ,
Спасибо за ответ. Пробовал и так. Не помню правда то ли ошибку то ли пустоту выдавал.

Автор: pablo 26.09.17, 16:54

как-то так на колене получается:

ВЫБРАТЬ     Контрагенты.Наименование КАК Пайщик,
Контрагенты.Ссылка как контрагент,  
   Контрагенты.Родитель КАК Сельсовет
Поместить Пайщики
ИЗ     Справочник.Контрагенты КАК Контрагенты
ГДЕ     Контрагенты.Родитель В ИЕРАРХИИ(&Пайщики)    
И Контрагенты.ЭтоГруппа = ЛОЖЬ;
ВЫБРАТЬ    
Пайщики.Пайщик,    
Пайщики.Сельсовет,
     СУММА(ЕСТЬNULL(ЕИНАГРО_НачислениеПоПаямТовары.Сумма,0)),
     СУММА(ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.Удержано,0) + ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.УдержаноВЗ,0) + ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.Алименты,0)),
     СУММА(ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.КВыдаче,0))
ИЗ     Пайщики как Пайщики левое соединение Документ.ИНАГРО_НачислениеПоПаям.Товары КАК ИНАГРО_НачислениеПоПаямТовары
по Пайщики.Контрагент=ИНАГРО_НачислениеПоПаямТовары.Контрагент
ГДЕ     ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.Ссылка.Дата,&НачалоПериода) МЕЖДУ &НачалоПериода И &КонецПериода  
СГРУППИРОВАТЬ ПО  
Пайщики.Пайщик,  
  Пайщики.Сельсовет

Автор: sanytch 27.09.17, 9:36

pablo @ Вчера, 17:54 * ,
Спасибо большое, ход мысли я понял: Временная таблица со ВСЕМИ нужными контрагентами а потом через левое соединение для каждого либо 0 если нет его в документе либо числа из соответствующих полей табчасти документа.
С колена у Вас получилось почти правильно, подправил пару мелочей и вышло так:

ВЫБРАТЬ
    Контрагенты.Ссылка КАК Пайщик,
    Контрагенты.Наименование,
    Контрагенты.Родитель КАК Сельсовет
ПОМЕСТИТЬ Пайщики
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.Родитель В ИЕРАРХИИ(&Пайщики)
    И Контрагенты.ЭтоГруппа = ЛОЖЬ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Пайщики.Пайщик,
    Пайщики.Сельсовет,
    СУММА(ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.Сумма, 0)) КАК Начислено,
    СУММА(ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.Удержано, 0) + ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.УдержаноВЗ, 0) + ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.Алименты, 0)) КАК Удержано,
    СУММА(ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.КВыдаче, 0)) КАК КВыдаче
ИЗ
    Пайщики КАК Пайщики
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИНАГРО_НачислениеПоПаям.Товары КАК ИНАГРО_НачислениеПоПаямТовары
        ПО Пайщики.Пайщик = ИНАГРО_НачислениеПоПаямТовары.Контрагент.Ссылка
ГДЕ
    ЕСТЬNULL(ИНАГРО_НачислениеПоПаямТовары.Ссылка.Дата, &НачалоПериода) МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
    Пайщики.Пайщик,
    Пайщики.Сельсовет

Соединение по ссылкам только нужно устанавливать, если просто по наименованиям то выводит всех контрагентов а вот цифр пусто...
Огромное спасибо всем откликнувшимся и особенно pablo!!!

Автор: sanytch 27.09.17, 14:03

pablo @ Вчера, 17:54 * ,
В предыдущем запросе нашелся изъян и данные выводились не совсем в полном объёме. решил переделать с вложенным запросом, работает отлично, получилось вот так:

ВЫБРАТЬ
    Контрагенты.Родитель,
    Контрагенты.Наименование,
    Начисления.Сумма,
    Начисления.Удержано + Начисления.Алименты + Начисления.УдержаноВЗ КАК Удержано,
    Начисления.КВыдаче
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ИНАГРО_НачислениеПоПаямТовары.Контрагент КАК Контрагент,
            ИНАГРО_НачислениеПоПаямТовары.Сумма КАК Сумма,
            ИНАГРО_НачислениеПоПаямТовары.Удержано КАК Удержано,
            ИНАГРО_НачислениеПоПаямТовары.Алименты КАК Алименты,
            ИНАГРО_НачислениеПоПаямТовары.УдержаноВЗ КАК УдержаноВЗ,
            ИНАГРО_НачислениеПоПаямТовары.КВыдаче КАК КВыдаче
        ИЗ
            Документ.ИНАГРО_НачислениеПоПаям.Товары КАК ИНАГРО_НачислениеПоПаямТовары
        ГДЕ
            ИНАГРО_НачислениеПоПаямТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода) КАК Начисления
        ПО Контрагенты.Наименование = Начисления.Контрагент.Наименование
ГДЕ
    Контрагенты.Родитель В ИЕРАРХИИ(&Пайщики)
    И Контрагенты.ЭтоГруппа = ЛОЖЬ


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua