Поиск номенклатуры в большом количестве документов #519569


#0 by DarkFrenzy
Каким образом быстрее всего найти все документы (общее количество документов за месяц - ~8000), содержащие в своей табличной части определенную номенклатуру (в базовом отчете "реестр документов" для ТиС 2.0 потребовалось добавить поле ТМЦ/группа)? Сначала сделал это просто перебором всех документов и всех элементов табличной части (Док.ПолучитьСтроку=1 и Док.ПолучитьАтрибут) - отчет обрабатывался слишком долго. Затем попробовал выгружать колонку с номенклатурой, если она существует в список значений и искать там с помощью НайтиЗначение - на локальном компьютере выполнялось быстрее, а на сервере еще дольше чем предыдущий вариант. 1С изучаю всего месяц, поэтому быстродействие для меня пока что темный лес. Сейчас вот думаю попробовать через запрос. Может подскажете,как сделать, чтобы отчет обрабатывался быстрее всего?
#1 by JeHer
>>>Сейчас вот думаю попробовать через запрос Верной дорогой идете, товарищ!
#2 by Ёпрст
Запрос к регистру с фильтром на номенклатуру, из него - документ движения регистра. Запрос лучше прямой.
#3 by inka
а через поиск ссылок не подходит?
#4 by DarkFrenzy
>>Запрос к регистру с фильтром на номенклатуру, из него - документ движения регистра. Там список всех документов из метаданных, многие даже поле номенклатуры не содержат. Может я и туплю, но по идее они не все связаны с регистрами.
#5 by Ёпрст
штатно - это не быстро в большой базе, но можно переписать на прямой запрос.. Только вот нафига ? в Тис-е всегда есть хотя бы 1 регистр в котором участвует Номенклатура, который толкают все документы, содержащие Номенклатуру в реквизите.
#6 by Злой Бобр
Точно тупишь. Попробуй более точно указать что нужно, тогда и получишь более точную рекомендацию.
#7 by Skom
Рег.IDDOC From $Регистр.Продажи as Рег (nolock) Where $Рег.Номенклатура = :ВыбНоменклатура как то так...лень проверять
#8 by DarkFrenzy
>>а через поиск ссылок не подходит? Как раз сейчас пытаюсь разобраться как работает "НайтиСсылки(<Объекты>,<Ссылки>)", так как в запрос надо передавать большое количество видов документов, выбранных пользователем. Правда не уверен еще, что НайтиСсылки используется именно для этого:)
#9 by Skom
в общем. у тебя в ТиС есть регистр продажи (оборотный) в котором фиксируются все продажи (а так же и возвраты) номенклатуры. (перемещения там не учитываются) просто оттуда выбери ДВИЖЕНИЯ с расходом нужной тебе номенклатуры если прямым запросом то на мой не смотри. делай сам. я там фигню всякую написал)))) если штатным то я не умею им пользоваться...забыл((( в общем ВПЕРЕД!!!
#10 by Skom
если у тя ТИПОВАЯ ТиС тогда ФАКТ ПРОДАЖИ товара фиксируется в регистре ПРОДАЖИ (оборотный)
#11 by DarkFrenzy
>>Точно тупишь. Попробуй более точно указать что нужно, тогда и получишь более точную рекомендацию. Имеется изначальный список документов, содержащий в себе все виды документов метаданных. Пользователь может убирать ненужные документы из этого списка и выбирать период с какой и по какую дату искать. В базовой версии поиск можно вести по Фирме, Автору, Юр.Лицу, Проекту, Контрагенту и Складу. Также можно указать отбор по статусу (проведенные, не проведенные, помеченные на удаление) А нужно добавить возможность поиска по ТМЦ или группе ТМЦ из табличной части документа "номенклатура".
#12 by DarkFrenzy
>> если у тя ТИПОВАЯ ТиС тогда ФАКТ ПРОДАЖИ товара фиксируется в регистре ПРОДАЖИ (оборотный) Документы могут быть и не проведенные
#13 by Skom
уточнять надо было
#14 by Skom
прямой запрос тебя спасет в этом плане
#15 by DarkFrenzy
>>прямой запрос тебя спасет в этом плане А не подскажешь как в него передать список видов обрабатываемых документов, с учетом того, что не все содержать в табличной части графу "номенклатура"?
#16 by Ёпрст
если штатно - то слепи графу отбора, добавь нужные виды документов для неё и привет.
#17 by Mikeware
Ну и сформируй этот список. В чем проблема?
#18 by Mikeware
Ты представь накладняк....
#19 by Ёпрст
:)
#20 by palpetrovich
"1С изучаю всего месяц..."   мдя, одно из двух, или все-же не месяц или автор - вундеркинд :)
#21 by Злой Бобр
Тогда задам тупой вопрос - а как ты будешь определять реквизит документа по которому проверять есть там твое ТМЦ или нет?
#22 by Mikeware
А чего тут вунндеркндного?
#23 by palpetrovich
перечитай его посты ...после месяца изучения - я-бы сказал - посты не мальчика, но мужа  :)
#24 by Злой Бобр
Чипсы и кола делают с людьми и не такое.
#25 by Mikeware
Ну, на 1с не только дятлы переходят....
#26 by DarkFrenzy
>>Ну и сформируй этот список. В чем проблема? Список то есть. Только вот не в одном примере, я не видел как этот список передается в запрос. Поясню |Номенклатура = Документ.СписаниеТМЦ.номенклатура, Документ.ПоступлениеТМЦ.номенклатура, ... и т.д.; - это если вручную прописывать, а как не вручную сделать?
#27 by Ёпрст
через обход метаданных.
#28 by DarkFrenzy
>>"1С изучаю всего месяц..."   мдя, одно из двух, или все-же не месяц или автор - вундеркинд :) Просто стоит задача как можно быстрее его освоить, вот и долблюсь по 7 часов в день.
#29 by palpetrovich
это реальная задача или потренироваться?
#30 by DarkFrenzy
>> это реальная задача или потренироваться? Реальная:)
#31 by palpetrovich
тогда нелишней будет информайця файловый у тебя вариант базы или скульный
#32 by Shaman100M
#33 by Shaman100M
+ Это "Поиск значений в ТЧ доков". Перебираю метаданные и формирую запрос по всем документам где содержится вид поискового значения. Работает достаточно быстро.
#34 by DarkFrenzy
>>тогда нелишней будет информайця файловый у тебя вариант базы или скульный Файловый >>+ Это "Поиск значений в ТЧ доков". Спасибо, уже скачивал эту обработку, запускал - работает хоть и быстрее, но незначительно (прирост производительности около 10-15% был на сколько я помню по сравнением с тем, что у меня).
#35 by Злой Бобр
Ну а что ты хотел? 8 тыщ это фигня а не объем. Было б у тебя в день 8 тыщ - тогда б и был смысл заморачиваться с ускорением. А так +,- 10 сек. - особой роли неиграет.
#36 by palpetrovich
раз файловый - стало-быть надо смотреть в сторону 1sqlite. Это библтотека, позовляющая напряму обращаться к таблицам базы, "прямы запросы" как говорилось выше
#37 by DarkFrenzy
>>Ну а что ты хотел? 8 тыщ это фигня а не объем. Было б у тебя в день 8 тыщ - тогда б и был смысл заморачиваться с ускорением. А так +,- 10 сек. - особой роли неиграет. В том то и дело, что я понятия не имею сколько времени этот отчет должен обрабатываться при правильно написанном коде. Долгое время обработки я списываю на свои недостаточные знания языка 1с и оптимизации. Если срок обработки скажем в 3 минуты - это нормальное явление, конечно нет особого смысла заморачиваться. Если его можно свести к 20 секундам, то есть.
#38 by Злой Бобр
На прямом запросе я думаю должно в среднем отрабатывать за 10-30 сек., в зависимости отколичества и значений фильтров.
#39 by palpetrovich
+36: для одного вида документа будет выглядеть примерно так (я сам не спец в прямых, может поправят, добавят кто...): ну и саму 1sqlite.dll надо скачать и кинуть в базу
#40 by Skom
ВыбранныеДокументы - элемент на форме СПИСОК С ПОМЕТКАМИ в котором пользователи выбираюткаки виды доков обрабатывать
#41 by Skom
а вот это внутри списка
#42 by DarkFrenzy
Спасибо, пойду разбираться что собой представляет 1sqlite
#43 by Skom
я для MSSQL все это делал с лайтом не знаю мои коды прокатят или нет.
#44 by Skom
+ глянул и подумал а не пойти ли восьмерку учить)))))
#45 by DarkFrenzy
>>Тогда задам тупой вопрос - а как ты будешь определять реквизит документа по которому проверять есть там твое ТМЦ или нет? Пропустил вопрос. Там только 2 варианта может быть, либо в документе есть реквизит "номенклатура", либо его нету. В других реквизитах искать не имеет смысла - для всех документов, где есть ТМЦ используется один и тот же реквизит "номенклатура".
#46 by Злой Бобр
И он кругом определенный? Т.е. Справочник.ТМЦ а не Справочник ?
#47 by DarkFrenzy
Для всех Справочник.Номенклатура
#48 by Mikeware
во-первых, то, что реквизит с именем "Номенклатура" содержит данные вида "Справочник.номенклатура" - всего лишть соглашение, и не более. А соглашениям верить нельзя. Поэтому - проверяй тип. Во-вторых, есть еще реквизиты - справочники неопределенного вида. Или даже вообще неопределенного типа... Это тоже учитывай
#49 by Злой Бобр
Согласен на все 100. Но если автору нужно побыстрячку слепить, то вероятно пока на это можно закрыть глаза. Хотя конечно же нет ничего более постоянного чем временное, поэтому лучше сразу писать по уму.
#50 by DarkFrenzy
, Да я тоже с вами согласен, просто на данный момент у реквизита "номенклатура" всех видов документов такой тип. Побыстрячку лепить не надо, для этого уже есть обработка с простым перебором. Сейчас цель - правильно составить 1Сный запрос:) Изучение 1sqlite/MSSQL все же оставлю на потом, когда нормально изучу 1с
#51 by palpetrovich
можешь  на потом, а можешь и попробовать нижеизложенную поделку :) зы: мне самому интересно, только разбираюсь с 1sqlite. Спасибо Eprst-у за помощь... в общем - то что получилось. Работает!
#52 by palpetrovich
+51: только если будешь пробовать - наверняка тебе прийдется поменять "ТМЦ" на "Номенклатура". Может еще что... ВыбрТМЦ - реквизит на форме СписокДоков - я получал просто все, где есть в табЧасти "ТМЦ". Ты можешь - как хочешь :)
#53 by palpetrovich
малехо приведенный к чуть более нормальному виду:
#54 by DarkFrenzy
Подредактировал сегодня твой код для своей обработки ("ВыбрТМЦ" поменял везде на "ВыбТМЦ", а "ТМЦ" на "Номенклатура", добавил СписокДоков=СоздатьОбъект("СписокЗначений") и попытку базаДанных = СоздатьОбъект("SQLiteBase") как в примере ). Выдается ошибка - "Значение не представляет агрегатный объект (ВыбратьСтроку)" на строку тз.ВыбратьСтроку; Извращался по разному с кодом, но сделать запрос рабочим пока что не получается. Также, насколько я понял из кода, ВыбрТМЦ не проверяется на группу, содержащую элементы табличной части. Буду рад любой помощи.
#55 by DarkFrenzy
Это про было, сейчас только увидел, завтра заценю:)
#56 by palpetrovich
добавь вверху модуля и "поменял на "Номенклатура"" - это если у тебя справочник действительно "Номенклатура" :)
#57 by palpetrovich
+56 засвети мыло
#58 by DarkFrenzy
Да, номенклатура. darkbasic@mail.ru
#59 by palpetrovich
проверь почту
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С