Как заполнять реквизит документа перед записью, но не заполнять в процессе перепроведения документов
Здравствуйте, подскажите, пожалуйста, требуется при изменении документов заполнять реквизит. Для этого я создала подписку на событие. Сейчас заметила, что. когда запускаешь проведение документов, подписка отрабатывает - реквизит заполняется, а мне надо заполнять этот реквизит только при интерактивном изменении документа пользователем. Как это сделать?
По теме из базы знаний
- Быстрый поиск дублей с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Как сдать экзамен 1С:Специалист по платформе?
- Комплексный контроль остатков. Для одного или сразу нескольких логически связанных регистров накопления. Универсальное решение уровня данных для контроля не только складских остатков
- Пример решения задачи по оперативному учету для экзамена (1С: Специалист по платформе 8.3)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) модуль формы документа:
модуль объекта документа:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗаписьИзФормы", Истина);
КонецПроцедуры
модуль объекта документа:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ЗаписьИзФормы = Неопределено;
ЭтотОбъект.ДополнительныеСвойства.Свойство("ЗаписьИзФормы", ЗаписьИзФормы);
Если ЗаписьИзФормы = Неопределено Тогда
// запись не из формы
Иначе
// запись из формы
КонецЕсли;
КонецПроцедуры
Показать
(1)
Если РежимЗаписи = РежимЗаписиДокумента.проведение и ЭтаФорма.Модифицированность и Объект.Ссылка.Проведен Тогда
Что-то вроде этого, но немного оптимизировать. Проверяет проведение это или нет, модифицировали форму или просто тыкают провести закрыть и смотрит был проведен или нет. Можно еще условие на Объект.Ссылка.пустая(). Под рукой конфигуратора нет, так бы написал.
Это только в модуле формы. проведение может быть не интеррактивным, а так же из формы списка, поэтому модуль объекта я бы не трогал, а ограничился только формой документа.
Как же все-таки отделить обработку проведения документов от интерактивного изменения документа?
Если РежимЗаписи = РежимЗаписиДокумента.проведение и ЭтаФорма.Модифицированность и Объект.Ссылка.Проведен Тогда
Что-то вроде этого, но немного оптимизировать. Проверяет проведение это или нет, модифицировали форму или просто тыкают провести закрыть и смотрит был проведен или нет. Можно еще условие на Объект.Ссылка.пустая(). Под рукой конфигуратора нет, так бы написал.
Это только в модуле формы. проведение может быть не интеррактивным, а так же из формы списка, поэтому модуль объекта я бы не трогал, а ограничился только формой документа.
Можно определить, что это новый объект "Если Источник.Ссылка.Пустая() ". Если запускать проведение документа могут не все пользователи, то можно принять решение по текущему пользователю или по доступной роли.
смысл реквизита в том, чтобы запоминать последнего, кто редактировал документ, поэтому документ может быть, как новым, так и не новым. А проводить документы (для восстановления последовательности, например) может любой, но при этом не надо заполнять нужный мне реквизит в документах.
Обработчик формы тоже не поможет, потому что, когда отрабатывает проведение документов, процедуры "перед записью" отрабатывают так же, как и когда пользователь нажимает "Записать".
Как же все-таки отделить обработку проведения документов от интерактивного изменения документа?
Обработчик формы тоже не поможет, потому что, когда отрабатывает проведение документов, процедуры "перед записью" отрабатывают так же, как и когда пользователь нажимает "Записать".
Как же все-таки отделить обработку проведения документов от интерактивного изменения документа?
Перед записью на форме прописать код по изменению реквизита, а обработка она использует модуль объекта
Процедура УстановитьДатыСозданияИзмененияОбъекта(ЭтотОбъект) Экспорт
ТекущийПользователь=ТекущийПользователь();
Если ЭтотОбъект.Ссылка.Пустая() Тогда
Если ЕстьРеквизит(ЭтотОбъект,"Создал") И ЕстьРеквизит(ЭтотОбъект,"ДатаСоздания") Тогда
ЭтотОбъект.Создал=ТекущийПользователь;
ЭтотОбъект.ДатаСоздания=ТекущаяДата();
КонецЕсли;
Если ЕстьРеквизит(ЭтотОбъект,"Изменил") И ЕстьРеквизит(ЭтотОбъект,"ДатаИзменения") Тогда
ЭтотОбъект.Изменил=ЭтотОбъект.Создал;
ЭтотОбъект.ДатаИзменения=ЭтотОбъект.ДатаСоздания;
КонецЕсли;
ИначеЕсли ЭтотОбъект.Модифицированность() Тогда
Если ЕстьРеквизит(ЭтотОбъект,"Изменил") И ЕстьРеквизит(ЭтотОбъект,"ДатаИзменения") Тогда
Если (Не КФСервер.ЭтоПрограммист(ТекущийПользователь) ИЛИ ЭтотОбъект.ДатаИзменения='00010101') Тогда
ЭтотОбъект.Изменил=ТекущийПользователь;
ЭтотОбъект.ДатаИзменения=ТекущаяДата();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//Обработчик подписки
Процедура КФПередЗаписьюОбъекта(Источник, Отказ) Экспорт
Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
УстановитьДатыСозданияИзмененияОбъекта(Источник);
КонецПроцедуры
ПоказатьВозможно, когда обработкой выполняется перепроведение не устанавливается Модифицированность.
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот