Почему возникает ошибка ДатаАктуальности при выполнении кода на сервере 1С 8.3

Программист 1С v8.3 (Управляемые формы) 1С:Розница IT и автоматизация бизнеса
← На главную

При переносе наработок или интеграции конфигураций 1С разработчики нередко сталкиваются с ситуацией, когда знакомый метод вызывает ошибку компиляции. В частности, при попытке вызвать функцию определения даты актуальности в модуле формы или общем модуле на сервере платформа выдает диагностическое сообщение: Процедура или функция с указанным именем не определена (ДатаАктуальности). Разберем детально, почему возникает данное исключение, как правильно вызывать подобные методы при межпрограммном взаимодействии через COM и как устроен контроль актуальности данных в платформе 1С:Предприятие 8.3.

Анализ исходной ошибки в коде

Рассмотрим пример кода, в котором была зафиксирована ошибка при вызове в контексте управляемой формы:


&НаСервере
Функция ВыяснитьТА()
    Возврат ДатаАктуальности();
КонецФункции

При синтаксической проверке модуль сообщает о том, что имя ДатаАктуальности не определено. Выясним причину такого поведения платформы. В глобальном контексте 1С:Предприятия 8.3 нет функции верхнего уровня с именем ДатаАктуальности(). Если разработчик обращается к внешней информационной базе через протокол COM (OLE) или пытается применить метод объекта конфигурации, данный метод обязан вызываться через соответствующую объектную переменную.

Решение проблемы при работе через COM-соединение

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

Для корректного получения значения из удаленной информационной базы выполним обращение через экземпляр созданного COM-соединения:


&НаСервере
Функция ПолучитьДатуИзВнешнейБазы(Соединение)
    // Обращаемся непосредственно к объекту внешнего соединения
    Дата = Соединение.ДатаАктуальности();
    Возврат Дата;
КонецФункции

Разберем по шагам правила безопасного взаимодействия с внешними базами по COM в среде 1С:Предприятие 8.3 (Управляемые формы):

  1. Проверка разрядности процессов сервера: Если рабочий сервер 1С функционирует в 64-разрядном режиме, а целевая база или библиотека OLE является 32-разрядной, прямой вызов на сервере завершится аварийной ошибкой COM-интерфейса. Для корректного соединения требуется настройка выделенного 32-разрядного приложения COM+ в оснастке служб компонентов операционной системы Windows (COM-суррогат dllhost.exe).
  2. Права системной учетной записи: Серверный код выполняется под системным пользователем операционной системы (например, usr1cv8). Данная учетная запись должна обладать явными разрешениями на доступ к сетевым путям базы, веткам системного реестра и правами запуска DCOM-компонентов.
  3. Контроль контекста вызовов: Любые модальные окна, предупреждения или диалоги ввода лицензии, открывающиеся в удаленной базе, приводят к полной блокировке серверного потока в неинтерактивной сессии. Поэтому параметры соединения должны обеспечивать фоновый запуск без интерактива.

Концептуальные отличия: понятие точки актуальности в 1С 7.7 и 1С 8.3

Исторически в платформе 1С 7.7 существовало понятие жесткой глобальной Точки Актуальности (ТА), на которую всегда были рассчитаны остатки регистров. Для работы с ней использовались специальные методы: ПолучитьДатуТА(), ПолучитьВремяТА() и ПолучитьПозициюТА().

В платформе 1С:Предприятие 8 концепция фиксированной глобальной ТА полностью упразднена. Рассмотрим, как устроен расчет итогов и контроль последовательностей в современных конфигурациях:

  1. Получение актуальных остатков без передачи параметров: В виртуальных таблицах регистров накопления (например, Остатки()) параметр даты можно не указывать вовсе или передавать Неопределено. В этом случае платформа автоматически обращается к сохраненным итогам и добирает движения до самой последней секунды фактических записей.
  2. Срезы на определенный момент: Для получения срезов на конкретный документ или дату используются типы МоментВремени (комбинация даты и ссылки на документ) и Граница (позволяет включить или исключить движения конкретного документа при помощи вида границы ВидГраницы.Включая или ВидГраницы.Исключая).
  3. Контроль актуальности последовательностей: Если в конфигурации требуется контролировать границу актуальности проведения документов во времени (аналог сдвига ТА), используются метаданные Последовательности. Граница последовательности считывается с помощью метода ПолучитьГраницу():

&НаСервере
Функция ПолучитьГраницуПоследовательности(ИмяПоследовательности)
    // Получаем текущую границу актуальности проведения
    Граница = Последовательности[ИмяПоследовательности].ПолучитьГраницу();
    Возврат Граница;
КонецФункции

Метод ДатаАктуальности в Менеджере полнотекстового поиска

Посмотрим на пример использования метода с именем ДатаАктуальности(), который действительно встроен в синтаксис 1С 8.3. Этот метод принадлежит объекту МенеджерПолнотекстовогоПоиска и предназначен для отслеживания состояния индексации информационной базы.

Метод возвращает дату последнего момента, когда были проиндексированы все данные системы и отсутствовали объекты в очереди на индексацию. Вызов метода осуществляется строго через глобальное свойство ПолнотекстовыйПоиск:


&НаСервере
Функция ПолучитьДатуИндексаПоиска()
    // Проверяем, включен ли режим полнотекстового поиска
    Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
        Возврат ПолнотекстовыйПоиск.ДатаАктуальности();
    Иначе
        ВызватьИсключение "Полнотекстовый поиск отключен в системе.";
    КонецЕсли;
КонецФункции

Важно помнить: если полнотекстовый поиск запрещен программно или в свойствах конфигурации, прямой вызов метода ПолнотекстовыйПоиск.ДатаАктуальности() завершается аварийным системным исключением времени выполнения.

Рекомендации по замене COM-соединений на современные механизмы

При разработке и сопровождении конфигураций на управляемых формах рекомендуется минимизировать использование COM-соединений. Они чувствительны к разрядности процессов, зависят от операционной системы Windows и создают блокировки в серверных сессиях. Для интеграции баз данных на платформе 1С 8.3 оптимально использовать независимые от платформы технологии: HTTP-сервисы, Web-сервисы (SOAP) или встроенный интерфейс OData (REST API).

← На главную