Разберем процесс создания надежного механизма изменения статусов документов. Основная задача — обеспечить запись состояния документа в РегистрСведений непосредственно после нажатия кнопки, минуя механизм проведения документа. Это позволяет гибко управлять статусами «Не проверен», «Проверен» и «К повторной проверке».
Первым делом проанализируем ошибку смешивания логики. Часто новички пытаются писать в регистр в процедуре ОбработкаПроведения. Это приводит к тому, что статус затирается или дублируется. Мы должны использовать серверную процедуру, вызываемую из модуля формы при нажатии кнопки.
Важно помнить: МенеджерЗаписи подходит для работы с одной конкретной записью, но если вы работаете с набором данных, лучше использовать НаборЗаписей. При возникновении ошибки «Поле объекта не обнаружено» (в контексте Отбор), убедитесь, что вы используете метод СоздатьНаборЗаписей() для объекта РегистрыСведений.
Рассмотрим, как правильно организовать процедуру записи на сервере. Мы будем считывать текущий набор данных, изменять его и записывать обратно.
&НаСервере
Процедура ЗаписьВРегистр(СтатусДляЗаписи)
НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Установить(Объект.Ссылка);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Запись = НаборЗаписей.Добавить();
Запись.Документ = Объект.Ссылка;
Иначе
Запись = НаборЗаписей[0];
КонецЕсли;
Запись.СтатусПроверки = СтатусДляЗаписи;
Запись.Проверил = Пользователи.ТекущийПользователь();
Запись.ДатаПроверки = ТекущаяДатаСеанса();
НаборЗаписей.Записать(Истина);
КонецПроцедуры
Разберем последовательный переход между статусами. Чтобы пользователь мог переключаться между ними циклично или принудительно, используйте функцию определения текущего состояния перед записью.
&НаСервере
Функция ОпределитьСледующийСтатус(ТекущийСтатус)
Если ТекущийСтатус = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен Тогда
Возврат Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен;
ИначеЕсли ТекущийСтатус = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен Тогда
Возврат Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
Иначе
Возврат Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
КонецЕсли;
КонецФункции
ОбработкаПроведения модуля объекта больше нет кода, который принудительно устанавливает статус НеПроверен, если этот статус уже был задан пользователем через кнопку.ИзменениеСтатусаПроверкиДокумента на клиенте и пошагово пройдите выполнение до серверной процедуры. Проверяйте содержимое переменных Объект.Ссылка и СтатусПроверки на каждом этапе.ДополнительныеСвойства только в том случае, если вам необходимо передать статус из формы в процедуру проведения документа для каких-то отчетных целей. Если же статус должен обновляться мгновенно — прямой вызов записи в регистр из формы является предпочтительным.Следуя этим шагам, вы сможете создать чистый и рабочий механизм. Помните, что главный принцип 1С — максимальное разделение интерфейсной части и логики данных. Если вы перенесли логику записи статуса в кнопку, доверяйте этой кнопке и не дублируйте запись при проведении, чтобы избежать конфликтов при перезаписи данных в РегистрСведений.