Как ускорить запрос по регистру? #543082


#0 by es3000
Конфигурация самописная, есть регистр "остатки", очень похожий на такой же регистр из типовой торговли. Структура регистра: Нужно установить факт что по списку номенклатуры была совершена операция "возврат поставщику". Не важно сколько когда и на какую сумму. Интересует только сам факт был возврат или нет. Я сделал такой запрос: В принципе работает. Но долго, так как он обрабатывает регистр за все время. Можно ли как-то ускорить этот запрос? Теоретически можно было бы убрать количество из запроса, оно мне не нужно. Но без количества запрос в таком виде: Но такой запрос всегда почему-то пустой.
#1 by Lepochkin
А зачем вообще запрос?? Я так понимаю "возврат поставщику" делается документом конкретного вида. Дак и пробегись по документам.
#2 by ДенисЧ
Для начала вынеси значение перечисления в переменную
#3 by es3000
цикл по всем документам определенного вида, да еще и по табличной части этих документов думается еще дольше будет работать
#4 by es3000
а что это даст?
#5 by el-gamberro
Так сделай это запросом.
#6 by es3000
а какая тогда будет разница с моим запросом? почему он будет быстрее работать? все равно придется запрос выполнить за весь период времени с "01.01.1980" по интересующий момент
#7 by el-gamberro
#8 by el-gamberro
ну во первых ты залазишь в таблицу регистра вместо того чтобы получить необходимое из таблицы самого документа причем из ее табличной части.
#9 by Lepochkin
|Период с НачДата по КонДата; У тебя тут НачДата всегда 01.01.1980???? это первое.
#10 by es3000
в моем запросе НачДата = "01.01.1980"
#11 by orefkov
select top 1
#12 by es3000
а что-то подобное стандартными средствами можно сделать?
#13 by Злопчинский
такой запрос называется "прямой", и его можно писать в 1С, используя ВК 1с++
#14 by Злопчинский
штатные запросы, в отличие от называютсся "чорными"
#15 by es3000
, про прямые запросы я знаю... вопрос в том стоит ли применять для моего случая "тяжелую артиллерию" в виде 1С++? штатные средства для моего случая никак не подходят?
#16 by orefkov
Галку отбор движений на "КодОперации" + УстановитьЗначениеФильтра + ОбратныйПорядок + ВыбратьДвижения.
#17 by es3000
спасибо попробую
#18 by es3000
нет так не подходит: приходится пробежать все записи чтобы определить есть ли возврат для каждой номенклатуры из списка Получается что лучше всего подходит прямой запрос. Но запрос в надо составить так чтобы он работал по списку номенклатуры, а сейчас он только одну строку выдает
#19 by FN
странная задача... если это разовая операция - то время выполнения в принципе пофиг. если же такой запрос нужно выполнять часто, то гораздо проще будет добавить периодический реквизит "ПоследнийВозврат" в справочник товаров и устанавливать значение этого реквизита (документ возврата, дата возврата, просто "1" на выбор) в документах возврата. Ну и разово заполнить по уже существующим возвратам либо путем перепроведения, либо обработкой.
#20 by es3000
Операция не разовая. Бухгалтер готовит документ возврата поставщику. И в подборе хочет видеть только ту номенклатуру, по которой еще не было возвратов
#21 by es3000
В принципе решение с периодическим реквизитом хорошее... но прямой запрос кажется более простым.
#22 by vip67
если бух хочет видеть те ТМЦ, по которым не было возвратов, то, как вариант, можно: 1) определить перечень ТМЦ, по которым были возвраты, а это делать (если возврат делается по определенному виду документа) через использование условия Документ.Вид = "такой-то". потом загоняем в список ТМЦ. 2) дальше в обычном запросе используем условие, что ТМЦ не в этом списке. и можно использовать и для отображения всех остатков и для проверки по поределенному ТМЦ. все.
#23 by FN
странная задача... а если закуплено было 100, вернули 10 а через месяц опять надо делать возврат - то этот товар уже вернуть нельзя? или наоборот? странная логика... для возвратов лучше использовать табличку в которой показывать Товар, остаток на складе, разница между купленным и возвращенным товаром по этому поставщику - например в виде внешнего отчета с ТЗ на форме и возможностью указания количества + перенос этих данных в документ Возврат.
#24 by es3000
Вообще - да, Но, (не вдаваясь в подробности) специфика работы этой фирмы такова что возврат поставщику всегда делается только один раз.
#25 by FN
ну тогда точно используй реквизит справочника, причем даже не периодический, а обычный с отбором. Можно будет фильтровать форму списка справочника "на лету" по возвращеным и не возвращеным товарам
#26 by es3000
Да я уже начал прямым запросом делать как в , только чего то я его довести до ума не могу. Если в него подставить условие по конкретной номенклатуре, то работает. А теперь как-то надо его доделать чтоб работал для списка номенклатуры
#27 by Z1
СписокТов - содержит список твоих товаров
#28 by es3000
спасибо
#29 by es3000
А у меня такой вариант получился:
#30 by es3000
но у меня нету условия по списку товаров
#31 by es3000
У меня база DBF
#32 by milan
в дело сказано. сделай фильтр по операции и номенклатуре и выбери движения столько раз сколько номенклатур.
#33 by Z1
(29 30) ну я в 27 писал наверное для другой постановки задачи. в 27 делалось есть заданный список товаров. Среди этих товаров отобрать те по которым были в движениях  конкрет. код операции в 29 задача найти все товары по которым был кокретный код операции. об особенностях dbf мало чего могу сказать.
#34 by es3000
я про DBF упомянул в связи с тем, что не сработал метод УложитьСписокОбъектов. Я сгоряча решил что может быть дело как раз в DBF?
#35 by es3000
версия 1С++ 3.2.2.8
#36 by es3000
а сейчас закомментирвал "УложитьСписокОбъектов" и сделал элементарный запрос: Вообще возвращается пустая таблица, даже без колонок. Что за фигня? DBF?
#37 by es3000
ошибки никакой не выдается
#39 by es3000
Рез = База.Соединение(Соединение); {ПРЯМОЙ ЗАПРОС ПО ВОЗВРАТАМ.ERT}: FAILED! IDataInitialize::GetDataSource: Класс не зарегистрирован
#40 by es3000
а почему ODBCRecordset не работает?
#41 by FN
ХЗ я всегда использую ОЛЕДБ, да и когда изучал 1С++ в рекомендациях советовали именно его для ДБФ Microsoft OLE DB Provider для DBF баз
#42 by es3000
а как этот драйвер работает с Windows 7? нету проблем?
#43 by FN
проблем не замечал
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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