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

Как сделать выборку, не заносит данные в макет после запроса

Автор katod, 30 мар 2017, 14:18

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

katod

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


ПС.:очень мало опыта.:dfbsdfbsdf:

ilyay

ОснБлок=Макет.ПолучитьОбласть("ОснБлок");
Попробуйте этот код перенести внутрь цикла.

katod

Цитата: ilyay от 30 мар 2017, 14:23
ОснБлок=Макет.ПолучитьОбласть("ОснБлок");
Попробуйте этот код перенести внутрь цикла.
Попробовала. все так же пусто! подразделения есть, а циферек нет. И если не ошибаюсь (я меньше месяца осваиваю язык 1с) то объявлять область можно до цикла.

ilyay

Тогда проверяйте типы параметров. Поставьте в макете для каждого параметра СодержитЗначение = Истина и задайте тип. В отладке посмотрите доступность параметров у табличного документа, который заполняете.

А код перенесите, как я выше написал. Для каждого вывода нужно макет заново получить перед заполнением, иначе у вас могут данные некорректно выводиться.

katod

Цитата: ilyay от 30 мар 2017, 14:36
Тогда проверяйте типы параметров. Поставьте в макете для каждого параметра СодержитЗначение = Истина и задайте тип. В отладке посмотрите доступность параметров у табличного документа, который заполняете.

А код перенесите, как я выше написал. Для каждого вывода нужно макет заново получить перед заполнением, иначе у вас могут данные некорректно выводиться.
-- типы параметров, это где?какие?
поставила содержит значение - а зачем? можете вкратцем объяснить?
в отладке см доступность - это как??

-- код перенесла.

Добавлено: 30 мар 2017, 15:14


помогли специалисты! в общем, надо было указать параметры непосредственно  через выборку


Если Выборка.Категория= Справочники.КВ_КатегорииСотрудников.НайтиПоКоду("000000001") Тогда    //специалисты
            ОснБлок.Параметры.СпФ   =Выборка.Факт;
            ОснБлок.Параметры.СпП   =Выборка.Пост;
            ОснБлок.Параметры.СпС   = Выборка.Сов;
            ОснБлок.Параметры.СпВР = Выборка.ВР;
            ОснБлок.Параметры.СпВД = Выборка.ВД;
        ИначеЕсли  Выборка.Категория= Справочники.КВ_КатегорииСотрудников.НайтиПоКоду("000000002") Тогда  //руковод
            ОснБлок.Параметры.РФ   = Выборка.Факт;
            ОснБлок.Параметры.РП   = Выборка.Пост;
            ОснБлок.Параметры.РС   = Выборка.Сов;
            ОснБлок.Параметры.РВР = Выборка.ВР;
            ОснБлок.Параметры.РВД = Выборка.ВД;
        КонецЕсли;

ilyay

В отладке посмотреть значение "ОснБлок.Параметры" непосредственно перед выполнением "ОснБлок.Параметры.Заполнить(Выборка);"

А вот эти ссылки "Справочники.КВ_КатегорииСотрудников.НайтиПоКоду("000000001")" надо получить перед циклом в переменные и в цикле уже сравнивать с переменными, иначе на каждом витке цикла будет выполняться запрос.

Теги: 8.3 ЗУП 

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

Рейтинг@Mail.ru

Поиск