Имя: Пароль:
1C
1С v8
Корректный запрос параметров из запроса.
0 EtoNeTochno
 
14.12.22
17:49
Дано: макет отчета, с комментариями какие показатели должны быть в какой строке. Запрос подготовила. А в параметры вывести не могу. Зеленая и глупая видимо совсем, но сдаваться не хочется. Вариантов использовала массу, в сообщения он выводит эти суммы, а в отчете не показывает.

Макет = ПолучитьМакет("ФинансовыеПоказатели");
    
    ТабДок.Очистить();
    
    ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьВыручка = Макет.ПолучитьОбласть("ВыручкаТаблицы");
    
    Запрос = Новый Запрос;
    Запрос.Текст =  
    "ВЫБРАТЬ
    |    ЕСТЬNULL(Номенклатура.бит_стр_НазначениеПомещения, """""""") КАК НазначениеПомещения,
    |    СУММА(ХозрасчетныйДвиженияССубконто.Сумма) КАК Сумма,
    |    ХозрасчетныйДвиженияССубконто.СубконтоКт3 КАК Номенклатура
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |        ПО (ХозрасчетныйДвиженияССубконто.СубконтоКт3 = Номенклатура.Ссылка)
    |ГДЕ
    |    ХозрасчетныйДвиженияССубконто.Активность = ИСТИНА
    |    И ХозрасчетныйДвиженияССубконто.СчетДт В ИЕРАРХИИ(&СчетДт)
    |    И ХозрасчетныйДвиженияССубконто.СчетКт = &СчетКт
    |    И ХозрасчетныйДвиженияССубконто.Организация = &Организация
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйДвиженияССубконто.СубконтоКт3,
    |    Номенклатура.бит_стр_НазначениеПомещения
    |ИТОГИ ПО
    |    НазначениеПомещения";
    
    Запрос.УстановитьПараметр("СчетДт",
    ПланыСчетов.Хозрасчетный.НайтиПоКоду("62"));
    Запрос.УстановитьПараметр("СчетКт",
    ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1"));
    Запрос.УстановитьПараметр("Организация", Организация);
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ОбластьШапка.Параметры.Дата = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
    ТабДок.Вывести(ОбластьШапка);  
    
    //ВыборкаВыручка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НазначениеПомещения");  
    
    ДКПЖилая = 0;
    ДКПмашиноместо = 0;
    Пока Выборка.Следующий() Цикл
        Если
            Выборка.НазначениеПомещения = "Жилая недвижимость" Тогда
            ДКПЖилая = Выборка.Сумма;
        ИначеЕсли
            Выборка.НазначениеПомещения = "Машиноместо (паркинг)" Тогда
            ДКПмашиноместо = Выборка.Сумма;    
        КонецЕсли;
        
        //обращение к полям
        Сообщить(Выборка.НазначениеПомещения);
        Сообщить(Выборка.Сумма);
        Сообщить(Выборка.Номенклатура);
        
    КонецЦикла;    
    
    ОбластьВыручка.Параметры.ВыручкаДКПЖилая = (ДКПЖилая/1000);
    ОбластьВыручка.Параметры.ВыручкаДКПмашиноместо = ДКПмашиноместо/1000;

    ТабДок.Вывести(ОбластьВыручка);

Проблема именно с параметрами ВыручкаДКПЖилая и ВыручкаДКПмашиноместо
1 Йохохо
 
14.12.22
18:00
Если Выборка.НазначениеПомещения = "Жилая недвижимость" Тогда
и Выборка.НазначениеПомещения = "Машиноместо (паркинг)"
тут ошибка, это никогда не истина
2 EtoNeTochno
 
14.12.22
18:20
(1) Мое НИКОГДА измеряется нескольким месяцами. Подскажите, пожалуйста, как корректно можно сформулировать?
3 Said_We
 
14.12.22
18:35
(0) А чего строки ниже не внутри цикла?

    ОбластьВыручка.Параметры.ВыручкаДКПЖилая = (ДКПЖилая/1000);
    ОбластьВыручка.Параметры.ВыручкаДКПмашиноместо = ДКПмашиноместо/1000;

    ТабДок.Вывести(ОбластьВыручка);

Сообщить же там.

ДКПЖилая = 0;
ДКПмашиноместо = 0;
один раз только обнуляем, а потом можно использовать значения предыдущей итерации?
4 Said_We
 
14.12.22
18:45
(0) Номенклатура не используется. Чего её тянуть?

Если нужно выводить одновременно разные НазначениеПомещения в одной строке, то тут надо либо честно дополнять данные нулями и в правильном порядке сортировать данные, либо сразу в запросе эти две колонки в виде разных полей подготовить.

Либо засунуть в СКД и пусть оно думает как там что выводить и группировать.
5 EtoNeTochno
 
14.12.22
20:44
(4) решила. Из запроса в тз а из тз в параметр :)
6 mikecool
 
14.12.22
20:55
это точно не твоя профессия...
7 FirstLine Support
 
14.12.22
23:01
(6) почему? Она нашла оригинальное решение, я бы вот ни за что не догадался "из запроса в те, а из тз в параметр". Может это новый гений 1С подрастает..
8 Said_We
 
15.12.22
01:45
(7) "из запроса в ТЗ, а из ТЗ в параметр" - такое иногда применяется.

Например, когда данные тянутся из внешних источников в непонятных форматах.

Сначала создается контейнер для приема в виде ТЗ путем выполнения запроса к структуре приёмника с условием "ГДЕ ЛОЖЬ". То есть пустая ТЗ, но с колонками. Что бы типы колонок не прописывать. Так быстрее и если тип поля немного поменяется (размерность числа, например), то код не придется переписывать с большой долей вероятности.
Далее из внешнего источника заполняется ТЗ.
Далее ТЗ предаётся как параметр в запрос.
Далее в запросе сразу для всех данных ссылочного типа осуществляется поиск ссылок в приемнике. Что бы мазохизмом не заниматься и не искать в цикле для каждой строки для каждой колонки.
Собственно далее создание по порядку объектов, которые не найдены и при необходимости обновление существующих. Тут уже от логики задачи зависит.

Не всегда данные прилетают в виде каких-то XML или JSON. Бывает всё что угодно. И синхронизация тоже бывает очень разная.
Источником данных для 1С может быть и XLS и текстовый файл и готовые запросы к БД и что попало.

Поэтому описанный вариант "из запроса в ТЗ, а из ТЗ в параметр" - имеет место быть, но справедливости ради, совсем в других задачах. Уж точно не при формировании печатной формы.
9 EtoNeTochno
 
15.12.22
08:19
(8) Благодарю за ответ. Я только учусь и стараюсь реализовывать поставленные передо мной задачи полностью. Я уверенна, что всё что я сделала на данный момент - можно оптимизировать и улучшить. Но также я знаю насколько мне важно создавать работоспособные вещи, даже если это пока несколько нелепо и зачастую нелогично сделано. Тут я искала помощи, думала что люди раз компетентные и на форуме свободное время проводят, то смогут подсказать в какую сторону искать ответы.
10 FirstLine Support
 
15.12.22
08:55
(9) Да ничего страшного, я так же начинал после революции (интернета тогда не было, а эвм стоила как подводная лодка). Ну и лет через десять начало приходить понимание, как вот это вот всё устроено. А сейчас опять начал параметры через тз заполнять.
11 Said_We
 
15.12.22
10:27
(9) Фотку свою добавь в аккаунт. Помогать будут с большим желанием. И выпендриваться меньше будут. :-) Проверено временем.