helpf.pro
Регистрация
 +2 
Распечатать

Как запретить изменять документы после 8 часов с момента их создания

Обратился ко мне клиент с задачей: Нужно запретить изменение всех видов платежных документов (ПП, РКО, ПКО) спустя 8 часов с момента проведения соответствующего документа

Для реализации этого я использовал Подписку на событие: ПередЗаписьюДокументаДатаЗапретаРедактирования

В конце процедуры обработчика добавил вызов своей процедуры

Вот ее код:

Код 1C v 8.3
 Процедура ПроверкаВремениСозданияИИзмененияДокумента(Источник, Отказ)
Если РольДоступна("ПолныеПрава") Тогда
//Все можно
ИначеЕсли Источник.Проведен Тогда //Обрабатывае только Проведенные
ТекДата=ТекущаяДата(); ЧасовРазрешено=24;
Если ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПлатежноеПоручениеВходящее") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
    ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПлатежноеПоручениеИсходящее") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
КонецЕсли;
КонецЕсли;
#Если Клиент Тогда
Если Отказ Тогда
Сообщить("Прошло более "+Строка(ЧасовРазрешено)+" часов с момента создания документа! Изменение запрещено и документ не может быть записан...", СтатусСообщения.Важное);
КонецЕсли;
#КонецЕсли
КонецПроцедуры

Пока документ не проведен, его можно менять сколько угодно, но после первого проведения и истечения указанного количества часов, документ заблокируется, и при проведении будет выведено сообщение:

Разместил:   Версии: | 8.x | 8.2 УП | 8.3 |  Дата:   Прочитано: 2558
 +2 
Распечатать
Возможно, вас также заинтересует
Cклонения по падежам 4
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) ...
Альтернативный перенос остатков между 7.7 и 8.1 (обработкой с ИТС ЗагрузкаДанныхИзТаблДокум) 0
Нашел альтернативный, практически моментальный способ переноса остатков между семерой и восьмерой (так и между восмерками). Не требуется никаких дополнительных усилий, программирования, писания обработок и т.д. и т.п....
Где скачать классификатор ФИАС (вместо КЛАДР) для загрузки в 1С и как установить ФИАС? 2
Думаю, уже многие слышали что KLADR заменен на ФИАС (Федеральная информационная адресная система) Единой информацией из ФИАС будут обязаны пользоваться все ведомства – ГИБДД, Росреестр, ЗАГС, ФМС России и др, в...
Данные Графика регистра расчета 0
Виртуальная таблица " РегистрРасчета. ИмяРегистра .ДанныеГрафика " определена для тех регистров расчета, которые поддерживают период действия . При конфигурировании с таким регистром расчета необходимо связать...
Дерево значений в таблицу значений или в табличную часть и обратно 0
Для одной организации надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать...
Посмотреть все результаты поиска похожих
Комментарии
all4cf
18.08.2016 02:59Комментарий: 1
all4cf

В процессе работы выяснилось, что брать за основу Дату документа некорректно, решили брать дату создания объекта (получая дату из уникального идентификатора ссылки):

Код 1C v 8.3
 Функция ДатаСозданияСсылки(Ссылка)
ГУИД = Ссылка.УникальныйИдентификатор();
Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
Разрядность = СтрДлина(Строка16);
ЧислоСек = 0;
Для Позиция = 1 По Разрядность Цикл
ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
КонецЦикла;
ЧислоСек = ЧислоСек / 10000000;
Возврат Дата(1582, 10, 15, 00, 00, 00) + ЧислоСек + СмещениеСтандартногоВремени() + СмещениеЛетнегоВремени();  
КонецФункции   


Процедура ПроверкаВремениСозданияИИзмененияДокумента(Источник, Отказ)
Если РольДоступна("ПолныеПрава") Тогда
//Все можно
ИначеЕсли Источник.Проведен Тогда //Обрабатывае только Проведенные
ТекДата=ТекущаяДата(); ЧасовРазрешено=24;
ИсточникДата = ДатаСозданияСсылки(Источник.Ссылка);
Если ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-ИсточникДата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-ИсточникДата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПлатежноеПоручениеВходящее") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-ИсточникДата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
    ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПлатежноеПоручениеИсходящее") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-ИсточникДата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
КонецЕсли;
КонецЕсли;
#Если Клиент Тогда
Если Отказ Тогда
Сообщить("Прошло более "+Строка(ЧасовРазрешено)+" часов с момента создания документа! Изменение запрещено и документ не может быть записан...", СтатусСообщения.Важное);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.