Имя: Пароль:
1C
 
При выполнении запроса. Недопустимый тип данных в записи.
0 xipypg2012
 
21.06.16
10:57
Запрос:

Подскажите в чем может быть дело. Вылетает на выполнение по группировкам такого запроса:

ВЫБРАТЬ
                   |    Результат.Номенклатура КАК Номенклатура,
                   |    Результат.ДнейПродажи КАК ДнейПродажи,
                   |    Результат.НоменклатураПредставление КАК НоменклатураПредставление,
                   |    Результат.Остаток КАК Остаток,
                   |    Результат.П_Out_of_stock КАК П_Out_of_stock,
                   |    Результат.П_Stock КАК П_Stock,
                   |    Результат.Продано КАК Продано,
                   |    Результат.Склад КАК Склад,
                   |    Результат.СкладПредставление КАК СкладПредставление,
                   |    Результат.СредняяПродажаЗаДень КАК СредняяПродажаЗаДень
                   |ПОМЕСТИТЬ ВР_ТЗ
                   |ИЗ
                   |    &Результат КАК Результат
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ РАЗЛИЧНЫЕ
                   |    ВР_ТЗ.Номенклатура КАК Номенклатура,
                   |    ВР_ТЗ.ДнейПродажи КАК ДнейПродажи,
                   |    Выразить(ВЫБОР
                   |        КОГДА &ЕдХрОст
                   |            ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
                   |        ИНАЧЕ ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) / ЕСТЬNULL(ВР_ТЗ.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,1)
                   |    КОНЕЦ как Число(10,2)) КАК КоличествоКонечныйОстатокОптовый,
                   |    Выразить(ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) как число(10,2)) КАК КоличествоКонечныйОстатокОптовыйСумма,
                   |    Выразить(ВЫБОР
                   |        КОГДА &ЕдХрОст
                   |            ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, 0)
                   |        ИНАЧЕ ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, 0) / ЕСТЬNULL(ВР_ТЗ.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,1)
                   |    КОНЕЦ как число(10,2)) КАК КоличествоНачальныйОстатокОптовый,
                   |    Выразить(ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, 0) * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) как число(10,2)) КАК КоличествоНачальныйОстатокОптовыйСумма,
                   |    Выразить(ВЫБОР
                   |        КОГДА &ЕдХрОст
                   |            ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход, 0)
                   |        ИНАЧЕ ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход, 0) / ЕСТЬNULL(ВР_ТЗ.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,1)
                   |    КОНЕЦ как число(10,2)) КАК КоличествоПриходОптовый,
                   |    Выразить(ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход, 0) * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) как число(10,2)) КАК КоличествоПриходОптовыйСумма,
                   |    Выразить(ВЫБОР
                   |        КОГДА &ЕдХрОст
                   |            ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход, 0)
                   |        ИНАЧЕ ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход, 0) /ЕСТЬNULL(ВР_ТЗ.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,1)
                   |    КОНЕЦ как число(10,2)) КАК КоличествоРасходОптовый,
                   |    Выразить(ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход, 0) * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) как число(10,2)) КАК КоличествоРасходОптовыйСумма,
                   |    ПРЕДСТАВЛЕНИЕ(ВР_ТЗ.Номенклатура) КАК НоменклатураПредставление,
                   |    ВР_ТЗ.Остаток КАК Остаток,
                   |    ВР_ТЗ.П_Out_of_stock КАК П_Out_of_stock,
                   |    ВР_ТЗ.П_Stock КАК П_Stock,
                   |    ВР_ТЗ.Продано КАК Продано,
                   |    ВР_ТЗ.Склад КАК Склад,
                   |    ПРЕДСТАВЛЕНИЕ(ВР_ТЗ.Склад) КАК СкладПредставление,
                   |    ВР_ТЗ.СредняяПродажаЗаДень КАК СредняяПродажаЗаДень,
                   |    Выразить(ВЫБОР
                   |        КОГДА &ЕдХрОст
                   |            ТОГДА ВР_ТЗ.П_Out_of_stock * ВР_ТЗ.СредняяПродажаЗаДень
                   |        ИНАЧЕ ВР_ТЗ.П_Out_of_stock * ВР_ТЗ.СредняяПродажаЗаДень / ЕСТЬNULL(ВР_ТЗ.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,1)
                   |    КОНЕЦ как число(10,2))   КАК ПотериКолво,
                   |    Выразить(ВР_ТЗ.П_Out_of_stock * ВР_ТЗ.СредняяПродажаЗаДень * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) как число(10,2)) КАК ПотериСумма,
                   |    Выразить(ВЫБОР
                   |        КОГДА ВР_ТЗ.СредняяПродажаЗаДень = 0
                   |            ТОГДА 0
                   |        ИНАЧЕ ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) / ЕСТЬNULL(ВР_ТЗ.СредняяПродажаЗаДень,1)
                   |    КОНЕЦ как число(10,2)) КАК ОстатокВДнях
                   |ИЗ
                   |    ВР_ТЗ КАК ВР_ТЗ
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДН, &ДК, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
                   |        ПО ВР_ТЗ.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура
                   |            И ВР_ТЗ.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
                   |        ПО ВР_ТЗ.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Склад,
                   |    Номенклатура
                   |
                   |ИТОГИ
                   |    МАКСИМУМ(ДнейПродажи),
                   |    СУММА(КоличествоКонечныйОстатокОптовый),
                   |    СУММА(КоличествоКонечныйОстатокОптовыйСумма),
                   |    СУММА(КоличествоНачальныйОстатокОптовый),
                   |    СУММА(КоличествоНачальныйОстатокОптовыйСумма),
                   |    СУММА(КоличествоПриходОптовый),
                   |    СУММА(КоличествоПриходОптовыйСумма),
                   |    СУММА(КоличествоРасходОптовый),
                   |    СУММА(КоличествоРасходОптовыйСумма),
                   |    СУММА(Остаток),
                   |    СУММА(П_Out_of_stock),
                   |    СУММА(П_Stock),
                   |    СУММА(Продано),
                   |    СУММА(СредняяПродажаЗаДень),
                   |    СУММА(ПотериКолво),
                   |    СУММА(ПотериСумма),
                   |    СУММА(ОстатокВДнях)
                   |ПО
                   |    ОБЩИЕ,
                   |    Склад,
                   |    Номенклатура ИЕРАРХИЯ
                   |АВТОУПОРЯДОЧИВАНИЕ
1 xipypg2012
 
21.06.16
10:57
и вылетает тут :

ВыборкаОбщийИтог = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
2 Ёпрст
 
гуру
21.06.16
11:01
(0) &Результат - передаешь , надеюсь, типизированную ТЗ ?
3 sash-ml
 
21.06.16
11:01
в параметре из которого ты читаешь данные должны быть типизированные колонки
"&Результат КАК Результат"
4 xipypg2012
 
21.06.16
11:18
Да это выборка другого запроса :

ПостроительЗапросаОстаток = Новый ПостроительЗапроса;
    ПостроительЗапросаОстаток.Текст = "ВЫБРАТЬ
                                      |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                                      |    ТоварыНаСкладахОстатки.КоличествоОстаток
                                      |ИЗ
                                      |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                                      |            &ДатаКон,
                                      |            Склад = &Склад
                                      |                И Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки";

    
    Результат.Колонки.Добавить("Продано", Новый ОписаниеТипов("Число"));
    Результат.Колонки.Добавить("ДнейПродажи", Новый ОписаниеТипов("Число"));
    Результат.Колонки.Добавить("СредняяПродажаЗаДень", Новый ОписаниеТипов("Число"));
    Результат.Колонки.Добавить("Остаток", Новый ОписаниеТипов("Число"));
    Результат.Колонки.Добавить("НеобходимыйОбъемЗакупки", Новый ОписаниеТипов("Число"));
    Результат.Колонки.Добавить("ПланируемыйОбъемПродаж", Новый ОписаниеТипов("Число"));
    
    Результат.Колонки.Добавить("П_Stock", Новый ОписаниеТипов("Число"));
    Результат.Колонки.Добавить("П_Out_of_stock", Новый ОписаниеТипов("Число"));
    
    Stock = 0;
    Out_of_stock = 0;
    
    
    ВыборкаСклад = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаСклад.Следующий() Цикл
        
        ВыборкаНоменклатура = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока ВыборкаНоменклатура.Следующий() Цикл
            
            ПроданоВсего = ВыборкаНоменклатура.Продано;
            КоличествоДнейПродажи = 0;
            ТекущийОстаток = ВыборкаНоменклатура.КоличествоНачальныйОстаток;
            ТекущаяДата = ДатаНачПродаж;
            ТекущаяДатаУчтена = 0;
            
            //Выборка по периодам продажи товара, для расчета дней продаж
            ВыборкаПериод = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            
            Пока ВыборкаПериод.Следующий() Цикл
                                    
                    ТекущийОстаток = ВыборкаПериод.КоличествоНачальныйОстаток;
                    
                    Если ВыборкаПериод.Период <> Неопределено И НачалоДня(ТекущаяДата) <> НачалоДня(ВыборкаПериод.Период) Тогда
                        
                        Если ВыборкаПериод.Продано > 0 Тогда
                            
                            КоличествоДнейПродажи = КоличествоДнейПродажи + 1;
                            
                        КонецЕсли;
                        
                        ТекущаяДатаУчтена = 0;
                        ТекущаяДата = НачалоДня(ВыборкаПериод.Период);
                        
                    КонецЕсли;
                          
                    ТекущийОстаток = ВыборкаПериод.КоличествоКонечныйОстаток;
                                        
                КонецЦикла;
                
                Stock = 0;
                Out_of_stock = 0;
                //Расчет Кол-во дней в периоде, когда товар присутствовал на складе, на конец дня,
                ДатаНачПер = ДатаНачПродаж;
                Пока ДатаНачПер <= ДатаКонПродаж Цикл
                    
                    ПостроительЗапросаОстаток.Параметры.Вставить("Номенклатура",ВыборкаНоменклатура.Номенклатура);
                    ПостроительЗапросаОстаток.Параметры.Вставить("Склад",ВыборкаСклад.Склад);
                    ПостроительЗапросаОстаток.Параметры.Вставить("ДатаКон",КонецДня(ДатаНачПер));

                    ПостроительЗапросаОстаток.Выполнить();
                    
                    Рез = ПостроительЗапросаОстаток.Результат.Выбрать();
                    Если рез.Следующий() И рез.КоличествоОстаток > 0 Тогда
                        Stock = Stock + 1;
                    Иначе
                        Out_of_stock = Out_of_stock + 1;    
                    КонецЕсли;
                    
                    ДатаНачПер = ДатаНачПер + 86400;
                    
                КонецЦикла;
                
                
                //Если ТекущийОстаток > 0 Тогда
                //    
                //    КоличествоДнейПродажи = КоличествоДнейПродажи + ЧислоРабочихДнейМежду(ТекущаяДата + ТекущаяДатаУчтена, ДатаКонПродаж);
                //    
                //КонецЕсли;
                
                СредняяСкорость = ?(КоличествоДнейПродажи = 0, 0, ПроданоВсего / КоличествоДнейПродажи);
                //ОстатокКНачалуЗакупок = ВыборкаНоменклатура.ОстатокНаДатуНачалаЗакупок;
                
                //ДнейЗакупок = ЧислоРабочихДнейМежду(ДатаНачЗакупок, ДатаКонЗакупок);
                //ПланПродаж = Макс(0, ДнейЗакупок * СредняяСкорость);
                //ОбъемЗакупок = Макс(0, ПланПродаж - ОстатокКНачалуЗакупок);
                
                //ПланПродаж = Округлить(ПланПродаж, , Истина);
                //ОбъемЗакупок = Округлить(ОбъемЗакупок, ПорядокОкругления, Истина);
                //СредняяСкорость = (СредняяСкорость,РежимОкругления.Окр15как20,Истина);
                
                НоваяСтрока = Результат.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаНоменклатура);
                
                НоваяСтрока.ДнейПродажи = КоличествоДнейПродажи;
                НоваяСтрока.СредняяПродажаЗаДень = СредняяСкорость;
                //НоваяСтрока.Остаток = ОстатокКНачалуЗакупок;
                //НоваяСтрока.НеобходимыйОбъемЗакупки = ОбъемЗакупок;
                //НоваяСтрока.ПланируемыйОбъемПродаж = ПланПродаж;
                НоваяСтрока.П_Stock        = Stock;
                НоваяСтрока.П_Out_of_stock = Out_of_stock;

                ОбработкаПрерыванияПользователя();
            
        КонецЦикла;
        
    КонецЦикла;

Просто он вылетает на большом периоде, если этот же период взять и прогнать более маленькими то все отличн.
5 Ёпрст
 
гуру
21.06.16
11:23
(4) как бэ, запрос в цикле не есть гуд.
6 xipypg2012
 
21.06.16
11:26
запрос идт не в цикле, тот запрос на котором вылетает идет за циклом после него , это я скинул как пример откуда берется таблица результат
7 Ёпрст
 
гуру
21.06.16
11:33
>>>Просто он вылетает на большом периоде

Это который вылетает ?
8 Ёпрст
 
гуру
21.06.16
11:34
и.. в (0) выразить как число, нужно выкинуть, везде, это лишнее
9 Ёпрст
 
гуру
21.06.16
11:37
писать ЕСТЬNULL(ВР_ТЗ.СредняяПродажаЗаДень,1) и аналогичные конструкции с  ЕСТЬNULL к ВР_ТЗ не имеет смысла - там нулл значений никогда не будет.
10 Ёпрст
 
гуру
21.06.16
11:37
там надо делать проверку на 0, при делении
11 xipypg2012
 
21.06.16
11:45
ну я вобще запросом пробежался там нулей нету ,а выразить добавил потому что аналогичная ошибка могла быть если слишком много символов
12 xipypg2012
 
21.06.16
11:45
вобщем поэтому я остался в сметение и не знаю что еще придумать можно . вылетает при выполнение запроса в первом сообщение
13 aleks_default
 
21.06.16
11:47
Типизированы должны быть ВСЕ колонки таблицы "Результат".
14 aleks_default
 
21.06.16
11:50
(6) Вот это что?

Пока ДатаНачПер <= ДатаКонПродаж Цикл
                    
                    ПостроительЗапросаОстаток.Параметры.Вставить("Номенклатура",ВыборкаНоменклатура.Номенклатура);
                    ПостроительЗапросаОстаток.Параметры.Вставить("Склад",ВыборкаСклад.Склад);
                    ПостроительЗапросаОстаток.Параметры.Вставить("ДатаКон",КонецДня(ДатаНачПер));

                    ПостроительЗапросаОстаток.Выполнить();
15 xipypg2012
 
21.06.16
11:52
Выполнение запроса остатков и проверка на отрезания лишнего
16 aleks_default
 
21.06.16
11:57
это запрос в цикле
17 xipypg2012
 
21.06.16
12:02
сори )) да есть такое дело)
18 ptiz
 
21.06.16
12:20
(0) Заменяй строки
|    Результат.Остаток КАК Остаток,

на
|    0 КАК Остаток,

и так выйдешь на проблемную строку
19 xipypg2012
 
21.06.16
12:24
(18) от спасибо за идею)) щас попробуем))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший