1. GennadiyN 04.02.20 13:14 Сейчас в теме

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

Пишу статью как дневник, будут какие то дополнения прошу конструктивно высказывать и дополнять)
Занимаюсь 4 месяца программированием так что не судите строго)

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

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

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

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

	КонецЕсли;

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

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

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



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

Вакансии

Специалист линии консультаций 1С
Санкт-Петербург
Полный день

Специалист 1 категории (Методист-аналитик 1С)
Фрязино
зарплата от 100 000 руб.
Полный день

Главный архитектор 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

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

Ведущий программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день