Имя: Пароль:
1C
1С v8
Ошибка СУБД Недопустимое преобразование типов данных в записи
, ,
0 patria0muerte
 
20.01.16
04:42
Доброго времени суток, граждане.

Суть такая, есть запрос (указан постом ниже). Данный запрос периодически (примерно каждый третий-четвертый раз) падает с ошибкой, указанной в заголовке. Падает и в консоли запросов и в отчете.

Что делалось:
1. Чистился локальный кэш
2. Проверялся запрос на всякие NULL и прочее.

Не помогло.
На партнерке вещают, что это может быть из-за округления в запросе, но там вроде только одна арфиметическая операция с числами 15,2, да и та в ВЫРАЗИТЬ завернута.

Платформа: 8.3.6.2152
Конфигурация: УПП 1.2 (Режим совместимости 8.1)

Сталкивался может кто с такой бедой? Как лечили? Что посоветуете?
1 patria0muerte
 
20.01.16
04:42
Сам запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    РеализацияТоваровУслугТовары.Ссылка,
    РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
    РеализацияТоваровУслугТовары.Ссылка.ТипЦен,
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
    РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры,
    РеализацияТоваровУслугТовары.СерияНоменклатуры КАК СерияНоменклатуры,
    РеализацияТоваровУслугТовары.СерияНоменклатуры.СрокГодности КАК СрокГодности,
    РеализацияТоваровУслугТовары.Склад КАК Склад,
    РеализацияТоваровУслугТовары.Количество,
    РеализацияТоваровУслугТовары.Цена,
    РеализацияТоваровУслугТовары.Сумма,
    НАЧАЛОПЕРИОДА(РеализацияТоваровУслугТовары.Ссылка.Дата, ДЕНЬ) КАК ДеньПродажи,
    РАЗНОСТЬДАТ(РеализацияТоваровУслугТовары.СерияНоменклатуры.СрокГодности, РеализацияТоваровУслугТовары.Ссылка.Дата, ДЕНЬ) КАК ДнейПросрочено,
    РАЗНОСТЬДАТ(РеализацияТоваровУслугТовары.СерияНоменклатуры.СрокГодности, РеализацияТоваровУслугТовары.Ссылка.Дата, ДЕНЬ) > 0 КАК Просрочено
ПОМЕСТИТЬ ВТРеализации
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И НЕ РеализацияТоваровУслугТовары.СерияНоменклатуры.СрокГодности = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    И РеализацияТоваровУслугТовары.СерияНоменклатуры.СрокГодности <= ДОБАВИТЬКДАТЕ(РеализацияТоваровУслугТовары.Ссылка.Дата, МЕСЯЦ, 3)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЦеныНоменклатуры.Период,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ХарактеристикаНоменклатуры,
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Цена,
    ЦеныНоменклатуры.ЕдиницаИзмерения
