Процедура НеоперПроведениеПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт #Если Клиент Тогда //Возврат; Если (РежимПроведения = РежимПроведенияДокумента.Неоперативный И РежимЗаписи = РежимЗаписиДокумента.Проведение И Источник.Дата < НачалоДня(ТекущаяДата())) Тогда ЗапросОграничения = НОВЫЙ Запрос; ЗапросОграничения.Текст = "ВЫБРАТЬ | ОграниченияДоступов.Пользователь, | ОграниченияДоступов.НеоперативноеПроведение, | ОграниченияДоступов.КвоНеоперДней |ИЗ | РегистрСведений.ОграниченияДоступов КАК ОграниченияДоступов |ГДЕ | ОграниченияДоступов.НеоперативноеПроведение = ИСТИНА | И ОграниченияДоступов.Пользователь = &Пользователь"; ЗапросОграничения.УстановитьПараметр("Пользователь", глЗначениеПеременной("глТекущийПользователь")); Результат = ЗапросОграничения.Выполнить().Выбрать(); Если Результат.Количество() = 0 Тогда Предупреждение ("Неоперативное проведение ЗАПРЕЩЕНО!"); Отказ = ИСТИНА; Возврат; КонецЕсли; КонецЕсли; Если (РежимПроведения = РежимПроведенияДокумента.Неоперативный И РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда ЗапросОграничения = НОВЫЙ Запрос; ЗапросОграничения.Текст = "ВЫБРАТЬ | ОграниченияДоступов.Пользователь, | ОграниченияДоступов.ГраницаДоступа, | ОграниченияДоступов.КвоНеоперДней |ИЗ | РегистрСведений.ОграниченияДоступов КАК ОграниченияДоступов |ГДЕ | ОграниченияДоступов.Пользователь = &Пользователь"; ЗапросОграничения.УстановитьПараметр("Пользователь", глЗначениеПеременной("глТекущийПользователь")); Результат = ЗапросОграничения.Выполнить().Выбрать(); Если Не Результат.Следующий() Тогда Возврат КонецЕсли; ГраницаПользователя = ОпределитьНижнююГраницуДатыЗапретаПользователя(Результат.КвоНеоперДней,Источник.Дата) ; Если Результат.ГраницаДоступа > Источник.Дата ИЛИ Результат.ГраницаДоступа = Дата('00010101') ИЛИ ГраницаПользователя Тогда Предупреждение ("ЗАПРЕЩЕНО Проводить документы в в указанном периоде"); Отказ = ИСТИНА; КонецЕсли; КонецЕсли; #КонецЕсли КонецПроцедуры Функция ОпределитьНижнююГраницуДатыЗапретаПользователя(ЧиРаД,ИД) // 24*60*60=86400 -- количество секунд в сутке // ЧиРаД -- ЧислоРазрешенныхДней // выходные - если текущая дата понедельник и числонеоперативныхдней 1, // тогда подвинуть границу на начало пятницы выходные = 1; Если ЧиРаД = 1 тогда Если ДеньНедели(ТекущаяДата()) = 1 Тогда выходные = 3; КонецЕсли; НГ = НачалоДня(Дата(ТекущаяДата() - 86400*ЧиРаД*выходные)); ИначеЕсли ЧиРаД = 9999 Тогда // вариант без ограничения возврат Ложь; ИначеЕсли ЧиРаД = 51 Тогда // в противном случае речь идет о регламентированных задачах и граница определяется к началу месяца // точка отсчета 20-е число -- последний срок сдачи рег. отчетности Если День(ТекущаяДата())>20 тогда НГ = НачалоМесяца(ТекущаяДата()); Иначе НГ = НачалоМесяца(ТекущаяДата() - 30*86400); КонецЕсли; Иначе //Произвольное число дней НГ = НачалоДня(Дата(ТекущаяДата() - 86400*ЧиРаД)); КонецЕсли; если НГ < ИД Тогда возврат Ложь; Иначе возврат Истина; КонецЕсли; КонецФункции