Разработка расширений в системе 1С:Предприятие становится все более актуальной, особенно в условиях постоянных обновлений типовых конфигураций и стремления к бесшовной интеграции. Однако этот процесс сопряжен с рядом вызовов и недочетов, которые могут значительно усложнить жизнь разработчику. Давайте подробно рассмотрим основные проблемы, с которыми сталкиваются пользователи, и проанализируем доступные решения и новые возможности платформы.
Начнем с наиболее частых проблем, возникающих непосредственно в процессе написания кода и работы с метаданными в конфигураторе.
Многие разработчики сталкиваются с тем, что при написании расширений не работают подсказки по метаданным основной конфигурации, а конструктор запросов не знает об объектах расширяемой конфигурации. Это значительно затрудняет написание запросов и работу с данными.
Решение: Платформа 1С:Предприятие активно развивается в этом направлении. С версии 8.3.23 была значительно улучшена доступность объектов основной конфигурации в редакторе запросов расширения. Теперь конструктор запросов, открытый из расширения, должен позволять открывать и редактировать запросы, использующие объекты расширяемой конфигурации, даже если они не добавлены непосредственно в расширение. Однако в модулях расширения конструктор запроса изначально видит только те метаданные, которые присутствуют в этом расширении. Для более комфортной работы с запросами, использующими метаданные основной конфигурации, вы можете использовать специализированные инструменты. Например, консоли запросов от сторонних разработчиков, такие как
При добавлении объекта в расширение система иногда тащит за собой лишние объекты (картинки, перечисления и т.д.), которые приходится удалять вручную, чтобы избежать ошибок при будущих обновлениях основной конфигурации.
Решение: Эта проблема требует внимательности разработчика. На текущий момент платформа не предоставляет автоматизированного механизма для предотвращения заимствования "мусорных" объектов. Мы должны быть аккуратны при заимствовании, тщательно анализировать список автоматически подтягиваемых объектов и удалять те, которые действительно не нужны для реализации функционала расширения. Это ручная работа, но она помогает поддерживать чистоту и стабильность расширения.
Распространенная ситуация, когда мы добавляем новые реквизиты к объектам основной конфигурации через расширение, но эти реквизиты по умолчанию не видны на заимствованных формах.
Решение: Эта проблема указывает на особенности работы с заимствованными формами. Для того чтобы реквизиты расширения отображались на заимствованной форме, нам необходимо явно добавить их на форму в конфигураторе расширения. Платформа 1С, начиная с версии 8.3.18, предоставляет возможность изменять (расширять) типы реквизитов из основной конфигурации. Это позволяет, например, увеличивать длину строкового или числового поля, а также добавлять новый тип данных к составному типу реквизита. Эти изменения, конечно, должны быть отражены на форме вручную.
Пользователи жалуются, что заимствованные макеты в расширении работают некорректно, например, при добавлении новой области и попытке ее вывода вместо ожидаемого содержимого отображается пустота.
Решение: Разработчики платформы активно работают над этим. В версии 8.3.24 была улучшена производительность при работе с макетами табличных документов, измененными в расширении. Это решило проблему долгого первого обращения к макетам с большим количеством строк. Сами заимствованные макеты можно модифицировать в расширении, добавляя новые области или изменяя существующие. Если возникает проблема с выводом, следует тщательно проверить правильность обращения к областям по имени и убедиться, что данные, которые мы пытаемся вывести, корректно передаются в макет.
При использовании СКД (Системы Компоновки Данных) и конструктора запросов возникают сложности: поля из расширений могут пропадать, и их невозможно добавить в ресурсы или группировки.
Решение: Как и в случае с обычным конструктором запросов, ситуация значительно улучшилась в версии 8.3.23 и последующих. Платформа теперь лучше "знает" о метаданных расширения. Тем не менее, для сложной работы с отчетами на СКД, особенно с использованием данных из расширений, рекомендуется использовать уже упомянутые сторонние инструменты, такие как
Возможность работы с внешними источниками данных (ВИД) в расширениях — долгожданное нововведение, но и оно имеет свои особенности и вопросы.
Ранее работа с ВИД в расширениях была затруднена или невозможна, что вынуждало использовать обходные пути, например, через внешние обработки с ADO.
Решение: В версии 8.3.24 платформы 1С:Предприятие появилась поддержка внешних источников данных (ВИД) в расширениях. Теперь мы можем добавлять собственные источники данных и изменять заимствованные из основной конфигурации. Это должно упростить работу для пользователей конфигураций на поддержке и в облачных сервисах.
Возникают закономерные вопросы о том, как ВИД будет работать в облачных средах, таких как 1С:Фреш. Ведь сервер 1С, на котором работает база во Fresh, должен иметь доступ к внешней СУБД, а это требует пробрасывания доступов к внешним базам.
Решение: Важно понимать, что параметры доступа к внешнему источнику данных, заданные в конфигураторе, не используются системой в режиме 1С:Предприятие. Эти параметры настраиваются программно в режиме 1С:Предприятие. Для ВИД, реализованных в расширении, параметры подключения (строка подключения, пользователь, пароль) могут быть заданы через соответствующий механизм настроек параметров подключения внешних источников данных, который доступен пользователю. Таким образом, эти данные не «зашиваются» в конфигурацию расширения. Однако остается критическим требование: сервер хостера, на котором развернута база 1С:Фреш, должен иметь сетевой доступ к внешней СУБД. Это требует настройки со стороны хостинг-провайдера и соблюдения политик безопасности.
Разработчики высказывают пожелания о более гибкой реализации ВИД: возможность задавать структуру внешнего источника в конфигураторе, а строку подключения – в режиме предприятия, или связывать один ВИД из конфигуратора с несколькими внешними источниками данных, заданными в режиме предприятия.
Решение: Эти предложения отражают стремление к более открытой и динамичной работе с данными. На текущий момент платформа 1С не предоставляет такой полной гибкости в стандартной реализации ВИД. Тем не менее, разработчики платформы постоянно развивают функционал, и подобные возможности могут появиться в будущем.
В отсутствие полной гибкости ВИД, многие разработчики используют альтернативные подходы.
Решение: Если стандартные ВИД не подходят, мы можем использовать следующие подходы:
Для крупных корпоративных внедрений требуются не только базовые функции расширений, но и поддержка более сложных архитектурных решений.
Долгое время создание регламентных заданий непосредственно в расширениях было проблемой, требующей обходных путей через внешние обработки или общие модули.
Решение: С версии 8.3.23 появилась возможность создавать регламентные задания непосредственно в расширениях конфигурации. Для этого мы добавляем новый объект типа РегламентноеЗадание в расширение и настраиваем его параметры. Регламентные задания, созданные в расширении, могут запускать команды расширения, и для них можно задать расписание. Это значительно упрощает автоматизацию задач без изменения основной конфигурации.
Возможность изменять или расширять типы данных существующих реквизитов основной конфигурации.
Решение: С версии 8.3.18 расширения позволяют изменять (расширять) типы существующих реквизитов из основной конфигурации. Например, мы можем увеличить длину строкового или числового поля, добавить новый тип данных к составному типу реквизита. Также поддерживается переопределение определяемых типов и общих реквизитов. Это мощный инструмент для адаптации конфигурации под специфические требования без снятия с поддержки.
Разработчики выражают потребность в механизмах Dependency Injection (внедрения зависимостей) на уровне платформы, а не только через изобретение велосипедов в БСП или коде конфигураций.
Решение: Действительно, DI в 1С очень нужен на уровне платформы для повышения модульности, тестируемости и поддерживаемости кода. Нам не хватает интерфейсов, чтобы, например, функция могла принимать любой объект, соответствующий интерфейсу. В некоторых алгоритмах требуется некий документ с определенными методами. Без DI приходится создавать фиктивные объекты или использовать извращенные обходные пути. Определяемые типы, используемые в подписке на события, требуют указания конкретного типа, хотя иногда нужно, чтобы подписка работала для всех справочников, у которых есть n-й набор реквизитов и методов. Все это затрудняет создание переиспользуемых библиотек. Осознание этой потребности на уровне платформы – важный шаг к улучшению архитектуры.
Для создания высоконагруженных и распределенных систем на базе 1С требуется поддержка современных протоколов и архитектурных подходов, таких как gRPC и микросервисы.
Решение: Платформа 1С:Предприятие активно рассматривает и поддерживает концепцию микросервисной архитектуры как современный подход к построению распределенных приложений, особенно для крупных корпоративных сред. Это позволяет разбивать функциональность на независимые, масштабируемые сервисы, решая задачи интеграции, повышения отказоустойчивости и ускорения разработки. Более того, платформа 1С:Предприятие запланировала поддержку протокола gRPC, что указывает на направление развития в сторону высокопроизводительных межсервисных взаимодействий. Уже сейчас существуют способы освоения протокола gRPC по HTTP/2 в 1С с использованием сторонних библиотек или прокси-сервисов, позволяющих обойти ограничения текущих релизов платформы, которые ранее не поддерживали прямое соединение по HTTP/2 для gRPC. gRPC использует HTTP/2 в качестве транспорта и Protocol Buffers (Protobuf) для сериализации данных, что обеспечивает компактность и быструю обработку.
Проблема лицензирования на виртуальных машинах остается актуальной, поскольку программная лицензия 1С привязывается к параметрам железа, и их изменение может привести к слету лицензии.
Решение: Это действительно "ахтунг" для многих компаний. Программная лицензия 1С привязывается к параметрам виртуальной машины, и изменение этих параметров (например, при миграции, изменении объема оперативной памяти, сетевых адаптеров или перераспределении нагрузки) может потребовать повторной активации. Для обхода этой проблемы рекомендуется использовать сервер лицензирования. Сервер лицензирования, установленный на физическом компьютере или на виртуальной машине с фиксированными параметрами, обеспечивает более стабильную работу лицензий, так как привязка происходит к параметрам сервера лицензирования, а не к параметрам каждой клиентской виртуальной машины.
Несмотря на перечисленные сложности, важно отметить, что функциональность расширений постоянно развивается. В версии 8.3.25 расширения получили возможность создавать и модифицировать бизнес-процессы, задачи, управлять критериями отбора. В версии 8.3.26 планировалось добавить возможность создавать свои журналы документов и модифицировать XDTO-пакеты.
Таким образом, 1С продолжает активно развивать механизм расширений, добавляя поддержку новых типов метаданных, улучшая работу с существующими объектами и решая ряд ранее озвученных проблем. Особое внимание уделяется возможностям для облачных сервисов и крупных корпоративных внедрений. Нам, как разработчикам, необходимо постоянно следить за обновлениями платформы и активно использовать новые возможности для создания более гибких, стабильных и производительных решений.