|   |   | 
| 
 | 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) ускорение - это хорошо. Но немаловажно и то, что запросы уже человеческие...
 пысы. для поиска расхождений у ИТЗ есть метод ЛевоеСоединение, например... | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |