Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 02:29

Поиск значения по ссылке в табличной части документа.

Автор Амал, 19 июл 2017, 07:24

0 Пользователей и 1 гость просматривают эту тему.

Амал

Всем хорошего дня.

Подскажите пожалуйста, как найти значение в ТЧ документа по ссылке?

Для Каждого Строка ИЗ Товары Цикл //обращаюсь к ТЧ документа

НЗ = Товары.Найти("Стул", "Товар"); //колонка называется "товар"

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

сообщить(НЗ);
КонецЦикла;


Программа сообщает НЗ: "ДокументТабличнаяЧастьСтрока.Реализация.Товары". Но мне надо, чтобы программа нашла в ТЧ документа "Стул". Есть справочник "Товары". Как правильно написать код?

Golickoff

ЦитироватьТабличная часть (Tabular section)
Найти (Find)
Синтаксис:

Найти(<Значение>, <Колонки>)
Параметры:

<Значение> (обязательный)

Тип: Произвольный.
Искомое значение.
<Колонки> (необязательный)

Тип: Строка.
Список имен колонок, в которых будет осуществляться поиск, разделенных запятыми.
Если параметр не указан, поиск осуществляется по всей табличной части.
Значение по умолчанию: Пустая строка
Возвращаемое значение:

Тип: Строка табличной части, Неопределено.
Строка, которая содержит искомое значение. Если значение не найдено, то возвращается значение Неопределено.
Описание:

Осуществляет поиск значения в указанных колонках табличной части.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Метод эффективно использовать для поиска уникальных значений.
Пример:

НайденнаяСтрока = Состав.Найти(ТекТовар, "Номенклатура");
Если НайденнаяСтрока = Неопределено Тогда
    Текст = "ru = ""Товар не найден!"";"
     + " en = ""Article not found!""";
    Предупреждение(НСтр(Текст));
Иначе
    Количество = НайденнаяСтрока.Количество;
КонецЕсли;


Во-первых неясно зачем вы делаете это в цикле. Во-вторых вы ищите значение с типом Строка в колонке с типом СправочникСсылка.
Стул = Справочники.Товары.НайтиПоНаименованию("Стул");
НЗ = Товары.Найти(Стул, "Товар");
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Амал

Цитата: Golickoff от 19 июл 2017, 07:31
Во-первых неясно зачем вы делаете это в цикле.

Я только учусь, поэтому решил: чтобы найти значение в ТЧ, нужно пробежаться циклом. Пусть это ошибка. Но так проходит обучение и единственное место у кого я могу узнать верность моих действий - это форумы.

Цитата: Golickoff от 19 июл 2017, 07:31
Во-вторых вы ищите значение с типом Строка в колонке с типом СправочникСсылка.

Спасибо. Сейчас попробую ваш вариант.


Добавлено: 19 июл 2017, 07:48


Цитата: Golickoff от 19 июл 2017, 07:31

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


Попробовал ваш вариант. Вывел сообщить(НЗ) - результат просто "-"

Golickoff

Конструкция типа "Для Каждого ЧтоТоТам Из ЧегоТоТам Цикл" подразумевает обращение к реквизиту ЧтоТоТам внутри этого цикла, иначе весь цикл почти всегда теряет смысл. Какой тип значения у колонки Товар?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Амал

Цитата: Golickoff от 19 июл 2017, 08:18
Конструкция типа "Для Каждого ЧтоТоТам Из ЧегоТоТам Цикл" подразумевает обращение к реквизиту ЧтоТоТам внутри этого цикла, иначе весь цикл почти всегда теряет смысл. Какой тип значения у колонки Товар?

Строка

Golickoff

Значит заголовок темы неправильный. Объясняйте что хотите получить и каким образом. ТабличнаяЧасть.Найти возвращает строку, в которой найдено значение. Если из строки нужно достать стул, вот код НЗ = Товары.Найти("Стул", "Товар");
Стул = НЗ.Товар;
Сообщить(Стул);
Но для того чтобы найти стул нужно указать что такое стул. Можно сразу указать и не заморачиваться с поиском.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Амал

Цитата: Golickoff от 19 июл 2017, 09:08
Значит заголовок темы неправильный. Объясняйте что хотите получить и каким образом.

Мне программист так сказал сделать (он всегда занят и только кидает вводные ничего не объясняя): Найти значение по ссылке. Поэтому я и создал тему с таким названием.

Цитата: Golickoff от 19 июл 2017, 09:08
Но для того чтобы найти стул нужно указать что такое стул. Можно сразу указать и не заморачиваться с поиском.

Так мне же надо именно найти это значение (стул) в ТЧ. Я написал следующий код:

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

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

сообщить(НЗ);


И программа выдаёт условие "иначе", хотя в ТЧ выбран "стул". А в содержание НЗ(сообщить(НЗ) - "ДокументТабличнаяЧастьСтрока.Реализация.Товары"

Golickoff

Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Амал

Цитата: Golickoff от 19 июл 2017, 10:33
Если НЗ = "Стул" Поменяйте на Если НЗ.Товар = "Стул"

Я создал совершенно пустую базу (для обучения). Создал один документ и пару справочников. В модуле объекта (Процедура "ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)") пытаюсь реализовать поиск значения в ТЧ документа. Поменял, как вы написали и условие срабатывает верно, но когда выбираю другое наименование товара, либо оставляю поле пустым и нажимаю "Записать", программа виснет, не выдавая никакого сообщения. В чём может быть причина?

Golickoff

Возможно, замкнулся какой-то цикл, посмотрите отладчиком что происходит при зависании. Всё же я хочу чтобы вы понимали, что вы ищите стул методом "вот у меня в руках стул, найдите мне его" и вам находят точно такой же стул, который вы используете вместо того который был у вас в руках, хотя он точно такой же и вы могли сразу присесть на тот стул что был у вас в руках и не тратить время на поиск точно такого же стула.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск