ФИФО в Запросе (с пояснениями для начинающих)

22.11.11

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

Статья призвана показать пример как реализовать ФИФО в запросе на произвольном примере для начинающих программистов.

Пример использования ФИФО в запросе.

Допустим есть поступление денежных средств на 100 рублей.
Сколько реализаций товаров оплачено, какую часть последнего документа оплатили?

Результат таблица

Реализация    СуммаДокумента    Оплата
1                    10                            10
2                    50                            50
3                    50                            40

ВЫБРАТЬ
   
1 КАК ПолеГруппировкиДляИтогов,
   
ВложенныйЗапрос.Ссылка,
   
ВложенныйЗапрос.СуммаДокумента КАК СуммаДокумента,
   
ВЫБОР
        КОГДА
ВложенныйЗапрос.НакапливаемыйИтог <= &Оплата
           
ТОГДА ВложенныйЗапрос.СуммаДокумента
        ИНАЧЕ ВложенныйЗапрос.СуммаДокумента + &Оплата - ВложенныйЗапрос.НакапливаемыйИтог
    КОНЕЦ КАК Оплата
ИЗ
    (ВЫБРАТЬ
       
РеализацияТоваровУслуг.Ссылка КАК Ссылка,
       
РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента,
       
СУММА(РеализацияТоваровУслугДляСуммирования.СуммаДокумента) КАК НакапливаемыйИтог
    ИЗ
       
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслугДляСуммирования
            ПО РеализацияТоваровУслуг.МоментВремени >= РеализацияТоваровУслугДляСуммирования.МоментВремени
    ГДЕ
       
РеализацияТоваровУслуг.Организация = &Организация
       
И РеализацияТоваровУслуг.Контрагент = &Контрагент
       
И РеализацияТоваровУслуг.ДоговорКонтрагента = &ДоговорКонтрагента
       
И РеализацияТоваровУслугДляСуммирования.Организация = &Организация
       
И РеализацияТоваровУслугДляСуммирования.Контрагент = &Контрагент
       
И РеализацияТоваровУслугДляСуммирования.ДоговорКонтрагента = &ДоговорКонтрагента

   
СГРУППИРОВАТЬ ПО
       
РеализацияТоваровУслуг.Ссылка,
       
РеализацияТоваровУслуг.СуммаДокумента) КАК ВложенныйЗапрос
ГДЕ
   
ВложенныйЗапрос.НакапливаемыйИтог - ВложенныйЗапрос.СуммаДокумента < &Оплата

УПОРЯДОЧИТЬ ПО
   
ВложенныйЗапрос.Ссылка.МоментВремени
ИТОГИ
   
СУММА(СуммаДокумента),
   
СУММА(Оплата)
ПО
   
ПолеГруппировкиДляИтогов

 


 

В запросе необходимо реализовать колонку, в которой будет накапливаться сумма предыдущих документов.

Строки, где Оплата < НакапливаемыйИтог и Оплата > (НакапливаемыйИтог - СуммаДок)  - это интересующие нас строки.

Собственно, самое сложное, добавить Колонку НакапливаемыйИтог.

ИЗ
        Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслугДляСуммирования
            ПО РеализацияТоваровУслуг.МоментВремени >= РеализацияТоваровУслугДляСуммирования.МоментВремени

Если не задать условия соединения к каждой строке одной таблицы будут присоединены все строки другой таблицы.

При условии

ПО РеализацияТоваровУслуг.МоментВремени >= РеализацияТоваровУслугДляСуммирования.МоментВремени

к одной строке присоединяются нужное нам количество строк.

ВЫБРАТЬ
        РеализацияТоваровУслуг.Ссылка КАК Ссылка,
        РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента,
        СУММА(РеализацияТоваровУслугДляСуммирования.СуммаДокумента) КАК НакапливаемыйИтог

ИЗ…

СГРУППИРОВАТЬ ПО
        РеализацияТоваровУслуг.Ссылка,
        РеализацияТоваровУслуг.СуммаДокумента

Суммируем строки 2-й таблицы и получаем НакапливаемыйИтог.

ВЫБРАТЬ
    1 КАК ПолеГруппировкиДляИтогов,
    ВложенныйЗапрос.Ссылка,
    ВложенныйЗапрос.СуммаДокумента КАК СуммаДокумента,
!    ВЫБОР
!        КОГДА ВложенныйЗапрос.НакапливаемыйИтог !            ТОГДА ВложенныйЗапрос.СуммаДокумента
!        ИНАЧЕ ВложенныйЗапрос.СуммаДокумента + &Оплата - ВложенныйЗапрос.НакапливаемыйИтог
!    КОНЕЦ КАК Оплата
ИЗ…

ИТОГИ
    СУММА(СуммаДокумента),
    СУММА(Оплата)
ПО
    ПолеГруппировкиДляИтогов

Вычислим разбиение общей оплаты к каждому документу

ИТОГИ

    СУММА(СуммаДокумента),
    СУММА(Оплата)
ПО
    ПолеГруппировкиДляИтогов

Итоги для визуальной наглядности корректной работы.

См. также

SALE! 20%

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122118    670    389    

714

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5746    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6284    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1742    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5388    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16181    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. igor_aviant 22.11.11 17:21 Сейчас в теме
1. ошибка в строке запроса
КОГДА ВложенныйЗапрос.НакапливаемыйИтог &Оплата
2. А можно как-то описать задачу которую решает этот запрос.
Фраза "ФИФО в запросе" - ни о чем не говорит!
2. Поручик 4670 23.11.11 07:40 Сейчас в теме
Для начинающих ещё статья ФИФО для любопытных http://infostart.ru/public/68225/
3. anig99 2843 23.11.11 08:49 Сейчас в теме
Действительно. Нужно дать ссылки на полный комплект статей.
Ещё были статья моя про оптимизацию и ещё пара статей про ФИФО
4. anig99 2843 23.11.11 08:55 Сейчас в теме
И ещё скриншот крутой... С не отключенной проверкой орфографии
5. S_DS 23.11.11 09:19 Сейчас в теме
6. S_DS 23.11.11 09:26 Сейчас в теме
А по ЛИФО также? а по среднему как?
7. dumal 23.11.11 10:14 Сейчас в теме
На мой взгляд, наиболее полно эта тема разобрана в видеолекциях Павла Чистова. Кстати, они доступны для бесплатного скачивания.

А по ЛИФО также? а по среднему как?


По ЛИФО будет почти все то же самое, только упорядочивание не по возрастанию, а по убыванию. По среднему алгоритм расчета будет совсем другой
8. Ish_2 1104 23.11.11 14:00 Сейчас в теме
Пока неинтересно. Пример тривиальный , избитый по постановке задачи.
Интерес появится если статья будет начинаться :
Допустим есть поступления денежных средств : 
Документ 1 - 20 р.
Документ 2 - 30 р.
Документ 3 - 50 р. 
Нужно по методу Фифо распределить эту оплату по документам реализации :
Реализация 1 - 40р
Реализация 1 - 30р
Реализация 1 - 50р

Если автор дерзнет реализовать в одном запросе - обсудим.
JohnyDeath; SedovSU@mail.ru; Sun_Storm; glazrom; toxicoff; afk; +6 Ответить
11. yavedmin 120 24.11.11 13:34 Сейчас в теме
12. tormozit 7136 24.11.11 15:28 Сейчас в теме
(8) Такая задача в общем случае одним конечным запросом не решается, т.к. имеет только циклическое алгоритмическое решение (с зависимостью каждого прохода от предыдущего и неизвестным заранее их числом).
13. Ish_2 1104 24.11.11 18:09 Сейчас в теме
(12) Такая задача решается в общем случае одним конечным запросом. Пример того как это делается
http://infostart.ru/public/68225/
14. tormozit 7136 24.11.11 21:59 Сейчас в теме
(13) Признаю, я ошибся. Твоя статья хороша.
15. Ish_2 1104 24.11.11 22:10 Сейчас в теме
(14) Становись в очередь. Вначале я должен признать правоту Anig99.
Дело давнее - он написал несколько статей о нарастающих итогах,
довольно невнятных и сумбурных. Но в целом-то оказался прав !
Статья "Фифо.." завершает наш с ним диалог.
16. AlexO 135 27.11.11 02:20 Сейчас в теме
(8) Ish_2,
на самом деле, вся соль - как реализовать именно универсальный механизм, когда оплата неравномерна с первого же документа...
(9) Artemuch2,
да, вот такие "спецы" и получаются - что-то там для себя делают, ничего общего с реальностью не имеющего. Пример - на "спецах" не нужна проверка дублирующих документов... массовая ошибка начинающих бухгалтеров..
после этого я на всех 1с-ых спецах поставил жирный крестик...
(15) Ish_2,
так где статьи-то спорные? ))
привели бы уже список, тем более - так жарко, как пишите, обсуждали ))
17. Ish_2 1104 27.11.11 13:21 Сейчас в теме
(16) Хм.. Все комментарии читаете ?
В третий уже раз (пардон!) в этой теме http://infostart.ru/public/68225/
Задача из (8) там решена.
В этой теме есть ссылки и на пред . публикации
9. Artemuch2 23.11.11 17:57 Сейчас в теме
Это стандартный механизм, работу с которым нужно знать при сдаче на спеца по 1С
10. rodoz32 24.11.11 12:19 Сейчас в теме
Да,Спец-тяжёлая штука,получить азы бы программирования для начала....
18. Lex1C 02.12.11 11:15 Сейчас в теме
Непонятно, зачем такие статьи вообще публиковать.
19. yavedmin 120 02.12.11 15:35 Сейчас в теме
(18)(18) Lex1C, Для начинающих программистов
20. Yury1001 1470 07.12.11 10:59 Сейчас в теме
Спасибо за публикацию - вдохновила меня на работу: Прайс-лист в две колонки на СКД.
21. Tanis 04.09.13 14:09 Сейчас в теме
Добрый день!
Что нужно дописать, чтоб документы оплаты еще подбирало, и так же их распределяло?
22. Multik 33 26.09.13 10:27 Сейчас в теме
Объясните плиз, а за "оплату", что берете?
23. dreamcreal 31.10.16 04:09 Сейчас в теме
Здравствуйте.
Значение параметра &Оплата откуда берется?
Вбивается пользователем?
24. yavedmin 120 08.11.16 02:34 Сейчас в теме
(23) dreamcreal, Здравствуйте. Да. Это тестовый пример для демонстрации принципа работы. В реальной жизни чаще встречается Таблица на таблицу. Это обсуждалось выше в комментариях.:

13. Игорь Исхаков (Ish_2) 24.11.2011 18:09
(12) Такая задача решается в общем случае одним конечным запросом. Пример того как это делается
http://infostart.ru/public/68225/
Оставьте свое сообщение