Разработка на платформе 1С:Предприятие часто вызывает двоякие чувства у специалистов, имеющих опыт работы с языками программирования общего назначения (C++, C#, Java). С одной стороны, мы имеем высокую скорость разработки бизнес-логики, с другой — сталкиваемся с «закрытостью» системы. В этой статье мы подробно проанализируем основные претензии сообщества к платформе и разберем, какие из этих «болей» уже закрыты в последних версиях 1С (8.3.24, 8.3.25), а что до сих пор требует «костылей» или обходных путей.
Долгое время программисты 1С завидовали коллегам, работающим напрямую с SQL, из-за отсутствия оконных функций. Это заставляло нас писать громоздкие запросы с множественными соединениями и использованием временных таблиц там, где в стандартном SQL достаточно одной строки кода. Рассмотрим подробнее, что изменилось с выходом последних обновлений.
Начиная с версии 8.3.24, в платформе наконец-то появилась поддержка оконных функций. Это позволяет нам выполнять аналитические расчеты (например, вычисление нарастающего итога, нумерацию строк внутри группы или расчет скользящего среднего) напрямую в запросе. Разберем по шагам, что теперь доступно:
СГРУППИРОВАТЬ ПО).SUM (нарастающий итог) или ROW_NUMBER.Еще одна давняя проблема — невозможность модификации временных таблиц. Раньше мы могли только создать временную таблицу один раз на основе результата запроса. В версии 8.3.25 реализована возможность ВСТАВИТЬ В (аналог SQL-оператора INSERT INTO). Теперь мы можем дополнять уже существующую временную таблицу новыми данными в процессе работы одного пакета запросов, что значительно оптимизирует алгоритмы со сложной предварительной подготовкой данных.
Несмотря на прогресс, рекурсивные запросы (Common Table Expressions — CTE) во встроенном языке 1С до сих пор отсутствуют. Проанализируем ситуацию: как нам обходить деревья иерархии (например, спецификации номенклатуры или подчиненность подразделений)?
На данный момент мы вынуждены использовать один из трех подходов:
Программисты часто сравнивают 1С с языком Go, отмечая нехватку легких потоков (goroutines). В 1С параллелизм реализован через ФоновыеЗадания. Выясним причину, почему это не всегда удобно: каждое фоновое задание — это отдельный сеанс, требующий инициализации параметров сеанса, повторного чтения некоторых данных и потребляющий значительный объем оперативной памяти на сервере.
Тем не менее, платформа активно движется в сторону асинхронности. Введены механизмы Обещания (Promises) и асинхронные методы (НачатьПомещениеФайла, Ждать), которые позволяют не блокировать интерфейс пользователя. Посмотрим на пример логики работы с файлом в современном стиле:
// Пример использования асинхронности для работы с файлами
&НаКлиенте
Асинхрон Процедура ЗагрузитьФайл()
Описание = Новый ОписаниеПередаваемогоФайла("C:\temp\data.txt");
Результат = Ждать ПоместитьФайлНаСерверАсинхрон(Описание);
Если Результат.ФайлПомещен Тогда
// Продолжаем логику обработки
КонецЕсли;
КонецПроцедуры
Однако полноценной «общей памяти» между потоками внутри одного сеанса всё еще нет, что обусловлено архитектурой клиент-серверного взаимодействия 1С и необходимостью обеспечения целостности данных.
Одной из самых острых тем обсуждения является «закрытость» Конфигуратора. Профессиональные команды давно переросли стандартный поиск по коду и отсутствие контроля версий. Решением от фирмы 1С стала среда 1C:Enterprise Development Tools (EDT), базирующаяся на Eclipse.
Разберем основные преимущества перехода на EDT для крупной разработки:
gitsync, можно выстраивать конвейеры автоматической сборки, тестирования (через Vanessa Automation) и деплоя конфигураций.Для тех, кто остается в классическом Конфигураторе, в версии 8.3.25 были сделаны важные шаги по юзабилити: глобальный поиск стал фоновым. Это значит, что при поиске строки по всей конфигурации интерфейс больше не «замирает», и разработчик может продолжать анализ кода в других окнах.
Многие жалуются на ограниченность форм 1С. Действительно, стандартный набор элементов управления (кнопки, таблицы, поля ввода) жестко задан платформой. Но и здесь есть выход. Рассмотрим подробнее использование ПолеHTMLДокумента.
Современная 1С позволяет встраивать внутрь форм полноценный HTML5 и JavaScript. Это открывает возможности для создания:
Взаимодействие между кодом 1С и JavaScript внутри формы происходит через событие ПриНажатии или через асинхронные вызовы JS-функций из встроенного языка 1С. Это снимает практически любые ограничения на визуальное представление данных.
Также нельзя забывать про Систему расширений. Если раньше расширения воспринимались как временные «патчи», то сегодня это мощный инструмент архитектора. Мы можем добавлять новые справочники, документы и регистры в расширение, не снимая основную конфигурацию с поддержки. Это позволяет сохранять типовые решения чистыми, что критически важно для регулярных обновлений.
Проанализировав дискуссию и текущее состояние платформы, можно выделить три направления, которые остаются слабыми местами 1С:
NuGet или npm. Обмен кодом между проектами часто происходит через ручное копирование модулей или использование сторонних неофициальных инструментов (например, пакетов из сообщества разработчиков).Подведем итог: Платформа 1С 8.3 сегодня — это уже не та «ложка для копания траншей», о которой писали 10 лет назад. Внедрение оконных функций, развитие EDT и асинхронности приближает её к промышленным стандартам. Однако разработчику по-прежнему важно понимать специфику экосистемы и использовать современные инструменты (EDT, расширения, асинхронность), чтобы не чувствовать себя ограниченным в возможностях.