Случай из рабочей практики...
👉Для целей подсистемы E-Invoicing для KSA мы используем библиотеку SDK, написанную на Java и зашитую внутрь конфигурации. Для правильной её работы на сервере требуется установка определенной версии Java.
Но при подготовке рабочих и дев серверов для работы релиза с е-инвойсингом, ошиблись, и команде «Cloud» сказали поставить не ту версию Java.
💥И это повлекло за собой целую цепочку событий:
▫️ Из-за неверной версии Java на dev сервере с демо версией релиза с е-инвойсингом при тестировании перестали формироваться и подписываться XML для отправки на портал Fatoora.
▫️ При анализе проблемы выяснилось, что сразу после попытки отправки на портал Fatoora падает с синтаксисом регламентное задание Обновление полнотекстового индекса.
▫️ При анализе падения этого регламентного задания выяснили, что неверно добавили переопределение представления нового справочника RegistrationsWithTaxAuthority - в событии PresentationGetProcessing вместо получения нужного поля через Data было обращение к реквизиту ссылки через Common.ObjectAttributeValue(Data.Ref, "TRN").
▫️ В методе Common.ObjectAttributeValue() после добавления подсистемы NationalLanguageSupport и доработки возможности настройки для разных объектов метаданных последовательности дополнительных языков, одним из параметров является код языка, по которому в методе определяется имя реквизита для объекта на нужном языке. И в одном из условий проверка на заполненность этого параметра была пропущена. Что приводило к постоянному обращению метода, который определяет имя реквизита на нужном языке.
▫️ Метод определения имени реквизита на нужном языке NationalLanguageSupportServerBit.LanguageSuffixByObject(MetadataObject, LanguageCode) в свою очередь внутри цепочки вызовов пытается определить, какому элементу справочника MetadataObjectID соответствует наш объект. И в этой цепочке вызовов пытается определить, находится ли база сейчас в режиме обновления данных.
▫️ В процессе определения, находится ли база в режиме обновления данных, происходит проверка - а не разделенная ли база сейчас. И эта проверка осуществляется через чтение параметра сеанса DataAreaUsage, который в какой-то совершенно неожиданный момент ставится в значение Истина.
▫️ Таким образом, в проверке текущей версии конфигурации для определения режима обновления возвращается 0.0.0.0, что определяет, что текущая конфа находится в режиме обновления.
▫️ В итоге, получаем ошибку регламентного задания обновления полнотекстового индекса на строке Common.ObjectAttributeValue(Data.Ref, "TRN") из-за неверного определения, что база является разделенной.
Резюме
✨Из-за того, что неверно поставили версию Java на дев сервере, удалось найти и пофиксить ошибки, которые очень сложно отловить при обычном тестировании, но которые могли бы сильно повлиять на производительность и стабильность работы конфигурации:
1. Переопределили без запроса представление для справочника RegistrationsWithTaxAuthority.
2. Добавили условие проверки на заполненность параметра LanguageCode перед вызовом NationalLanguageSupportServerBit.LanguageSuffixByObject(MetadataObject, LanguageCode) в методе Common.ObjectAttributeValue().
3. При определении, что база сейчас находится в режиме обновления, добавили к существующей проверке на параметр сеанса DataAreaUsage, еще проверку на функциональную опцию SaaSOperations, по которой определяется, находится ли база в разделенном режиме или нет, чтобы правильно определить версию текущей конфигурации (так реализовано в БСП последних версий).
Post #40
47
Forwarded from Dubai OneC
