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

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

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

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

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

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

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

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

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