Имя: Пароль:
1C
 
Как обходить дату запрета изменения данных для определенного документа?
0 Asintelekt
 
21.08.09
07:30
Платформа – 1С:Предприятие 8.1 (8.1.14.72)
Конфигурация - Зарплата и Управление Персоналом, редакция 2.5 (2.5.14.3)

В конфигурации сделаны следующие настройки:
1)    Установлена даты запрета изменения данных (Сервис – Пользователи и права доступа – Установка даты запрета изменения данных).
2)    Дата запрета применяется для всех пользователей (Предприятие – Настройка параметров учета – Применять дату запрета для пользователей с «Полными правами» (Истина)).
Есть пара документов, которые надо редактировать до даты запрета, какие есть варианты решения данной задачи?

Заранее спасибо!
1 ТелепатБот
 
гуру
21.08.09
07:30
2 ZanderZ
 
21.08.09
08:07
из подписки на события убрать эти два документа
3 Asintelekt
 
21.08.09
08:10
(2) Можно подробнее? Что за подписка на события?
4 ZanderZ
 
21.08.09
08:27
в конфигураторе сть подписки на события
5 Asintelekt
 
21.08.09
09:10
в подписи на событие "ПередЗаписьюДокументаДатаЗапретаРедактирования" убрал из источника нужные документы, а они все равно не редактикуются, что я делаю не так?
6 ZanderZ
 
21.08.09
09:14
(5) ну они наверно еще и по регистрам делают движения...
7 Asintelekt
 
21.08.09
09:22
да, то есть прийдется отключать еще каждый регистр?:)
8 ZanderZ
 
21.08.09
09:48
(7) там же в подписках у словие на документ поставь
9 Asintelekt
 
26.08.09
09:54
(8) Может, я что-то не понял, но сделал так:

Процедура ПередЗаписьюРегистраСведенийПроверкаДоступностиПериода(Источник, Отказ, Замещение) Экспорт
   Если Источник.Отбор.Регистратор.Значение.Ссылка.Метаданные() <> Документы.УвольнениеИзОрганизаций.ПустаяСсылка().Метаданные() Тогда //дописал
       ПроверкаПериодаЗаписейРегистров(Источник, Отказ, "РегистрСведений");    
   КонецЕсли; //дописал    
   #Если Клиент Тогда
       Если Отказ Тогда
           Сообщить("Редактирование данных этого периода запрещено. Изменения не могут быть записаны...", СтатусСообщения.Важное);
       КонецЕсли;
   #КонецЕсли
КонецПроцедуры

После этого перестали проводиться новые документы:) + В других документах стала появляться ошибка из-за Источник.Отбор.Регистратор.Значение.Ссылка.Метаданные(), так как не обнаружено поле "Отбор".
Без понятия, что тут делать:(
10 5 Элемент
 
26.08.09
10:07
Зачем код подписки ломать, если можно просто в свойствах подписки снять галку с нужного документа.
А вот с регистрами сложнее ...
11 Asintelekt
 
26.08.09
11:11
(10) так у меня тут код про регистры:) Поэтому и прошу помощь:) в доках снял галку
12 John83
 
26.08.09
11:15
какой еще отбор? о_О
Если ((Источник.Метаданные().Имя = "ЗаказыПокупателей") Тогда
13 asady
 
26.08.09
11:37
(0)
посмотри в сторону ....


ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ДополнительныеСвойства (AdditionalProperties)
Использование:
Только чтение.
Описание:
Тип: Структура. Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
XML-сериализация.
14 Serg_1960
 
26.08.09
12:10
(0) Разрешаю изменять дату запрета перед записью этих документов и восстанавливать значение после записи этих документов. Подпись: Я.
15 5 Элемент
 
26.08.09
15:05
+(15) запрещаю это делать, т.к. снизится параллельность работы.
16 5 Элемент
 
26.08.09
15:10
(15) Хотя конечно где менять. Если в кэше менять, то нормально будет.
17 5 Элемент
 
26.08.09
15:11
Точнее ее в кэше и нужно менять, т.к. из БД она берется только первый раз.
Серж хорошую идею подкинул
18 Asintelekt
 
26.08.09
16:57
(14)(17) Можно код?:)
19 Asintelekt
 
26.08.09
17:08
Для документа "УвольненияИзОрганизаций" Источник.Метаданные().Имя = "ЗанятыеШтатныеЕдиницыОрганизаций" !!!, поэтому документ можно получить только Источник.Отбор.Регистратор.Значение.Ссылка.Метаданные(). А некоторые документы прокатывают с "Источник.Метаданные().Имя"
20 Asintelekt
 
27.08.09
08:07
up
21 John83
 
27.08.09
09:17
(19) может не так понимаю...
сначала нужно сделать условие в ПередЗаписьюДокументаПроверкаДоступностиПериода(
затем проверять регистры в ПередЗаписьюРегистраНакопленийПроверкаДоступностиПериода
все нормально работает
22 Asintelekt
 
27.08.09
09:34
(21)
ПередЗаписьюДокументаПроверкаДоступностиПериода - не надо, тут просто из источника убрать документ.

А в регистрах так и делал:

Процедура ПередЗаписьюРегистраНакопленийПроверкаДоступностиПериода(Источник, Отказ, Замещение) Экспорт
   Если Источник.Отбор.Регистратор.Значение.Ссылка.Метаданные() <> Документы.УвольнениеИзОрганизаций.ПустаяСсылка().Метаданные() Тогда //Asintelekt
       ПроверкаПериодаЗаписейРегистров(Источник, Отказ, "РегистрНакопления");
   КонецЕсли; //Asintelekt
   #Если Клиент Тогда
       Если Отказ Тогда
           Сообщить("Редактирование данных этого периода запрещено. Изменения не могут быть записаны...", СтатусСообщения.Важное);
       КонецЕсли;
   #КонецЕсли
КонецПроцедуры // ПередЗаписьюРегистраНакопленийПроверкаДоступностиПериода

Процедура ПередЗаписьюРегистраСведенийПроверкаДоступностиПериода(Источник, Отказ, Замещение) Экспорт
   Если Источник.Отбор.Регистратор.Значение.Ссылка.Метаданные() <> Документы.УвольнениеИзОрганизаций.ПустаяСсылка().Метаданные() Тогда //Asintelekt
       ПроверкаПериодаЗаписейРегистров(Источник, Отказ, "РегистрСведений");    
   КонецЕсли; //Asintelekt    
   #Если Клиент Тогда
       Если Отказ Тогда
           Сообщить("Редактирование данных этого периода запрещено. Изменения не могут быть записаны...", СтатусСообщения.Важное);
       КонецЕсли;
   #КонецЕсли
КонецПроцедуры // ПередЗаписьюРегистраСведенийПроверкаДоступностиПериода

В итоге ошибка при проведении:
http://xmage.ru/view.php?id=4ktgwl8z
23 John83
 
27.08.09
10:14
(22) ну если ты так решил сделать, то отладчик в руки
24 Asintelekt
 
27.08.09
10:18
(23) Предложите свой вариант в виже кода:)
25 John83
 
27.08.09
10:20
Процедура ПередЗаписьюРегистраНакопленийПроверкаДоступностиПериода(Источник, Отказ, Замещение) Экспорт
   
   Если Отказ Тогда
       Возврат;
   КонецЕсли;
   
   Если ((Источник.Метаданные().Имя = "ЗаказыПокупателей")
       ИЛИ (Источник.Метаданные().Имя = "РасчетыСКонтрагентами")
       ИЛИ (Источник.Метаданные().Имя = "ЗаказыПоставщикам")
       ИЛИ (Источник.Метаданные().Имя = "ТоварыВРезервеНаСкладах"))
       И (УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "РазрешитьПерепроведениеЗаказовВЗакрытомПериоде")) Тогда
       Возврат;
   КонецЕсли;
   ПроверкаПериодаЗаписейРегистров(Источник, Отказ, "РегистрНакопления");    
   #Если Клиент Тогда
       Если Отказ Тогда
           Сообщить("Редактирование данных этого периода запрещено. Изменения не могут быть записаны...", СтатусСообщения.Важное);
       КонецЕсли;
   #КонецЕсли
КонецПроцедуры // ПередЗаписьюРегистраНакопленийПроверкаДоступностиПериода
26 John83
 
27.08.09
10:21
в принципе у тебя идея интересная, т.к. не надо перебирать все нужные регистры, но еще раз говорю, что в таком случае надо отладчиком смотреть
27 John83
 
27.08.09
10:22
моя идея в принципе тоже рабочая, т.к. сначала идет отработка процедуры ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапрета
если там есть условие на документ (а оно должно быть), то уже будет отказ
28 Asintelekt
 
27.08.09
10:28
(27)Что-то в коде нету процедуры ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапрета
29 AndreYAN
 
27.08.09
10:32
А можно еще проще, правда опаснее :(
Добавить привилегированный модуль с одной процедурой:

Процедура ВыполнитьКод(ИсходныйКод)

Попытка
 Выполнить(ИсходныйКод);

Исключение
 Сообщить(ОписаниеОшибки());

КонецПопытки;

КонецПроцедуры
30 Asintelekt
 
27.08.09
10:36
(29) Куда добавить данную процедуру и откуда ее вызывать?
31 AndreYAN
 
27.08.09
10:39
(30) Добавить общий модуль с включенной галочкой "Привилегированный", но так делать ПЛОХО!
32 Kashemir
 
27.08.09
10:44
См. (13). Использование дополнительных свойств заметно упростят реализацию обхода запретов в отдельных случаях.
33 Asintelekt
 
27.08.09
10:48
(31) раз на столько плохо, значит я пас:)
(32) можно пример?
34 Kashemir
 
27.08.09
10:53
Примерно так:

// модуль документа
Процедура ПередЗаписью()
...
// отключаем проверку
ЭтотОбъект.ДополнительныеСвойства.Вставить("НеПроверятьЗапреты",Истина);
КонецПроцедуры

в процедурах проверки перед собственно проверками
...
Если ПереданныйОбъект.ДополнительныеСвойства.Свойство("НеПроверятьЗапреты") <> Неопределено и ПереданныйОбъект.ДополнительныеСвойства.НеПроверятьЗапреты Тогда
// ничего не нужно проверять
Возврат Истина;
КонецЕсли;
...
2 + 2 = 3.9999999999999999999999999999999...