База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как изменить допреквизиты документа «Увольнение» в закрытом периоде? › Ответ в теме: Как изменить допреквизиты документа «Увольнение» в закрытом периоде?
Олег, привет!
Чтобы разрешить изменение дополнительных реквизитов документа «Увольнение» в закрытом периоде, при этом сохранив запрет на изменение самого документа, нужно сделать отдельную обработку, которая будет работать именно с дополнительными реквизитами. В типовых конфигурациях 1С дополнительные реквизиты хранятся в регистре сведений «ЗначенияСвойствОбъектов» (или аналогичном), и их изменение не всегда контролируется стандартным механизмом запрета изменения документов в закрытом периоде.
Вот как можно реализовать такую обработку:
1. **Создать отдельную обработку (внешнюю или встроенную) для редактирования дополнительных реквизитов документа «Увольнение».**
2. **В обработке при сохранении проверять дату документа «Увольнение» и разрешать изменение дополнительных реквизитов, даже если документ находится в закрытом периоде.**
3. **При этом стандартный запрет на изменение самого документа «Увольнение» останется в силе.**
Примерный алгоритм и код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
// Процедура изменения дополнительного реквизита документа "Увольнение" Процедура ИзменитьДопРеквизитУвольнения(СсылкаНаДокумент, ИмяРеквизита, НовоеЗначение) Экспорт // Получаем дату документа ДатаДокумента = СсылкаНаДокумент.Дата; // Проверяем, закрыт ли период для изменения документов "Увольнение" // Используем типовой механизм проверки дат запрета изменения ЗапретИзменения = ДатыЗапретаИзменения.ЗапретИзмененияОбъекта(СсылкаНаДокумент); // Если изменение документа запрещено, но нам нужно разрешить изменение доп. реквизитов // то просто не блокируем изменение доп. реквизитов // Можно добавить дополнительную проверку, если нужно // Получаем ссылку на регистр сведений с доп. реквизитами РегистрДопРеквизитов = РегистрыСведений.ЗначенияСвойствОбъектов; // Создаем набор записей для записи значения доп. реквизита НаборЗаписей = РегистрДопРеквизитов.СоздатьНаборЗаписей(); // Формируем фильтр по объекту и свойству Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗначенияСвойствОбъектов.Ссылка |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект | И ЗначенияСвойствОбъектов.Свойство.Наименование = &ИмяРеквизита"; Запрос.УстановитьПараметр("Объект", СсылкаНаДокумент); Запрос.УстановитьПараметр("ИмяРеквизита", ИмяРеквизита); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда // Обновляем существующую запись Запись = НаборЗаписей.Добавить(); Запись.Ссылка = Выборка.Ссылка; Запись.Значение = НовоеЗначение; Иначе // Добавляем новую запись Запись = НаборЗаписей.Добавить(); Запись.Объект = СсылкаНаДокумент; // Получаем ссылку на свойство по имени Свойство = ПланВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяРеквизита); Если Свойство = Неопределено Тогда // Ошибка - свойство не найдено Сообщить("Свойство '" + ИмяРеквизита + "' не найдено."); Возврат; КонецЕсли; Запись.Свойство = Свойство; Запись.Значение = НовоеЗначение; КонецЕсли; // Записываем изменения НаборЗаписей.Записать(); Сообщить("Дополнительный реквизит '" + ИмяРеквизита + "' успешно изменен."); КонецПроцедуры |
4. **Вызов этой процедуры можно делать из отдельной формы обработки, где пользователь выбирает документ «Увольнение», выбирает доп. реквизит и меняет его значение.**
5. **Важно:** В стандартном механизме запрета изменения документов в закрытом периоде проверка идет на сам объект документа, а не на регистр сведений с доп. реквизитами. Поэтому изменение доп. реквизитов через регистр сведений не блокируется, если специально не реализовать такую проверку.
6. **Если в вашей конфигурации есть подписки на события записи регистра сведений с доп. реквизитами, где реализован запрет изменения в закрытом периоде, то нужно в этих подписках добавить исключение для документов «Увольнение» и для регистра сведений с доп. реквизитами.**
—
Если нужна более конкретная помощь с кодом под вашу конфигурацию, могу помочь с доработкой.
https://infostart.ru/1c/articles/105587/
—
Таким образом, чтобы разрешить изменение доп. реквизитов документа «Увольнение» в закрытом периоде, нужно реализовать отдельную обработку, которая будет работать напрямую с регистром сведений дополнительных реквизитов, обходя стандартный запрет на изменение самого документа.