Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Перебор одноименных элементов справочника          
miha74 Подменю пользователя
сообщение 24.06.21, 21:14
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0

Ситуация такая. В Справочнике есть элементы с одинаковым Наименованием, но отличаются реквизитом "Комментарий" тип Строка. Есть ли какой-то способ быстрого поиска нужного элемента, кроме полного перебора всего Справочника с проверкой по отличающемуся реквизиту.
Типа ищем по Наименованию, проверяем реквизит. Если не тот - переходим на следующий одноименный элемент и т.д.

volodya1122 Подменю пользователя
сообщение 25.06.21, 9:19
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

miha74 @ Вчера, 22:14 * ,

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

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

    КонецЕсли;


Сообщение отредактировал volodya1122 - 25.06.21, 9:37

miha74 Подменю пользователя
сообщение 25.06.21, 9:31
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0

Спасибо за ответ.
Цитата(volodya1122 @ 25.06.21, 10:19) *
Или например так

На 7.7 так не получится.
В теме по ссылке тоже перебор всех значений. Хотелось бы поиском.

Сообщение отредактировал miha74 - 25.06.21, 9:40

volodya1122 Подменю пользователя
сообщение 25.06.21, 9:39
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

miha74 @ Сегодня, 10:31 * ,

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

Можно переделать легко на 7,7

miha74 Подменю пользователя
сообщение 25.06.21, 9:49
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0

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


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

Сообщение отредактировал miha74 - 25.06.21, 9:53

volodya1122 Подменю пользователя
сообщение 25.06.21, 10:09
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

miha74 @ Сегодня, 10:49 * ,

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

miha74 Подменю пользователя
сообщение 25.06.21, 10:11
Сообщение #7

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0

Не-а. Ошибку выдает, неверный реквизит или как-то так. Я так пробовал.
Я так понимаю, что Наименование это обязательный атрибут и не может выступать реквизитом.

Сообщение отредактировал miha74 - 25.06.21, 10:21

sava1 Подменю пользователя
сообщение 25.06.21, 10:14
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

поставьте 1срр+ (или 1sqlite) и нормальным запросом через LIKE сразу полУчите результат

Спасибо сказали: miha74,

miha74 Подменю пользователя
сообщение 25.06.21, 10:18
Сообщение #9

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0

sava1 @ Сегодня, 11:14 * ,
Тоесть, штатными средствами это решить нельзя. Так?
А то я думал что я туплю, а все элементарно.

29a Подменю пользователя
сообщение 14.07.21, 13:25
Сообщение #10

Говорящий
***
Группа: Пользователи
Сообщений: 94
Спасибо сказали: 31 раз
Рейтинг: 33.3

miha74 @ 24.06.21, 22:14 * ,
ИМХО добавить реквизит "НаименованиеКомментарий" (на форму можно не выводить), программно его заполнить, при записи элемента перезаполнять его, установить пизнак "Сортировка", поиск производить методом НайтиПоРеквизиту("НаименованиеКомментарий", ЗначениеДляПоиска)

Спасибо сказали: miha74,

miha74 Подменю пользователя
сообщение 03.09.21, 7:08
Сообщение #11

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0

29a, спасибо, дельное предложение. Но это на крайний случай, не хочется вносить дополнительных изменений в конфигурацию.

denis84 Подменю пользователя
сообщение 03.09.21, 7:19
Сообщение #12

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

miha74 @ 25.06.21, 10:31 * ,
Добрый день! У меня была задача отобрать по артикулу товары. У заказчика в справочнике товаров, товары с одинаковыми артикулами. Их отбирал и выводил в ТЗ

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


P.S. по наименованию найти не получится, т.к. это предопределенный реквизит. Для этого используется НайтиПоНаименованию

miha74 Подменю пользователя
сообщение 03.09.21, 7:44
Сообщение #13

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 153
Спасибо сказали: 81 раз
Рейтинг: 0

Ну да, не получится.

shuperv Подменю пользователя
сообщение 18.02.24, 14:06
Сообщение #14

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

miha74 @ 25.06.21, 11:11 * ,
В реквізитах довідника треба поставити "Сортировка" в полі по котрому хочете виконувати вибірку
Але далі не працює 64000000.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 23:16
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!