Имя: Пароль:
1C
1С v8
Значение не является значением объектного типа (
,
0 Vladius
 
06.10.11
17:34
Пока Выборка.Следующий() Цикл
   Если Выборка.Количество > Выборка.КоличествоОстаток И Выборка.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда
        Нехватает = Выборка.Количество - Выборка.КоличествоОстаток;
        Сообщить("Не хватает товара " + Выборка.Номенклатура + " количество " + Нехватает + " в наличии " + Выборка.КоличествоОстаток);
        Отказ=Истина;
   КонецЕсли;
КонецЦикла;

Значение не является значением объектного типа!

Где ошибка то?
1 CTmuB
 
06.10.11
17:35
выборку в студию
2 Jstunner
 
06.10.11
17:36
где?
3 Vladius
 
06.10.11
17:36
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
              |    МИНИМУМ(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
              |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Цена) КАК Цена,
              |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
              |ПОМЕСТИТЬ ДокТЧ
              |ИЗ
              |    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
              |ГДЕ
              |    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
              |
              |СГРУППИРОВАТЬ ПО
              |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              |    ДокТЧ.Номенклатура КАК Номенклатура,
              |    ДокТЧ.Количество КАК Количество,
              |    ДокТЧ.Цена КАК Цена,
              |    ДокТЧ.Сумма КАК Сумма,
              |    Остатки.Партия КАК Партия,
              |    ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
              |    ЕСТЬNULL(Остатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток
              |ИЗ
              |    ДокТЧ КАК ДокТЧ
              |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
              |                &Момент,
              |                Номенклатура В
              |                    (ВЫБРАТЬ
              |                        ДокТЧ.Номенклатура
              |                    ИЗ
              |                        ДокТЧ КАК ДокТЧ)) КАК Остатки
              |        ПО ДокТЧ.Номенклатура = Остатки.Номенклатура
              |
              |УПОРЯДОЧИТЬ ПО
              |    Партия " + ПорядокПартий + "
              |ИТОГИ МИНИМУМ(Количество), МИНИМУМ(КоличествоОстаток), МИНИМУМ(СтоимостьОстаток)
              |ПО ДокТЧ.Номенклатура";
Запрос.УстановитьПараметр("Момент", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
4 zladenuw
 
06.10.11
17:36
Ошибку лучше
5 Jstunner
 
06.10.11
17:37
в какой строчке ругается-то, текст ошибки полный давай
6 Vladius
 
06.10.11
17:37
Значение не является значением объектного типа (ВидНоменклатуры)
7 kryptonite
 
06.10.11
17:38
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
8 kryptonite
 
06.10.11
17:38
ИТОГИ МИНИМУМ(Количество), МИНИМУМ(КоличествоОстаток), МИНИМУМ(СтоимостьОстаток)
              |ПО ДокТЧ.Номенклатура
9 zbv
 
06.10.11
17:39
Если выборка ПоГруппировкам, то и нужно выбирать по группировкам.
10 CTmuB
 
06.10.11
17:40
(9) +
11 ShoGUN
 
06.10.11
17:41
(0) Ты результат запроса в ТЗ выгрузи и всё увидишь... Номенклатура пустая в каких-то строках(в итоговых, очевидно, ибо (9))
12 Vladius
 
06.10.11
17:43
(11) Ничего не пустая, через точку останова посмотрел, показывает значение "Товар"
13 Vetal_978
 
06.10.11
17:45
Хотел поинтересоваться, а зачем в запросе Цену суммировать? :)
14 CTmuB
 
06.10.11
17:47
(13) чтобы получить общую продажную цену
15 CTmuB
 
06.10.11
17:47
)
16 Vladius
 
06.10.11
17:47
(13) А че не надо?))
17 Vetal_978
 
06.10.11
17:48
(16) не, ну может оно и надо, мне просто интересно зачем?
18 ShoGUN
 
06.10.11
17:51
(14) Омг, ОБЩАЯ ЦЕНА - это жесь О_о
19 Vladius
 
06.10.11
17:51
(17) Вот и я себя спрашиваю, зачем) Исправил.

Подскажите лучше как исправить Значение не является значением объектного типа (ВидНоменклатуры)

Так и не понял где ошибка
20 ShoGUN
 
06.10.11
17:52
Всё-таки рекомендую результат запроса просмотреть хоть бегло...
21 zbv
 
06.10.11
17:53
Пока Выборка.Следующий() Цикл
  Если не ЗначениеЗаполнено(Выборка.Номенклатура) Тогда
     Продолжить;
  КонецЕсли;

  //Выбор данных
  ...
22 ShoGUN
 
06.10.11
17:53
(19) Это означает, что ты обращаешься к полям у объекта примитивного типа. Чаще всего это Неопределено или NULL на месте ссылки/объекта.
23 Vetal_978
 
06.10.11
17:53
а детальные записи где?
24 Vladius
 
06.10.11
17:54
(20) В результате запроса все проверил. Все работает идеально. Вот необходимо добавить Что бы проверка количества товара срабатывала тогда когда у номенклатуры значение ТОВАР
25 Mort
 
06.10.11
17:54
(0) Вынеси ВидНоменклатуры в запрос, чтобы не дрочить базу по сто раз.
26 ShoGUN
 
06.10.11
17:56
(25) Тоже верно. И видно будет сразу, где косяк.
27 cViper
 
06.10.11
18:11
(0) Используй ЕСТЬNULL.
28 cViper
 
06.10.11
18:15
+(27) Разглядел запрос. Используешь )))
29 Vladius
 
06.10.11
18:18
Вроде получилось, сделал вот так:
Выборка.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда
Просто через запрос вытащил значение.

Кстати посмотрите правильно ли я сделал или вообще полный п..дец намудрил )))

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока Выборка.Следующий() Цикл
   Если Выборка.Количество > Выборка.КоличествоОстаток И Выборка.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда
        Нехватает = Выборка.Количество - Выборка.КоличествоОстаток;
        Сообщить("Не хватает товара " + Выборка.Номенклатура + " количество " + Нехватает + " в наличии " + Выборка.КоличествоОстаток);
        Отказ=Истина;
   КонецЕсли;
КонецЦикла;

Если Отказ Тогда
   Возврат;
КонецЕсли;

Выборка.Сбросить();

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


Здесь я проверяю, если номенклатура товар то проверяется количество и если номенклатуры хватает тогда документ проводится, если УСЛУГА тогда количество товара не проверяется и движение проводится по регистру продажи. Что не так сделал? Или криво сделал? Только сильно не пинайте ) Я ещё учусь ) Просто интересно Ваше мнение...
30 Vladius
 
06.10.11
18:57
Что некому мой код покритиковать?)
Основная теорема систематики: Новые системы плодят новые проблемы.