Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0
Ситуация такая. В Справочнике есть элементы с одинаковым Наименованием, но отличаются реквизитом "Комментарий" тип Строка. Есть ли какой-то способ быстрого поиска нужного элемента, кроме полного перебора всего Справочника с проверкой по отличающемуся реквизиту. Типа ищем по Наименованию, проверяем реквизит. Если не тот - переходим на следующий одноименный элемент и т.д.
Похожая ситуация обсуждалась. Можете попробовать применить данный метод себе Вот тут
Или например так
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенти.Наименование, | 1 КАК Повторов |ИЗ | Справочник.Контрагенти КАК Контрагенти |ГДЕ | Контрагенти.ЭтоГруппа = ЛОЖЬ";
ТаблЗнач = Запрос.Выполнить().Выгрузить(); ТаблЗнач.Свернуть("Наименование","Повторов"); ТаблЗнач.Сортировать("Повторов Убыв"); ТекСтрокаТаблицы=ТаблЗнач.Получить(0); МаксПовторов=ТекСтрокаТаблицы[1]; Если МаксПовторов=1 тогда Сообщить("Немає повторов"); Иначе Для Каждого Стр Из ТаблЗнач Цикл Если Стр.Повторов=1 тогда Прервать; КонецЕсли; Сообщить("Повторы= "+Стр.Наименование); КонецЦикла;
КонецЕсли;
Сообщение отредактировал volodya1122 - 25.06.21, 9:37
// елемент "Торти";"дільниця" плНаименование = "Торти"; плКомментарий = "дільниця"; // в Довіднику є ще елемент "торти";"сайт"
флЕстьЭлемент=0;
СпрВидыКатегорий.ВыбратьЭлементы(0); Пока СпрВидыКатегорий.ПолучитьЭлемент() = 1 Цикл Если (СпрВидыКатегорий.Наименование=плНаименование) И (СпрВидыКатегорий.Комментарий=плКомментарий) Тогда флЕстьЭлемент=1; Прервать; КонецЕсли; КонецЦикла;
Если флЕстьЭлемент=1 Тогда //есть нужный элемент справочника Сообщить(СпрВидыКатегорий.Наименование+" "+СпрВидыКатегорий.Комментарий); Иначе //нет элемента Сообщить("Не найдено!"); КонецЕсли;
Я раньше думал, что 1С ищет по наименованиям с учетом заглавных и прописных букв, пока не столкнулся с такой ситуацией.
Так тут вы ищите только совпадение с конкретным значением Наименования. В таком случае можно использовать другую выборку
//СпрВидыКатегорий.ВыбратьЭлементы(0); СпрВидыКатегорий.ВыбратьЭлементыПоРеквизиту("Наименование",плНаименование,0); Пока СпрВидыКатегорий.ПолучитьЭлемент() = 1 Цикл Если СпрВидыКатегорий.Комментарий=плКомментарий Тогда
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0
Не-а. Ошибку выдает, неверный реквизит или как-то так. Я так пробовал. Я так понимаю, что Наименование это обязательный атрибут и не может выступать реквизитом.
Группа: Пользователи
Сообщений: 94
Спасибо сказали: 32 раз
Рейтинг: 0
miha74 @ 24.06.21, 22:14
, ИМХО добавить реквизит "НаименованиеКомментарий" (на форму можно не выводить), программно его заполнить, при записи элемента перезаполнять его, установить пизнак "Сортировка", поиск производить методом НайтиПоРеквизиту("НаименованиеКомментарий", ЗначениеДляПоиска)
Группа: Местный
Сообщений: 462
Из: Украина
Спасибо сказали: 151 раз
Рейтинг: 152.8
miha74 @ 25.06.21, 10:31
, Добрый день! У меня была задача отобрать по артикулу товары. У заказчика в справочнике товаров, товары с одинаковыми артикулами. Их отбирал и выводил в ТЗ
Спр.ВыбратьЭлементыПоРеквизиту("Артикул",Артикул,0,0); Пока Спр.ПолучитьЭлемент()=1 Цикл ТЗ.НоваяСтрока(); ТЗ.Товар = Спр.ТекущийЭлемент(); ТЗ.Валюта = Спр.ТекущийЭлемент().ВалютаУчета; ЦенаУч = 0; ОстКол=Регистр.ОстаткиТоваров.Остаток(ТЗ.Товар,Склад,"Количество"); ОстСум=Регистр.ОстаткиТоваров.Остаток(ТЗ.Товар,Склад,"СуммаУчета");
Если ОстКол<>0 Тогда ЦенаУч=(ОстСум/ОстКол); КонецЕсли; ТЗ.Цена = Формат(ЦенаУч,"Ч9.2"); ТЗ.Остаток = Формат(ОстКол,"Ч9.2"); КонецЦикла;
P.S. по наименованию найти не получится, т.к. это предопределенный реквизит. Для этого используется НайтиПоНаименованию
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!