[РЕШЕНО] Как сделать запрос по номенклатуре при условии что в наименование входит одно из 25 тыс.значений...

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Ktyf, 8 окт 2014.

  1. Foreman
    Offline

    Foreman

    Регистрация:
    19 фев 2008
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    И Номенклатура.Наименование ПОДОБНО "%"+&КатНом+"%";
  2. XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Только вроде кавычек больше нужно
    Код:
    Номенклатура.Наименование ПОДОБНО ""%"" + &КатНом + ""%""
  3. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    ну то что это история покрытая мраком и так понятно
    можно простенькой обработкой пройти и скопировать этот каталожный из названия в поле "Артикул" (если оно есть конечно реквизитом в справочнике)
    а потом обрабатывать файл по артикулам
    --- Объединение сообщений, 8 окт 2014 ---
    точно, только парные воспринимает как кавычки, одна пара служебная а вторая в дело идёт
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    временная таблица не висит в памяти - она так же на диск падает, в случае с sql - в базу tempdb, в случае с файловой - во временный файл
  5. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Не правильно выразился. Имел в виду, что к базе вновь не обращается.
  6. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    В общем приведенный выше код на всех моих тысячах отрабатывает за 12 минут. На моем компе. Что будет у заказчика - не знаю..
  7. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Какой код Вы написали? Покажите.
  8. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    даже если он у заказчика час будет работать - такой код должен работать один раз, чтобы внести артикул в реквизит справочника. в крайнем случае - в дополнительное свойство. дальше поиск номенклатуры - по этому реквизиту/допсвойству
  9. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Был приведен уже на 1-ой странице
    Код:
    зпНом.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка,
        |    Номенклатура.Наименование
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа = ЛОЖЬ
        |    И Номенклатура.Наименование ПОДОБНО &КатНом";
    
        Для Каждого Стр из мсВложенный Цикл
            зпНом.УстановитьПараметр("КатНом", "%"+СОКРЛП(Стр)+"%");
            тзНом = зпНом.Выполнить().Выгрузить();
        КонецЦикла;
    --- Объединение сообщений, 8 окт 2014 ---
    это не в моей власти. У меня просят доп обработку, а не оптимизацию работы программы.
  10. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Что это за код? Весь код, полностью покажите...
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Завести свойство справочника номенклатуры не в вашей власти? (или использовать РС НоменклатураКонтрагентов если он имеется в конфигурации, что предпочтительнее на мой взгляд)

    nickpugachev вам все правильно написал.
    Делайте поиск из двух этапов. На первом этапе вы ищите элемент справочника по вновь заведенному свойству. На втором этапе для всего, что не удалось найти на первом этапе, ищите уже вашим "подобно", естественно после того как нашли с записью значения в это новое свойство.
  12. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    ну собственно это и был практически весь код. Конкретнее сам цикл занял 12 минут. Если говорить о всем коде обработки то вот, что имею на данный момент
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
        СерверExcel = Новый COMОбъект("Excel.Application");
        ДокументХЛС= "d:\1с_базы\Агротехсервис\прайс.xlsx";
        ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС);
        КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count;
        КоличествоКолонокДанных=1;//ФайлХЛС.ActiveSheet.UsedRange.Columns.Count;
        Состояние("Загрузка в память данных ведомости...");
        ExcelЛист=ФайлХЛС.ActiveSheet;
        Область = СерверExcel.Range(ExcelЛист.Cells(2,1), ExcelЛист.Cells(КонечнаяСтрокаДанных,2));
        МассивДанныхEXEL = Область.Value.Выгрузить();
        СерверExcel.Quit();   
       
        ВыборкаНаСервере(МассивДанныхEXEL); //мсВложенный
    КонецПроцедуры
    
    Процедура ВыборкаНаСервере(ВложенныйXL)
        мсНомеров = ВложенныйXL[0];   
        мсЦен =  ВложенныйXL[1];
    
        тзВыгрузка = Новый ТаблицаЗначений;
        тзВыгрузка.Колонки.Добавить("Номер");
        тзВыгрузка.Колонки.Добавить("Цена");
        тзВыгрузка.Колонки.Добавить("Номенклатура");
    
        зпНом = новый Запрос;
        зпНом.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК Ссылка,
        |    Номенклатура.Наименование
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа = ЛОЖЬ
        |    И Номенклатура.Наименование ПОДОБНО &КатНом";
       
        сч=0;
        Сообщить(Строка(ТекущаяДата()));
        Для к=0 По мсНомеров.Количество()-1 Цикл
            зпНом.УстановитьПараметр("КатНом", "%"+СОКРЛП(мсНомеров[к])+"%");
            Результат = зпНом.Выполнить().Выбрать();
    
            Пока Результат.Следующий() Цикл
                СтрокаТз = тзВыгрузка.Добавить();
                СтрокаТз.Номер = мсНомеров[к];
                СтрокаТз.Цена = мсЦен[к];
                СтрокаТз.Номенклатура = Результат.Ссылка;
            КонецЦикла;
    
            сч=сч+1;
            Если сч%100=0 Тогда
                Сообщить("Обрабатывается строка № "+сч);
            КонецЕсли;
        КонецЦикла;
       
        тзВыгрузка.Сортировать("Номенклатура");
        Сообщить(Строка(ТекущаяДата()));
    КонецПроцедуры
    да, не в моей. Я конечно могу это свойство создать и даже перенести туда первые 7 символов - т.е. в основном кат.Номер занимает 5-7 символов. Однако потом пользователи и близко не собираются проверять правильность заполнения этого свойства. Оно им не нужно. Может быть увидев, ЧТО получается чисто по ПОДОБНО (тут вылезает порядка 73 неуникальных/дублирующих элементов которые надо будет проверять каждый раз) они и задумаются , но сильно сомневаюсь.
  13. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Я Вам не про это говорил. Перед циклом получаете всю номенклатуру. Вообще всю. Храните ее во временной таблице, используя менеджер временных таблиц. А потом в цикле обрабатывайте ее, а не каждый раз к базе конектитесь.
  14. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    мда... Это они так прайс хотят загружать!? Я бы на вашем деле сначала указал на эти недочеты, прежде чем что-то писать...
  15. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    я конечно могу указать, и даже укажу, но ..... Как вы думаете, если они "додумались" каталожные номера в наименование запихивать - сколько у меня шансов до них достучаться.

    да, я помню. Пока сделала черновой вариант без временых таблиц т.к. я их не знаю, а заказчику надо отвечать. Вдобавок вылезло еще .... несколько моментов. Вот завтра буду обсуждать их и параллельно уже учить новое.
  16. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Им было плевать. Но есть шанс все переделать. И привести в нормальный вид. И потом файлы будут обрабатываться быстрее и точнее. Вот и скажите им об этом.
  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Им не нужно ничего проверять. Свойство - для обработки загрузки. Она туда пишет номер, она его потом читает.

    Попробуйте сначала, не попробовав зачем делать предположения о вероятностях.

    Почему не использовали поле Артикул изначально, могут быть разные причины, навскидку:
    1) им просто не объяснили, что можно поле артикул для этого использовать
    2) им нужно выводить этот артикул при печати и никто не объяснил как это настроить
    3) им неудобно искать в списке справочника, когда артикул отдельным полем
  18. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    конфу вроде не озвучивали, но в типовой УТ поиск по полю Артикул не сложнее поиска по наименованию
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    LordMaverick спорить по этому поводу в данном случае не вижу смысла, поскольку вопрос в теме ведь совершенно другой был, это было лишь мое мнение. Все зависит от сценария работы. Если люди работают с поиском и по наименованию и по артикулу, то придется в списке каждый раз перещелкивать поле "наименование" содержит или "артикул" содержит. Это множество лишних щелчков мышью, и ошибок в поиске (поскольку пользователи не всегда обращают внимание по какому полю там выставлен поиск в данный момент). Говорить о том что это можно настроить тоже не надо, я это знаю, но если у вас все пользователи освоились с этим механизмом - отлично, но так бывает не всегда и не у всех.
  20. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    я не спорил а всего лишь уточнял, и "перещёлкнуть" там всего надо ткнув в столбец в котором искать

    в конторе по которой вопрос полный раздрай по товароведенью, вот с этого там и надо начинать решать вопрос об котором тема

Поделиться этой страницей