При переносе наработок или интеграции конфигураций 1С разработчики нередко сталкиваются с ситуацией, когда знакомый метод вызывает ошибку компиляции. В частности, при попытке вызвать функцию определения даты актуальности в модуле формы или общем модуле на сервере платформа выдает диагностическое сообщение: Процедура или функция с указанным именем не определена (ДатаАктуальности). Разберем детально, почему возникает данное исключение, как правильно вызывать подобные методы при межпрограммном взаимодействии через COM и как устроен контроль актуальности данных в платформе 1С:Предприятие 8.3.
Рассмотрим пример кода, в котором была зафиксирована ошибка при вызове в контексте управляемой формы:
&НаСервере
Функция ВыяснитьТА()
Возврат ДатаАктуальности();
КонецФункции
При синтаксической проверке модуль сообщает о том, что имя ДатаАктуальности не определено. Выясним причину такого поведения платформы. В глобальном контексте 1С:Предприятия 8.3 нет функции верхнего уровня с именем ДатаАктуальности(). Если разработчик обращается к внешней информационной базе через протокол COM (OLE) или пытается применить метод объекта конфигурации, данный метод обязан вызываться через соответствующую объектную переменную.
Проанализируем типовую ситуацию, когда внешняя обработка или отчет выполняет подключение к другой базе данных. Если подключение к внешней базе было инициализировано и сохранено в переменную (например, Соединение или COMОбъект), вызов методов этой базы не может происходить напрямую из локального контекста текущей конфигурации.
Для корректного получения значения из удаленной информационной базы выполним обращение через экземпляр созданного COM-соединения:
&НаСервере
Функция ПолучитьДатуИзВнешнейБазы(Соединение)
// Обращаемся непосредственно к объекту внешнего соединения
Дата = Соединение.ДатаАктуальности();
Возврат Дата;
КонецФункции
Разберем по шагам правила безопасного взаимодействия с внешними базами по COM в среде 1С:Предприятие 8.3 (Управляемые формы):
dllhost.exe).usr1cv8). Данная учетная запись должна обладать явными разрешениями на доступ к сетевым путям базы, веткам системного реестра и правами запуска DCOM-компонентов.Исторически в платформе 1С 7.7 существовало понятие жесткой глобальной Точки Актуальности (ТА), на которую всегда были рассчитаны остатки регистров. Для работы с ней использовались специальные методы: ПолучитьДатуТА(), ПолучитьВремяТА() и ПолучитьПозициюТА().
В платформе 1С:Предприятие 8 концепция фиксированной глобальной ТА полностью упразднена. Рассмотрим, как устроен расчет итогов и контроль последовательностей в современных конфигурациях:
Остатки()) параметр даты можно не указывать вовсе или передавать Неопределено. В этом случае платформа автоматически обращается к сохраненным итогам и добирает движения до самой последней секунды фактических записей.МоментВремени (комбинация даты и ссылки на документ) и Граница (позволяет включить или исключить движения конкретного документа при помощи вида границы ВидГраницы.Включая или ВидГраницы.Исключая).ПолучитьГраницу():
&НаСервере
Функция ПолучитьГраницуПоследовательности(ИмяПоследовательности)
// Получаем текущую границу актуальности проведения
Граница = Последовательности[ИмяПоследовательности].ПолучитьГраницу();
Возврат Граница;
КонецФункции
Посмотрим на пример использования метода с именем ДатаАктуальности(), который действительно встроен в синтаксис 1С 8.3. Этот метод принадлежит объекту МенеджерПолнотекстовогоПоиска и предназначен для отслеживания состояния индексации информационной базы.
Метод возвращает дату последнего момента, когда были проиндексированы все данные системы и отсутствовали объекты в очереди на индексацию. Вызов метода осуществляется строго через глобальное свойство ПолнотекстовыйПоиск:
&НаСервере
Функция ПолучитьДатуИндексаПоиска()
// Проверяем, включен ли режим полнотекстового поиска
Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
Возврат ПолнотекстовыйПоиск.ДатаАктуальности();
Иначе
ВызватьИсключение "Полнотекстовый поиск отключен в системе.";
КонецЕсли;
КонецФункции
Важно помнить: если полнотекстовый поиск запрещен программно или в свойствах конфигурации, прямой вызов метода ПолнотекстовыйПоиск.ДатаАктуальности() завершается аварийным системным исключением времени выполнения.
При разработке и сопровождении конфигураций на управляемых формах рекомендуется минимизировать использование COM-соединений. Они чувствительны к разрядности процессов, зависят от операционной системы Windows и создают блокировки в серверных сессиях. Для интеграции баз данных на платформе 1С 8.3 оптимально использовать независимые от платформы технологии: HTTP-сервисы, Web-сервисы (SOAP) или встроенный интерфейс OData (REST API).