Ведомость по партиям, по кодам операций.

Образец построения отчета с группировками по "Реквизитам" на примере отчета "Ведомость по партиям".

При переходе с 7.7 на 8.2 столкнулся с проблемой отсутствия ведомости по партиям с детализаций по кодам операций. Долго рыл интернет, и так ничего толкового не нашел. Пришлось потратить время и написать свой отчет.

Пошел по пути наименьшего сопротивления и просто переделал штатный отчет. Предлагаю свой вариант отчета.

Недавно мы обновили платформу до 8.2.14.519, так что у кого платформа младше могут возникнуть трудности с открытием обработки. На этот случай я приложил текст запроса, и текст модуля который я правил. Отчет был взят из УТ 10.3.13.2, и он использует «УниверсальныйОтчет» этой платформы. Так что я не гарантирую работоспособность на других версиях УТ. Мне кажется самым главным будет запрос которые реализует детализация по Кодам операций.

 

P.S. Надеюсь моя работа хоть кому то поможет решить задачу в кратчайшие сроки подобно моей. Если я где то допустил грубых ошибок, пишите, буду очень признателен, так как я только начинаю осваивать 8.2 и любая конструктиваня критика будет полезна.

 

UPD: 15.11.2011

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

В конструкцию получения начального/конечного остатков я добавил лишнее условие «И ТаблКодовОпераций.КодОперации ЕСТЬ NULL»:

    ВЫБОР
        КОГДА ИсточникДанных.Период = &ДатаНачала
                И ТаблКодовОпераций.КодОперации ЕСТЬ NULL
            ТОГДА ИсточникДанных.КоличествоНачальныйОстаток
        ИНАЧЕ 0
    КОНЕЦ КАК КоличествоНачальныйОстаток,

Тестирование вроде показало что в таком виде суммы начальных и конечных остатков не зависят от настроек отчета, но у этой конструкции есть какая то недостказанность, и это меня напрягает. Мне кажется это можно было сделать лучше, но я пока незнаю как.

 

Еще был добавлен расчет прибыли, валовый и в процентах, это было реализованно добавлением в секцию «ВЫБОРАТЬ»

    ВЫБОР
        КОГДА ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.Реализация)
                ИЛИ ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.РеализацияРозница)
            ТОГДА -ИсточникДанных.СуммаПродажиОборот
        ИНАЧЕ 0
    КОНЕЦ + ВЫБОР
        КОГДА ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.ВозвратОтПокупателя)
            ТОГДА -ИсточникДанных.СуммаПродажиОборот
        ИНАЧЕ 0
    КОНЕЦ КАК Оборот,
    ВЫБОР
        КОГДА ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.Реализация)
                ИЛИ ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.РеализацияРозница)
            ТОГДА -1 * (ИсточникДанных.СуммаПродажиОборот — ИсточникДанных.СтоимостьОборот)
        ИНАЧЕ 0
    КОНЕЦ + ВЫБОР
        КОГДА ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.ВозвратОтПокупателя)
            ТОГДА -(ИсточникДанных.СуммаПродажиОборот — ИсточникДанных.СтоимостьОборот)
        ИНАЧЕ 0
    КОНЕЦ КАК Профит,
    ВЫБОР
        КОГДА ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.Реализация)
                ИЛИ ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.РеализацияРозница)
            ТОГДА -ИсточникДанных.КоличествоОборот
        ИНАЧЕ 0
    КОНЕЦ + ВЫБОР
        КОГДА ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.ВозвратОтПокупателя)
            ТОГДА -ИсточникДанных.КоличествоОборот
        ИНАЧЕ 0
    КОНЕЦ КАК ОборотКоличество,
    ВЫБОР
        КОГДА ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.Реализация)
                ИЛИ ТаблКодовОпераций.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.РеализацияРозница)
            ТОГДА 100 * (ИсточникДанных.СуммаПродажиОборот — ИсточникДанных.СтоимостьОборот) / ИсточникДанных.СтоимостьОборот
        ИНАЧЕ NULL
    КОНЕЦ КАК ПрофитПроцент,

и в секцию «ИТОГ»

    СУММА(Профит),
    ВЫБОР
        КОГДА СУММА(СтоимостьРеализация) + СУММА(СтоимостьРеализацияРозница) — СУММА(СтоимостьВозвратОтПокупателя) > 0
                И СУММА(Оборот) > 0
            ТОГДА -100 * (СУММА(СтоимостьРеализация) + СУММА(СтоимостьРеализацияРозница) — СУММА(СтоимостьВозвратОтПокупателя) — СУММА(Оборот)) / (СУММА(СтоимостьРеализация) + СУММА(СтоимостьРеализацияРозница) — СУММА(СтоимостьВозвратОтПокупателя))
        ИНАЧЕ NULL
    КОНЕЦ КАК ПрофитПроцент,

Думаю как образец расчета процентных значений пригодится, на эти проценты я убил больше всего времени. За то теперь по образу и подобию этого отчета, клепаю отчеты по проще.

