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

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

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

См. также

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

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

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

14400 руб.

29.04.2020    28628    86    147    

61

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

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

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

9000 руб.

20.03.2018    70859    269    58    

295

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

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

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

3600 руб.

30.09.2022    7407    14    0    

13

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

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

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

2400 руб.

15.07.2017    62781    146    45    

142

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

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

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

5500 руб.

09.10.2020    18926    41    20    

38

Книга доходов и расходов и кассовая книга для 1С 8.х любой конфигурации для предприятий на УСН, ПСН, ЕСХН

Закрытие периода Оптовая торговля Розничная торговля Кассовые операции Учет доходов и расходов Платформа 1С v8.3 Бухгалтерский учет 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:CRM ПРОФ, КОРП Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Пищевая промышленность Россия Бухгалтерский учет Налоговый учет ЕНВД ЕСХН ИП, ПБОЮЛ, КФХ Налог на прибыль НДС УСН Платные (руб)

Внешняя обработка для ведения в электронной форме КУДиР - книги учёта доходов и расходов для предприятий на УСН, ПСН, ЕСХН. Заполнение раздела 1 - "доходы и расходы" из журнала документов вашей ИБ (любой конфигурации 1С:Предприятие 8). Формирование отчета Кассовая книга КО-4 по данным раздела 1.

7788 руб.

15.03.2016    115732    285    157    

276
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ninch 51 11.05.21 12:43 Сейчас в теме
Добрый день.
1. конфигурация 1С:ERP Управление предприятием 2 (2.4.13.156) не выводится отчет в меню. Я правильно понимаю - он должен появиться в финансовом контролинге в меню закрытие месяца?
2. Можно ли задать отбор по организации, так чтобы либо по всем был отчет либо с разворотом по выбранным организациям?
спасибо
2. zeegin 116 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 116 05.07.23 10:10 Сейчас в теме
(3) Продукт в опен соурсе.
Оставьте свое сообщение