8.х "Значение не является значением объектного типа"-в чем проблема?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dimka77, 7 июл 2010.

  1. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Использую такой код для вывода количества товара:
    Код:
    КоличествоНаСкладе = Новый Запрос  ("ВЫБРАТЬ
    |	ТоварыВРозницеОстатки.КоличествоОстаток,
    |	ТоварыВРозницеОстатки.Номенклатура.Код КАК КодТовара
    |ИЗ
    |	РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки");
    ТаблицаОстатков = КоличествоНаСкладе.Выполнить().Выгрузить();	
    Для Каждого СтрокаТоваров Из Товары Цикл 
    НайденнаяСтрока = ТаблицаОстатков.Найти(СтрокаТоваров.Номенклатура.Код, "КодТовара");
    Сообщить ( СтрокаТоваров.Номенклатура.Код+ " = " + НайденнаяСтрока.Остаток); 
    КонецЦикла;
    
    А в ответ такая ошибка:
    Но остатки, тем не менее, выводятся в окне Служебных сообщений.
    Как избавиться от ошибки?
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Вот так

    Код:
    НайденнаяСтрока = ТаблицаЦен.Найти(ВыбТовар, "Товар");
    Если НайденнаяСтрока = Неопределено Тогда
    Предупреждение("Товар не найден!");
    Иначе
    ЦенаТовара = НайденнаяСтрока.Цена;
    КонецЕсли;
    
    Просто если у Вас строка не найдена то возвращается неопределенно, а у НайденнаяСтрока со значением Неопределнно Остака поля нет
  3. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Очепятался:
    Но остатки, тем не менее, НЕ выводятся в окне Служебных сообщений.
  4. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Спасибо! То, что надо, сделал так:
    Код:
    		НайденнаяСтрока = ТаблицаОстатков.Найти(СтрокаТоваров.Номенклатура.Код, "КодТовара");
    Если НайденнаяСтрока <> Неопределено Тогда
    Сообщить (СтрокаТоваров.Номенклатура.Код+" = " + НайденнаяСтрока.КоличествоОстаток); 
    Иначе 
    Сообщить (СтрокаТоваров.Номенклатура.Код+" = " + "0"); 
    КонецЕсли;
    
    
  5. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    1.Так что теперь ошибки нет, но не выводятся остатки? т.е ничего не находит?
    2. А почму одним запросом не сделали. Запрос на выборку номенклатуры из ТЧ документта,и левое соединение с остатками и все.
  6. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Ей богу как умею, так и делаю, понимаю, что можно проще, все равно спасибо!
    Вот следующая незадача, пытаюсь раскрасить строки табличной части таким кодом:
    Код:
    Для Каждого СтрокаТоваров Из Товары Цикл 
    НайденнаяСтрока = ТаблицаОстатков.Найти(СтрокаТоваров.Номенклатура.Код, "КодТовара");
    Если НайденнаяСтрока <> Неопределено Тогда
    ОформлениеСтроки.ЦветФона = WEBЦвета.Белый;
    Иначе 
    ОформлениеСтроки.ЦветФона = WEBЦвета.Красный;
    КонецЕсли;
    КонецЦикла;
    
    
    И вместо того, что бы красить фон отдельно для каждой строки (в зависимости от условий), получается, что закрашиваются все строки исходя из выполнения условия при проверке последней строки, т.е. если последняя строка таб. части <> Неопределено, то у всех строк белый фон, иначе у Всех красный.
    Что опять не так?
  7. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    а красите в какой процедуре?
  8. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    вернее, красьте в событии ПриВыводеСтроки() ТабличногоПоля
  9. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    все верно, там и делаю
  10. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Зачем тогда тут цикл? Событие ПриВыводеСтроки() будет выполняться столько раз, сколько строк в табличном поле
  11. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Ну как же, каждый раз когда происходит вывод строки проверяются все остальные на предмет наличия товара на складе (вдруг чего поменялось) :unsure: Или Вы считаете, что в этом нет необходимости?
  12. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    тогда просто попробуйте
    Код:
    НайденнаяСтрока = ТаблицаОстатков.Найти(ДанныеСтроки.Номенклатура.Код, "КодТовара");
    Если НайденнаяСтрока <> Неопределено Тогда
    ОформлениеСтроки.ЦветФона = WEBЦвета.Белый;
    Иначе 
    ОформлениеСтроки.ЦветФона = WEBЦвета.Красный;
    
    
    и хочу обратить внимание, что теперь используется ДанныеСтроки, а не СтрокаТоваров
  13. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Сработало, спасибо!

Поделиться этой страницей