Имя: Пароль:
1C
 
План обмена и Установка даты запрета изменения данных
0 sinjevla
 
09.06.10
10:28
В УТ 8.1 при обмене данных с филиалом, часто выскакивает Ошибка:
"Редактирование данных этого периода запрещено. Изменения не могут быть записаны ... " Приходится заходить в Настройки учета - Установка даты запрета изменения данных и менять дату или вообще ее убрать, после этого обмен проходит.
Установка даты запрета изменения данных нужна, но и при обмене каждый раз ее менять надоедает.
Как сделать чтобы при обмене он не ругался на дату редактирования ?
1 IronDemon
 
09.06.10
10:30
Выполнять под "полными" правами или в привилегированном модуле.
2 Defender aka LINN
 
09.06.10
10:33
(1) Эта проверка кодом сделана, чихать она хотела на привилегированные модули :)
3 IronDemon
 
09.06.10
10:36
(2) Не правильная проверка. Старая, с RLS, обходится ;)
4 Живой Ископаемый
 
09.06.10
10:40
2(0) ответ очевиден. Попытка, в случае неуспеха - програмная установка даты запрета, вторая попытка, возврат даты запрета.
5 sinjevla
 
09.06.10
10:40
какое решение ?
6 Mirid
 
09.06.10
10:54
Может проще в коде проверить на наличие полных прав и, в случае успеха не выполнять проверку вообще. Или проверить на Источник.ОбменДанными
7 Живой Ископаемый
 
09.06.10
10:58
2(6) Там прикол такой, что в константах можно выставить чтобы ДатаЗапрета действовала даже на полные права. А вот источник.ОбменДанными - да, наверное будет правильно
8 sinjevla
 
09.06.10
11:05
(7) Дата запрета действует и для полных прав.
(6)(7) Значит проверю  Источник.ОбменДанными должно получится
9 sinjevla
 
07.07.10
12:41
не могу понять как отключить проверку ПроверкаПериодаДокумента.
В общем модуле ПроцедурыОбменаДанными.

Процедура ПередЗаписьюДокументаПроверкаНаличияВОтложенныхДвиженияхПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
   
   
   Если Источник.ЭтоНовый()
       ИЛИ РежимЗаписи <> РежимЗаписиДокумента.Запись Тогда
       
       Возврат;
       
   КонецЕсли;
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ ПЕРВЫЕ 1 1
   |    
   |ИЗ
   |    РегистрСведений.ОтложенныеДвиженияДокументов КАК ОтложенныеДвиженияДокументов
   |ГДЕ
   |    ОтложенныеДвиженияДокументов.Документ = &Ссылка";
   
   Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
   РезультатЗапроса = Запрос.Выполнить();
   
   Если РезультатЗапроса.Пустой() Тогда
       Возврат;
   КонецЕсли;    
   
   #Если Клиент Тогда
       
       Сообщить(Строка(Источник) + Символы.ПС + "
                |Записывается документ, присутствующий в списке отложенных к проведению.
                |Запись может повлечь за собой отмену проведения документа в других информационных базах!
                |Рекомендуется провести документ!");
       
   #КонецЕсли
       
КонецПроцедуры

затем проверяется период документа


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

Как обойти проверку периода документа при обмене данными !
10 VladimirSK
 
07.07.10
12:56
(9) поставь в самом начале процедуры
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Но если в результате обмена приходят измененные данные закрытых периодов, значит в перифирии запрета нет.
11 Живой Ископаемый
 
07.07.10
12:56
я вставил в саму процедуру ПроверкаПериодаДокумента:

Процедура ПроверкаПериодаДокумента(ДокументОбъект, Отказ, РежимЗаписи = Неопределено)
   
   СоответствиеГраницЗапрета = ПараметрыСеанса.ГраницыЗапретаИзмененияДанных.Получить();
   
   // Для пользователя с полными правами проверок выполнять не нужно
   Если СоответствиеГраницЗапрета = Неопределено Тогда
       Возврат;
   КонецЕсли;
   
   ПараметрыПроверкиДокумента = ПолучитьПараметрыПроверкиДокумента(ДокументОбъект);
   //если документ пришел по обмену - загрузим несмотря на дату... у себя-то он провелся поди
   //НЕ (ДокументОбъект.ОбменДанными.Загрузка)
   Если Не ДокументОбъект.ЭтоНовый()  Тогда
       Если НЕ (ДокументОбъект.ОбменДанными.Загрузка) Тогда
           СтараяВерсияДокумента = ПолучитьВерсиюДокументаПередИзменением(ДокументОбъект, ПараметрыПроверкиДокумента);
           ПроверитьВерсиюДокумента(СтараяВерсияДокумента, ПараметрыПроверкиДокумента, СоответствиеГраницЗапрета, Отказ);
       КонецЕсли;
   КонецЕсли;
           
   Если Не Отказ Тогда
       // если документ пришел по обмену - загрузим несмотря на дату... у себя-то он провелся поди
       //НЕ (ДокументОбъект.ОбменДанными.Загрузка)        
       Если НЕ (ДокументОбъект.ОбменДанными.Загрузка) Тогда
           ПроверитьВерсиюДокумента(ДокументОбъект, ПараметрыПроверкиДокумента, СоответствиеГраницЗапрета, Отказ, РежимЗаписи);
       КонецЕсли;
   КонецЕсли;
12 sinjevla
 
07.07.10
14:52
(11) Да получилось большое спасибо
а как для ПроверкаПериодаЗаписейРегистров ? Будь добр :)