Имя: Пароль:
1C
1С v8
Ошибка в запросе
,
0 Iceman_208
 
09.10.15
15:23
Всем добрый день уважаемые знатоки 1С 8.
Столкнулся со следующей проблемой. В одном из отчетов создал запрос. При выполнении запроса выдается ошибка на строке "ТОГДА РеализацияТоваровУслугТовары.КоличествоПакетов * ТабВесПакета.ВесПакета". Почему такое происходит не могу понять. Текст Запроса следующий:
ВЫБРАТЬ
    ТабТТН.Маршрут КАК Маршрут,
    ТабТТН.ДатаКалендаря КАК ДатаКалендаря,
    ТабТТН.Протяженность КАК Протяженность,
    ТабТТН.Стоимость КАК Стоимость
ПОМЕСТИТЬ ТабТТН
ИЗ
    &ТабТТН КАК ТабТТН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТабВесПакета.Номенклатура КАК Номенклатура,
    ТабВесПакета.ВесПакета КАК ВесПакета
ПОМЕСТИТЬ ТабВесПакета
ИЗ
    &ТабВесПакета1 КАК ТабВесПакета
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТабТТН.Маршрут КАК Маршрут,
    ТабТТН.ДатаКалендаря КАК ДатаКалендаря,
    ТабТТН.Протяженность КАК Протяженность,
    ТабТТН.Стоимость КАК Стоимость,
    ВложенныйЗапрос.КолвоОтгрузки КАК КолвоОтгрузки,
    ВложенныйЗапрос.СуммаОтгрузки КАК СуммаОтгрузки,
    ВложенныйЗапрос.КолвоТТ КАК КолвоТТ,
    ВЫБОР
        КОГДА ЕСТЬNULL(ТабТТН.Стоимость, 0) = 0
            ТОГДА ВложенныйЗапрос.СуммаОтгрузки
        ИНАЧЕ ВложенныйЗапрос.СуммаОтгрузки - ТабТТН.Стоимость
    КОНЕЦ КАК МаржинальнаяПрибыль,
    ВЫБОР
        КОГДА ЕСТЬNULL(ТабТТН.Стоимость, 0) <> 0
                И ЕСТЬNULL(ТабТТН.Протяженность, 0) <> 0
            ТОГДА ТабТТН.Стоимость / ТабТТН.Протяженность
        ИНАЧЕ NULL
    КОНЕЦ КАК ТранспортРасходыНАКМ,
    ВЫБОР
        КОГДА ЕСТЬNULL(ВложенныйЗапрос.КолвоОтгрузки, 0) <> 0
                И ЕСТЬNULL(ТабТТН.Стоимость, 0) <> 0
            ТОГДА ТабТТН.Стоимость / ВложенныйЗапрос.КолвоОтгрузки
        ИНАЧЕ NULL
    КОНЕЦ КАК ТранспортРасходыНаКГ,
    ВЫБОР
        КОГДА ЕСТЬNULL(ВложенныйЗапрос.КолвоОтгрузки, 0) <> 0
                И ЕСТЬNULL(ВложенныйЗапрос.КолвоТТ, 0) <> 0
            ТОГДА ВложенныйЗапрос.КолвоОтгрузки / ВложенныйЗапрос.КолвоТТ
        ИНАЧЕ NULL
    КОНЕЦ КАК СредняяОтгрузкаВТТ,
    ВЫБОР
        КОГДА ЕСТЬNULL(ТабТТН.Стоимость, 0) <> 0
                И ЕСТЬNULL(ВложенныйЗапрос.КолвоТТ, 0) <> 0
            ТОГДА ТабТТН.Стоимость / ВложенныйЗапрос.КолвоТТ
        ИНАЧЕ NULL
    КОНЕЦ КАК СредняяСтоимостьВТТ,
    ВесБруттоИБонусы.НачисленныйБонус КАК НачисленныйБонус,
    ВесБруттоИБонусы.ВесТары КАК ВесТары,
    ВесБруттоИБонусы.ВесПакетов КАК ВесПакетов,
    ВложенныйЗапрос.КолвоОтгрузки + ВесБруттоИБонусы.ВесТары + ВесБруттоИБонусы.ВесПакетов КАК КолвоОтгрузкиБрутто
ИЗ
    ТабТТН КАК ТабТТН
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПродажиОбороты.ДокументПродажи.Маршрут КАК Маршрут,
            СУММА(ПродажиОбороты.КоличествоСкладОборот) КАК КолвоОтгрузки,
            СУММА(ПродажиОбороты.СтоимостьОборот - ПродажиСебестоимостьОбороты.СтоимостьОборот) КАК СуммаОтгрузки,
            НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК ДатаРеализации,
            КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент) КАК КолвоТТ
        ИЗ
            РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, Регистратор, ) КАК ПродажиОбороты
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты(&ДатаНачала, &ДатаКонца, Регистратор, ) КАК ПродажиСебестоимостьОбороты
                ПО ПродажиОбороты.Регистратор = ПродажиСебестоимостьОбороты.Регистратор
        ГДЕ
            ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
        
        СГРУППИРОВАТЬ ПО
            ПродажиОбороты.ДокументПродажи.Маршрут,
            НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ)) КАК ВложенныйЗапрос
        ПО ТабТТН.Маршрут = ВложенныйЗапрос.Маршрут
            И ТабТТН.ДатаКалендаря = ВложенныйЗапрос.ДатаРеализации
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВложенныйЗапрос.ДокРеализации.Маршрут КАК Маршрут,
            СУММА(ВложенныйЗапрос.ВесПакетов) КАК ВесПакетов,
            СУММА(ВложенныйЗапрос.ВесТары) КАК ВесТары,
            НАЧАЛОПЕРИОДА(ВложенныйЗапрос.ДокРеализации.Дата, ДЕНЬ) КАК ДатаРеализации,
            СУММА(НачисленныеБонусы.НачисленныйБонус) КАК НачисленныйБонус
        ИЗ
            (ВЫБРАТЬ
                СУММА(ВЫБОР
                        КОГДА ЕСТЬNULL(ТабВесПакета.ВесПакета, 0) <> 0
                            ТОГДА РеализацияТоваровУслугТовары.КоличествоПакетов * ТабВесПакета.ВесПакета
                        ИНАЧЕ 0
                    КОНЕЦ) КАК ВесПакетов,
                РеализацияТоваровУслугТовары.Ссылка.ВесТары КАК ВесТары,
                РеализацияТоваровУслугТовары.Ссылка КАК ДокРеализации,
                ВложенныйЗапрос.ВесПакета КАК ВесПакета
            ИЗ
                Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                    ЛЕВОЕ СОЕДИНЕНИЕ ТабВесПакета КАК ТабВесПакета
                    ПО РеализацияТоваровУслугТовары.Номенклатура = ТабВесПакета.ВесПакета,
                (ВЫБРАТЬ
                    ТабВесПакета.Номенклатура КАК Номенклатура,
                    ТабВесПакета.ВесПакета КАК ВесПакета
                ИЗ
                    ТабВесПакета КАК ТабВесПакета) КАК ВложенныйЗапрос
            ГДЕ
                РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
                И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
            
            СГРУППИРОВАТЬ ПО
                РеализацияТоваровУслугТовары.Ссылка,
                РеализацияТоваровУслугТовары.Ссылка.ВесТары,
                ВложенныйЗапрос.ВесПакета) КАК ВложенныйЗапрос
                ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                    СУММА(таБонусыАкцийОбороты.КоличествоПриход) КАК НачисленныйБонус,
                    НАЧАЛОПЕРИОДА(таБонусыАкцийОбороты.Период, ДЕНЬ) КАК ДатаНачисления,
                    таБонусыАкцийОбороты.Документ КАК ДокРеализации
                ИЗ
                    РегистрНакопления.таБонусыАкций.Обороты(&ДатаНачала, &ДатаКонца, Регистратор, ) КАК таБонусыАкцийОбороты
                ГДЕ
                    таБонусыАкцийОбороты.Документ.Проведен = ИСТИНА
                
                СГРУППИРОВАТЬ ПО
                    НАЧАЛОПЕРИОДА(таБонусыАкцийОбороты.Период, ДЕНЬ),
                    таБонусыАкцийОбороты.Документ) КАК НачисленныеБонусы
                ПО (НАЧАЛОПЕРИОДА(ВложенныйЗапрос.ДокРеализации.Дата, ДЕНЬ) = НачисленныеБонусы.ДатаНачисления)
                    И ВложенныйЗапрос.ДокРеализации = НачисленныеБонусы.ДокРеализации
        
        СГРУППИРОВАТЬ ПО
            ВложенныйЗапрос.ДокРеализации.Маршрут,
            НАЧАЛОПЕРИОДА(ВложенныйЗапрос.ДокРеализации.Дата, ДЕНЬ)) КАК ВесБруттоИБонусы
        ПО ТабТТН.Маршрут = ВесБруттоИБонусы.Маршрут
            И ТабТТН.ДатаКалендаря = ВесБруттоИБонусы.ДатаРеализации,
    ТабВесПакета КАК ТабВесПакета
ИТОГИ
    СРЕДНЕЕ(Протяженность),
    СРЕДНЕЕ(Стоимость),
    СРЕДНЕЕ(КолвоОтгрузки),
    СРЕДНЕЕ(СуммаОтгрузки),
    СРЕДНЕЕ(КолвоТТ),
    СРЕДНЕЕ(МаржинальнаяПрибыль),
    СРЕДНЕЕ(ТранспортРасходыНАКМ),
    СРЕДНЕЕ(ТранспортРасходыНаКГ),
    СРЕДНЕЕ(СредняяОтгрузкаВТТ),
    СРЕДНЕЕ(СредняяСтоимостьВТТ),
    СРЕДНЕЕ(НачисленныйБонус),
    СРЕДНЕЕ(ВесТары),
    СРЕДНЕЕ(ВесПакетов),
    СРЕДНЕЕ(КолвоОтгрузкиБрутто)
ПО
    Маршрут,
    ДатаКалендаря
1 Ненавижу 1С
 
гуру
09.10.15
15:30
подозреваю, что ВесПакета это не число
2 ibreiter
 
09.10.15
15:42
ПО РеализацияТоваровУслугТовары.Номенклатура = ТабВесПакета.ВесПакета непонятно
3 Iceman_208
 
09.10.15
15:47
"ПО РеализацияТоваровУслугТовары.Номенклатура = ТабВесПакета.ВесПакета непонятно" исправил, но ошибка осталась
4 Iceman_208
 
09.10.15
15:48
по поводу параметра ВесПакета, то там преобразовано в число все предварительно
5 Ненавижу 1С
 
гуру
09.10.15
15:49
(4) покажи как преобразовано
6 Iceman_208
 
09.10.15
15:50
Запрос.Текст = "ВЫБРАТЬ
                        |    ЗначенияСвойствОбъектов.Объект КАК Номенклатура,
                        |    ЗначенияСвойствОбъектов.Значение КАК ВесПакета
                        |ИЗ
                        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                        |ГДЕ
                        |    ЗначенияСвойствОбъектов.Свойство = &Свойство";
        Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.ВесПакета);
        
        Попытка
            ТабВесПакета = Запрос.Выполнить().Выгрузить();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
        
        Для Каждого СтрокаТабВесПакета ИЗ ТабВесПакета Цикл
            СтрокаТабВесПакета.ВесПакета = Число(Формат(СтрокаТабВесПакета.ВесПакета.Наименование,"ЧЦ=10; ЧДЦ=3; ЧРД=."));
        КонецЦикла;
7 Iceman_208
 
09.10.15
15:50
ТабВесПакета эта та таблица что передается в запрос
8 ibreiter
 
09.10.15
16:02
Можно без выбора сразу * ЕСТЬNULL(ТабВесПакета.ВесПакета, 0)
9 Iceman_208
 
09.10.15
16:05
(8) Можно, переделал, ошибка все равно.
10 ibreiter
 
09.10.15
16:08
Таблицу ТабВесПакета проверяли, что там в колонке вес?
11 Горогуля
 
09.10.15
16:10
круто. числовое значение допсвойства добывается из наименования. я б так не додумался
12 Iceman_208
 
09.10.15
16:12
(10) Там вес, из серии 0.012 и т.д
13 Iceman_208
 
09.10.15
16:13
(10) Для теста делал
Для Каждого СтрокаТабВесПакета ИЗ ТабВесПакета Цикл
            СтрокаТабВесПакета.ВесПакета = 1;
        КонецЦикла;
14 Iceman_208
 
09.10.15
16:13
все равно ошибка
15 Iceman_208
 
09.10.15
16:13
Такое ощущение как будто не может прочитать значение из временной таблицы
16 ibreiter
 
09.10.15
16:14
Давайте еще раз запрос сюда полностью
17 sash-ml
 
09.10.15
16:18
Переименуй выборки и времянки
ПОМЕСТИТЬ ВТ_ТабТТН
ИЗ
    &ТабТТН КАК ТабТТН
18 Iceman_208
 
09.10.15
16:30
Все решалось проще
апрос.Текст = "ВЫБРАТЬ
                        |    ЗначенияСвойствОбъектов.Объект КАК Номенклатура,
                        |    ЗначенияСвойствОбъектов.Значение КАК ВесПакета1
                        |ИЗ
                        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                        |ГДЕ
                        |    ЗначенияСвойствОбъектов.Свойство = &Свойство";
        Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.ВесПакета);
        
        Попытка
            ТабВесПакета = Запрос.Выполнить().Выгрузить();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
        
        ТабВесПакета.Колонки.Добавить("ВесПакета", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
        Для Каждого СтрокаТабВесПакета ИЗ ТабВесПакета Цикл
            СтрокаТабВесПакета.ВесПакета = Число(Формат(СтрокаТабВесПакета.ВесПакета1.Наименование,"ЧЦ=10; ЧДЦ=3; ЧРД=."));
            //СтрокаТабВесПакета.ВесПакета = 1;
        КонецЦикла;
19 ibreiter
 
09.10.15
16:48
Так я и думал..
2 + 2 = 3.9999999999999999999999999999999...