Имя: Пароль:
1C
1С v8
Ошибка сравнения типов
0 malex18
 
04.09.17
11:40
{Документ.Расходная.МодульОбъекта(51)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда



Почему при сравнении "Выборка.количествоОстаток" это неопределенный тип?Если в запросе указал,что естьнулл = 0?????





Процедура ОбработкаПроведения(Отказ, Режим)
    
    Движения.ОстаткиТоваров.Записывать = Истина;
    Движения.ОстаткиТоваров.Записывать = Истина;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура,
    |    СУММА(Количество) КАК Количество,
    |    МИНИМУМ(НомерСтроки) КАК НомерСтроки
    |ПОМЕСТИТЬ ДокТЧ
    |ИЗ
    |    Документ.Расходная.Товары
    |ГДЕ
    |    Ссылка = &Ссылка И НЕ Номенклатура.Услуга
    |СГРУППИРОВАТЬ ПО Номенклатура
    |;
    |ВЫБРАТЬ
    |    Остатки.Партия,
    |    ДокТЧ.НомерСтроки,
    |    ДокТЧ.Номенклатура,
    |    ДокТЧ.Количество,
    |    ЕСТЬNULL(Остатки.КоличествоОстаток,0) КАК КоличествоОстаток,
    |    ЕСТЬNULL(Остатки.СтоимостьОстаток,0) КАК СтоимостьОстаток,
    |    ЕСТЬNULL(ОстаткиСКЛ.КоличествоОстаток,0) КАК ОстатокНаСкладе
    |ИЗ
    |    ДокТЧ КАК ДокТЧ
    |    
    |    ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, Номенклатура В(ВЫБРАТЬ Номенклатура ИЗ ДокТЧ КАК ДокТЧ)) КАК Остатки
    |    ПО ДокТЧ.Номенклатура = Остатки.Номенклатура
    |    
    |    ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ОстаткиПоСкладам.Остатки(&МоментВремени, Склад = &Склад
    |            И Номенклатура В(ВЫБРАТЬ Номенклатура ИЗ ДокТЧ КАК ДокТЧ) ) КАК ОстаткиСКЛ
    |    ПО ДокТЧ.Номенклатура = ОстаткиСКЛ.Номенклатура
    |ИТОГИ МИНИМУМ(Количество), МИНИМУМ(ОстатокНаСкладе), МИНИМУМ(НомерСтроки)
    |ПО ДокТЧ.Номенклатура";
    
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени() );
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Склад", Склад);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не хватает товара """ + Выборка.Номенклатура
            + """, из  необходимых " +
            Выборка.Количество + " в наличии осталось только " +
            Выборка.КоличествоОстаток;
            Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки-1) + "].Количество";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            
            Отказ = Истина;
            Движения.ОстаткиТоваров.Записывать = Ложь;
            Движения.ОстаткиПоСкладам.Записывать = Ложь;
            
        КонецЕсли;
    КонецЦикла;    
    
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    Выборка.Сбросить();
    
    Пока Выборка.Следующий() Цикл
        
        ОсталосьСписать = Выборка.Количество;
        
        ВыборкаПартии = Выборка.Выбрать();
        Пока ВыборкаПартии.Следующий() И ОсталосьСписать <> 0 Цикл
            
        Списать = Мин(ОсталосьСписать, ВыборкаПартии.КоличествоОстаток);
        Себестоимость = Списать / ВыборкаПартии.КоличествоОстаток * Выборка.Партии.СтоимостьОстаток;
            
            Движение = Движения.ОстаткиТоваров.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Номенклатура = Выборка.Номенклатура;
            Движение.Количество = Списать;
            Движение.Стоимость =  Себестоимость;
            Движение.Партия = ВыборкаПартии.Партия;
            
            ОсталосьСписать = ОсталосьСписать - Списать;
        КонецЦикла;
        
        
        Движение = Движения.ОстаткиПоСкладам.ДобавитьРасход();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.Количество;
        Движение.Склад = Склад;
        
    КонецЦикла;
КонецПроцедуры
1 1dvd
 
04.09.17
11:42
NULL <> Неопределено
2 Господин ПЖ
 
04.09.17
11:43
>Почему при сравнении "Выборка.количествоОстаток" это неопределенный тип?

у кого-то в union поля перепутаны
3 Альбатрос
 
04.09.17
11:43
Даже для поля .количество?
4 dezss
 
04.09.17
11:43
Уверен что ругается на Выборка.количествоОстаток, а не на ДокТЧ.Количество?
5 malex18
 
04.09.17
11:47
С помощью точки останова смотрю содержимое сравниваемых значений, "выборка.количество" показывает, а "выборка.количествоОстаток" пишет "переменная не определена (КоличествоОстато)
6 dezss
 
04.09.17
11:50
(5) Проверь имя переменной. Что-то с ним не так.
7 malex18
 
04.09.17
11:50
имя такое же как в запросе. непонятно что-то
8 1dvd
 
04.09.17
11:50
(5) букву к украли вражеские программисты
9 dezss
 
04.09.17
11:51
(7) скопируй его из запроса.
10 malex18
 
04.09.17
11:51
пробовал)
11 dezss
 
04.09.17
11:52
(10) Ну посмотри что есть в выборка.
12 malex18
 
04.09.17
11:53
в выборке пишет,что количестоОстаток ЕСТЬNUll
13 dezss
 
04.09.17
11:54
(12) покажи скрином что хранится в "Выборка" внутри цикла.
14 1dvd
 
04.09.17
11:54
ошибка вот здесь:

|ИТОГИ МИНИМУМ(Количество), МИНИМУМ(ОстатокНаСкладе), МИНИМУМ(НомерСтроки)
15 malex18
 
04.09.17
11:56
и что здесь не так?
16 1dvd
 
04.09.17
11:57
(15)
1. нафига тебе вообще итоги, если ты за один проход всё смотришь?
2. Раз уж ты собрался их использовать, то включи в них все переменные, которые хочешь брать
17 dezss
 
04.09.17
12:01
(14) Блин, точно...не обратил внимания сразу...
18 Serginio1
 
04.09.17
16:50
Например сравнение на неустановленность значения в поле с множественными типами

|ТИПЗНАЧЕНИЯ(СчетФактура) <> &Тип";
    
Запрос.УстановитьПараметр("Тип",Тип("NULL"));
19 Serginio1
 
04.09.17
16:51
20 Хрыч
 
04.09.17
20:40
Потому что первая строка в выборке у тебя итоговая, а в ней вычисляются только Количество, ОстатокНаСкладе и НомерСтроки. Поле КоличествоОстаток в итогах значения не имеет. Либо откажись от итогов, либо добавь в них это поле. А скорее всего, ты хотел использовать две выборки: одна с обходом по группировке для фиксации итоговых значений и внутри нее выборка детальных записей, где уже возможно сравнение. Но не вышел из Данилы каменный цветок.
Независимо от того, куда вы едете — это в гору и против ветра!