
Разрешение пользователям редактировать отдельные реквизиты документа без перепроведения или просто одни реквизиты разрешать, а другие запрещать.
Иногда необходимо разрешить редактирование некоторых реквизитов документа без перепроведения. Например: Комментарий, АдресКонтрагента, КонтактноеЛицо. Ещё бывает необходимым разрешить изменение отдельных реквизитов в закрытых документах. Например, поставить отметку о состоянии доставки и написать комментарий.
В модуле менеджера документа пишем функцию, которая определяет массив допустимых к редактированию реквизитов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Возвращает массив имён реквизитов, разрешённых для изменнения без перепроведения. // Если получен параметр типа Массив, то имена реквизитов добавляются в него Функция ПолучитьМассивРеквизитовИзменяемыхБезПерепроведения(МассивРеквизитовДопустимыхКИзменению = Неопределено) Экспорт Если Не ТипЗнч(МассивРеквизитовДопустимыхКИзменению) = Тип("Массив") Тогда МассивРеквизитовДопустимыхКИзменению = Новый Массив; КонецЕсли; //Типовые реквизиты МассивРеквизитовДопустимыхКИзменению.Добавить("Грузополучатель"); МассивРеквизитовДопустимыхКИзменению.Добавить("ДоверенностьНомер"); МассивРеквизитовДопустимыхКИзменению.Добавить("ДоверенностьДата"); МассивРеквизитовДопустимыхКИзменению.Добавить("ДоверенностьНомер"); МассивРеквизитовДопустимыхКИзменению.Добавить("ДоверенностьВыдана"); МассивРеквизитовДопустимыхКИзменению.Добавить("ДоверенностьЧерезКого"); МассивРеквизитовДопустимыхКИзменению.Добавить("Комментарий"); МассивРеквизитовДопустимыхКИзменению.Добавить("АдресДоставки"); //Добавленные реквизиты Возврат МассивРеквизитовДопустимыхКИзменению; КонецФункции |
В модуле ОбщегоНазначения пишем функции общие для всех документов.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// сравниваем реквизиты документа из базы данных с записываемым объектом // имена изменённых реквизитов запихываем в массив Функция ПолучитьСписокИзменённыхРеквизитов(ДокОбъект) Экспорт СписокИзменённыхРеквизитов = Новый Массив; Ссылка = ДокОбъект.Ссылка; мдОбъекта = ДокОбъект.Метаданные(); // сравниваем стандартные реквизиты Для Каждого Реквизит из мдОбъекта.СтандартныеРеквизиты Цикл Если ДокОбъект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда СписокИзменённыхРеквизитов.Добавить(Реквизит.Имя); КонецЕсли; КонецЦикла; |
В модуле документа ПредЗаписью разрешаем запись без пререпроведения в случае, если были изменены только реквизиты, не вызывающие перепроведение.
1 2 3 4 5 6 7 8 9 10 11 |
РедактированиеЗаднимЧислом = Ложь; МассивРеквизитовДопустимыхКИзменению = Документы.РеализацияТоваровУслуг.ПолучитьМассивРеквизитовИзменяемыхБезПерепроведения(); СписокИзменённыхРеквизитов = ОбщегоНазначения.ПолучитьСписокИзменённыхРеквизитов(ЭтотОбъект); СписокИзменённыхРеквизитовВызывающихПерепроведение = ОбщегоНазначения.МожноЗаписыватьБезПерепроведения(ЭтотОбъект, МассивРеквизитовДопустимыхКИзменению, СписокИзменённыхРеквизитов); Если СписокИзменённыхРеквизитовВызывающихПерепроведение = "" И Проведен И СписокИзменённыхРеквизитов.Количество() > 0 Тогда РежимЗаписи = РежимЗаписиДокумента.Запись; ИначеЕсли НЕ РедактированиеЗаднимЧислом и Дата < НачалоДня(ТекущаяДата()) И Не РольДоступна("ПравоАдминистрирования") Тогда Сообщить("Недостаточно прав для проведения реализации " + Номер + " " + Строка(Дата) + " задним числом. Изменены реквизиты: " + СписокИзменённыхРеквизитовВызывающихПерепроведение); Отказ = Истина; КонецЕсли; |
Если у Вас появились вопросы по статье или остались нерешенные проблемы обсудить их Вы можете на Форуме 1С Вопросы и ответы
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.