При переходе с 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. Не стал трогать все файлы, изменил только "Текст запроса", хотя можно этот файл и не скачивать, все изменения я описал выше.