|
Как обходить дату запрета изменения данных для определенного документа? | ☑ | ||
|---|---|---|---|---|
|
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
|
Примерно так:
// модуль документа Процедура ПередЗаписью() ... // отключаем проверку ЭтотОбъект.ДополнительныеСвойства.Вставить("НеПроверятьЗапреты",Истина); КонецПроцедуры в процедурах проверки перед собственно проверками ... Если ПереданныйОбъект.ДополнительныеСвойства.Свойство("НеПроверятьЗапреты") <> Неопределено и ПереданныйОбъект.ДополнительныеСвойства.НеПроверятьЗапреты Тогда // ничего не нужно проверять Возврат Истина; КонецЕсли; ... |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |