Запрос для получения остатков на складе на все дни, даже когда не было движений.(Для нетиповой)

29.09.09

Разработка - Запросы

Запрос для 1С: Предприятие 8.1

Пример описывает механизм получения  остатков по регистру накопления на КАЖДЫЙ день периода (даже когда не было оборотов).

Проверялось на типовой БП для Казахстана, платформа 8.1

В запросе учтены наработки, представленные на данном сайте. Спасибо авторам, извините лень искать и приводить исходные ссылки. Если кому нужно спрашивайте, напишу. Вспомагательный запрос, формирующий последовательность дат заимствован целиком с Мисты. Мне он показался более удобным, и уж точно более компактным, чем у г. Душелова.

На базе приведенного запроса построен запрос с подсчетом количества дней товара на складе. Если кому интересно, выложу.

 

Текст Запроса:

ВЫБРАТЬ
    НоменклатураСПрПериодами.Партия КАК Партия,
    НоменклатураСПрПериодами.Дата КАК Дата,
    НоменклатураСПрПериодами.Номенклатура КАК Номенклатура,
    НоменклатураСПрПериодами.Номенклатура.Наименование КАК НоменклатураНаименование,
    РегистрАптекПартииОстаткиИОбороты.КолВоКонечныйОстаток
ИЗ
    (ВЫБРАТЬ
        НоменклатураСДатами.Партия КАК Партия,
        НоменклатураСДатами.Дата КАК Дата,
        МАКСИМУМ(РегистрАптекПартииОстаткиИОбороты.Период) КАК ПериодПоследний,
        НоменклатураСДатами.Номенклатура КАК Номенклатура
    ИЗ
        (ВЫБРАТЬ
            НоменклатураУровень2.Номенклатура КАК Номенклатура,
            НоменклатураУровень2.Партия КАК Партия,
            КалендарьУровень2.Дата КАК Дата
        ИЗ
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                ВыбраннаяНоменклатура.Номенклатура КАК Номенклатура,
                ВыбраннаяНоменклатура.Партия КАК Партия
            ИЗ
                (ВЫБРАТЬ
                    РегистрАптекПартииОбороты.Номенклатура КАК Номенклатура,
                    РегистрАптекПартииОбороты.Партия КАК Партия
                ИЗ
                    РегистрНакопления.РегистрАптекПартии.Обороты(&НачПериода, &КонПериода, День, Аптека = &Аптека) КАК РегистрАптекПартииОбороты
                ГДЕ
                    РегистрАптекПартииОбороты.КолВоПриход > &Ничего
               
                ОБЪЕДИНИТЬ ВСЕ
               
                ВЫБРАТЬ
                    РегистрАптекПартииОстатки.Номенклатура,
                    РегистрАптекПартииОстатки.Партия
                ИЗ
                    РегистрНакопления.РегистрАптекПартии.Остатки(&НачПериода, Аптека = &Аптека) КАК РегистрАптекПартииОстатки
                ГДЕ
                    РегистрАптекПартииОстатки.КолВоОстаток > &Ничего) КАК ВыбраннаяНоменклатура) КАК НоменклатураУровень2
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                    ДОБАВИТЬКДАТЕ(&НачПериода, ДЕНЬ, T.n) КАК Дата
                ИЗ
                    (ВЫБРАТЬ
                        5 * (t1.a - 1) + t2.b - 1 КАК n
                    ИЗ
                        (ВЫБРАТЬ
                            1 КАК a
                       
                        ОБЪЕДИНИТЬ
                       
                        ВЫБРАТЬ
                            2
                       
                        ОБЪЕДИНИТЬ
                       
                        ВЫБРАТЬ
                            3
                       
                        ОБЪЕДИНИТЬ
                       
                        ВЫБРАТЬ
                            4
                       
                        ОБЪЕДИНИТЬ
                       
                        ВЫБРАТЬ
                            5
                       
                        ОБЪЕДИНИТЬ
                       
                        ВЫБРАТЬ
                            6) КАК t1
                            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                                1 КАК b
                           
                            ОБЪЕДИНИТЬ
                           
                            ВЫБРАТЬ
                                2
                           
                            ОБЪЕДИНИТЬ
                           
                            ВЫБРАТЬ
                                3
                           
                            ОБЪЕДИНИТЬ
                           
                            ВЫБРАТЬ
                                4
                           
                            ОБЪЕДИНИТЬ
                           
                            ВЫБРАТЬ
                                5
                           
                            ОБЪЕДИНИТЬ
                           
                            ВЫБРАТЬ
                                6) КАК t2
                            ПО (ИСТИНА)) КАК T
                ГДЕ
                    T.n < ДЕНЬ(КОНЕЦПЕРИОДА(&КонПериода, ДЕНЬ))) КАК КалендарьУровень2
                ПО (ИСТИНА)) КАК НоменклатураСДатами
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрАптекПартии.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&НачПериода, ГОД), &КонПериода, День, , Аптека = &Аптека) КАК РегистрАптекПартииОстаткиИОбороты
            ПО НоменклатураСДатами.Номенклатура = РегистрАптекПартииОстаткиИОбороты.Номенклатура
                И НоменклатураСДатами.Партия = РегистрАптекПартииОстаткиИОбороты.Партия
                И НоменклатураСДатами.Дата >= РегистрАптекПартииОстаткиИОбороты.Период
   
    СГРУППИРОВАТЬ ПО
        НоменклатураСДатами.Партия,
        НоменклатураСДатами.Дата,
        НоменклатураСДатами.Номенклатура) КАК НоменклатураСПрПериодами
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрАптекПартии.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&НачПериода, ГОД), &КонПериода, День, ДвиженияИГраницыПериода, Аптека = &Аптека) КАК РегистрАптекПартииОстаткиИОбороты
        ПО НоменклатураСПрПериодами.Номенклатура = РегистрАптекПартииОстаткиИОбороты.Номенклатура
            И НоменклатураСПрПериодами.Партия = РегистрАптекПартииОстаткиИОбороты.Партия
            И НоменклатураСПрПериодами.ПериодПоследний = РегистрАптекПартииОстаткиИОбороты.Период

УПОРЯДОЧИТЬ ПО
    НоменклатураНаименование,
    Партия,
    Дата

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    171679    960    403    

924

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    11712    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    6660    XilDen    36    

83

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    9349    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2803    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    10645    implecs_team    6    

48

Запросы Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3672    andrey_sag    10    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wirg 16.07.09 15:53 Сейчас в теме
а где внешний отчет сам?
9. elizarovs 83 16.07.09 20:34 Сейчас в теме
(1)(2)Звиняйте, дядьку, описачка вышла. Бросил шаблончик и не исправил. Конечно, это только запрос, причем по нетиповой торговле.
(5)На выходных, постараюсь переписать под типовую УТ. Пока небольшой комментарий для тех кому нужно срочно: РегистрАптекПартии аналог ПартийТоваровНаСкладах, Аптека является складом. Параметр &Ничего = 0.
3. Русский 47 16.07.09 15:57 Сейчас в теме
Если в СКД указать в качестве группировочного поле с типом Дата, и указать у него метод дополнения ДЕНЬ, то также получаем данные расписанные по дням включая дни без записей в регистре.
4. IronDemon 769 16.07.09 16:34 Сейчас в теме
(3) Это для вывода но не для расчета.
6. Русский 47 16.07.09 17:07 Сейчас в теме
(4) Можно запихать результат работы СКД в универсальную коллекцию и уже с ней маневрировать чего-нить.
7. IronDemon 769 16.07.09 17:34 Сейчас в теме
(6) Это через одно место.
8. Русский 47 16.07.09 17:37 Сейчас в теме
(7) зато не надо ухищряться запросы писать :)
10. elizarovs 83 16.07.09 20:47 Сейчас в теме
(3) Систему Компоновки Данных недолюбливаю. Запрос - вещь универсальная, можешь воткнуть, куда хочется. Кодом, да через витуальную таблицу, пожалуй было бы еще легче и понятнее, но хотелось именно запросом. А запрос, зараза, ну очень вредничал. Главнае проблемы - заполнить данными даты, в которых не было движений и получить числовую последовательность не из готовой таблицы, которая обязательно окажется заполненной неправильно, а из числовой последовательности.
5. IronDemon 769 16.07.09 16:38 Сейчас в теме
Автор, запросы нужно выкладывать которые пойдут в типовых конфигурациях без изменений.
11. redgad 80 18.07.09 08:40 Сейчас в теме
Как правило, такие запросы я строил до появления СКД следующим образом:
1. Получал данные по интересуюущему регистру
2. Брал какой либо регистр сведений, который заполнен на каждую дату(В типовых это могут быть или "КурсыВалют" или "Регламентированный производственный календарь")
3. Делал левое соединение с этим вспмогательный регистром
12. luns 26.08.09 08:38 Сейчас в теме
Автор выложи запрос для типовой конфы. Чтобы работало и на УТ и на УПП, ну скажем к регистру ТоварыНаСкладах.
13. luns 26.08.09 08:38 Сейчас в теме
Плюс авансом за интерес к теме. Но посмотрю только когда будет для типовой запрос.
14. elizarovs 83 26.08.09 11:11 Сейчас в теме
(13) Ок. А то без заинетересованных, не хотелось переделывать.
15. пользователь 09.09.09 17:11
Сообщение было скрыто модератором.
...
16. drandulet 10.09.09 20:41 Сейчас в теме
Спасибо! Очень пригодилось
17. grub 6 14.05.10 16:15 Сейчас в теме
тут маленькая тонкость текущий запрос выдаёт только 36 дат у меня а квеличить количество ?!
18. elizarovs 83 15.05.10 14:13 Сейчас в теме
(17) Не сложно. В середине два цикла (дают t1 и t2) от 1 до 6. 6х6=36. Добавьте в обоих цифры до 9, чисел добавится. Более, чем 99 делать не советую, выборка будет долго работать, успеете соскучиться. )
Можете черкнуть в личку, пришлю образец на 99.
19. AlexanderIvanov 89 25.06.10 21:13 Сейчас в теме
удивительный говнокод
20. DJ_Codebase 06.10.10 11:22 Сейчас в теме
Я б сказал ГОВНОКОДИЩЕ! :D
21. Artur88 01.12.10 12:01 Сейчас в теме
Как это в СКД заделать?
22. elizarovs 83 08.12.10 13:16 Сейчас в теме
В публикации http://forum.infostart.ru/forum24/topic27133/ есть обработка, в которой для типовой Российской торговли оцениваются складские запасы и запрос по остаткам на складах там включен.
23. marku 63 26.10.11 17:03 Сейчас в теме
Спасибо
как раз запрос и нужен
24. mij 20 20.11.11 08:50 Сейчас в теме
Какая разница в принципе какой код если работает и то что нужно. Если делать самому то конечно по другому а если готовое то спасибо.
Оставьте свое сообщение