Ситуация такая. В Справочнике есть элементы с одинаковым Наименованием, но отличаются реквизитом "Комментарий" тип Строка. Есть ли какой-то способ быстрого поиска нужного элемента, кроме полного перебора всего Справочника с проверкой по отличающемуся реквизиту.
Типа ищем по Наименованию, проверяем реквизит. Если не тот - переходим на следующий одноименный элемент и т.д.
volodya1122
25.06.21, 9:19
miha74 @ Вчера, 22:14
необходимо зарегистрироваться для просмотра ссылки
,
Похожая ситуация обсуждалась. Можете попробовать применить данный метод себе
необходимо зарегистрироваться для просмотра ссылкиИли например так
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенти.Наименование,
| 1 КАК Повторов
|ИЗ
| Справочник.Контрагенти КАК Контрагенти
|ГДЕ
| Контрагенти.ЭтоГруппа = ЛОЖЬ";
ТаблЗнач = Запрос.Выполнить().Выгрузить();
ТаблЗнач.Свернуть("Наименование","Повторов");
ТаблЗнач.Сортировать("Повторов Убыв");
ТекСтрокаТаблицы=ТаблЗнач.Получить(0);
МаксПовторов=ТекСтрокаТаблицы[1];
Если МаксПовторов=1 тогда
Сообщить("Немає повторов");
Иначе
Для Каждого Стр Из ТаблЗнач Цикл
Если Стр.Повторов=1 тогда
Прервать;
КонецЕсли;
Сообщить("Повторы= "+Стр.Наименование);
КонецЦикла;
КонецЕсли;
Спасибо за ответ.
Цитата(volodya1122 @ 25.06.21, 10:19) необходимо зарегистрироваться для просмотра ссылки
Или например так
На 7.7 так не получится.
В теме по ссылке тоже перебор всех значений. Хотелось бы поиском.
volodya1122
25.06.21, 9:39
miha74 @ Сегодня, 10:31 необходимо зарегистрироваться для просмотра ссылки
,
Сорри, не заметил что 7.7
Можно переделать легко на 7,7
volodya1122 @ Сегодня, 10:39
необходимо зарегистрироваться для просмотра ссылки
,
Если не трудно пожалуйста.
У меня пока примерно такой код:
// -----------------------------------------------------------------------------------------
СпрВидыКатегорий = СоздатьОбъект("Справочник.ВидыКатегорий");
// елемент "Торти";"дільниця"
плНаименование = "Торти";
плКомментарий = "дільниця";
// в Довіднику є ще елемент "торти";"сайт"
флЕстьЭлемент=0;
СпрВидыКатегорий.ВыбратьЭлементы(0);
Пока СпрВидыКатегорий.ПолучитьЭлемент() = 1 Цикл
Если (СпрВидыКатегорий.Наименование=плНаименование) И (СпрВидыКатегорий.Комментарий=плКомментарий) Тогда
флЕстьЭлемент=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если флЕстьЭлемент=1 Тогда
//есть нужный элемент справочника
Сообщить(СпрВидыКатегорий.Наименование+" "+СпрВидыКатегорий.Комментарий);
Иначе
//нет элемента
Сообщить("Не найдено!");
КонецЕсли;
Я раньше думал, что 1С ищет по наименованиям с учетом заглавных и прописных букв, пока не столкнулся с такой ситуацией.
volodya1122
25.06.21, 10:09
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");
КонецЦикла;
P.S. по наименованию найти не получится, т.к. это предопределенный реквизит. Для этого используется НайтиПоНаименованию
miha74 @ 25.06.21, 11:11
необходимо зарегистрироваться для просмотра ссылки
,
В реквізитах довідника треба поставити "Сортировка" в полі по котрому хочете виконувати вибірку
Але далі не працює
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.