Имя: Пароль:
1C
1С v8
Почему в РезультатеЗапроса - пусто?
0 ILove1C
 
05.11.19
14:56
Вот запрос и код процедуры.
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

    Запрос = новый Запрос(
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ХозрасчетныйОбороты.Субконто2 КАК Склад,
    |    ХозрасчетныйОбороты.Субконто1 КАК Номенклатура,
    |    ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДт,
    |    ХозрасчетныйОбороты.КоличествоОборотДт КАК КоличествоОборотДт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Период, Счет В ИЕРАРХИИ (&СчетДТ), &Субконто,
    |   Субконто2 В ИЕРАРХИИ (&Склады), , ) КАК ХозрасчетныйОбороты
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОбороты.Субконто2,
    |    ХозрасчетныйОбороты.Субконто1,
    |    ХозрасчетныйОбороты.СуммаОборотДт,
    |    ХозрасчетныйОбороты.КоличествоОборотДт");
    
    МенеджерЗаписи = РегистрыСведений.Трансп_РегистрСведений.СоздатьМенеджерЗаписи();
    
    //сообщить(строка(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10")));          
    
    МенеджерЗаписи.Машина = Запись.Машина;
    МенеджерЗаписи.Период = Запись.Период;
    МенеджерЗаписи.НормаНа100 = Запись.НормаНа100;
    МенеджерЗаписи.Пробег = Запись.Пробег;
    МенеджерЗаписи.НормРасход = (Запись.Пробег / 100) * Запись.НормаНа100;
    
    Запрос.УстановитьПараметр("НачалоПериода", Запись.Период);    
    Запрос.УстановитьПараметр("КонецПериода", Запись.Период+86400);    
    Запрос.УстановитьПараметр("СчетДТ", ПланыСчетов.Хозрасчетный.НайтиПоКоду("10"));    
    Запрос.УстановитьПараметр("Склады", Запись.Машина);    
            
    Массив = новый Массив;
    массив.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);

    массив.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);
    
    Запрос.УстановитьПараметр("Субконто", Массив);    
    
    //РезультатЗапроса = Запрос.Выполнить().Выбрать();
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    МенеджерЗаписи.Перерасход = РезультатЗапроса.КоличествоОборотДт / Запись.Пробег * 100;
    
    МенеджерЗаписи.Записать();
КонецПроцедуры

Расчёт ведётся в регистре сведений.
На строке МенеджерЗаписи.Перерасход = РезультатЗапроса.КоличествоОборотДт / Запись.Пробег * 100; ничего не происходит и не выводится результат в регистре на форме списка.
1 Beduin
 
05.11.19
15:02
У тебя запись в регистре в любом случае, не зависимо от запроса.
2 D_E_S_131
 
05.11.19
15:02
А почему должно что-то происходить?
3 sqr4
 
05.11.19
15:03
РезультатЗапроса  - таблица значения. ВОт это РезультатЗапроса.КоличествоОборотДт колонка таблицы значений, а че число как тебе видится.
4 sqr4
 
05.11.19
15:04
Если РезультатЗапроса.Количество() > 0 Тогда
МенеджерЗаписи.Перерасход = РезультатЗапроса.Итог("КоличествоОборотДт") / Запись.Пробег * 100;
КонецЕсли;
5 sqr4
 
05.11.19
15:05
да и ЗАпись.Пробег лучше проверить на ноль
6 ILove1C
 
05.11.19
15:05
(3) МенеджерЗаписи помогает сделать вывод на форму списка. Однако, никаких ошибок или вывода результата в колонке не видно.
7 D_E_S_131
 
05.11.19
15:08
Не только лишь все знают про "Отладчик"...
8 ILove1C
 
05.11.19
15:09
(4) спасибо, сработало!
9 dezss
 
05.11.19
16:27
хм...сперва выгрузим в ТЗ, потом посчитаем итог...а почему это сразу в запросе не сделать, а то как-то неоптимальненько))))
10 sqr4
 
05.11.19
16:31
(9) до "оптимальненько", ТСу пока далековато)
11 dezss
 
05.11.19
16:37
(10) На самом деле, запрос может же выдавать неправильные значения.
Там же группировка по всем полям, а если есть несколько записей с одинаковыми СуммаОборотДт и КоличествоОборотДт?
12 dezss
 
05.11.19
16:39
(11) Хотя там обороты по периоду...вроде не должно такого случиться.
13 sqr4
 
05.11.19
16:40
(11) запрос не читал, надеюсь учебная задача, а проверяющий объяснит как надо)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс