Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перебор одноименных элементов справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
miha74
Ситуация такая. В Справочнике есть элементы с одинаковым Наименованием, но отличаются реквизитом "Комментарий" тип Строка. Есть ли какой-то способ быстрого поиска нужного элемента, кроме полного перебора всего Справочника с проверкой по отличающемуся реквизиту.
Типа ищем по Наименованию, проверяем реквизит. Если не тот - переходим на следующий одноименный элемент и т.д.
volodya1122
miha74 @ Вчера, 22:14 необходимо зарегистрироваться для просмотра ссылки ,

Похожая ситуация обсуждалась. Можете попробовать применить данный метод себе
необходимо зарегистрироваться для просмотра ссылки

Или например так
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Контрагенти.Наименование,
    |    1 КАК Повторов
    |ИЗ
    |    Справочник.Контрагенти КАК Контрагенти
    |ГДЕ
    |    Контрагенти.ЭтоГруппа = ЛОЖЬ";
    
    ТаблЗнач = Запрос.Выполнить().Выгрузить();
    ТаблЗнач.Свернуть("Наименование","Повторов");
    ТаблЗнач.Сортировать("Повторов Убыв");
    ТекСтрокаТаблицы=ТаблЗнач.Получить(0);
    МаксПовторов=ТекСтрокаТаблицы[1];
    Если МаксПовторов=1 тогда
        Сообщить("Немає повторов");
    Иначе
        Для Каждого Стр Из ТаблЗнач Цикл
            Если Стр.Повторов=1 тогда
                Прервать;
            КонецЕсли;    
            Сообщить("Повторы= "+Стр.Наименование);
        КонецЦикла;

    КонецЕсли;
miha74
Спасибо за ответ.
Цитата(volodya1122 @ 25.06.21, 10:19) необходимо зарегистрироваться для просмотра ссылки
Или например так

На 7.7 так не получится.
В теме по ссылке тоже перебор всех значений. Хотелось бы поиском.
volodya1122
miha74 @ Сегодня, 10:31 необходимо зарегистрироваться для просмотра ссылки ,

Сорри, не заметил что 7.7

Можно переделать легко на 7,7
miha74
volodya1122 @ Сегодня, 10:39 необходимо зарегистрироваться для просмотра ссылки ,
Если не трудно пожалуйста.
У меня пока примерно такой код:
// -----------------------------------------------------------------------------------------
    СпрВидыКатегорий = СоздатьОбъект("Справочник.ВидыКатегорий");
    
    // елемент "Торти";"дільниця"
    плНаименование = "Торти";
    плКомментарий  = "дільниця";
    // в Довіднику є ще елемент "торти";"сайт"
    
    
    флЕстьЭлемент=0;
    
    СпрВидыКатегорий.ВыбратьЭлементы(0);
    Пока СпрВидыКатегорий.ПолучитьЭлемент() = 1 Цикл
        Если (СпрВидыКатегорий.Наименование=плНаименование) И (СпрВидыКатегорий.Комментарий=плКомментарий) Тогда
            флЕстьЭлемент=1;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если флЕстьЭлемент=1 Тогда
        //есть нужный элемент справочника
        Сообщить(СпрВидыКатегорий.Наименование+"      "+СпрВидыКатегорий.Комментарий);
    Иначе
        //нет элемента
        Сообщить("Не найдено!");
    КонецЕсли;


Я раньше думал, что 1С ищет по наименованиям с учетом заглавных и прописных букв, пока не столкнулся с такой ситуацией.
volodya1122
miha74 @ Сегодня, 10:49 необходимо зарегистрироваться для просмотра ссылки ,

Так тут вы ищите только совпадение с конкретным значением Наименования. В таком случае можно использовать другую выборку
 //СпрВидыКатегорий.ВыбратьЭлементы(0);
СпрВидыКатегорий.ВыбратьЭлементыПоРеквизиту("Наименование",плНаименование,0);
   Пока СпрВидыКатегорий.ПолучитьЭлемент() = 1 Цикл
        Если СпрВидыКатегорий.Комментарий=плКомментарий Тогда
miha74
Не-а. Ошибку выдает, неверный реквизит или как-то так. Я так пробовал.
Я так понимаю, что Наименование это обязательный атрибут и не может выступать реквизитом.
sava1
поставьте 1срр+ (или 1sqlite) и нормальным запросом через LIKE сразу полУчите результат
miha74
sava1 @ Сегодня, 11:14 необходимо зарегистрироваться для просмотра ссылки ,
Тоесть, штатными средствами это решить нельзя. Так?
А то я думал что я туплю, а все элементарно.
29a
miha74 @ 24.06.21, 22:14 необходимо зарегистрироваться для просмотра ссылки ,
ИМХО добавить реквизит "НаименованиеКомментарий" (на форму можно не выводить), программно его заполнить, при записи элемента перезаполнять его, установить пизнак "Сортировка", поиск производить методом НайтиПоРеквизиту("НаименованиеКомментарий", ЗначениеДляПоиска)
miha74
29a, спасибо, дельное предложение. Но это на крайний случай, не хочется вносить дополнительных изменений в конфигурацию.
denis84
miha74 @ 25.06.21, 10:31 необходимо зарегистрироваться для просмотра ссылки ,
Добрый день! У меня была задача отобрать по артикулу товары. У заказчика в справочнике товаров, товары с одинаковыми артикулами. Их отбирал и выводил в ТЗ

        Спр.ВыбратьЭлементыПоРеквизиту("Артикул",Артикул,0,0);
        Пока Спр.ПолучитьЭлемент()=1 Цикл
            ТЗ.НоваяСтрока();
            ТЗ.Товар = Спр.ТекущийЭлемент();
            ТЗ.Валюта = Спр.ТекущийЭлемент().ВалютаУчета;
            ЦенаУч = 0;
            ОстКол=Регистр.ОстаткиТоваров.Остаток(ТЗ.Товар,Склад,"Количество");
            ОстСум=Регистр.ОстаткиТоваров.Остаток(ТЗ.Товар,Склад,"СуммаУчета");
            
            Если ОстКол<>0 Тогда
                ЦенаУч=(ОстСум/ОстКол);
            КонецЕсли;
                    ТЗ.Цена = Формат(ЦенаУч,"Ч9.2");
            ТЗ.Остаток = Формат(ОстКол,"Ч9.2");
        КонецЦикла;


P.S. по наименованию найти не получится, т.к. это предопределенный реквизит. Для этого используется НайтиПоНаименованию
miha74
Ну да, не получится.
shuperv
miha74 @ 25.06.21, 11:11 необходимо зарегистрироваться для просмотра ссылки ,
В реквізитах довідника треба поставити "Сортировка" в полі по котрому хочете виконувати вибірку
Але далі не працює 64000000.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.