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