Ситуация такая. В Справочнике есть элементы с одинаковым Наименованием, но отличаются реквизитом "Комментарий" тип Строка. Есть ли какой-то способ быстрого поиска нужного элемента, кроме полного перебора всего Справочника с проверкой по отличающемуся реквизиту.
Типа ищем по Наименованию, проверяем реквизит. Если не тот - переходим на следующий одноименный элемент и т.д.
miha74 @ Вчера, 22:14
,
Похожая ситуация обсуждалась. Можете попробовать применить данный метод себе
https://pro1c.org.ua/index.php?showtopic=59528&hl=
Или например так
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенти.Наименование,
| 1 КАК Повторов
|ИЗ
| Справочник.Контрагенти КАК Контрагенти
|ГДЕ
| Контрагенти.ЭтоГруппа = ЛОЖЬ";
ТаблЗнач = Запрос.Выполнить().Выгрузить();
ТаблЗнач.Свернуть("Наименование","Повторов");
ТаблЗнач.Сортировать("Повторов Убыв");
ТекСтрокаТаблицы=ТаблЗнач.Получить(0);
МаксПовторов=ТекСтрокаТаблицы[1];
Если МаксПовторов=1 тогда
Сообщить("Немає повторов");
Иначе
Для Каждого Стр Из ТаблЗнач Цикл
Если Стр.Повторов=1 тогда
Прервать;
КонецЕсли;
Сообщить("Повторы= "+Стр.Наименование);
КонецЦикла;
КонецЕсли;
Спасибо за ответ.
miha74 @ Сегодня, 10:31
,
Сорри, не заметил что 7.7
Можно переделать легко на 7,7
volodya1122 @ Сегодня, 10:39
,
Если не трудно пожалуйста.
У меня пока примерно такой код:
// -----------------------------------------------------------------------------------------
СпрВидыКатегорий = СоздатьОбъект("Справочник.ВидыКатегорий");
// елемент "Торти";"дільниця"
плНаименование = "Торти";
плКомментарий = "дільниця";
// в Довіднику є ще елемент "торти";"сайт"
флЕстьЭлемент=0;
СпрВидыКатегорий.ВыбратьЭлементы(0);
Пока СпрВидыКатегорий.ПолучитьЭлемент() = 1 Цикл
Если (СпрВидыКатегорий.Наименование=плНаименование) И (СпрВидыКатегорий.Комментарий=плКомментарий) Тогда
флЕстьЭлемент=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если флЕстьЭлемент=1 Тогда
//есть нужный элемент справочника
Сообщить(СпрВидыКатегорий.Наименование+" "+СпрВидыКатегорий.Комментарий);
Иначе
//нет элемента
Сообщить("Не найдено!");
КонецЕсли;
miha74 @ Сегодня, 10:49
,
Так тут вы ищите только совпадение с конкретным значением Наименования. В таком случае можно использовать другую выборку
//СпрВидыКатегорий.ВыбратьЭлементы(0);
СпрВидыКатегорий.ВыбратьЭлементыПоРеквизиту("Наименование",плНаименование,0);
Пока СпрВидыКатегорий.ПолучитьЭлемент() = 1 Цикл
Если СпрВидыКатегорий.Комментарий=плКомментарий Тогда
Не-а. Ошибку выдает, неверный реквизит или как-то так. Я так пробовал.
Я так понимаю, что Наименование это обязательный атрибут и не может выступать реквизитом.
поставьте 1срр+ (или 1sqlite) и нормальным запросом через LIKE сразу полУчите результат
sava1 @ Сегодня, 11:14
,
Тоесть, штатными средствами это решить нельзя. Так?
А то я думал что я туплю, а все элементарно.
miha74 @ 24.06.21, 22:14
,
ИМХО добавить реквизит "НаименованиеКомментарий" (на форму можно не выводить), программно его заполнить, при записи элемента перезаполнять его, установить пизнак "Сортировка", поиск производить методом НайтиПоРеквизиту("НаименованиеКомментарий", ЗначениеДляПоиска)
29a, спасибо, дельное предложение. Но это на крайний случай, не хочется вносить дополнительных изменений в конфигурацию.
miha74 @ 25.06.21, 10:31
,
Добрый день! У меня была задача отобрать по артикулу товары. У заказчика в справочнике товаров, товары с одинаковыми артикулами. Их отбирал и выводил в ТЗ
Спр.ВыбратьЭлементыПоРеквизиту("Артикул",Артикул,0,0);
Пока Спр.ПолучитьЭлемент()=1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Товар = Спр.ТекущийЭлемент();
ТЗ.Валюта = Спр.ТекущийЭлемент().ВалютаУчета;
ЦенаУч = 0;
ОстКол=Регистр.ОстаткиТоваров.Остаток(ТЗ.Товар,Склад,"Количество");
ОстСум=Регистр.ОстаткиТоваров.Остаток(ТЗ.Товар,Склад,"СуммаУчета");
Если ОстКол<>0 Тогда
ЦенаУч=(ОстСум/ОстКол);
КонецЕсли;
ТЗ.Цена = Формат(ЦенаУч,"Ч9.2");
ТЗ.Остаток = Формат(ОстКол,"Ч9.2");
КонецЦикла;
Ну да, не получится.
miha74 @ 25.06.21, 11:11
,
В реквізитах довідника треба поставити "Сортировка" в полі по котрому хочете виконувати вибірку
Але далі не працює
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua