Как заполнять реквизит документа перед записью, но не заполнять в процессе перепроведения документов

1. Анна Анна (Anjut-ka4) 13.02.18 16:53 Сейчас в теме
Здравствуйте, подскажите, пожалуйста, требуется при изменении документов заполнять реквизит. Для этого я создала подписку на событие. Сейчас заметила, что. когда запускаешь проведение документов, подписка отрабатывает - реквизит заполняется, а мне надо заполнять этот реквизит только при интерактивном изменении документа пользователем. Как это сделать?
Ответы
3. Дмитрий Г (Ziggurat) 53 13.02.18 17:50 Сейчас в теме
(1) Очевидно надо делать обработчик в форме.
7. Oleg Space (spacecraft) 13.02.18 21:11 Сейчас в теме
(1) модуль формы документа:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗаписьИзФормы", Истина);
КонецПроцедуры


модуль объекта документа:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	ЗаписьИзФормы = Неопределено;
	ЭтотОбъект.ДополнительныеСвойства.Свойство("ЗаписьИзФормы", ЗаписьИзФормы);
	Если ЗаписьИзФормы = Неопределено Тогда
		// запись не из формы
	Иначе
		// запись из формы
	КонецЕсли;
КонецПроцедуры
Показать
12. Дмитрий Васильев (dandykry) 3 14.02.18 09:08 Сейчас в теме
(1)
Как же все-таки отделить обработку проведения документов от интерактивного изменения документа?


Если РежимЗаписи = РежимЗаписиДокумента.проведение и ЭтаФорма.Модифицированность и Объект.Ссылка.Проведен Тогда

Что-то вроде этого, но немного оптимизировать. Проверяет проведение это или нет, модифицировали форму или просто тыкают провести закрыть и смотрит был проведен или нет. Можно еще условие на Объект.Ссылка.пустая(). Под рукой конфигуратора нет, так бы написал.

Это только в модуле формы. проведение может быть не интеррактивным, а так же из формы списка, поэтому модуль объекта я бы не трогал, а ограничился только формой документа.
2. Владимир Зырянов (VZyryanov) 13.02.18 17:40 Сейчас в теме
Можно определить, что это новый объект "Если Источник.Ссылка.Пустая() ". Если запускать проведение документа могут не все пользователи, то можно принять решение по текущему пользователю или по доступной роли.
4. Виктор Третьяков (t.v.s.) 46 13.02.18 20:06 Сейчас в теме
(2) метод УстановитьСсылкуНового() с вами категориччески не согласен
8. Владимир Зырянов (VZyryanov) 14.02.18 06:46 Сейчас в теме
(4) А зачем ее устанавливать?
9. Виктор Третьяков (t.v.s.) 46 14.02.18 07:22 Сейчас в теме
(8) Ситуации бывают разные
5. Анна Анна (Anjut-ka4) 13.02.18 20:38 Сейчас в теме
смысл реквизита в том, чтобы запоминать последнего, кто редактировал документ, поэтому документ может быть, как новым, так и не новым. А проводить документы (для восстановления последовательности, например) может любой, но при этом не надо заполнять нужный мне реквизит в документах.
Обработчик формы тоже не поможет, потому что, когда отрабатывает проведение документов, процедуры "перед записью" отрабатывают так же, как и когда пользователь нажимает "Записать".
Как же все-таки отделить обработку проведения документов от интерактивного изменения документа?
6. Максим Б (Xershi) 296 13.02.18 20:44 Сейчас в теме
(5) вы не правы! Когда вы запускаете обработку, то форма не открывается! А когда запустили форму, то это уже явно не восстановление!
10. Нурбол 1С (user700035_6550355) 7 14.02.18 07:41 Сейчас в теме
Перед записью на форме прописать код по изменению реквизита, а обработка она использует модуль объекта
11. Владимир Зырянов (VZyryanov) 14.02.18 08:22 Сейчас в теме
Процедура УстановитьДатыСозданияИзмененияОбъекта(ЭтотОбъект) Экспорт	
	ТекущийПользователь=ТекущийПользователь();
	Если ЭтотОбъект.Ссылка.Пустая() Тогда
		Если ЕстьРеквизит(ЭтотОбъект,"Создал") И ЕстьРеквизит(ЭтотОбъект,"ДатаСоздания") Тогда
			ЭтотОбъект.Создал=ТекущийПользователь;
			ЭтотОбъект.ДатаСоздания=ТекущаяДата();
		КонецЕсли;
		Если ЕстьРеквизит(ЭтотОбъект,"Изменил") И ЕстьРеквизит(ЭтотОбъект,"ДатаИзменения") Тогда
			ЭтотОбъект.Изменил=ЭтотОбъект.Создал;
			ЭтотОбъект.ДатаИзменения=ЭтотОбъект.ДатаСоздания;
		КонецЕсли;
	ИначеЕсли ЭтотОбъект.Модифицированность() Тогда
		Если ЕстьРеквизит(ЭтотОбъект,"Изменил") И ЕстьРеквизит(ЭтотОбъект,"ДатаИзменения") Тогда
			Если (Не КФСервер.ЭтоПрограммист(ТекущийПользователь) ИЛИ ЭтотОбъект.ДатаИзменения='00010101') Тогда
				ЭтотОбъект.Изменил=ТекущийПользователь;
				ЭтотОбъект.ДатаИзменения=ТекущаяДата();
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры	

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


Возможно, когда обработкой выполняется перепроведение не устанавливается Модифицированность.
Оставьте свое сообщение