ПОМЕСТИТЬ ВТЦеныНоменклатуры
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    (ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.ХарактеристикаНоменклатуры, ЦеныНоменклатуры.ТипЦен) В
            (ВЫБРАТЬ
                ВТ.Номенклатура,
                ВТ.ХарактеристикаНоменклатуры,
                ВТ.ТипЦен
            ИЗ
                ВТРеализации КАК ВТ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МАКСИМУМ(ВТЦеныНоменклатуры.Период) КАК Период,
    ВТРеализации.Номенклатура,
    ВТРеализации.ХарактеристикаНоменклатуры,
    ВТРеализации.ДеньПродажи,
    ВТРеализации.ТипЦен
ПОМЕСТИТЬ ВТДатыПоследнихЦен
ИЗ
    ВТРеализации КАК ВТРеализации
        ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныНоменклатуры КАК ВТЦеныНоменклатуры
        ПО ВТРеализации.Номенклатура = ВТЦеныНоменклатуры.Номенклатура
            И ВТРеализации.ХарактеристикаНоменклатуры = ВТЦеныНоменклатуры.ХарактеристикаНоменклатуры
            И ВТРеализации.ДеньПродажи >= ВТЦеныНоменклатуры.Период
            И ВТРеализации.ТипЦен = ВТЦеныНоменклатуры.ТипЦен

СГРУППИРОВАТЬ ПО
    ВТРеализации.Номенклатура,
    ВТРеализации.ХарактеристикаНоменклатуры,
    ВТРеализации.ДеньПродажи,
    ВТРеализации.ТипЦен
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТДатыПоследнихЦен.Номенклатура,
    ВТДатыПоследнихЦен.ХарактеристикаНоменклатуры,
    ВТДатыПоследнихЦен.ДеньПродажи,
    ЕСТЬNULL(ВТЦеныНоменклатуры.Цена, 0) КАК ЦенаПрайса,
    ВТЦеныНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмеренияЦены,
    ВТЦеныНоменклатуры.Период КАК ДатаЦены,
    ВТДатыПоследнихЦен.ТипЦен
ПОМЕСТИТЬ ВТНоменклатураИЦены
ИЗ
    ВТДатыПоследнихЦен КАК ВТДатыПоследнихЦен
        ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныНоменклатуры КАК ВТЦеныНоменклатуры
        ПО (ВТЦеныНоменклатуры.Номенклатура = ВТДатыПоследнихЦен.Номенклатура)
            И (ВТЦеныНоменклатуры.ХарактеристикаНоменклатуры = ВТДатыПоследнихЦен.ХарактеристикаНоменклатуры)
            И (ВТЦеныНоменклатуры.Период = ВТДатыПоследнихЦен.Период)
            И (ВТЦеныНоменклатуры.ТипЦен = ВТДатыПоследнихЦен.ТипЦен)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТРеализации.Ссылка,
    ВТРеализации.Дата,
    ВТРеализации.ТипЦен,
    ВТРеализации.Номенклатура,
    ВТРеализации.ЕдиницаИзмерения,
    ВТРеализации.ХарактеристикаНоменклатуры,
    ВТРеализации.СерияНоменклатуры,
    ВТРеализации.СрокГодности,
    ВТРеализации.Склад,
    ВТРеализации.Количество,
    ВТРеализации.Цена КАК ЦенаПродажи,
    ВТРеализации.Сумма,
    ВТРеализации.ДеньПродажи,
    ВТРеализации.ДнейПросрочено,
    ВТРеализации.Просрочено,
    ВТРеализации.Цена - ВТНоменклатураИЦены.ЦенаПрайса КАК РазницаЦен,
    ВТНоменклатураИЦены.ЦенаПрайса
ПОМЕСТИТЬ ВТПродажиПросроченныхТоваров
ИЗ
    ВТРеализации КАК ВТРеализации
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНоменклатураИЦены КАК ВТНоменклатураИЦены
        ПО ВТРеализации.Номенклатура = ВТНоменклатураИЦены.Номенклатура
            И ВТРеализации.ХарактеристикаНоменклатуры = ВТНоменклатураИЦены.ХарактеристикаНоменклатуры
            И ВТРеализации.ДеньПродажи = ВТНоменклатураИЦены.ДеньПродажи
            И ВТРеализации.ТипЦен = ВТНоменклатураИЦены.ТипЦен
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Склад,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Период,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоНачальныйОстаток,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.СтоимостьНачальныйОстаток
ПОМЕСТИТЬ ВТПартииТоваровБУ
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.ОстаткиИОбороты(
            &НачалоПериода,
            &КонецПериода,
            Секунда,
            ,
            (Номенклатура, ХарактеристикаНоменклатуры, Склад) В
                    (ВЫБРАТЬ
                        ВТ.Номенклатура,
                        ВТ.ХарактеристикаНоменклатуры,
                        ВТ.Склад
                    ИЗ
                        ВТРеализации КАК ВТ)
                И Организация = &ГоловнаяОрганизацияБУ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ВТПродажиПросроченныхТоваров.Ссылка,
    ВТПродажиПросроченныхТоваров.Дата,
    ВТПродажиПросроченныхТоваров.ТипЦен,
    ВТПродажиПросроченныхТоваров.Номенклатура,
    ВТПродажиПросроченныхТоваров.ЕдиницаИзмерения,
    ВТПродажиПросроченныхТоваров.ХарактеристикаНоменклатуры,
    ВТПродажиПросроченныхТоваров.СерияНоменклатуры,
    ВТПродажиПросроченныхТоваров.СрокГодности,
    ВТПродажиПросроченныхТоваров.Склад,
    ВТПродажиПросроченныхТоваров.Количество,
    ВТПродажиПросроченныхТоваров.ЦенаПродажи,
    ВТПродажиПросроченныхТоваров.Сумма,
    ВТПродажиПросроченныхТоваров.ДеньПродажи,
    ВТПродажиПросроченныхТоваров.ДнейПросрочено,
    ВТПродажиПросроченныхТоваров.Просрочено,
    ВТПродажиПросроченныхТоваров.РазницаЦен,
    ВТПродажиПросроченныхТоваров.ЦенаПрайса,
    МАКСИМУМ(ВТПартииТоваровБУ.Период) КАК Период
ПОМЕСТИТЬ ВТПериодыПартий
ИЗ
    ВТПродажиПросроченныхТоваров КАК ВТПродажиПросроченныхТоваров
        ЛЕВОЕ СОЕДИНЕНИЕ ВТПартииТоваровБУ КАК ВТПартииТоваровБУ
        ПО ВТПродажиПросроченныхТоваров.Номенклатура = ВТПартииТоваровБУ.Номенклатура
            И ВТПродажиПросроченныхТоваров.ХарактеристикаНоменклатуры = ВТПартииТоваровБУ.ХарактеристикаНоменклатуры
            И ВТПродажиПросроченныхТоваров.Склад = ВТПартииТоваровБУ.Склад
            И ВТПродажиПросроченныхТоваров.Дата >= ВТПартииТоваровБУ.Период

СГРУППИРОВАТЬ ПО
    ВТПродажиПросроченныхТоваров.Номенклатура,
    ВТПродажиПросроченныхТоваров.Ссылка,
    ВТПродажиПросроченныхТоваров.ДеньПродажи,
    ВТПродажиПросроченныхТоваров.Дата,
    ВТПродажиПросроченныхТоваров.ХарактеристикаНоменклатуры,
    ВТПродажиПросроченныхТоваров.СрокГодности,
    ВТПродажиПросроченныхТоваров.СерияНоменклатуры,
    ВТПродажиПросроченныхТоваров.Просрочено,
    ВТПродажиПросроченныхТоваров.ТипЦен,
    ВТПродажиПросроченныхТоваров.Сумма,
    ВТПродажиПросроченныхТоваров.Количество,
    ВТПродажиПросроченныхТоваров.ДнейПросрочено,
    ВТПродажиПросроченныхТоваров.ЦенаПродажи,
    ВТПродажиПросроченныхТоваров.РазницаЦен,
    ВТПродажиПросроченныхТоваров.ЦенаПрайса,
    ВТПродажиПросроченныхТоваров.Склад,
    ВТПродажиПросроченныхТоваров.ЕдиницаИзмерения
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ВТПериодыПартий.Ссылка КАК Ссылка,
    ВЫРАЗИТЬ(ВТПериодыПартий.Ссылка.Сделка КАК Документ.ЗаказПокупателя).ТребуетсяСогласованиеЦены КАК СогласованиеУправления,
    ВТПериодыПартий.Дата КАК Дата,
    ВТПериодыПартий.ТипЦен КАК ТипЦен,
    ВТПериодыПартий.Номенклатура КАК Номенклатура,
    ВТПериодыПартий.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ВТПериодыПартий.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ВТПериодыПартий.СерияНоменклатуры КАК СерияНоменклатуры,
    ВТПериодыПартий.СрокГодности КАК СрокГодности,
    ВТПериодыПартий.Склад КАК Склад,
    ВТПериодыПартий.Количество КАК Количество,
    ВТПериодыПартий.ЦенаПродажи КАК ЦенаПродажи,
    ВТПериодыПартий.Сумма КАК Сумма,
    ВТПериодыПартий.ДеньПродажи КАК ДеньПродажи,
    ВТПериодыПартий.ДнейПросрочено КАК ДнейПросрочено,
    ВТПериодыПартий.Просрочено КАК Просрочено,
    ВТПериодыПартий.РазницаЦен КАК РазницаЦен,
    ВТПериодыПартий.ЦенаПрайса КАК ЦенаПрайса,
    ВЫРАЗИТЬ(ВЫБОР
            КОГДА ЕСТЬNULL(ВТПартииТоваровБУ.КоличествоНачальныйОстаток, 0) = 0
                ТОГДА 0
            ИНАЧЕ ЕСТЬNULL(ВТПартииТоваровБУ.СтоимостьНачальныйОстаток, 0) / ВТПартииТоваровБУ.КоличествоНачальныйОстаток
        КОНЕЦ КАК ЧИСЛО(15, 2)) КАК Себестоимость,
    ВТПериодыПартий.ТипЦен.Рассчитывается КАК ТипЦеныРассчитывается
ИЗ
    ВТПериодыПартий КАК ВТПериодыПартий
        ЛЕВОЕ СОЕДИНЕНИЕ ВТПартииТоваровБУ КАК ВТПартииТоваровБУ
        ПО ВТПериодыПартий.Номенклатура = ВТПартииТоваровБУ.Номенклатура
            И ВТПериодыПартий.ХарактеристикаНоменклатуры = ВТПартииТоваровБУ.ХарактеристикаНоменклатуры
            И ВТПериодыПартий.Склад = ВТПартииТоваровБУ.Склад
            И ВТПериодыПартий.Период = ВТПартииТоваровБУ.Период
2 patria0muerte
 
20.01.16
04:51
Что примечательо - с теми же параметрами запрос может нормально сформироваться пару раз. А затем, на третий раз - упасть.
3 assasu
 
20.01.16
05:40
сделай несколько мелких запросов вместо этого одного. так можешь точнее понять где ошибка. не факт совсем что это из за математики.
4 patria0muerte
 
20.01.16
06:13
(3) Спасибо, попробовал.
Тестировал, откусывая от запроса пакеты начиная с конца. Перестало падать, когда был отброшен пакет ВТПартииТоваровБУ. Что странно - в этом пакете нет каких-то дикийх джоинов и прочего. Самое обычное, классическое помещение Витруальной таблицы с отбором во временную. Посмотрю в сам регистр.

Но что то мне кажется, что это либо скуль шалит, либо платформа. Хотя вроде давно уже на ней, и не было такой беды.
5 assasu
 
20.01.16
06:34
где то запись побилась в этом регистре. ТИИ делать надо
6 patria0muerte
 
20.01.16
06:37
(5) Да я вот что думаю:
Если б запись побилась, то он бы наверное всегда бы падал на одном и том же периоде. А так - 1 через 4 раза падает.
7 patria0muerte
 
20.01.16
08:40
Хм. Что примечательно еще. Если мы отсекаем пакеты после создания ВТПартииТоваровБУ и убираем ПОМЕСТИТЬ ВТПартииТоваровБУ - все отрабатывает нормально. Да и в целом - другие отчеты, юзающие данный РН - отрабатывают корректно.
8 hhhh
 
20.01.16
09:17
вот тут наверно

    ИНАЧЕ ЕСТЬNULL(ВТПартииТоваровБУ.СтоимостьНачальныйОстаток, 0) / ВТПартииТоваровБУ.КоличествоНачальныйОстаток

ЕСТЬNULL забыл
9 patria0muerte
 
20.01.16
10:05
(8) Не, не в том дело. Проверил с обрамлением в ЕСТЬNULL() - падает также. Да и NULL туда не должен попадать, т.к. там по условию он просто не пройдет.

Да и в таких случаях внятно говорит ошибка что мол NULL или деление на 0.
10 patria0muerte
 
20.01.16
10:13
Изменил метод расчета себестоимости. Заменил ОстаткиИОбороты на просто Обороты, и себестоимость считаю прямо из движений реализации. Не падает.

Но что за х**нь это была, ума не приложу...
11 НЕА123
 
20.01.16
10:35
12 patria0muerte
 
20.01.16
10:45
(11) Не, не в знаках дело. В отчете арифметики то и нет, а то что есть - завернуто в ВЫРАЗИТЬ
13 patria0muerte
 
20.01.16
10:45
(11) Но спасибо.

Вообще всем спасибо, особенно (3), что натолкнул на метод выявления проблемного запроса.