Поиск значения с типом "ссылка"

1. user798107 20.07.17 08:26 Сейчас в теме
Всем хорошего дня.

В ТЧ документа (колонка "Номенклатура"), есть товар, который нужно найти. Как к нему правильно обратиться, если у него тип "СправочникСсылка.Номенклатура"? В модуле объекта документа я пишу:

НЗ = Товары.Найти("Стул", "Товар");

Если НЗ.Товар = "Стул" Тогда
			Сообщить("Верно");
		Иначе
			Сообщить("НЕ Найдено");
		КонецЕсли;


Выходит ошибка: "Значение не является значением объектного типа (товар)". Как я понимаю, надо в параметрах поиска указать Найти (СправочинкСсылка....)?
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. BackinSoda 20.07.17 08:36 Сейчас в теме
(1)
ТекТовар = Справочники.Номенклатура.НайтиПоНаименованию("Стул");
НЗ = Состав.Найти(ТекТовар, "Товар");
Если НЗ = Неопределено Тогда
    Сообщить("НЕ Найдено");
Иначе
    Сообщить("Верно");
КонецЕсли;
 
Показать
+
4. user798107 20.07.17 09:59 Сейчас в теме
(2) Не срабатывает ваш вариант. Пишу код так:

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


В итоге "сообщить" выводит "-", отладчик тоже не видит значение "ТекТовар". И всегда срабатывает "иначе", независимо какое значение в колонке - стул, стол и т.д., даже если просто пустое, то срабатывает "иначе".
+
5. BackinSoda 20.07.17 10:06 Сейчас в теме
(4) в 2 забыл переименовать Табчасть, у вас то она Товары называется
+
7. user798107 20.07.17 10:32 Сейчас в теме
(5)
ТекТовар = Справочники.Товары.НайтиПоНаименованию("Стул");
	
	НЗ = Товары.Найти(ТекТовар, "Товар");
	
	Если НЗ = Неопределено Тогда
			Сообщить("Не Верно");
		Иначе
			Сообщить("Найдено");
		КонецЕсли;
		
		сообщить(ТекТовар);
Показать


Не работает это условие. В отладчике "ТекТовар" графа "Наименование" имеет значение - "". Это значит, что не видит строку и что в ней находится. Что бы не вводил в строку - всегда срабатывает "тогда". Если пишу такой код:

ТекТовар = Справочники.Товары.НайтиПоНаименованию("Стул");
	
	НЗ = Товары.Найти(ТекТовар, "Товар");
	
	Если НЗ.Товар = Неопределено Тогда
			Сообщить("Не Верно");
		Иначе
			Сообщить("Найдено");
		КонецЕсли;
		
		сообщить(ТекТовар);
Показать


Пишет ошибку: значение не является значением объектного типа (товар)
+
8. BackinSoda 20.07.17 10:40 Сейчас в теме
(7) давайте по порядку:
ТекТовар = Справочники.Номенклатура.НайтиПоНаименованию("Стул");
НЗ = Товары.Найти(ТекТовар, "Товар");
Если НЗ = Неопределено Тогда
    Сообщить("НЕ Найдено");
Иначе
    Сообщить("Верно");
КонецЕсли;

первая строка ищет номенклатуру в справочнике Номенклатура (ваш справочник так называется ? или товары ?) если всё верно то проверьте наименование, а еще лучше скопируйте прямо из предприятия слово "стул" в код.
Вторая - ищем в Табличной части(!) с именем Товары наш тектовар, в колонке с именем "товар" (как вы сказали с типом СправочникСсылка.Номенклатура)
далее идёт проверка на неопределено т.к. метод возвращает или найденную строку табличной части или Неопределено если не нашел ничего. Скопируйте этот код и под отадчиком проходите по шагам и проверяйте что не так.
+
9. user798107 20.07.17 12:01 Сейчас в теме
(8)В сообщение выше, я правильно указал название справочника - "Товары".

Ничего не изменилось. В отладчике "ТекТовар" вообще никак не реагирует. Пробую "вычислить значение" (ТекТовар) пишет в Наименование значение - "". Значит нет значения. Сейчас всегда срабатывает "тогда". "НЗ" также ничего не показывает в отладчике
+
10. BackinSoda 20.07.17 12:33 Сейчас в теме
(9) "если всё верно то проверьте наименование, а еще лучше скопируйте прямо из предприятия слово "стул" в код. " очевидно что не находится такая номенклатура, возможно регистр строк не тот
+
12. user798107 20.07.17 13:46 Сейчас в теме
(10) Приношу свои извинения за свою невнимательность. У меня тип значения была "строка". Это я хотел попробовать найти значение, если оно будет "СправочникСсылка.ИмяСправочника", но не поменял "тип значения", хотя справочник "товары" добавил. Сейчас всё изменил и этот код работает:

ТекТовар = Справочники.Товары.НайтиПоНаименованию("Стул");
	НЗ = Товары.Найти(ТекТовар, "Товар");
	Если НЗ = Неопределено Тогда
		Сообщить("НЕ Найдено");
	Иначе
		Сообщить("Верно");
	КонецЕсли;


Спасибо всем большое. Я начинающий, да ещё плюс не совершенные качества (не внимательность), но стараюсь развиваться в программировании, мне это интересно. Надеюсь на понимание... Всего доброго!
+
6. ResetAtreides 20.07.17 10:13 Сейчас в теме
(4) Товар "Стул" может и нашли, а где там поиск в ТЧ "Товары" как в (2) написано?
+
3. japopov 68 20.07.17 09:36 Сейчас в теме
(1)
Я использую метод НайтиСтроки(). Найти() вернёт только одну из строк, если их несколько. НайтиСтроки() вернёт массив, содержащий все найденные строки (можно их посчитать, обработать... Кроме того, НайтиСтроки() может искать по сочетанию нескольких колонок табличной части:

ИскомыйТовар = Справочники.Номенклатура.НайтиПоНаименованию("Стул");

НайденныеСтрокиДокумента = МойДокумент.ТабличнаяЧасть.НайтиСтроки(Новый Структура("Номенклатура",ИскомыйТовар));
Если НайденныеСтрокиДокумента.Количество()=0 Тогда
   Сообщить("Не найдено стульев");
Иначе
   Для Каждого НайденнаяСтрока Из НайденныеСтрокиДокумента Цикл
      Сообщить(Строка(НайденнаяСтрока.Количество));
   КонецЦикла;
КонецЕсли;
Показать


Здесь я вывожу реквизит Количество для каждой строки, у которой номенклатура - "Стул"
+
11. starjevschik 20.07.17 13:14 Сейчас в теме
(1) почитал обсуждение, захватывающе. Все участники говорят каждый о своем.

В ТЧ документа (колонка "Номенклатура"), есть товар, который нужно найти. Как к нему правильно обратиться, если у него тип "СправочникСсылка.Номенклатура"?

Обратиться к нему правильно и единственно можно и нужно только так:
СтрокаТабличнойЧасти.Номенклатура

и от типа колонки это обращение не зависит.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот