Разработка под клиент-серверную архитектуру в среде «1С:Предприятие» имеет ряд ключевых особенностей. Программисту необходимо четко разграничивать контекст выполнения кода между клиентом и сервером, минимизировать количество серверных вызовов и контролировать объемы передаваемых данных. Однако развертывание полноценного лицензионного сервера «1С» и системы управления базами данных (СУБД) дома долгое время оставалось дорогостоящим удовольствием.
В этой статье мы подробно рассмотрим, как организовать полноценный процесс разработки и тестирования клиент-серверных решений на домашнем компьютере. Мы разберем как классический способ с использованием эмуляции сервера в файловой базе, так и современные бесплатные инструменты, которые официально предоставляет фирма «1С».
Самый простой и не требующий никаких дополнительных затрат способ — это использование механизмов платформы для имитации работы клиент-серверного взаимодействия прямо в файловом варианте базы данных. Платформа «1С:Предприятие 8» изначально проектировалась с возможностью запуска клиентского и серверного кода в рамках одного файлового процесса.
При работе в файловом режиме платформа эмулирует работу сервера. Код, написанный под директивами &НаСервере или &НаСервереБезКонтекста, выполняется в отдельном виртуальном контексте. Однако у файлового режима есть существенный недостаток для тестирования производительности: вызовы сервера происходят мгновенно в оперативной памяти компьютера. В реальной клиент-серверной базе передача данных по сети между клиентом и сервером занимает ощутимое время. Из-за этого разработчик может не заметить избыточные вызовы сервера (например, вызовы сервера в цикле), которые на реальной базе приведут к критическому зависанию интерфейса.
Чтобы решить эту проблему, проанализируем встроенный механизм имитации задержки вызовов сервера. Для этого выполним следующие шаги:
debugcfg.xml).После включения этой опции платформа будет принудительно добавлять задержку при каждом переходе кода с клиента на сервер. Это позволит нам сразу выявить неоптимальные вызовы в коде. Рассмотрим пример правильного проектирования серверного вызова:
&НаКлиенте
Процедура ВыполнитьОбработкуДанных(Команда)
// НЕПРАВИЛЬНО: Вызывать сервер в цикле. С эмуляцией задержки это будет работать крайне медленно.
// Для каждого Строка Из СписокТоваров Цикл
// ЗаписатьЭлементНаСервере(Строка.Ссылка);
// КонецЦикла;
// ПРАВИЛЬНО: Сформировать пакет данных и передать его за один серверный вызов.
МассивСсылок = Новый Массив;
Для Каждого Строка Из СписокТоваров Цикл
МассивСсылок.Добавить(Строка.Ссылка);
КонецЦикла;
Результат = ПакетнаяОбработкаНаСервере(МассивСсылок);
ПоказатьПредупреждение(, Результат.ОписаниеРезультата);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПакетнаяОбработкаНаСервере(Знач МассивСсылок)
Результат = Новый Структура("Статус, ОписаниеРезультата", Истина, "Данные успешно обработаны");
// Выполняем транзакционную запись на сервере
Для Каждого Ссылка Из МассивСсылок Цикл
// Обработка данных в БД...
КонецЦикла;
Возврат Результат;
КонецФункции
Начиная с версии платформы 8.3.23, фирма «1С» кардинально изменила подход к домашней разработке, выпустив абсолютно бесплатную комьюнити-лицензию. Это полноценная лицензия, которая позволяет развернуть у себя дома настоящий клиент-серверный вариант работы.
Рассмотрим ее ключевые особенности и ограничения:
Разберем по шагам, как запустить полноценный локальный сервер по этой схеме:
Для работы сервера «1С:Предприятие» необходима СУБД. Покупать лицензии на Microsoft SQL Server для домашних тестов бессмысленно. Проанализируем, как развернуть бесплатную альтернативу.
Идеальным решением является СУБД PostgreSQL. Фирма «1С» выпускает и поддерживает собственные сборки PostgreSQL, оптимизированные под работу со структурами данных «1С:Предприятия». Они абсолютно бесплатны для скачивания и использования.
В современной разработке очень популярно использование технологии Docker. Вместо того чтобы засорять домашнюю операционную систему установкой локальных служб баз данных, мы можем запустить PostgreSQL в изолированном контейнере. Рассмотрим, как это сделать:
localhost (или IP-адрес Docker-контейнера), имя пользователя и пароль, заданные при старте контейнера.Использование Docker позволяет нам в любой момент «сбросить» состояние базы данных, развернуть новую пустую СУБД за считанные секунды или протестировать работу конфигурации на различных версиях СУБД без необходимости их переустановки в ОС.
Если вам по каким-то причинам не подходят ограничения бесплатной комьюнити-лицензии (например, требуется протестировать одновременную работу 5–10 пользователей или настроить интеграционные веб-сервисы с высокой нагрузкой), обратите внимание на льготные программы приобретения ПО для разработчиков:
Мы проанализировали основные варианты развертывания клиент-серверной среды дома. Для быстрой проверки работоспособности кода и отладки простых механизмов достаточно использовать файловый вариант с включенной имитацией задержек вызовов сервера. Это базовый гигиенический минимум для любого разработчика 1С.
Для создания полноценной среды разработки, максимально приближенной к «боевым» условиям крупных внедрений, лучшим выбором будет связка бесплатной комьюнити-лицензии «1С», локального сервера «1С» и СУБД PostgreSQL (в Docker-контейнере или установленной непосредственно в систему). Это позволит вам без финансовых затрат получить полноценный инструмент для профессионального роста и качественной разработки.