Имя: Пароль:
1C
1С v8
СКД Произведение в вычисляемом поле
0 MaiorovYury
 
14.02.14
10:52
Подскажите, пожалайста,
Есть отчет в СКД- один набор данных - объект. Пытаюсь в вычисляемом поле посчитать произведение двух полей из набора данных, оба поля числовые, и получаю ошибку
Вот выражение в ВП
ЕСТЬNULL(ОстатокОтпусков,0)*ЕСТЬNULL(СреднийДневнойЗаработок,0)

Вот сама ошибка
Ошибка в выражении
по причине:
Неверные параметры "*"

Что не так?
1 MaiorovYury
 
14.02.14
10:53
1С:Предприятие 8.2 (8.2.19.80)
2 Maxus43
 
14.02.14
10:54
зачем естьnull в вычисляемом? в заросе это делай, в ВП просто а*б
3 Wobland
 
14.02.14
10:55
(2) объект
(0) выбор когда?
4 MaiorovYury
 
14.02.14
10:56
(2) у меня эти 2 поля получаются не в запросе, а из общих модулей
5 Maxus43
 
14.02.14
10:56
(4) хорошо, а каким макаром в общих модулях там возможно Null? Оно там реально есть?
6 Wobland
 
14.02.14
10:57
(5) я верю в криворукость авторов
7 MaiorovYury
 
14.02.14
10:58
(3) то есть
ВЫБОР КОГДА ЕСТЬNULL(ОстатокОтпусков,0)=0 ИЛИ ЕСТЬNULL(СреднийДневнойЗаработок,0)=0 ТОГДА 0
ИНАЧЕ ОстатокОтпусков = СреднийДневнойЗаработок КОНЕЦ
Это действительно лучше чем
ЕСТЬNULL(ОстатокОтпусков,0)*ЕСТЬNULL(СреднийДневнойЗаработок,0)
8 MaiorovYury
 
14.02.14
10:59
и вообще ЕСТЬNULL - это перестраховаться
Когда вывожу отчет без ВП, то ОстатокОтпусков для некоторых сотрудников ничего не показывает - так что это перестраховка
9 Wobland
 
14.02.14
10:59
(7) чего там иначе?
10 Maxus43
 
14.02.14
11:00
(8) я тебе просто намекаю что это естьnull и мешает тебе в ВП, ибо А*Б просто работает
11 Maxus43
 
14.02.14
11:01
Не путайте язык запросов и выражения в вычисляемых полях ещё
12 MaiorovYury
 
14.02.14
11:02
(5) Проверил, NULL там все-таки нет - там 0
(10) А*Б не работает это меня и смутило!
13 Maxus43
 
14.02.14
11:06
(12) чудес не бывает... тип точно число? не составной какой?
14 Wobland
 
14.02.14
11:08
белая клеточка в отчёте - это не работает или работает?
15 MaiorovYury
 
14.02.14
11:11
(13) Проверил еще раз - все число!
На самом деле первый раз работаю с набором данных объектом, и переопределяю процедуру ПриКомпоновкеРезультата
Может что-то в ней не хватает. Посмотрите пожалуйста!



Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    СтандартнаяОбработка= Ложь;
    
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = КомпоновщикНастроек.Настройки;

    Период = Настройки.ПараметрыДанных.Элементы.Найти("Период").Значение.Дата;
    Организация = Настройки.ПараметрыДанных.Элементы.Найти("Организация").Значение;
    ДокументНачислений = Настройки.ПараметрыДанных.Элементы.Найти("ДокументНачислений").Значение;
    ПодразделениеОрганизации = Настройки.ПараметрыДанных.Элементы.Найти("ПодразделениеОрганизации").Значение;
    
    РезервОтпусковТЧ = ПодготовитьДанные(Период,Организация,ПодразделениеОрганизации,ДокументНачислений);
    
    ВнешниеНаборыДанных = Новый Структура("НаборДанных", РезервОтпусковТЧ);
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.НачатьВывод();
    Пока Истина Цикл
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
        Если ЭлементРезультата = Неопределено Тогда
            Прервать;
        Иначе
            ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
        КонецЕсли;
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();

    ДокументРезультат.Показать();

КонецПроцедуры;
16 Feunoir
 
14.02.14
11:11
(0) Сильно подозреваю, что проблема в группировках. На каком-то из уровней оно просто не может рассчитаться правильно. Не могу сейчас найти отчёт в котором у меня была такая-же проблема.
17 MaiorovYury
 
14.02.14
11:15
(16) убрал группировки - все равно не работает :(
18 Wobland
 
14.02.14
11:18
(15) >Может что-то в ней не хватает
оно умеет жаловаться текстом ошибки
19 MaiorovYury
 
14.02.14
11:19
(18) вот весь текст ошибки

Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{ВнешнийОтчет.ОтчетРезервОтпусков.МодульОбъекта(187)}: Ошибка при вызове метода контекста (Следующий)

по причине:
Ошибка компоновки данных
по причине:
Ошибка получения данных
по причине:
Ошибка в выражении
по причине:
Неверные параметры "*"
20 Maxus43
 
14.02.14
11:21
(19) нафига цикл там?
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.Вывести(параметры в СП гляди);
21 MaiorovYury
 
14.02.14
11:24
Все, я понял. Я ставил тип Число в СКД в Наборе данных и думал что СКД преобразует значения к числу. А сейчас увидел, что в ТЗ, которую я передаю в этот набор данных СреднийДневнойЗаработок - это строка
Думаю вопрос решен
22 Mitriy
 
14.02.14
11:24
(0) а ты уверен, что ругается именно на это место?
23 Wobland
 
14.02.14
11:24
>СреднийДневнойЗаработок - это строка
"а чо так мало?"
24 Maxus43
 
14.02.14
11:24
вот не зря я про тип спрашивал...
25 MaiorovYury
 
14.02.14
11:27
(24) Да уж. Но я был уверен, что раз я указал в СКД в наборе данных тип для этих полей, то они будут именно этого типа.
Странно - зачем тогда этот функционал, зачем указывать тип значений для полей?
26 Wobland
 
14.02.14
11:28
(25) думал, оно тебе "адын" в 1 превратит?
27 Maxus43
 
14.02.14
11:29
(25) типы в Источнике надо смотреть всегда... типы в СКД емнип только если надо из составного типа выделить один, или даже хз, не помню. Надо читать описание СКД
28 MaiorovYury
 
14.02.14
11:30
(26) ну или по крайней мере выдаст ошибку, что типы не сходятся
так а зачем тогда возможность указать тип значений?
29 MaiorovYury
 
14.02.14
11:30
В общем всем спасибо!
30 Wobland
 
14.02.14
11:32
в конструкторе запросов вон типы для полей ВТ указываются исключительно для удобства пользования этим же конструктором
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший