#0
by Looking
Доброго времени суток! Конфигурация "Торговля и Склад 7.7". Задача в частичном отображении справочника "Номенклатура", реализую ее через ИспользоватьСписокЭлементов. Формирование списка который должен отображаться реализовано через задание пользователями списка исключаемых из отображения групп и элементов, то есть при открытии справочника Номенклатура анализируется список исключения и формируется отображаемый список. Запрос к справочнику пробовал делать и штатным запросом, и прямым - время выполнения в обоих случаях одинаково - 3 сек. Может я что-то не так реализовал, раз время идентично? Может необходимо использовать другие методы?
#0
by Looking
Доброго времени суток! Конфигурация "Торговля и Склад 7.7". Задача в частичном отображении справочника "Номенклатура", реализую ее через ИспользоватьСписокЭлементов. Формирование списка который должен отображаться реализовано через задание пользователями списка исключаемых из отображения групп и элементов, то есть при открытии справочника Номенклатура анализируется список исключения и формируется отображаемый список. Запрос к справочнику пробовал делать и штатным запросом, и прямым - время выполнения в обоих случаях одинаково - 3 сек. Может я что-то не так реализовал, раз время идентично? Может необходимо использовать другие методы?
#4
by ДенисЧ
Запросы практически эквипенисуальны. В смысле эквивалентны. Основное время всё равно уйдёт на передачу списка на сервер и последующее получение данных
#5
by Mikeware
криво поставленную задачу решать через .оппу, и удивляться... Если уж прямым запросом (в смысле, классом) то надо типа ВЫБРАТЬ СпрНоменклатура.ТекущийЭлемент [Номенклатура $Справочник.Номенклатура] ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоставФильтраСправочникаНоменклатура СпрФильтр ПО $СпрФильтр.Номенклатура=$СпрНоменклатура.ТекущийЭлемент И $СпрФИльтр.Владелец=:ПеремФильтрСправочникаНоменклатураПользователя ГДЕ ISNULL($СпрФильтр.ТекущийЭлемент)=1
#9
by Looking
ну как криво поставленную. стоит задача, чтобы часть справочника Номенклатура и Контрагенты часть пользователей не видела совсем - не могла выбрать в документах, отчетах, в принципе не знала об их существовании. можно достичь это как-то иначе?
#10
by Looking
"Справочник.СоставФильтраСправочникаНоменклатура СпрФильтр ПО $СпрФильтр.Номенклатура=$СпрНоменклатура.ТекущийЭлемент" но ведь чтобы сформировать фильтр все-равно необходимо сначала обратиться к справочнику Номенклатура? ведь в данном случае пользователи задают только то, что нужно исключать, а не то, что нужно отображать. то есть в списке должны отображаться группы и элементы, кроме тех, что укажут пользователи в списке-фильтре.
#11
by Злопчинский
Если скульная база То можно поставить патч Ромикса И перехватывать запросы к скулю И модифицировать их
#14
by Looking
можете помочь мне в написании запроса под мою конкретную задачу? не бесплатно конечно. с прямыми запросами не работал, а нужно достаточно оперативно проверить, ускорит-ли он данную задачу. написал Вам в ICQ указанную в Вашем профиле.
#16
by Djelf
Класс "ПрямойЗапрос" на dbf использует 1sqlite. А запросе "В" превращается в "IN". А в официальной версии 1sqlite используется древний движок sqlite версии 3.7.10 А движок sqlite 3.7.10 не умеет оптимизировать IN. В смысле он не использует по IN индексы, а без индексов, естественно запрос тормозит. Можешь попробовать мою сборку 1sqlite, она по IN умеет использовать индексы Либо не используй "ПрямойЗапрос", а пиши на чистом sql, а список выгружай во временную таблицу sqlite и используй не IN, а JOIN
#18
by Djelf
Я знаю. В ты об этом уже говорил. Или ты про слова "пиши на чистом sql"? Ну так все правильно написано. "ПрямойЗапрос" транслирует запрос в чистый sql, который в dbf базе выполняет ВК 1sqlite.
#19
by Looking
можете реализовать это под мою задачу? сколько это стоит? в итоге должно работать быстрее чем сейчас?
#20
by Looking
+сам я точно сходу не смогу написать, а мне-бы на днях результат нужен. знающим ведь такая задача не очень трудоемка?
#27
by Looking
суть вопроса в ускорении, реально-ли сделать так, чтобы фильтр на справочник накладывался быстрее чем за 3 секунды.
#28
by Looking
могу удаленный доступ предоставить, может так проще, чтобы сразу на реальной БД отработать?
#29
by Djelf
Просто попытайся поставить 1sqlite по ссылке Конечно будет быстрее, сейчас считай это не прямой запрос, а кривой ;) И кстати, выложи код генерации СпискаИсключения. Это все можно завернуть в 1 запрос...
#30
by Это_mike
у меня сейчас база, так там фильр примерно так же накладывается, только не по справочнику дополнительному, с по реувизиту основного. Есть тормоза, но не 3 секунды, конечно. Но я эту базу стараюсь не ковврять Завтра попрлбую..
#32
by Looking
"выложи код генерации СпискаИсключения." в Процедура ФормированиеСпискаОтбораСправочникаНоменклатура
#34
by Это_mike
я, правда, 1склайт только на прошлой неделе попообовал, до этого с файловыми не возюкался, и думал, что никогда не придется. Однако пришлось.
#35
by Looking
по ссылке скачал 1sqlite.dll, у меня она в моменте совсем не подключена. я же говорю, что в моменте совсем не умею с прямыми запросами работать. поэтому и прошу того у кого есть эти знания и навык, написать прямой запрос под мое решение.
#37
by Djelf
Какой тип у ПеремФильтрСправочникаНоменклатураПользователя? Не Справочник Номенклатура же... Поэтому и не взлетает.
#38
by Djelf
Как так не подключена? Не может быть такого!!! оО И даже dll` ки в каталогах ИБ или 1С не было? Не верю!
#39
by Looking
тип у ПеремФильтрСправочникаНоменклатураПользователя Справочник.ФильтрыСправочникаНоменклатура, у которого в свою очередь подчиненный Справочник.СоставФильтраСправочникаНоменклатура, в этом подчиненном справочнике реквизит Номенклатура, как раз в нем и указываются группы и элементы, которые необходимо исключить из отображения.
#40
by Looking
ну почему-же не верите, только 1cpp.dll используется из дополнительных внешних компонент.
#41
by Looking
то есть пользователь-руководитель указывает в справочнике пользователей, что пользователю Иванову задан "Фильтр для менеджеров", а пользователю Петрову "Фильтр для снабженцев" и т.д., а уже в подчиненных справочниках этих фильтров перечислены группы и элементы номенклатуры, которые необходимо исключать из отображения.
#42
by Злопчинский
а не проще сделать справочник по типу "Номенклатура-Пользователь", и спр.номенклатура список вообще не открывать?
#43
by Looking
не совсем понял мысль, ведь номенклатура не статична, постоянно дополняется, видоизменяется, и при каждом таком действии эти изменения справочника Номенклатура должны каким-то образом синхронизироваться со справочниками "Номенклатура менеджеров", "Номенклатура снабженцев" и т.д.? и опять-же обращение к справочнику Номенклатура идет из целого ряда документов, отчетов, везде необходимо подменить это обращение обращением не к справочнику Номенклатура, а к справочникам "Номенклатура-Пользователь"?
#45
by Looking
"Какой тип у ПеремФильтрСправочникаНоменклатураПользователя? " 3 сек это с момента начала запроса к справочнику Номенклатура, и к окончанию запроса. или речь о том, что сама конструкция не работает?
#46
by Djelf
Да не сработает... У тебя отрицательный фильтр, а в sql с этим мучения ;) Как то так оно должно выглядеть ТекстЗапроса=" |SELECT
#48
by Looking
, спасибо огромное! скажете что должен! сейчас никак проверить не смогу, утром рано вставать. попробую завтра в течение дня.
#49
by Mikeware
как раз сработает. второе соединение нафик не нужно. ну что, сработало? или пробовать?
#50
by Looking
еще проверяю. что нужно выслать Вам, чтобы пробовать? мд-ик? удаленный доступ по ТВ или АммиАдмин подойдет?
#51
by Looking
"Запрос.УстановитьПараметр("@ФильтрПользователя",ФильтрПользователя);" прошу подсказать, какое значение имеет переменная ФильтрПользователя? его нужно самому предварительно заполнять? пытался передавать в эту переменную список значений, или просто справочник, получаю ошибку при выполнении Запрос.УстановитьПараметр("@ФильтрПользователя",СЗИсключаемойНоменклатуры); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: Неверный номер параметра
#52
by Looking
Запрос.Подготовить(ТекстЗапроса); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: Ошибка подстановки текстового параметра ПеремФильтрСправочникаНоменклатураПользователя - Неизвестный параметр
#54
by Mikeware
кинь базу - мд+эти три справочника+справочник пользователей (или где там фильтр фиксируемтя)
#57
by Looking
когда открываю список справочника, то получаю ошибку Процедура ФормированиеСпискаОтбораСправочникаНоменклатура ПеремФильтрСправочникаНоменклатураПользователя=глПользователь.ФильтрСправочникаНоменклатура;
#58
by Mikeware
То, что у тебя в было в СпрСоставФильтраСправочникаНоменклатура.ИспользоватьВладельца(ПеремФильтрСправочникаНоменклатураПользователя);
#59
by Looking
в у меня ПеремФильтрСправочникаНоменклатураПользователя=глПользователь.ФильтрСправочникаНоменклатура; то есть это значение реквизита ФильтрСправочникаНоменклатура справочника Пользователи, которое имеет тип значения Справочник.ФильтрыСправочникаНоменклатура. то при открытии формы получаю ошибку Запрос.УстановитьПараметр("@ФильтрПользователя",ПеремФильтрСправочникаНоменклатураПользователя); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: Неверный номер параметра
#60
by Mikeware
ухххххххххххкакязол! Запрос.УстановитьПараметр("ПеремФильтрСправочникаНоменклатураПользователя",глПользователь.ФильтрСправочникаНоменклатура);
#61
by Looking
не работает так, показывает ошибку. можно смысл пояснить? структура понятна? что в фильтре пользователей нет фильтра - это элемент справочника, у которого есть подчиненный справочник, в котором перечислены те группы и элементы, которые необходимо исключить из отображения.
#62
by Looking
+Запрос.УстановитьПараметр("ФильтрПользователя",глПользователь.ФильтрСправочникаНоменклатура); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: Неверный номер параметра
#63
by Mikeware
смысл такой справочник.номенклатура соединяется со справочнником СоставФильтраНоменклатура, левым соединением по 1)равенству номенлатуры (номеклатура в справочнике номенклатура равен реквизиту номенклатура в справочнике СоставФильтраНоменклатура), и 2)по условию поле Владелец справочника СоставФильтра... равен твоей переменной. получается табличка с двумя колонками - в одной колонке _весь_ справочник номенклатура, во во второй дибо соответвующий эдемент из справочника СоставФильтра, либо пусто. Из этой таблички мы отбираем толко те строки, у которых во второй строке пусто, и берем из них элемент номенлаьуры (из первой колонки) гы?
#64
by Looking
спасибо большое! на неверный номер параметра ругается, так как ранее в запросе не задан сам параметр?
#66
by Djelf
Эх... недокурил я вчера запрос... Исправленный ТекстЗапроса=" |SELECT @ФильтрПользователя - элемент Справочника ФильтрыСправочникаНоменклатура
#68
by Djelf
Одна печаль - в индекс по справочнику номенклатура никак не попасть. Сколько выполняется "SELECT id FROM Справочник_Номенклатура"?
#71
by Looking
работает! и гораздо быстрее. говорите что должен. на базе без пользователей, не в монопольном режиме я по отладчику смотрю Справочник.Номенклатура.ФормаСписка.ФормаСписка 945 Запрос.Подготовить(ТекстЗапроса); 1 0.000890 0.38 или нужно как-то иначе смотреть? Выборку подчиненных элементов ПриВыбореРодителя тоже прямым запросом можно делать? Можете подсказать текст запроса?
#73
by Djelf
Обидно на прямом запросе тратить на саму подготовку столько же времени сколько выполняется сам запрос ;) Ну и на прямом вот так не получится! > Все товары в группе, +_Родитель для ускоренной группировки в ИндексированнойТаблице WITH RECURSIVE Goods(ID,PARENTID,ISFOLDER) AS ( FROM [Справочник.Номенклатура] WHERE ID IN(' 2Б ') UNION SELECT Спр.ID,Спр.PARENTID,Спр.ISFOLDER FROM [Справочник.Номенклатура] AS Спр INNER JOIN Goods ON Goods.ID = Спр.PARENTID ) SELECT
#74
by Looking
письмо получил, спасибо огромное! изучаю! опять у меня ошибка Запрос.Подготовить(ТекстЗапроса); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: Ошибка подстановки текстового параметра ВыбРодитель - Неизвестный параметр ВыбРодитель необходимо через Запрос.УстановитьПараметр задавать?
#79
by Djelf
Поддерживаю но в нагрузку нужно прочитать и документацию по 1sqlite Ты же на этом с прямыми запросами не остановишься? пример то работоспособный и полезный, только он потребует мою сборку 1sqlite, в оригинальном СТЕ запросы не работают.
#80
by Looking
, спасибо вам огромное за науку! но если что я осознаю, и готов понести наказание рублем за свое незнайство ))) , а когда открывается корневой каталог, например, при первоначальном открытии формы списка справочника, то есть группа-родитель отсутствует, нужно это как-то дополнительным условием в запросе отражать? или ограждать запрос от этой ситуации дополнительными условиями? " только он потребует мою сборку 1sqlite" у меня как-раз она и установлена, с Вашей помощью
#81
by Looking
если использую такой запрос, то получаю ошибку Запрос.Подготовить(ТекстЗапроса); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: Ошибка подстановки текстового параметра ВыбРодитель - Неизвестный параметр если добавляю то получаю ошибку Запрос.Подготовить(ТекстЗапроса); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: Ошибка подстановки текстового параметра ВыбРодитель - Неизвестный параметр прошу извинить и помочь.
#82
by Злопчинский
Короче склифасовский Как отладишь все - расписываешь все подробно и выкладываешь Технологию и сами запросы Ибо надо делится типа
#83
by Djelf
Не будь таким жестоким ;) Различие между "Подставлять" и "УстановитьПараметр" новичка могут ввести в ступор. Руководство по 1sqlite "Объекты компоненты"/"Объект SQLiteQuery"/"Подготовить / Prepeare" Там все хорошо разжёвано. Главное этот раздел найти!!!
#84
by Злопчинский
"Различие между "Подставлять" и "УстановитьПараметр" новичка могут ввести в ступор." - я уже в ступоре. ничегго не поннял...
#85
by Looking
поймите меня правильно, я очень благодарен, что помощь в ключе обучения, такая помощь лучшая, развивающая. Но мне проще летом с этим сесть и спокойно разбираться, а сейчас отчетность, куча разноплановых вопросов как всегда в это время года. Поэтому я и прошу знающих написать, согласен на оплату. Я позднее с удовольствием сам во все вникну, а сейчас просто физически не смогу грамотно сам это сделать. Очень прошу помочь написать через прямой запрос.
#86
by Djelf
Ладно... попытаюсь объяснить! Есть объект Запрос. У Запроса есть 2 метода "Подставлять" и "УстановитьПараметр". Перед выполнением Запрос должен быть Подготовлен. Подготовкой считается вычисление плана выполнения Запроса. Метод Подставлять должен быть сделан до момента Подготовки. После Подготовки уже не меняется, фактически это установка константы для запроса. А вот УстановитьПараметр нужно делать после Подготовки. Т.к. у нас уже есть не просто Запрос, а ПодготовленныйЗапрос!!! Кто то что то понял? Я нет... Это надо попробовать несколько раз и вот тогда оно в голове уляжется ;)
#87
by Злопчинский
фигня все Я по такому пути так прямые запросы и не освоил Бо когда надо - здесь шаблон пишут или за денежку покупаю Сделал, пустил в продакшн и забыл А когда не надо - оно и не надо, ведь уже работает
#92
by Djelf
+ Редко использую Подставлять, только если сильно уверен что там не окажутся всякие кавычками и т.п. УстановитьПараметр работает надежнее - жрет все.
#94
by Looking
, , спасибо огромное за подробное осмысленное пояснение и пример! размещать Подставлять до Подготовить я также пробовал, получаю ошибку Запрос.Подготовить(ТекстЗапроса); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль}: no such column: СпрНомерклатура.PARENTID а вот через УстановитьПараметр работает!
#95
by Looking
только отбор по фильтру не осуществляется, так как в есть условие ТекНоменклатура=СпрНоменклатура.ТекущийЭлемент; Если СЗОтображаемойНоменклатуры.НайтиЗначение(ТекНоменклатура)>0 Тогда а в прямом запросе такого условия нет, его можно в тело запроса прописать? или-же после запроса его результат обработать, например так?
#97
by Ёпрст
если запрос выполняется один раз, по Подставлять. Если много раз один и тот же запрос с разными параметрами, например, в форме списка - то Подготовить + УстановитьПараметр. Усё.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- v7: v7 : НДС при возврате
- v7: Что нужно чтоб подключить ККМ Меркурий 112F к 1с V7 Торговля + склад
- v7: v7.7 премещение элемента справочника
- v7: v8: v7: Кто-нибудь сумел скачать комплект отчетности за I квартал 2007 года
- v7: 1С V7.7 в сети
- v7: ККМ Феликс 02к и 1с ТиС 77
- v7: ТиС: Документ "продажи по принятой выручке" медленно открывается п осети
- v7: 1C:V7 starter program (for SQL) - обнаружена ошибка
- v7: Где взять правила и обработку для выгрузки загрузки спр из 77 Общ в Предпр 77?
- v7: Перенос данных Бухгалтерия из v7 в v8
- v7: v7 Перехват глобального события ПриЗаписи() или ОбработкаПроведения()
- v7: При выгрузке остатков из ТиС в УТ11 процесс растет до гига и вылетает, ТиС 100мб
В этой группе 1С
- Одна ИФНС и несколько ОКТМО
- Как скрыть диски на терминальном сервере
- Где в БП 2.0 справка-расчёт транспортного налога?
- Как провести документы, без проверок и обработки проведения
- УТ10.3: Где расположен код механизма "Восстановление последовательностей"?
- Программно установить вариант отчета СКД
- Запись в таблицу внешнего источника данных с имитацией логики справочника 1С
- КА 2.0 - начальные остатки и отражение в налоговом учете
- УТ 11: сопоставление номенклатуры с номенклатурой ЕГАИС
- Как в расшифровку СКД добавить свой вариант "Секунда + Регистратор"
- Проблема с доменной авторизацией в 1С
- Откуда берется Префикс в типовой БП3.0 ?
- Не загружает массив в таблицу значений
- Выгрузка реестра из ЗУП 2,5 в сбербанк бизнес онлайн
- Как частично снять конфигурацию с поддержки?
- УПП 1.3 Корректировка стоимости списания добавляет сумму при отсутствии количест
- Как на клиенте изменить значение реквизита
- Розничная торговля в ут 10.3 и партионный учет
- Программно установить масштаб в параметрах печати табличного документа
- Функция НайтиПоСсылкам возвращает лишние объекты