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

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


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


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

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

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

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


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

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

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

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

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