Правка изменений ДатыПлатежа в док.АктВыполненыхРабот и запрет редактирование ДатыПлатежа

1. GennadiyN 04.02.20 13:14 Сейчас в теме
Пишу статью как дневник, будут какие то дополнения прошу конструктивно высказывать и дополнять)
Занимаюсь 4 месяца программированием так что не судите строго)

Вообщем, задача: в документе АктВыполненыхРабот нужно что бы при проведении документа, в графе ДатаОплаты менялась согласно соглашению с контрагентом. И поставить запрет на редактирование руками даты платежа для всех, кроме тех, у кого есть полные права. конфигурация ЕРП 8,3

Мое решение:
1. В процедуре "ПредЗаписью" добавить процедуру (только не в конце всех процедур) которая изменяет ДатаПлатежа, и после меняем элемент формы надпись "НадписьЭтапыОплаты ":
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	
...

         ИзменитьДатуПлатежаСогласноСоглашению(ПараметрыЗаписи);
	
	ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыЗаписи, Отказ);	
		
КонецПроцедуры

&НаСервере
Процедура ИзменитьДатуПлатежаСогласноСоглашению(ПараметрыЗаписи)
	
	ТЧ = Объект.Соглашение.ЭтапыГрафикаОплаты;
	
	Если ТЧ.Количество()>0 Тогда
		
		Если ТЧ.Найти(Перечисления.ВариантыОплатыКлиентом.АвансДоОбеспечения) <> Неопределено Тогда
			Объект.ДатаПлатежа = Объект.Дата;
		КонецЕсли;
		
		Если ТЧ.Найти(Перечисления.ВариантыОплатыКлиентом.ПредоплатаДоОтгрузки) <> Неопределено Тогда
			Объект.ДатаПлатежа = Объект.Дата;
		КонецЕсли;
		
		ЭтапыОплатыСервер.ЗаполнитьДатуПлатежаПоУмолчанию(Объект, ,Истина);
                НадписьЭтапыОплаты = ЭтапыОплатыКлиентСервер.НадписьЭтапыОплаты(ЭтаФорма);

	КонецЕсли;

КонецПроцедуры 
Показать

2. В ОбщейФорме.ЭтапыОплатыКлиентом в процедуре "ПриСозданииНаСервере" добавил функцию, которая проверяет Роли и возвращает Истину или Ложь, и активирует процедуру "ТолькоПросмотр" или не активирует:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...
Элементы.ДатаПредоплата.ТолькоПросмотр = ДатаПредоплатаПриИзмененииНаСервере();
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ДатаПредоплатаПриИзмененииНаСервере()
	Роль = Ложь;
	Если РольДоступна("Администрирование") или РольДоступна("ПолныеПрава") Тогда
		Роль = Ложь;
	Иначе
		Роль = Истина;
	КонецЕсли;
	Возврат Роль;
КонецФункции
Показать



ЗЫ: Тут подумал и понял что в 1 решении не нужен поиск перечислений, в любом случаи пересчитывается дата. Нужно просто изменить ДатуПлатежа на Дату документа и после уже применять типовую функцию по вычислению даты согласно Соглашению.
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Lenten 25 04.02.20 14:54 Сейчас в теме
+ документы могут перепроводить. это тоже учтите
+
3. GennadiyN 04.02.20 15:53 Сейчас в теме
(2) Что может произойти из-за перепроводки?
+
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот