Монитор операций закрытия месяца для УТ/КА/УП, или как правильно создать нетривиальное расширение

25.11.21

Задачи пользователя - Закрытие периода

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

Скачать исходный код

Наименование Файл Версия Размер
Монитор операций закрытия месяца для УТ/КА/УП поколения *.4.5.* или выше
.cfe 19,85Kb
50
.cfe 1.0.1.3 19,85Kb 50 Скачать

Разбор примера правильной разработки расширения с отчетом.

Немножко ссылок:

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

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

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

  1. Для решения одной задачи создавайте одно расширение. Конкретно с монитором - одна задача, один отчет, одно расширение. Это позволит после обновления конфигурации сохранить активными все расширения, которые остались совместимыми, и, сразу увидеть те расширения, над которыми надо поработать.
  2. Всегда добавляйте зависимости. Отмечайте все свойства, которые используются в вашем коде расширения. Например, в мониторе, для получения состояния закрытия месяца используется программный интерфейс общего модуля ЗакрытиеМесяцаСервер, это значит, что этот модуль должен быть в зависимостях. Открывается форма по умолчанию обработки ОперацииЗакрытияМесяца - значит и обработку в зависимости. Выполняется запрос к перечислению ОперацииЗакрытияМесяца (для получения всех доступных операций закрытия месяца) - перечисление тоже в зависимости.
  3. Не надо в зависимости добавлять все, что только можно. Все что не используется в вашем коде расширения должно быть исключено из зависимостей, например в мониторе добавлены в зависимости конкретные значения перечисления СостоянияОперацийЗакрытияМесяца вместо всех значений, потому что для логики расчета состояний другие состояния не нужны. Такой подход позволит не отламывать расширение понапрасну при обновлении конфигурации.
  4. Старайтесь описывать какой именно программный интерфейс вы используете. Никогда не используйте то, что не является программным интерфейсом. Это позволит обновляться на исправительные версии конфигураций (изменена только 4ая цифра) и на минорные версии конфигураций (изменена 3я цифра) без нарушения обратной совместимости. Все конфигурации сохраняют обратную совместимость в рамках первых двух цифр версии, но только для программного интерфейса. В рамках изменения третьей цифры версии используемый вами программный интерфейс может быть признан устаревшим, но удален он будет только при обновлении на версию с изменением 2ой цифры. Например вы в версии 1.0.1.1 используете какой-то метод, можете свободно обновить на версию 1.0.1.235, почти безболезненно на версию 1.0.45.24 (лучше всего проверить а не стало ли что-то устаревшим), но при обновлении на версию 1.1.1.1 надо срочно проверять все ли работает. Для того, чтобы быстро находить что надо проверить на устаревание я всегда добавляю комментарий  // @Импорт и далее описываю что я использовал. Смотрите пример в расширенном модуле ОтчетыКлиентПереопределяемый.

Отчет, который требуется собрать, не может быть получен выборкой из базы данных. Программного интерфейса, дающего выборку по всему времени ведения учета в программе тоже нет. Потому надо использовать режим работы СКД загрузки данных из табличной части, которую требуется собрать некоторым придуманным алгоритмом на встроенном языке. Для этого достаточно общий фрагмент почти для всех отчетов такого типа можно посмотреть в примере обработки события ПриКомпоновкеРезультата.

Для отладки отчета следует помнить, что компоновка выполняется в фоновом задании, потому надо иметь сервер с включенным ключом debug или отлаживаться в файловой версии, и в предметах отладки выбрать отладку фоновых заданий.

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

Функция ЗначениеПараметраСКД(ИмяПараметра)
	
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ПараметрКомпоновки = Настройки.ПараметрыДанных.Элементы.Найти(
		Новый ПараметрКомпоновкиДанных(ИмяПараметра));
	Возврат ПараметрКомпоновки.Значение;
	
КонецФункции

Если ЗначениеПараметраСКД("СкрытьУспешноЗакрытыеМесяцы") = Истина Тогда // Если параметра нет - Неопределено.

Для того, чтобы подсистема БСП вариантов отчета увидела отчет из расширения надо расширить подсистему ПодключаемыеОтчетыИОбработки конфигурации и включить в нее отчет.

Чтобы отчет правильно отобразился в панели отчетов надо реализовать в менеджере отчета интерфейс БСП, в котором описать что это за отчет и как он должен отобразиться, и главное - где он должен отображаться. Пример можно посмотреть в модуле менеджера отчета:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.ПодключаемыеОтчетыИОбработки

// (См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов)
Процедура ПриОпределенииНастроек(Настройки) Экспорт
	
	Настройки.НастроитьВариантыОтчета = Истина;
	Настройки.ДобавитьКомандыОтчетов = Истина;
	Настройки.ОпределитьНастройкиФормы = Истина;
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.ПодключаемыеОтчетыИОбработки

// СтандартныеПодсистемы.ВариантыОтчетов

// (См. ВариантыОтчетовПереопределяемый.ОпределитьОбъектыСКомандамиОтчетов)
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	Команда = КомандыОтчетов.Добавить();
	Команда.Представление = НСтр("ru = 'Монитор операций закрытия месяца'");
	Команда.КлючВарианта  = "Основной";
	
КонецПроцедуры

// (См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов)
Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт
	
	НастройкиОтчета.ОпределитьНастройкиФормы = Истина;
	НастройкиОтчета.Размещение.Вставить(Метаданные.Подсистемы.ФинансовыйРезультатИКонтроллинг.Подсистемы.ЗакрытиеМесяца);
	
	НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной");
	НастройкиВарианта.Описание = 
		НСтр("ru = 'Контроль операций закрытия месяца по разным этапам с начала ведения учета в программе.
		           |Позволяет найти проблемный месяц и проблемный этап закрытия и перейти к закрытию месяца.'");
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.ВариантыОтчетов

#КонецОбласти

#КонецОбласти

#КонецЕсли

Для того чтобы переопределить поведение расшифровки в отчете, следует пользоваться переопределением модуля ОтчетыКлиентПереопределяемый, в котором можно задать правила расшифровки. В СКД расшифровка вообще для многих работает не очевидно, особенно часто начинающие разработчики пугаются, когда видят значением расшифровки какое-то число, на самом деле все просто, данные расшифровки содержат соответствие того, какие были группировки у значения, и зная ключ расшифровки и имея данные расшифровки (сохраняются в реквизите формы) можно просто восстановить какие были группировки. А это значит можно точно определить координаты в пространстве группировок, по которым пользователь выполняет расшифровку. Для восстановления состава группировок по ключу и данным расшифровки есть метод программного интерфейса КомпоновкаДанныхВызовСервера.ПараметрыФормыРасшифровки. На примере монитора, при нажатии на одно из полей, в колонке определяется месяц закрытия и открывается форма обработки закрытия месяца.

Старайтесь изолировать работу с базой данных от работы с логикой расчета. Для разработки расширений это наиболее актуально, ведь чем меньше будет точек соприкосновения с конфигурацией, тем проще будет адаптироваться к новой версии. Например, модель данных ИБ в мониторе:

#Область МодельДанныхИБ

Функция ВсеОперацииЗакрытияМесяца()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОперацииЗакрытияМесяца.Ссылка КАК Ссылка
		|ИЗ
		|	Перечисление.ОперацииЗакрытияМесяца КАК ОперацииЗакрытияМесяца";
	
	Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
	
КонецФункции

Функция СостояниеЭтаповЗакрытияМесяца(ОперацииЗакрытияМесяца, Период)
	
	Возврат ЗакрытиеМесяцаСервер.ОпределитьСостояниеЭтаповРасчета(ОперацииЗакрытияМесяца, Период);
	
КонецФункции

Функция СостояниеИспользуется(Значение)
	
	Возврат Значение <> Перечисления.СостоянияОперацийЗакрытияМесяца.НеТребуется;
	
КонецФункции

Функция СостояниеУспешно(Значение)
	
	Возврат Значение <> Перечисления.СостоянияОперацийЗакрытияМесяца.НеТребуется
		И Значение <> Перечисления.СостоянияОперацийЗакрытияМесяца.ВыполненоУспешно
	
КонецФункции

Функция ОперацияЗакрытияЗависитОтМесяца(Значение)
	
	Возврат Значение <> Перечисления.ОперацииЗакрытияМесяца.ИсправлениеДублейВидовЗапасов;
	
КонецФункции

#КонецОбласти

Внимание, расширение работает с конфигурациями УТ/КА/УП поколения *.4.5.* или выше.

Проверено на демобазах УТ 11.4.5 и УП 2.4.5.

MIT License https://github.com/axioma-project/MonthEndClosingMonitor

Монитор операция закрытие месяца разработка расширение правильно просто удобно обратная совместимость стандарты

См. также

Анализ расхождений выручки НДС и Налога на прибыль в декларациях (БП 3.0 ПРОФ и КОРП, КА 2, ЕRP)

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

Каждый бухгалтер не раз сталкивался с требованием от налоговой инспекции пояснить расхождения в показателях декларации по Налогу на прибыль («Доходы от реализации» + «Внереализационные доходы») и налоговой базой по НДС за год. Являются ли ошибкой подобные расхождения? Как пояснить налоговой их причину? Отчет «Анализ расхождений выручки НДС и Налога на прибыль в декларациях» поможет найти все расхождения.

7200 руб.

21.10.2017    84156    260    167    

256

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    28105    83    146    

61

Помощник закрытия месяца

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

В современных конфигурациях УТ 11, КА 2, ERP 2 и их аналогах присутствует механизм закрытия периода. Но при ошибках учета закрыть период корректно становится практически невозможно! Давайте попробуем разобраться, как можно устранить ошибки и закрыть корректно месяц!

9000 руб.

20.03.2018    70433    267    58    

293

Обработка "Списание доходов будущих периодов" и расширение

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

Решение регламентирует учет доходов будущих периодов(ДБП) в организации: сохраняет подробную информацию о объекте ДБП. По окончании месяца на основе введенной информации формируются проводки списания ДБП, отчеты для бухгалтерского и налогового учета. Подходит как для различных версий Бухгалтерии 8.3, так и для ERP и КА.

5500 руб.

09.10.2020    18855    41    18    

38

Автоматическое закрытие месяца в УНФ

Закрытие периода Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Закрытие месяца в Управлении нашей фирмой — это очень важная задача, которую надо выполнять регулярно. Как обычно, все важное и регулярное делать мы почему-то забываем =)

3600 руб.

30.09.2022    7343    14    0    

12

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22623    302    35    

74

Помощник исправления развернутого сальдо по видам запасов и ГТД

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

Обработка позволяет исправить развернутое сальдо по видам запасов, которое осталось после штатной обработки перепроведения документов. Подходит для конфигураций: УТ 11, КА 2, ERP

2400 руб.

15.07.2017    62688    144    45    

140
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ninch 51 11.05.21 12:43 Сейчас в теме
Добрый день.
1. конфигурация 1С:ERP Управление предприятием 2 (2.4.13.156) не выводится отчет в меню. Я правильно понимаю - он должен появиться в финансовом контролинге в меню закрытие месяца?
2. Можно ли задать отбор по организации, так чтобы либо по всем был отчет либо с разворотом по выбранным организациям?
спасибо
2. zeegin 114 29.09.21 11:35 Сейчас в теме
(1)

1. Отчет в группе финансого контроллинга.
2. В текущей реализации такого разреза нет. https://github.com/axioma-project/MonthEndClosingMonitor/issues/4
3. stepan_shock 112 05.07.23 10:07 Сейчас в теме
Здравствуйте. Поддержка данного продукта еще осуществляется?
4. zeegin 114 05.07.23 10:10 Сейчас в теме
(3) Продукт в опен соурсе.
Оставьте свое сообщение