Зачем это нужно
В стандартной конфигурации УПП множество отчетов, с помощью которых можно досконально исследовать каждый участок учета, но это не мешает бухгалтерам требовать все новых и новых модификаций. На практике часто приходится многократно строить один и тот же отчет по разным сохраненным настройкам, затем копировать результаты в Excell для дальнейшей обработки. Обработка призвана частично упростить эту процедуру.
Как это работает
Обработка подключается к отчету (или нескольким отчетам). Вызвать ее можно из меню Действия формы отчета. Кнопка Отчет по разным настройкам (кнопка будет называться так, как вы зададите при регистрации внешней обработки) открывает форму, которая служит для вывода на один лист отчетов из произвольного количества настроек.
Чтобы получить сводный отчет, нужно заполнить таблицу настройками, отчеты по которым собираетесь вывести. Нажать кнопку Сформировать. В итоговом документе отчеты будут располагаться в том же порядке, в котором записаны в таблицу. Сформированный документ будет отображен в новом окне.
Флажок Единый период устанавливает единый период для всех отчетов перечня. Если этот флажок не установлен, каждый отчет использует тот временной интервал, который задан в его настройках.
Созданный перечень можно сохранить, используя кнопку Сохранить настройку в командной панели формы. Рекомендуется давать настройкам вменяемые названия типа: "Баланс и налог на имущество". Впоследствии этот перечень можно восстановить с помощью кнопки Восстановить настройку. Полученный сводный отчет можно выгрузить стандартными средствами (например, в эксель) для последующей обработки.
С какими отчетами будет работать
Работать это будет только в отчетах, построенных на основе универсального отчета. Таких отчетов в УПП достаточно много:1. | АнализВнутреннихЗаказов | Анализ внутренних заказов |
2. | АнализДвиженияДенежныхСредств | Анализ движения денежных средств |
3. | АнализДоступностиДенежныхСредств | Анализ доступности денежных средств |
4. | АнализДоступностиТоваровНаСкладах | Анализ доступности товаров на складах |
5. | АнализЗаказовПокупателей | Анализ заказов покупателей |
6. | АнализЗаказовПоставщикам | Анализ заказов поставщикам |
7. | АнализОбеспеченностиЗаказовНаПроизводство | Анализ обеспеченности заказов на производство |
8. | АнализПричинЗакрытияЗаказов | Анализ причин закрытия заказов |
9. | АнализРаспределенияЗатрат | Анализ распределения затрат |
10. | АнализРаспределенияПроизводственныхЗатрат | Анализ распределения производственных затрат |
11. | АнализРегистраСвободныеОстатки | Анализ регистра "Свободные остатки" |
12. | АнализСостоянияСертификацииНоменклатуры | Анализ состояния сертификации номенклатуры |
13. | АнализСходимостиПлановыхДанных | Анализ сходимости плановых данных |
14. | АнализТочкиЗаказа | Анализ точки заказа |
15. | ВаловаяПрибыль | Валовая прибыль |
16. | ВаловаяПрибыльПоПоставщикам | Валовая прибыль по поставщикам |
17. | ВедомостьАмортизацииОС | Ведомость амортизации ОС за период |
18. | ВедомостьБракВПроизводстве | Ведомость по браку в производстве |
19. | ВедомостьВзаиморасчетыСКонтрагентами | Ведомость по взаиморасчетам с контрагентами |
20. | ВедомостьВзаиморасчетыСПодотчетнымиЛицами | Ведомость по взаиморасчетам с подотчетными лицами |
21. | ВедомостьВыпускПродукцииНаработка | Ведомость по выпуску продукции (наработка) |
22. | ВедомостьДенежныеСредства | Ведомость по денежным средствам |
23. | ВедомостьДенежныеСредстваВРозничныхТочках | Ведомость денежные средства в розничных точках |
24. | ВедомостьЗаказыПокупателей | Ведомость по заказам покупателей |
25. | ВедомостьЗаказыПоставщикам | Ведомость по заказам поставщикам |
26. | ВедомостьЗатраты | Ведомость по затратам |
27. | ВедомостьЗатратыНаВыпускПродукцииНаработка | Ведомость затраты на выпуск продукции (наработка) |
28. | ВедомостьМатериалыВПроизводстве | Материалы в производстве |
29. | ВедомостьМатериалыВЭксплуатации | Ведомость по материалам в эксплуатации |
30. | ВедомостьПартииТоваровНаСкладах | Ведомость по партиям товаров на складах |
31. | ВедомостьПартииТоваровПереданных | Ведомость по партиям переданных товаров |
32. | ВедомостьПоЗаказамНаПроизводство | Ведомость по заказам на производство |
33. | ВедомостьПоКосвеннымРасходамНДС | Ведомость по косвенным расходам (НДС) |
34. | ВедомостьПоНачисленномуНДС | Ведомость по НДС начисленному к уплате в бюджет |
35. | ВедомостьПоНДСвключенномуВСтоимость | Ведомость по НДС включенному в стоимость |
36. | ВедомостьПоНДСПредъявленномуПоставщиком | Ведомость по НДС предъявленному поставщиком |
37. | ВедомостьПоНДСсАвансов | Ведомость по НДС с авансов |
38. | ВедомостьПоНезавершенномуПроизводствуНДС | Ведомость по НДС в незавершенном производстве |
39. | ВедомостьПоОСиНМА_НДС | Ведомость по ОС и НМА (НДС) |
40. | ВедомостьПоПартиямТоваровНДС | Ведомость по партиям товаров (НДС) |
41. | ВедомостьПоРасчетамСПокупателямиНДС | Ведомость по расчетам с покупателями (НДС) |
42. | ВедомостьПоРасчетамСПоставщикамиНДС | Ведомость по расчетам с поставщиками (НДС) |
43. | ВедомостьПоРеализацииПоСтавке0НДС | Ведомость по реализации по ставке 0% (НДС) |
44. | ВедомостьПредъявленныйНДСПоРеализацииПоСтавке0 | Ведомость предъявленный НДС по реализации по ставке 0% |
45. | ВедомостьПроизводственныеЗатраты | Ведомость по производственным затратам |
46. | ВедомостьРасчетыСКонтрагентами | Ведомость по расчетам с контрагентами |
47. | ВедомостьТоварыВНТТ | Ведомость по товарам в НТТ |
48. | ВедомостьТоварыВРознице | Ведомость по товарам в рознице |
49. | ВедомостьТоварыИГТДОрганизаций | Ведомость по товарам и ГТД организаций |
50. | ВедомостьТоварыКПолучению | Ведомость по товарам к получению |
51. | ВедомостьТоварыНаСкладах | Товары на складах |
52. | ВедомостьТоварыУКомиссионеров | Ведомость по товарам, отданным на реализацию |
53. | ВыпускПродукции | Выпуск продукции (оценка стоимости) |
54. | ДвиженияДенежныхСредств | Движения денежных средств |
55. | ДебиторскаяЗадолженностьПоИнтервалам | Дебиторская задолженность по интервалам |
56. | ДебиторскаяЗадолженностьПоСрокамДолга | Дебиторская задолженность по срокам долга |
57. | ЗадолженностьПоКонтрагентам | Задолженность по контрагентам |
58. | ЗаказыНаПроизводство | Заказы на производство |
59. | Закупки | Закупки |
60. | Затраты | Затраты |
61. | ЗатратыНаВыпускПродукции | Затраты на выпуск |
62. | ЗаявкиНаРасходованиеСредств | Заявки на расходование средств |
63. | ИнвентарнаяКарточкаОС | Инвентарная карточка ОС |
64. | КомплектацияНоменклатуры | Комплектация номенклатуры |
65. | ЛимитыОтпускаМатериалов | Лимиты отпуска материалов |
66. | НеоплаченныеВходящиеПлатежи | Неоплаченные входящие платежи |
67. | НеоплаченныеИсходящиеПлатежи | Неоплаченные исходящие платежи |
68. | ОтчетПоКлиентам | Отчет по клиентам |
69. | ОтчетПоКредитнойЛинии | Отчет по кредитной линии |
70. | ОтчетПоРезультатамСертификации | Отчет по результатам сертификации |
71. | ПланируемыеПоступленияДенежныхСредств | Планируемые поступления денежных средств |
72. | ПланПотребностейПроизводства | План потребностей производства |
73. | ПланФактныйАнализЗакупок | План - фактный анализ закупок |
74. | ПланФактныйАнализПродаж | План - фактный анализ продаж |
75. | ПланыДвиженияДенежныхСредств | Планы движения денежных средств |
76. | ПланыЗакупок | Планы закупок |
77. | ПланыПродаж | Планы продаж |
78. | ПланыПроизводства | Планы производства |
79. | ПотребностиЗаказовНаПроизводство | Потребности заказов на производство |
80. | ПредоставленныеСкидки | Предоставленные скидки |
81. | Продажи | Продажи |
82. | ПродажиПоДисконтнымКартам | Продажи по дисконтным картам |
83. | ПродажиПоОплате | Продажи по оплате |
84. | РазмещенияВЗаказах | Размещения в заказах |
85. | РезервыДенежныхСредств | Резервы денежных средств |
86. | СписокКомплектующих | Список комплектующих |
87. | СтоимостнаяОценкаСкладаВЦенахНоменклатуры | Стоимостная оценка склада в ценах номенклатуры |
88. | ТоварыВРезервеНаСкладах | Товары в резерве на складах |
Как это реализовано (коды)
Можно воспользоваться готовой обработкой, но гораздо интереснее написать ее самим.
Создаем внешнюю обработку, называем ее "ОтчетПоСпискуСохраненныхНастроек".
Добавляем форму обработки (данные формы ОбработкаОбъект, тип значения ВнешняяОбработка.ОтчетПоСпискуСохраненныхНастроек) с именем "СводОтчетовПоРазнымНастройкам". В форме уже должен присутствовать реквизит ОбработкаОбъект, добавляем реквизиты:
Имя реквизита | Тип |
ДатаНачала | Дата, состав даты Дата |
ДатаОкончания | Дата, состав даты Дата |
ЕдиныйПериод | Булево |
ОтчетОбъект | Произвольный |
ПереченьНастроекДляСвода | ТаблицаЗначений |
Размещаем реквизиты и элементы на форме:
Имя элемента формы | Данные | Обработчики | |
Табличное поле "ТабличноеПоле1", в которое добавляем одну колонку с именем "ИмяНастройки" | ПереченьНастроекДляСвода | Указываем в качестве обработчика ПередНачаломДобавления процедуру "ТабличноеПоле1ПередНачаломДобавления" | |
КоманднаяПанель "КоманднаяПанель1", | в качестве источника действий указываем "ТабличноеПоле1" | ||
Флажок с именем "Флажок1" | ЕдиныйПериод | Флажок1ПриИзменении | |
Два поля ввода с именами "НачПериода" и "КонПериода" | ДатаНачала, ДатаОкончания | ||
Кнопка с именем "КнопкаВыбораПериода", заголовком "..." | КнопкаВыбораПериодаНажатие | ||
Кнопка с именем "Сформировать", назначаем ее кнопкой по умолчанию | ОсновныеДействияФормыСформировать |
В модуль формы пишем обработчики.
Модуль Формы СводОтчетовПоРазнымНастройкам
Перем мСтруктураСНастройками;
Перем мТекущаяНастройка ;
Перем мСохраняемыеРеквизиты;
Процедура ПриОткрытии()
УстановитьВидимостьДоступность();
КонецПроцедуры
Процедура УстановитьВидимостьДоступность()
ПереченьНастроекДляСвода.Колонки.Добавить("Настройка", Новый ОписаниеТипов("Структура"));
ЕдиныйПериод = Истина;
Флажок1ПриИзменении(ЭлементыФормы.Флажок1);
ИнициализацияСохраняемыхНастроек();
КонецПроцедуры
Процедура Флажок1ПриИзменении(Элемент)
ЭлементыФормы.НачПериода.Доступность = ЕдиныйПериод;
ЭлементыФормы.КонПериода.Доступность = ЕдиныйПериод;
Если ЕдиныйПериод Тогда
ДатаНачала = НачалоГода(ТекущаяДата());
ДатаОкончания = КонецКвартала(ТекущаяДата());
Иначе
ДатаНачала = Дата(1, 1, 1);
ДатаОкончания = Дата(1, 1, 1);
КонецЕсли;
КонецПроцедуры
Процедура КнопкаВыбораПериодаНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.УстановитьПериод(ДатаНачала, ?(ДатаОкончания='0001-01-01', ДатаОкончания, КонецДня(ДатаОкончания)));
Если НастройкаПериода.Редактировать() Тогда
ДатаНачала = НастройкаПериода.ПолучитьДатуНачала();
ДатаОкончания = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Процедура ТабличноеПоле1ПередНачаломДобавления(Элемент, Отказ, Копирование)
ФормаУправленияНастройками = РегистрыСведений.СохраненныеНастройки.ПолучитьФорму("ФормаУправленияНастройками");
ФормаУправленияНастройками.мВосстановлениеНастройки = Истина;
ФормаУправленияНастройками.мСтруктураНастройки = мСтруктураСНастройками;
Результат = ФормаУправленияНастройками.ОткрытьМодально();
Если Результат = Неопределено Тогда Возврат; КонецЕсли;
НоваяСтрока = ПереченьНастроекДляСвода.Добавить();
НоваяСтрока.ИмяНастройки = Результат.НаименованиеНастройки;
НоваяСтрока.Настройка = Результат;
Отказ = Истина;
КонецПроцедуры
Процедура ОсновныеДействияФормыСформировать(Кнопка)
СводныйТабДок = Новый ТабличныйДокумент;
Для каждого ОднаСтрокаТЗ Из ПереченьНастроекДляСвода Цикл
ВывестиНаименованиеНастройкиВТабличныйДокумент(СводныйТабДок, ОднаСтрокаТЗ.ИмяНастройки);
Если ЕдиныйПериод Тогда
ОднаСтрокаТЗ.Настройка.СохраненнаяНастройка.НастройкаПериода.ДатаНачала = ДатаНачала ;
ОднаСтрокаТЗ.Настройка.СохраненнаяНастройка.НастройкаПериода.ДатаОкончания = ДатаОкончания;
Иначе
УниверсальныеМеханизмы.ПолучитьНастройку(ОднаСтрокаТЗ.Настройка);
КонецЕсли;
СводныйТабДок.Вывести(ОтчетПоРазнымНастройкам(ОднаСтрокаТЗ.Настройка, ОтчетОбъект)) ;
КонецЦикла;
ДополнительнаяОбработкаСводногоДокумента(СводныйТабДок );
РасчетШириныКолонок(СводныйТабДок);
СводныйТабДок.Показать();
КонецПроцедуры
Процедура ДополнительнаяОбработкаСводногоДокумента(Результат);
// Здесь можно обработать свод отчетов перед выводом на экран
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ СОХРАНЕНИЯ И ВОССТАНОВЛЕНИЯ НАСТРОЕК формы Перечня//
///////////////////////////////////////////////////////////////////////////
Процедура ИнициализацияСохраняемыхНастроек()
// Что сохраняем в настройках
мСохраняемыеРеквизиты = Новый Структура;
мСохраняемыеРеквизиты.Вставить("ПереченьНастроекДляСвода");
мСохраняемыеРеквизиты.Вставить("ЕдиныйПериод");
мСохраняемыеРеквизиты.Вставить("ДатаНачала");
мСохраняемыеРеквизиты.Вставить("ДатаОкончания");
СтруктураНастройки = СоздатьСтруктуруНастройкиПользователя("ПереченьОтчетов." + ОтчетОбъект.Метаданные().Имя); мСтруктураСНастройками = СоздатьСтруктуруНастройкиПользователя("ОтчетОбъект." + ОтчетОбъект.Метаданные().Имя);
Если УниверсальныеМеханизмы.ПолучитьНастройкуИспользоватьПриОткрытии(СтруктураНастройки) Тогда
Если НЕ СтруктураНастройки.Свойство("СохраненнаяНастройка") Тогда Возврат; КонецЕсли;
мТекущаяНастройка = СтруктураНастройки;
ВосстановитьНастройкиИзСтруктуры(СтруктураНастройки.СохраненнаяНастройка);
УстановитьЗаголовокФормы (СтруктураНастройки);
КонецЕсли;
КонецПроцедуры
Процедура УстановитьЗаголовокФормы (СтруктураНастройки)
Если СтруктураНастройки.Свойство("НаименованиеНастройки") Тогда
ЭтаФорма.Заголовок = "Перечень выводимых отчетов" + ": " + СтруктураНастройки.НаименованиеНастройки;
КонецЕсли;
КонецПроцедуры
Функция ВосстановитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СтруктураНастройки = СоздатьСтруктуруНастройкиПользователя("ПереченьОтчетов." + ОтчетОбъект.Метаданные().Имя);
Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
ВосстановитьНастройкиИзСтруктуры(Результат.СохраненнаяНастройка);
УстановитьЗаголовокФормы (Результат);
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
КонецФункции // ВосстановитьНастройки()
Функция СоздатьСтруктуруНастройкиПользователя(ИмяОбъекта)
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
СтруктураНастройки.Вставить("ИмяОбъекта", ИмяОбъекта);
СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
Возврат СтруктураНастройки;
КонецФункции
Процедура СохранитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СформироватьСтруктуруДляСохраненияНастроек(СохраненнаяНастройка);
СтруктураНастройки = СоздатьСтруктуруНастройкиПользователя("ПереченьОтчетов." + ОтчетОбъект.Метаданные().Имя);
СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);
СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Истина);
СтруктураНастройки.Вставить("СохранятьАвтоматически", Истина);
Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
КонецПроцедуры // СохранитьНастройки()
Процедура СформироватьСтруктуруДляСохраненияНастроек(СтруктураСНастройками) Экспорт
Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
СтруктураСНастройками = Новый Структура;
КонецЕсли;
Для каждого ОдинРеквизит Из мСохраняемыеРеквизиты Цикл
СтруктураСНастройками.Вставить(ОдинРеквизит.Ключ, ЭтаФорма[ОдинРеквизит.Ключ]);
КонецЦикла;
КонецПроцедуры // СформироватьСтруктуруДляСохраненияНастроек()
Функция ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками) Экспорт
Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
Возврат Ложь;
КонецЕсли;
Для каждого ОдинРеквизит Из мСохраняемыеРеквизиты Цикл
СтруктураСНастройками.Свойство(ОдинРеквизит.Ключ, ЭтаФорма[ОдинРеквизит.Ключ]);
КонецЦикла;
Возврат Истина;
КонецФункции // ВосстановитьНастройкиИзСтруктуры()
Процедура ДействияФормыСохранитьНастройку(Кнопка)
СохранитьНастройки();
КонецПроцедуры
Процедура ДействияФормыВосстановитьНастройку(Кнопка)
ВосстановитьНастройки();
Если НЕ мТекущаяНастройка.Свойство("СохраненнаяНастройка") Тогда Возврат; КонецЕсли;
Для каждого ОднаНастройка Из мТекущаяНастройка.СохраненнаяНастройка Цикл
ЭтаФорма[ОднаНастройка.Ключ] = ОднаНастройка.Значение;
КонецЦикла;
КонецПроцедуры
//////////////////////////////////////////////////////////////
Пишем модуль объекта.
Модуль объекта
Процедура Инициализировать() Экспорт
УниверсальныйОтчет = ДополнительныеПараметры.Отчет.УниверсальныйОтчет;
ФормаПеречняНастроек = ЭтотОбъект.ПолучитьФорму("СводОтчетовПоРазнымНастройкам", ДополнительныеПараметры.Отчет.ПолучитьФорму("Форма"));
ФормаПеречняНастроек.ЗакрыватьПриЗакрытииВладельца = Истина;
ФормаПеречняНастроек.ОтчетОбъект = ДополнительныеПараметры.Отчет;
ФормаПеречняНастроек.Открыть();
КонецПроцедуры
Функция ОтчетПоРазнымНастройкам(СтруктураСНастройками, ОтчетОбъект) Экспорт
ВременныйТабДок = Новый ТабличныйДокумент;
УправлениеОтчетами.ВосстановитьРеквизитыОтчета(ЭтотОбъект, СтруктураСНастройками.СохраненнаяНастройка);
УниверсальныйОтчет.ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками.СохраненнаяНастройка, ОтчетОбъект);
УниверсальныйОтчет.СформироватьОтчет(ВременныйТабДок,,, ОтчетОбъект);
Возврат ВременныйТабДок;
КонецФункции
Процедура ВывестиНаименованиеНастройкиВТабличныйДокумент(ТабДокКудаВыводим, ВставляемыйТекст) Экспорт
НомерТекущейСтроки = ТабДокКудаВыводим.ВысотаТаблицы + 1;
НомерКолонки = 1;
ЯчейкаЦель = ТабДокКудаВыводим.Область(НомерТекущейСтроки, НомерКолонки, НомерТекущейСтроки, НомерКолонки);
ЯчейкаЦель.Текст = ВставляемыйТекст;
ЖирныйШрифт = Новый Шрифт(ЯчейкаЦель.Шрифт,,,Истина);
ЯчейкаЦель.Шрифт = ЖирныйШрифт;
КонецПроцедуры