Подобный отчет можно было реализовать не временными таблицами, а вложенным запросом, но все мои попытки сделать это провалились, так что буду очень признателен если кто сможет переписать запрос в этом отчете через вложенные запросы, будет очень интересно посмотреть на изменения в скорости и потребляемой памяти.

P.S. Не стал трогать все файлы, изменил только «Текст запроса», хотя можно этот файл и не скачивать, все изменения я описал выше.

 

 

18 Comments

  1. vkt

    Толковый отчет. Очень пригодился при разработке своих отчетов.

    Reply
  2. Izosin

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

    Reply
  3. vkt

    Согласен. Изучение чужих разработок позволяет более качественно разрабатывать свои собственные.

    Reply
  4. Svetlana_K

    Отчет-хороший.

    Reply
  5. madmpro

    Очень хороший пример для работы с реквизитами регистров. Однозначно +!

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

    Reply
  6. n.lana

    Здравствуйте,оч полезный отчет, для производственных организаций было бы неплохо вынести в отдельные показатели:

    — Отчет производства за смену — (ПРОИЗВЕДЕНО)

    — Требование-накладные + Списание материалов в эсксплуатацию (Передано в производство)

    — Списание товаров — (Списание на ФР).

    А еще удобнее, если вид отчета оставить стандартным, и добавить возможность группировки по кодау операции, тогда он будет компактным и «приход — расход» будет виден

    Reply
  7. Izosin

    У нас нет производства, поэтому нет возможности добавить и проверить такие показатели, но есть исходники, и любой можно добавить любые показатели, по образу и подобию.

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

    Reply
  8. powerpc

    отличный отчет, спасибо.

    Reply
  9. oxana1

    отчет шикарный — ищу такой уже давно, ностальжи по семерке выражается только в тоске по этому отчету… а, еще по галке Показать остатки у комиссионеров в ведомости по товарам)))))…

    в кривом виде мне удавалось в УТ воспроизвести ведомочть по партиям с детализацией по видам операций, но там жутко некрасиво, да… там получается «Перемещение» и внутри «Нач.остаток, Приход, Расход, Кон.Остаток», а так хочется уивдеть «Начальный остаток», «Приход» (и тут детализация по видам операции Приход), «Расход» (и тут детализация по виду операции Расход)… ну, Вы понимаете же, да, как в семерке:))

    хоть у меня и 8.1, но однозначно жирный плюс! (поковыряла на 8.2 немного)

    Reply
  10. oxana1

    зы еще вот что заметила, если хочу развернуть до регистратора , например, сумму по перемещениям — открываются документы по всем операциям… наверное, хорошо бы отбор срабатывал только по перемещениям (или поступлениям, реализациям и т.д.)…

    Reply
  11. Izosin

    (9) oxana1,

    Этот отчет очень легко портировать на 8.1. Он создавался на базе Управления Торговли 10.3, которая в свою очередь была под 8.1. Так что думаю что если у вас Управление Торговлей 10.3 то вы легко сможете его переделать под себя, просто копируете любой самый простой отчет который базируется на универсальном отчете, и в модуль вставляете текст из моего отчета. Мне кажется заработает даже без допиливания напильником.

    Если есть такая потребность то могу сделать этот отчет на старой платформе 8.1, у меня дома где то завалялся дистрибутив старой платформы. Мы просто сразу купили и поставили 8.2, так что на работе нет старой платформы.

    Reply
  12. oxana1

    (11) сейчас буду пробовать, спасибо большое!:)

    Reply
  13. oxana1

    все получилось, абсолютно без допиливания…

    если нужен, могу вам скинуть, добавите и его, есть еще народ на 8.1…)

    зы и еще «Реализация в розницА» можно поправить на «Реализация в розницЕ» или «Реализация (розница)»… я у себя поправила

    Reply
  14. MMMaXXX

    Если дата документа = допустим 12.01.11 00:00:00

    Начальный остаток задваивается проблема я думаю в этой строке

    | КОГДА ИсточникДанных.Период = &ДатаНачала

    | ТОГДА ИсточникДанных.КоличествоНачальныйОстаток

    | ИНАЧЕ 0

    Как исправить?

    Reply
  15. Izosin

    (14) MMMaXXX,

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

    В конструкцию получения начального/конечного остатков я добавил лишнее условие «И ТаблКодовОпераций.КодОперации ЕСТЬ NULL»:

    ВЫБОР

    КОГДА ИсточникДанных.Период = &ДатаНачала

    И ТаблКодовОпераций.КодОперации ЕСТЬ NULL

    ТОГДА ИсточникДанных.КоличествоНачальныйОстаток

    ИНАЧЕ 0

    КОНЕЦ КАК КоличествоНачальныйОстаток,

    Reply
  16. MMMaXXX

    Спасибо! Единственное исправление которое внес еще это округление количества до тысячных. Прекрасный отчет!

    Reply
  17. alonzomozley

    Спасибо за отчет. Помог разобраться с реквизитами регистров.

    Reply
  18. COMPER

    Хороший отчет, но к сожалению не работает стандартная галочка «Использовать свойства».

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *