Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: В одном запросе к регистру остатков получить остатки по позициям с движениями

v7: В одном запросе к регистру остатков получить остатки по позициям с движениями
Я
   GrayS19
 
30.04.21 - 11:15
Не могу найти хорошей документации по запросам в 7.7 (стандартным).
Простая задача : получить из регистра остатков остатки товаров , по которым были/не были движения за период.
Лобовое решение:
1-й запрос - номенклатура с движениями

|Период С ДатаНач По ДатаОконч;
|Товар = Регистр.Товары.Номенткатура;
|Количество = Регистр.Товары.Количество;
|Функция ПриходК = Приход(Количество);
|Функция РасходК = Расход(Количество);
|Группировка Товар;

Выгрузили результаты запроса в СписокТоваров

2-й запрос: фильтр по двигавшимся

|Период С ДатаНач По ДатаОконч;
|Товар = Регистр.Товары.Номенткатура;
|Количество = Регистр.Товары.Количество;
|Функция КонОстК = КонОст(Количество);
|Условие (Товар в СписокТоваров);    
|Группировка Товар;

А в одном запросе возможно штатно отфильтровать остатки ?
   Mikeware
 
1 - 30.04.21 - 11:17
в черных, насколько помню, нет....
   Злопчинский
 
2 - 30.04.21 - 11:43
попробуй так
|Функция ПриходК = Приход(Количество);
|Функция РасходК = Расход(Количество);
|Функция КонОстК = КонОст(Количество);
|Условие((Запрос.РасходК<>0) ИЛИ (Запрос.ПриходК<>0));
   GrayS19
 
3 - 30.04.21 - 11:51
(2) конечно пробовал, тогда остатки на конец не показывает
   Mikeware
 
4 - 30.04.21 - 11:55
(3) а что мешает использовать нормальные запросы?
можно еще выгрузить результат в индексированную ТЗ, и отфильтровать там. Но это опять же если религия не мешает
   acanta
 
5 - 30.04.21 - 12:03
Регистр.товары.номенклатура,справочник.номенклатура.текущийэлемент; 
Это типа leftjoin
Какая-нибудь функция=сумма(1);
Чтобы запрос не обрезал сам нулевую номенклатуру.
   Злопчинский
 
6 - 30.04.21 - 12:03
(3) тады оставить только КОнОстК, а фильтровать уже в обходе запроса?
   GrayS19
 
7 - 30.04.21 - 12:05
(4) так я и использую нормальные, не чёрные. Про индексированную ТЗ надо читать, не знаком.
   acanta
 
8 - 30.04.21 - 12:06
В качестве функции можно исправить сумма (любая глобальная функция), но индексирования по ним точно не будет, поэтому тормозит эта высшая математика в 7ке еще больше чем 8ка с котиками.
   1Сергей
 
9 - 30.04.21 - 12:06
(7) в (0) черные запросы. Предлагают прямые
   GrayS19
 
10 - 30.04.21 - 12:11
(6) нужны итоги по вышестоящим группам справочника "Номенклатура". Без них - да, обход с фильтром. Вобщем понятно: запрос-фильтр перед основным запросом. Может не сильно красиво, но работоспособно.
   Mikeware
 
11 - 30.04.21 - 12:24
(7) ну тогда читай про индексированную таблицу... там все это делается быстро и просто
   acanta
 
12 - 30.04.21 - 12:24
Никто не против делать выборку прямыми запросами а группировку в иерархии черным с функцией сумма с какими-то то параметрами поиска по полученной тз.
   Mikeware
 
13 - 30.04.21 - 12:26
(12) ээээ? не, можно еще в промежутке выгружать результаты запроса в экссель, там преобразовывать в цсв...
но нахрена?
   acanta
 
14 - 30.04.21 - 12:26
Наверняка той sql может круче, но я прочитала и не осилила, а пробовать на боевой базе без соответствующего образования стремно.
   Злопчинский
 
15 - 30.04.21 - 12:29
не, итз - хорошая вещь
   acanta
 
16 - 30.04.21 - 12:45
А вообще всем известно,что черный запрос это обычный файл dbf с какими-то cdx. Даже если сама база sql. Это действительно странно использовать обычный запрос в sql базе.
   Mikeware
 
17 - 30.04.21 - 12:52
(16) "так истерически слежалось"©.
ну то есть исторически сложилось... но в те времена за использование в качестве иденитификаторов УИДов могли и морду набить...
   GrayS19
 
18 - 30.04.21 - 12:56
База DBF. Поэтому, наверное, проще чёрными.
   Mikeware
 
19 - 30.04.21 - 13:00
(18) тогда черный запрос, выгрузить в ИТЗ, там поставить фильтр по нулевым оборотам, и группировка по номенклатуре
   Злопчинский
 
20 - 30.04.21 - 13:00
(19) академик!
   Mikeware
 
21 - 30.04.21 - 13:02
(20) "у нас академиков не хватает раздевалки обслуживать!"©угроза замдекана
   GrayS19
 
22 - 30.04.21 - 13:04
(15)верю земляку, посмотрел документацию на 1цпп.ру - 16 страниц. Нада грызть
   Злопчинский
 
23 - 30.04.21 - 13:10
(22)выгружаешь плоский результат запроса в ИТЗ.
добавляешь индекс по полю, например ПриходК
устанавливаешь фильтр на значение прихода в диапазоне От-До.
удаляешь.
профит.
   Mikeware
 
24 - 30.04.21 - 13:10
(22) слона едят по кусочкам
из всей документации надо  [пока] два метода. а установить библиотеку, создать объект ИТЗ, - это штатные.
   Mikeware
 
25 - 30.04.21 - 13:11
(23) а после - "сгруппировать"
   GrayS19
 
26 - 30.04.21 - 13:45
всем спасибо ! Если не заленюсь, сделаю 2 варианта: 2 чёрных (то что знаю, что в топике) и чёрный + ИТЗ.
Интересно будет увидеть разницу по времени исполнения. Может и небольшая ? :)
   Mikeware
 
27 - 30.04.21 - 14:01
(26) раз уж взялся, то делай сразу прямым запросом :-)
   Ёпрст
 
28 - 30.04.21 - 14:07
(0) На вот, занимайся. И не надо ничего грызть
https://cloud.mail.ru/public/AeJK/71o1vuzd1
   GrayS19
 
29 - 30.04.21 - 14:35
(28) отдельный респект уважаемому гуру. Не только за эту тему. В попытке получить быстрый результат сразу получил отлуп :

Рез = ОлеДБ.Соединение(Соединение);
{D:\ISN\1C\_ОБРАБОТКИ\_ЗАПРОСОСТАТКИИОБОРОТЫ_ФОКС_СКУЛЬЛАЙТ (1).ERT(11)}: FAILED! IDataInitialize::GetDataSource(): Класс не зарегистрирован

Проверил на 
1cpp.dll версия 2.5.0.7 с 1cpp.ru и 
версии 3.2.2.0 - не помню откуда
   Mikeware
 
30 - 30.04.21 - 14:40
(29) фокс установлен?
 
 Рекламное место пустует
   Mikeware
 
31 - 30.04.21 - 14:41
+(30) если нет, то кинь в каталог 1sqlite, и заремь все фоксовое
   GrayS19
 
32 - 03.05.21 - 10:43
(26)- ответ самому себе :) , может кому пригодится (чтобы начать изучать прямые запросы)
Сравнил получение плоской таблицы движений и остатков через SQLite из (28) и чёрного запроса.

За февраль 2021 года (начал с него):
SQLite : строк в таблице результата - 49303, время выполнения -  4.28 сек.
чёрный : строк в таблице результата - 48865, время выполнения - 17.90 сек.

За январь 2021 года:
SQLite : строк в таблице результата - 49420, время выполнения -  3.41 сек.  
чёрный : строк в таблице результата - 48629, время выполнения - 18.32 сек.

Почему разное количество строк, хотя итоги по всем колонкам идут - выясняю.
   Mikeware
 
33 - 03.05.21 - 10:54
(32) ускорение - это хорошо. Но немаловажно и то, что запросы уже человеческие...
пысы. для поиска расхождений у ИТЗ есть метод ЛевоеСоединение, например...


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.