При обновлении конфигурации 1С:Бухгалтерия на релизы серии 3.0.140 и выше многие специалисты сталкиваются с внезапной синтаксической ошибкой при выполнении регламентной операции «Расчет расходов будущих периодов». Сообщение об ошибке содержит указание на функцию ОКР внутри текста запроса. Давайте разберем, почему это происходит и как устранить данную проблему, не дожидаясь экстренного обновления серверной инфраструктуры предприятия.
Основная причина заключается в том, что разработчики 1С в последних версиях конфигурации начали использовать новые возможности языка запросов, которые поддерживаются только начиная с платформы 8.3.20 и выше. Функция ОКР (округление) в запросах — это мощный инструмент, который существенно упростил расчеты, но старые версии платформы (например, 8.3.17 или 8.3.18) просто не «понимают» этот синтаксис.
Когда конфигурация 1С:Бухгалтерия вызывает этот запрос, интерпретатор старой платформы спотыкается на незнакомом ему операторе и выбрасывает синтаксическую ошибку. Важно понимать, что система обновления 1С не всегда блокирует установку конфигурации, если платформа ниже требуемой, поэтому ответственность за проверку соответствия лежит на администраторе системы.
Наиболее правильным и рекомендуемым решением является обновление платформы 1С:Предприятие до версии, указанной в файле описания поставки релиза (обычно это 8.3.20.2184 или выше). Это обеспечит полную поддержку всех новых функций, встроенных в конфигурацию, и избавит от подобных ошибок в будущем.
Однако в условиях крупных корпораций, где обновление платформы требует долгого согласования, тестирования оборудования, обменов и работы в несколько смен, этот путь может быть невозможен в период сдачи отчетности.
Если обновление платформы невозможно, мы можем применить расширение конфигурации для исправления логики работы метода РаспределитьЧастьРасходовЗаМесяц в общем модуле РасходыБудущихПериодов. Мы можем заменить «новый» синтаксис на конструкцию, которая была доступна в старых версиях системы.
Для реализации этого метода выполним следующие шаги:
РасходыБудущихПериодов.РаспределитьЧастьРасходовЗаМесяц, используя аннотацию &Вместо.Посмотрим, как выглядел фрагмент с ошибкой и чем его заменить. Вместо использования ОКР для вычисления срока, мы вернемся к вычислению даты окончания периода через функции ДОБАВИТЬКДАТЕ и КОНЕЦПЕРИОДА:
// Пример замены логики в запросе расширения:
// Было (использовалась функция ОКР, вызывающая ошибку):
// ВЫБРАТЬ ... ОКР(Срок / Коэффициент ... ) КАК СрокРаспределения
// Стало (совместимый синтаксис):
КОНЕЦПЕРИОДА(
ДОБАВИТЬКДАТЕ(
ОсновныеСредстваДатаСнятияСУчета.ДатаСостоянияСнятоСУчета,
МЕСЯЦ,
ОсновныеСредстваСрокПолезногоИспользования.СрокПолезногоИспользования
),
МЕСЯЦ
)
Если по каким-то причинам предыдущий вариант кажется вам слишком сложным для внедрения в вашу структуру данных, некоторые специалисты успешно применяют замену функции ОКР на ВЫРАЗИТЬ. Это позволяет привести тип данных к формату, который корректно обрабатывается старой версией платформы 1С:Предприятие. Тем не менее, перед применением этого метода обязательно протестируйте результат на копии базы данных, чтобы убедиться в математической точности расчетов расходов будущих периодов.
Чтобы избежать подобных инцидентов в будущем, проанализируем основные принципы работы с обновлениями:
v8upd.htm или в новостях к релизу конфигурации.ЕНС, проверяйте наличие исправлений (патчей) в разделе «Интернет-поддержка и сервисы».Использование расширений — это эффективный способ оперативно залатать «пробоины» в работе системы, не дожидаясь глобальных изменений в IT-инфраструктуре компании. Работайте структурно, используйте расширения для временных правок и всегда стремитесь к обновлению платформы как к целевому состоянию системы.