Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 05:18

Заполнение табчасти документа данными из запроса

Автор Pinhet, 13 авг 2014, 15:24

0 Пользователей и 1 гость просматривают эту тему.

Pinhet

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


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


DmitriyF

Цитата: Pinhet от 13 авг 2014, 15:24
Здравствуйте. Я искал темы с похожими проблемами, но разобраться так и не смог. Я создал кнопку для автоматического заполнения полей табличной части документа и создал необходимый запрос, но не могу полученные данные заполнить в табчасть. Табличная часть имеет реквизит с ссылкой на справочник СтатьиОтчета, в котором указаны заполняемые поля. Пытался заполнять при помощи Выгрузить, но этот метод мне не подошел.


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

Pinhet

Цитата: DmitriyF от 13 авг 2014, 15:30

Как пробовали вставить весь код пожалуйста

Объект.ПрофЧленство.Очистить();
ЗаполнитьПрофЧленство();

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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


РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Объект.ПрофЧленство.Загрузить(Запрос.Выполнить().Выгрузить());
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

КонецЦикла;     

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

Сообщить("Таблица №2 заполнена",СтатусСообщения.Информация);


DmitriyF

а в запросе вы где получаете данные с типом справочник.статьиотчета? Запрос вообще выполняется что получается в таблице значений?

Pinhet

Цитата: DmitriyF от 13 авг 2014, 16:10
а в запросе вы где получаете данные с типом справочник.статьиотчета? Запрос вообще выполняется что получается в таблице значений?
Сам запрос я проверял через консоль запросов. Он нормально работает: выводит количество членов профсоюза, сколько среди них женщин и т.д. Я не знаю, как в дпнном случае вывести полученную запросом информацию в существующую табличную часть. Данные с типом справочник.статьиотчета в запросе не получал.

DmitriyF

ВАШИ СЛОВА "Табличная часть имеет реквизит с ссылкой на справочник СтатьиОтчета, в котором указаны заполняемые поля." Если вы пытаетесь в эту табличную часть загрузить данные с другим типом то удачи.

cska-fanat-kz

Структуру ваших объектов проясните сперва.

<<Какой-то Док>>
-<<ЕгоТЧ>>
--<<Реквизит типа Спр.СтатьиОтчета>>
---<<Реквизит элемента спр До35>>
...и т.д.

так?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

LexaK

есть такая замечательная конструкция

КакаяТоТабличнаяЧасть.Загрузить(Запрос.Выполнить().Выгрузить());

при этом в ТЗ получаемой из запроса, колонки (не обязательно все) должны совпадать по Имени и Типу с колонками ТЧ, если такие колонки есть то произойдет автоматическое перезаполнение ТабличнойЧасти.
Все остальные колонки, которые не совпали по Имени и Типу, останутся пустыми.
если помогло нажмите: Спасибо!

Pinhet

Цитата: LexaK от 14 авг 2014, 10:29
есть такая замечательная конструкция

КакаяТоТабличнаяЧасть.Загрузить(Запрос.Выполнить().Выгрузить());

при этом в ТЗ получаемой из запроса, колонки (не обязательно все) должны совпадать по Имени и Типу с колонками ТЧ, если такие колонки есть то произойдет автоматическое перезаполнение ТабличнойЧасти.
Все остальные колонки, которые не совпали по Имени и Типу, останутся пустыми.

Цитата: cska-fanat-kz от 14 авг 2014, 10:06
Структуру ваших объектов проясните сперва.

<<Какой-то Док>>
-<<ЕгоТЧ>>
--<<Реквизит типа Спр.СтатьиОтчета>>
---<<Реквизит элемента спр До35>>
...и т.д.
Форма 1
ТЧ ПрофЧленство имеет реквизит спр.статьиотчета и всего.

Не подскажите, как можно на прямую присвоить строкам в ТЧ значения из запроса. Я знаю, что так можно, но не могу найти эту функцию.



cska-fanat-kz

еще раз.

если наименования полей запроса и ТЧ совпадают, то подойдет простой метод Загрузить().
в противном случае только цикл по выборке из запроса и ручное заполнение ТЧ.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск