При создании небольших конфигураций 1С или выполнении учебных проектов часто возникает вопрос: какую архитектуру выбрать для работы 3–5 пользователей? Стоит ли сразу настраивать полноценный сервер приложения или можно обойтись файловым режимом? Разберем ключевые варианты построения системы, особенности работы тонкого клиента и правила разработки под управляемые формы.
Рассмотрим современные стандарты разработки в экосистеме 1С. На сегодняшний день базовым стандартом для создания конфигураций любой сложности является использование Управляемых форм (УФ) и библиотеки стандартных подсистем (БСП).
Прямое взаимодействие приложения с СУБД в обход логики 1С для ведения учета не применяется. Платформа 1С:Предприятие обеспечивает целостность данных и проведение документов исключительно через свои механизмы. Единственным штатным средством работы со сторонними базами SQL без сервера 1С является объект Внешние источники данных, предназначенный для интеграции со смежными системами, но не для построения основной базы учетных решений.
Разберем основные архитектурные варианты организации работы пользователей тонкого клиента при небольшом числе рабочих мест.
Это оптимальный способ работы с файловой базой без покупки дорогостоящих серверных лицензий. Тонкий клиент и веб-клиент подключаются к файловой базе по протоколу HTTP/HTTPS.
Преимущества такого подхода:
– Безопасность данных: отсутствует прямой сетевой доступ пользователей к файлу 1CD через общедоступные сетевые папки (SMB), что защищает базу от повреждения при неожиданном разрыве связи.
– Эмуляция работы сервера: клиентские вызовы преобразуются в HTTP-запросы, а выполнение контекста &НаСервере максимально приближается к поведению полноценного кластера серверов 1С.
В современной платформе доступен компонент ibserver (автономный сервер). Он позволяет запускать и публиковать файловую базу по протоколам HTTP/HTTPS напрямую, не требуя развертывания сторонних веб-серверов IIS или Apache.
Если требуется полноценная работа клиент-серверного режима (например, для интенсивных фоновых задач или СУБД PostgreSQL/MS SQL Server), развертывают специализированную лицензию «Сервер 1С:Предприятия МИНИ».
Особенности этого варианта:
– Полноценный 64-разрядный кластер серверов 1С.
– Аппаратное ограничение: не более 5 пользовательских сеансов и не более 1 сеанса в режиме Конфигуратор.
– Невозможность объединения нескольких мини-лицензий на одном сервере для увеличения количества подключений.
Проанализируем частую проблему: при разработке базы в файловом режиме код, написанный разработчиком, может корректно выполняться локально, но при переносе на полноценный кластер серверов 1С вызывать критические ошибки.
Выясним причину этого явления:
1. В файловом режиме клиентский и серверный контексты выполняются в рамках одного процесса на компьютере пользователя. Поэтому обращение к локальным путям (например, C:\temp\file.txt) в серверных функциях сработает. На кластере серверов 1С код выдаст ошибку, так как файл будет искаться на физическом сервере от имени службы 1С.
2. В клиент-серверном режиме строго проверяется сериализация объектов. Такие типы, как ТаблицаЗначений, ДеревоЗначений или COMОбъект, нельзя напрямую передавать между клиентом (&НаКлиенте) и сервером (&НаСервере). В файловом режиме система может прощать такие ошибки.
Чтобы избежать ошибок выполнения кода при смене режима работы базы, необходимо настроить синтаксический контроль модулей под все возможные контексты исполнения.
Выполним следующие шаги в Конфигураторе:
– Сервер
– Тонкий клиент
– Веб-клиент
– Внешнее соединение
– Сервер 1С:Предприятия
Пример правильной передачи данных с сервера на клиент без использования несериализуемых типов:
&НаКлиенте
Процедура ЗагрузитьДанныеНаКлиенте()
// Создаем массив струтур для передачи данных
МассивРезультатов = ПолучитьДанныеССервера();
Для Каждого СтрИзМассива Из МассивРезультатов Цикл
// Обработка полученных данных на клиенте
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьДанныеССервера()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Ссылка КАК Ссылка,
| Товары.Наименование КАК Наименование
|ИЗ
| Справочник.Товары КАК Товары";
ТЗ = Запрос.Выполнить().Выгрузить();
// Преобразуем ТаблицуЗначений в Массив Структур для безопасной передачи на клиент
Результат = Новый Массив;
Для Каждого Стр Из ТЗ Цикл
СтруктураСтр = Новый Структура("Ссылка, Наименование", Стр.Ссылка, Стр.Наименование);
Результат.Добавить(СтруктураСтр);
КонецЦикла;
Возврат Результат;
КонецФункции
Подводя итоги: для малых проектов на 3–5 пользователей лучшим практическим решением является разработка на управляемых формах с публикацией файловой базы через веб-сервер и обязательным включением полных проверок синтаксиса модулей.