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

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) Что может произойти из-за перепроводки?
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)