Запрет на изменение даты проведенного документа

Опубликовал Svetlana Киселева (asterlana) в раздел Программирование - Практика программирования

В 1С "Предприятие" v.8 не предусмотрена ситуация проверять изменение пользователем даты проведенного документа
Пользователь иногда копирует документ, что бы просто исправить часть данных и не создавать новый. Но бывают ситуации, когда вместо копирования документа, открывают существующий, правят его и сохраняют с другой датой, думаю что это новый скопированный документ. Чтобы исключить подобные случаи, надо создать подписку на событие "перед записью", Источник: "ДокументОбъект". и создать следующую простую процедуру:

Процедура ПроверкаДатыДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
                 Если Источник.Проведен Тогда
                          Если НачалоДня(Источник.Ссылка.Дата) <> НачалоДня(Источник.Дата) Тогда
                                Предупреждение("Нельзя менять дату проведенного документа!");
                                Отказ=Истина;
                           КонецЕсли;
                 КонецЕсли;
КонецПроцедуры



Если ситуация такова, что требуется действительно изменение даты данного документа, то стоит его просто сделать непроведенным. Тем более, что по ситуации в 1С v.7.7 мы уже привыкли так менять дату

См. также

Комментарии
1. Артём Алтухов (Fannasankh) 13 17.07.14 10:14 Сейчас в теме
Но бывают ситуации, когда вместо копирования документа, открывают существующий, правят его и сохраняют с другой датой, думаю что это новый скопированный документ.


Какой-то клинический случай.
2. Svetlana Киселева (asterlana) 220 17.07.14 10:48 Сейчас в теме
(1) Fannasankh,

Если бы это был клинический случай, то подобная проверка на изменение даты проведенного документа не была бы реализована во всех конфигурациях v.7.7. Когда мои клиенты столкнулись с подобной ситуацией (а это если бухгалтера в потоке обрабатывают массу документов), то и возникла данная обработка.
3. Максим (mremin) 17.07.14 11:29 Сейчас в теме
(1) Fannasankh, есть такой вариант (но придется дописать код в процедуру ПередЗаписью() в модуле документа):

Ссылка.Дата - старая дата документа (по состоянию на момент ДО записи документа)
Обьект.Дата - новая дата документа (после изменения)

путем контроля (сравнения) этих значений, можно запретить запись документа (Отказ = Истина).
4. Svetlana Киселева (asterlana) 220 17.07.14 15:15 Сейчас в теме
(3) mremin,
Можно. Но я сторонник того чтобы не затрагивать стандартную конфигурацию. Моя обработка делает тоже самое но через подписку на события. Что при обновлении не надо отслеживать и поправлять затем ручками
5. Дмитрий Воробьев (vde69) 872 23.07.14 07:58 Сейчас в теме
более правильно будет

Процедура ПроверкаДатыДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

мСсылка = Источник.Ссылка;

Если мСсылка.Проведен = Истина И НачалоДня(мСсылка.Дата) <> НачалоДня(Источник.Дата) Тогда
Предупреждение("Нельзя менять дату проведенного документа!");
Отказ=Истина;
КонецЕсли;
КонецПроцедуры


а еще можно реализовать путем RLS
sergiobargio1; +1 Ответить 1
6. Антон Рощин (wolfsoft) 2413 23.07.14 11:27 Сейчас в теме
(2)
Если бы это был клинический случай, то подобная проверка на изменение даты проведенного документа не была бы реализована во всех конфигурациях v.7.7.


Не было там никакой проверки реализовано, это тупо ограничение платформы было.
7. Svetlana Киселева (asterlana) 220 23.07.14 11:51 Сейчас в теме
(5) vde69,
Спасибо. Код действительно получается красивее
8. Svetlana Киселева (asterlana) 220 23.07.14 11:55 Сейчас в теме
(6) wolfsoft,
Пустой треп. Не нравиться -не ешь. Пусть пользуется тот, кому это надо. Желаю Вам удачи найти на этом сайте ответы на СВОИ запросы.
9. Антон Антонов (monkbest) 28 29.07.14 16:39 Сейчас в теме
(1) Fannasankh, нормальный случай, я таких пользователей мульён знаю
Оставьте свое сообщение