При обновлении конфигурации «1С:Бухгалтерия предприятия 3.0» до релиза 3.0.149.18 и выше многие разработчики столкнулись с неожиданным фактом: ряд ключевых общих модулей стал поставляться без исходных текстов. Вместо привычного программного кода в конфигураторе отображается скомпилированный байт-код. В этой статье мы подробно разберем, какие именно модули были закрыты, выясним причины такого решения фирмы «1С» и проанализируем технические последствия для сопровождения нетиповых баз.
Проанализируем состав конфигурации. Под закрытие попали блоки, связанные с интеграцией Личного кабинета ФНС и функционалом Единого налогового счета (ЕНС), а также модуль расчета заработной платы. Вот перечень основных модулей:
ЕдиныйНалоговыйСчетИнтеграцияЕдиныйНалоговыйСчетИнтеграцияБПЕдиныйНалоговыйСчетИнтеграцияВызовСервераЕдиныйНалоговыйСчетИнтеграцияПовтИспЕдиныйНалоговыйСчетИнтеграцияФормыПереопределяемыйЕдиныйНалоговыйСчетЛичныйКабинетРасчетЗарплатыДляНебольшихОрганизацийРанее, например в релизе 146, эти модули были полностью открыты, что позволяло разработчикам изучать алгоритмы работы и, при необходимости, вносить корректировки или использовать этот код в качестве примера для собственных разработок.
Рассмотрим ситуацию с модулем РасчетЗарплатыДляНебольшихОрганизаций. В программе «1С:Бухгалтерия» реализован упрощенный кадровый учет и расчет зарплаты. Однако существует жесткое ограничение: этот функционал предназначен для организаций с численностью сотрудников до 60 человек. Если штат компании превышает этот лимит, программа блокирует возможность ведения учета, предлагая перейти на специализированный продукт «1С:Зарплата и управление персоналом» (ЗУП) или версию «КОРП».
Многие специалисты использовали расширения конфигурации, чтобы обойти эту проверку. Достаточно было перехватить выполнение метода, проверяющего количество сотрудников, и вернуть «Истина» или подменить результат запроса. Закрывая исходный текст этого модуля, фирма «1С» защищает свою маркетинговую стратегию и сегментацию продуктов, делая такой обход практически невозможным для обычного разработчика.
Вторая группа закрытых модулей касается интеграции с Единым налоговым счетом. Здесь причины носят скорее технический и юридический характер. Разберем их по пунктам:
Посмотрим на ситуацию с точки зрения программиста, сопровождающего базу. Закрытие кода накладывает три критических ограничения:
Во-первых, невозможна пошаговая отладка. Если при вызове метода из закрытого модуля возникает ошибка, вы не сможете нажать F11 и «шагнуть внутрь», чтобы посмотреть значения переменных. Отладчик просто пропустит выполнение этого блока. Это значительно усложняет диагностику ошибок, возникающих на стыке вашего кода и типовых механизмов.
Во-вторых, ограничения механизмов расширения. В закрытых модулях нельзя использовать аннотации &Вместо, &Перед или &После. Платформа 1С не позволяет расширениям «зацепиться» за методы, исходный текст которых скрыт. Таким образом, любая кастомизация логики внутри этих модулей теперь заблокирована.
В-третьих, зависимость от платформы. Скомпилированный байт-код чувствителен к версии платформы 1С:Предприятие. При попытке запустить конфигурацию на слишком старой или, наоборот, экспериментальной версии платформы, могут возникнуть трудночитаемые ошибки исполнения.
Выясним, какие инструменты остаются у разработчика в данной ситуации. Если вам необходимо проанализировать, что происходит внутри закрытого модуля, мы можем использовать следующие методы:
Wireshark или Fiddler можно просмотреть, какие запросы и на какие адреса отправляет программа. Это поможет понять логику обмена с ФНС, даже если код формирования запроса скрыт.Стоит отметить, что это не уникальное событие. Проанализируем историю: еще в 2015 году в релизе 3.0.39.55 был закрыт общий модуль СверкаДанныхУчетаНДС. Тенденция такова, что фирма «1С» постепенно переносит критически важную или коммерчески чувствительную логику в закрытые блоки или облачные сервисы (модель SaaS). Для большинства пользователей и администраторов это проходит незаметно, но для разработчиков нетиповых решений это сигнал к тому, что полагаться на возможность модификации любого участка кода в «1С:Бухгалтерии» больше нельзя.
Таким образом, мы видим, что закрытие модулей — это осознанный шаг вендора по защите своих интеллектуальных прав и бизнес-интересов. Разработчикам же остается адаптироваться к новым правилам игры, минимизируя зависимости своих доработок от закрытых участков кода.