Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

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

Своя операция в закрытии месяца? Легко!

05.09.2018
2385
Заказать консультацию

Для решения задачи в качестве типовой конфигурации будем использовать «1С: ERP Управление предприятием 2». 

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

Пример №1: Необходим пункт, который бы показывал ответственному бухгалтеру, который выполняет процедуру закрытия, общую картину по различиям между остатками товаров в оперативном и финансовом учете без учета складов и номенклатуры. Но, если бухгалтер захочет увидеть детально по складам и номенклатуре расхождения – чтобы у него была такая возможность из закрытия месяца вызвать какой-то отчет, который ему все покажет и все расскажет.

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

Обратимся к дереву метаданных конфигурации. Нам необходимо использовать следующие объекты:

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

#Область ОписаниеЭтаповЗакрытияМесяца

 

&После("ЗаполнитьОписаниеЭтаповЗакрытияМесяца")

Процедура Расш_ЗаполнитьОписаниеЭтаповЗакрытияМесяца(ТаблицаЭтапов)

      #Область КонтрольПоОрдернымСкладам  

      // наша операция будет располагаться внутри группы операций, которые находятся на

      // "ручном контроле"

      ТекущийРодитель = ИдентификаторГруппыРучныеОперации();

 

      // добавляем непосредственно в таблицу, которая содержит перечень операций

      НоваяСтрока = ДобавитьЭтапВТаблицу(ТаблицаЭтапов, ТекущийРодитель,

            Перечисления.ОперацииЗакрытияМесяца.КонтрольОформленияДокументовПоОрдернымСкладам,

            Истина, Ложь, Ложь);

           

      // так как наша операция по факту показывает что есть какие то отклонения в товародвижении

      // но не выполняет никаких действий по автоматическому исправлению ситуации, то

      // основным действием - является интерактивный вызов отчета с нужными параметрами

      НоваяСтрока.ВыполняетсяВручную = Истина;

      НоваяСтрока.ТекстВыполнить     = НСтр("ru='Показать'");

      НоваяСтрока.ДействиеИспользование = ОписаниеДействия_СервернаяПроцедура(

            "ЗакрытиеМесяцаСервер.Использование_КонтрольОформленияДокументовПоОрдернымСкладам");

     

      // укажем что действием по нажатию гиперссылки будет являться открытие отчета с автоматическим формированием

      НоваяСтрока.ДействиеВыполнить  = ОписаниеДействия_ОткрытьФормуОтчета("Отчет.КонтрольОформленияДокументовТовародвижений.Форма", Новый Структура("СформироватьПриОткрытии", истина));

     

      #КонецОбласти //КонтрольПоОрдернымСкладам       

     

КонецПроцедуры

 

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

 

#Область КонтрольОформленияДокументовПоОрдернымСкладам

 

// Обработчики этапа.

//

// Параметры:

//  ПараметрыОбработчика - Структура, формируемая алгоритмом заполнения операций закрытия месяца, содержит основные параметры, такие как

//                                       перечень организаций, период выполнения операции...

//

Процедура Использование_КонтрольОформленияДокументовПоОрдернымСкладам(ПараметрыОбработчика) Экспорт

     

      ПараметрыРасчета = ПараметрыОбработчика.ПараметрыРасчета;

     

      // формируем параметры, которые будут использоваться для установки параметров запроса,

      // который показывает картину с корректностью отражения товародвижения

      ПараметрыПроверки = Новый Структура;

      ПараметрыПроверки.Вставить("КонецПериода", КонецМесяца(ПараметрыРасчета.ПериодРегистрации));

      Если ПараметрыОбработчика.Свойство("ПараметрыРасчета") и ПараметрыОбработчика.ПараметрыРасчета.Свойство("МассивОрганизаций") Тогда

            ПараметрыПроверки.Вставить("Организации", ПараметрыОбработчика.ПараметрыРасчета.МассивОрганизаций);

      КонецЕсли;

     

      // возвращает результат выполнения запроса, который идентичен запросу,

      // который содержится в отчете КонтрольОформленияДокументовТовародвижений

      Результат = ТоварноМатериальныеЦенностиСервер.ОперацииОрдерныеСкладыКВыполнению(ПараметрыПроверки);

     

      // Неопределено - если данные получить не удается

      // 1 строка - если все хорошо

      // В остальных случаях - необходимо обратить внимание на корректность оформления документов!

      Если Результат = Неопределено Тогда

           

            УстановитьСостояниеНеТребуется(

                  ПараметрыОбработчика,

                  НСтр("ru='Отсутствует информация о неоформленных документах.'"));

 

      ИначеЕсли Результат.Строки.Количество() = 1 Тогда

           

            УстановитьСостояниеНеТребуется(

                  ПараметрыОбработчика,

                  НСтр("ru='Нет неоформленных документов.'"));

           


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку

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

Рассказать друзьям
Вам может быть интересно: