Каталог решений - Запрет редактирования проводок по определенным счетам

Запрет редактирования проводок по определенным счетам

Запрет редактирования проводок по определенным счетам

В наличии

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

Категория:

Описание

Решение задачи. 

Используемая конфигурация Инталев КМ6 (на самом деле неважно. Подход подойдет для любой конфигурации с Регистром бухгалтерии).

Создаем в конфигурации:

  1. Справочник для указания счетов и даты запрета (Сценарий — тонкость Инталева)
  2. Роль для изменения созданного справочника (по желанию)
  3. Подписку на событие для регистра бухгалтерии на событие перед записью. (Хозрасчетный также присутствует в источниках и отлично срабатывает, значит в обычной бухгалтерии тоже должно работать на ура) 
  4. Общий модуль. Со следующим содержанием. 
    Процедура Новард_РегистрБухгалтерииЗапретПроведенияПоСчетамПередЗаписью(Источник, Отказ, РежимЗаписи) Экспорт
    	
    	УстановитьПривилегированныйРежим(Истина);
    	
    	Попытка
    		ИмяРегистра     = Источник.Метаданные().Имя;
    		ЕстьСценарий    = Источник.Метаданные().Измерения.Найти("Сценарий") <> Неопределено;
    		ОтазВПроведении = Неопределено;
    		
    		//Проверить регистр до изменения
    		Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей();
    		Набор.Отбор.Регистратор.Установить(Источник.Отбор.Регистратор.Значение);
    		Набор.Прочитать();
    		
    		Если  Набор.Количество() > 0 Тогда
    			ОтазВПроведении = ПроверитьВозможностьИзменения(Набор, ЕстьСценарий);
    		КонецЕсли;
    		
    		//Проверить регистр после изменения
    		Если  Источник.Количество() > 0 и ОтазВПроведении = Неопределено Тогда
    			ОтазВПроведении = ПроверитьВозможностьИзменения(Источник, ЕстьСценарий);
    		КонецЕсли; 
    		
    		Если ОтазВПроведении <> Неопределено Тогда				
    			Отказ = Истина;
    			ТекстОтказа = "Проведение по счету "+ОтазВПроведении.Счет+" запрещено настройкой "+ОтазВПроведении.Ссылка;
    			Сообщить(ТекстОтказа,СтатусСообщения.Важное);
    			//ВызватьИсключение ТекстОтказа;
    		КонецЕсли;
    		
    	Исключение
    		Информация=ИнформацияОбОшибке();
    		ВызватьИсключение "Отмена проведения "+Источник+" не была выполнена:"+Символы.ПС+Информация.Описание;
    	КонецПопытки;
    	
    КонецПроцедуры
    
    Функция ПроверитьВозможностьИзменения(Источник, ЕстьСценарий)
    	
    	УстановитьПривилегированныйРежим(Истина);
    
    	ТаблицаПроводок = Источник.Выгрузить(,);
    	
    	Если Не ЕстьСценарий Тогда
    		ТаблицаПроводок.Колонки.Добавить("Сценарий",         Новый ОписаниеТипов("СправочникСсылка.Инт_Сценарии"));
    	КонецЕсли;	
    
    	ТаблицаПроводок.Свернуть("Период,Сценарий,СчетДТ,СчетКт");
    		
    	Запрос = Новый Запрос;
    	Запрос.Текст = "ВЫБРАТЬ
    	               |	Источник.Период,
    	               |	Источник.Сценарий,
    	               |	Источник.СчетДт,
    	               |	Источник.СчетКт
    	               |ПОМЕСТИТЬ ВТИсточник
    	               |ИЗ
    	               |	&Источник КАК Источник
    	               |;
    	               |
    	               |////////////////////////////////////////////////////////////////////////////////
    	               |ВЫБРАТЬ
    	               |	ВТИсточник.Период,
    	               |	ВТИсточник.СчетДт КАК Счет,
    	               |	ВТИсточник.Сценарий
    	               |ПОМЕСТИТЬ ВТСвернутыйИсточник
    	               |ИЗ
    	               |	ВТИсточник КАК ВТИсточник
    	               |
    	               |ОБЪЕДИНИТЬ
    	               |
    	               |ВЫБРАТЬ
    	               |	ВТИсточник.Период,
    	               |	ВТИсточник.СчетКт,
    	               |	ВТИсточник.Сценарий
    	               |ИЗ
    	               |	ВТИсточник КАК ВТИсточник
    	               |;
    	               |
    	               |////////////////////////////////////////////////////////////////////////////////
    	               |ВЫБРАТЬ
    	               |	Новард_ДатыЗапретаПоСчетамСчетаЗапрета.Ссылка,
    	               |	Новард_ДатыЗапретаПоСчетамСчетаЗапрета.Счет,
    	               |	Новард_ДатыЗапретаПоСчетамСчетаЗапрета.Ссылка.ДатаВремяЗапрета
    	               |ИЗ
    	               |	Справочник.Новард_ДатыЗапретаПоСчетам.СчетаЗапрета КАК Новард_ДатыЗапретаПоСчетамСчетаЗапрета
    	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСвернутыйИсточник КАК ВТСвернутыйИсточник
    	               |		ПО Новард_ДатыЗапретаПоСчетамСчетаЗапрета.Ссылка.ДатаВремяЗапрета > ВТСвернутыйИсточник.Период
    	               |			И Новард_ДатыЗапретаПоСчетамСчетаЗапрета.Счет = ВТСвернутыйИсточник.Счет
    	               |			И (НЕ Новард_ДатыЗапретаПоСчетамСчетаЗапрета.Ссылка.ПометкаУдаления)
    	               |			И Новард_ДатыЗапретаПоСчетамСчетаЗапрета.Ссылка.Сценарий = ВТСвернутыйИсточник.Сценарий";
    	
    	Запрос.УстановитьПараметр("Источник", ТаблицаПроводок);
    		
    	Результат = Запрос.Выполнить();
    	Выборка = Результат.Выбрать();
    	
    	Пока Выборка.Следующий() Цикл
    		Возврат Выборка;		
    	КонецЦикла;
    	
    	Возврат Неопределено;
    	
    КонецФункции	
p.s. Никаких изменений существующих объектов и модулей (снятие с поддержки не считается).

has been added to your cart:
Оформление заказа