В практике разработки на платформе 1С:Предприятие часто возникает ситуация, когда при проведении внешнего IT-аудита к программисту предъявляются претензии по поводу несоблюдения официальных стандартов фирмы «1С». В качестве примеров аудиторы указывают на отказ от использования расширений конфигурации, применение устаревших технологий обмена (например, COM-соединения вместо EnterpriseData или HTTP-сервисов) или внесение изменений непосредственно в типовые модули. При этом сам код может работать корректно и полностью закрывать потребности пользователей.
В этой статье мы подробно проанализируем, каков реальный статус стандартов разработки 1С, в каких случаях они юридически и технически обязательны, а также разберем архитектурные альтернативы спорным техническим решениям.
Рассмотрим, что собой представляет «Система стандартов и методик разработки интерактивных конфигураций» (раздел ИТС 1С). С формальной точки зрения все стандарты фирмы «1С» делятся по уровню обязательности на две категории:
Заставить разработчика неукоснительно следовать стандартам ИТС в рамках заказной разработки можно только одним способом — зафиксировав это требование во внутреннем регламенте компании, техническом задании (ТЗ) или договоре на разработку. Если такого документа нет, требования аудиторов о соблюдении всех пунктов стандартов юридически и технически безосновательны.
Проанализируем ситуацию с самописными обменами через COM-интерфейс (V83.COMConnector). На практике такие обмены пишутся быстро и легко отлаживаются через стандартный конфигуратор, однако с точки зрения современной архитектуры 1С они несут серьезные риски:
Выясним, какие современные альтернативы рекомендуются для построения обменов данными:
Создание собственного HTTP-сервиса на стороне базы-приемника и отправка данных в формате JSON или XML через объект HTTPСоединение. Это кроссплатформенный и быстродействующий подход.
Пример отправки данных из базы-источника через HTTP-запрос:
Соединение = Новый HTTPСоединение("api.server.ru", 443, , , , Истина);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ДанныеСтруктура = Новый Структура;
ДанныеСтруктура.Вставить("Номер", ДокументСсылка.Номер);
ДанныеСтруктура.Вставить("Сумма", ДокументСсылка.СуммаДокумента);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеСтруктура);
СтрокаJSON = ЗаписьJSON.Закрыть();
Запрос = Новый HTTPЗапрос("/v1/exchange/document", Заголовки);
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Данные успешно приняты
КонецЕсли;
Универсальный стандарт обмена на базе XML/JSON, входящий в состав БСП (Библиотеки Стандартных Подсистем). Он позволяет обновлять конфигурации (например, УТ и БП) независимо друг от друга. Изменение структуры документа в УТ не ломает прием документа в БП, так как обмен идеологически отчужден от структуры конкретных таблиц базы.
Разберем спор вокруг расширений конфигурации. Аудиторы часто требуют переносить весь пользовательский код в расширения, чтобы оставить основную конфигурацию на полной поддержке поставщика.
Преимущества применения расширений:
Ограничения и подводные камни расширений:
&Вместо, &Перед или &После, могут измениться по структуре параметров, что приведет к runtime-ошибкам у пользователей.Поэтому решение о выносе логики в расширение должно приниматься на основе анализа стабильности дорабатываемого модуля: для мелких печатных форм и команд расширения идеальны, а для глубоких переработок учетных механизмов иногда безопаснее точечные доработки в основной конфигурации с ведением технической документации.
Проанализируем претензии аудиторов с точки зрения бизнеса. Аудиторы действуют в интересах собственников компании и оценивают риски. Основной риск нестандартного кода — это «фактор автобуса» (Bus Factor).
Если разработчик создает уникальный архитектурный «велосипед» (например, собственный COM-обмен с парсингом строк по уникальным алгоритмам), то при его увольнении компания столкнется с высокими затратами на вхождение нового специалиста в проект. Код, написанный по общепринятым стандартам 1С, новый программист сможет понять и доработать значительно быстрее.
EnterpriseData или HTTP-сервисы, а также перенос кода в расширения требует дополнительных человеко-часов и бюджета.