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