Как настроить автоматический выбор 32-битной или 64-битной версии платформы 1С при запуске?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе со средними и крупными информационными базами 1С:Предприятие часто возникает дилемма: какую разрядность клиентского приложения использовать? С одной стороны, 64-разрядный клиент (x86_64) жизненно необходим разработчикам, аналитикам и бухгалтерам для выполнения тяжелых операций (например, построение сложных отчетов или групповая обработка данных), так как он устраняет критическую ошибку нехватки оперативной памяти. С другой стороны, для обычных пользователей часто предпочтительнее использовать 32-разрядный клиент (x86), так как он менее требователен к ресурсам локальных компьютеров и обеспечивает стабильную совместимость со старым торговым оборудованием или внешними компонентами (DLL, ActiveX), которые не имеют 64-битных версий.

В этой статье мы подробно разберем, как организовать автоматический выбор разрядности платформы при старте системы. Мы проанализируем как административные методы настройки, так и продвинутый программный перезапуск системы на лету в зависимости от прав и ролей пользователя.

Способ 1. Использование параметров командной строки (/AppArch)

Начнем с самого простого и штатного механизма, который разработчики платформы добавили начиная с версии 8.3.12. Для управления разрядностью запускаемого клиента используется специальный параметр командной строки — /AppArch. Этот ключ обрабатывается интерактивной программой запуска (стартером) 1cestart.exe или 1cv8s.exe.

Рассмотрим подробнее значения, которые может принимать параметр /AppArch:

  1. x86 — принудительный запуск 32-разрядного тонкого или толстого клиента.
  2. x86_64 — принудительный запуск 64-разрядного клиента.
  3. x86_prt (Приоритет 32) — система запустит 32-разрядную версию платформы, если на компьютере установлены обе версии.
  4. x86_64_prt (Приоритет 64) — система отдаст приоритет 64-разрядной версии платформы при наличии обеих версий на рабочей станции.
  5. Auto — автоматический выбор платформы (по умолчанию в ОС Windows система выбирает 32-битный клиент).

Вы можете прописать этот ключ непосредственно в свойствах ярлыка на рабочем столе пользователя. Для этого в поле "Объект" добавьте параметры запуска. Пример строки запуска выглядит следующим образом:

"C:\Program Files (x86)\1cv8\common\1cestart.exe" /AppArch x86_64

Таким образом, для разных категорий пользователей на рабочих столах можно разместить разные ярлыки, которые будут запускать платформу соответствующей разрядности. Для безошибочного составления нужной комбинации ключей запуска можно использовать конструктор параметров командной строки платформы 1С.

Способ 2. Настройка файлов описания баз (.v8i)

Прописывать индивидуальные параметры запуска в ярлыках для сотен пользователей — задача трудоемкая. Более изящным решением является централизованная настройка через файлы описания информационных баз с расширением .v8i (фактически это списки баз, которые отображаются в окне запуска 1С).

Выясним, как это работает. Каждый файл .v8i представляет собой текстовый документ, содержащий параметры подключения к базам. Мы можем напрямую указать требуемую разрядность для конкретной информационной базы с помощью директивы AppArch. Посмотрим на пример содержимого такого файла:


[Управление предприятием]
Connect=Srvr="server-1c";Ref="erp_prod";
ID=e5b2a472-3c1d-4f11-89a1-cb9e8b3e8e12
OrderInList=16384
Folder=/
AppArch=x86_64_prt
ClientConnectionSpeed=Normal
App=Auto
Version=8.3

Обратите внимание на строчку AppArch=x86_64_prt. Если прописать её в общем списке баз, то абсолютно все пользователи при выборе этой базы будут автоматически запускать её в 64-разрядном режиме (при условии, что на их компьютерах установлена 64-битная версия платформы 1С).

Для разграничения доступа администраторы могут создать два разных файла конфигурации списков баз (например, user_bases.v8i с параметром AppArch=x86 и admin_bases.v8i с параметром AppArch=x86_64). Затем с помощью групповых политик (GPO) Active Directory нужный файл копируется в профиль соответствующего пользователя при входе в операционную систему. В качестве альтернативы для централизованной доставки списков баз можно использовать веб-сервис WebCommonInfoBases для динамического управления базами пользователей.

Способ 3. Программный перезапуск 1С в зависимости от прав пользователя

А теперь проанализируем самый интересный сценарий: можно ли определить разрядность динамически непосредственно в кодовой базе 1С при запуске системы? По логике, программный код выполняется уже внутри запущенного сеанса, поэтому изменить разрядность "на лету" в рамках текущего процесса невозможно. Однако мы можем использовать программный перезапуск!

Для реализации этого сценария мы задействуем предопределенную процедуру ПередНачаломРаботыСистемы в модуле управляемого приложения. Идея заключается в следующем: при запуске система проверяет роль пользователя. Если это администратор, а текущий клиент запущен в 32-битном режиме, то программа завершает текущую работу и автоматически инициирует новый запуск уже с ключом /AppArch x86_64.

Основная сложность данного подхода заключается в том, что при обычном перезапуске пользователю придется повторно вводить свой логин и пароль. Чтобы решить эту проблему бесшовно, мы можем использовать встроенную аутентификацию операционной системы (доменную авторизацию AD). В таком случае повторный вход происходит моментально и незаметно для человека. Если же используется обычная авторизация 1С, мы можем передать имя пользователя в параметрах командной строки с помощью ключа /N.

Давайте разберем по шагам готовый пример кода для модуля управляемого приложения:


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    // Шаг 1. Предотвращаем бесконечную рекурсию перезапуска.
    // Если в параметрах запуска уже есть наш маркер, повторную проверку не выполняем.
    Если СтрНайти(ПараметрЗапуска, "СменаРазрядностиВыполнена") > 0 Тогда
        Возврат;
    КонецЕсли;
    
    // Шаг 2. Получаем информацию о текущей запущенной платформе
    СистемнаяИнфо = Новый СистемнаяИнформация;
    ТекущаяРазрядность = СистемнаяИнфо.ТипПлатформы;
    
    // Шаг 3. Определяем, есть ли у пользователя административные права
    // Используем проверку доступности роли "Администратор"
    ЭтоАдминистратор = РольДоступна("Администратор"); 
    
    // Шаг 4. Анализируем соответствие прав и разрядности платформы
    Если ЭтоАдминистратор Тогда
        
        // Администраторам принудительно запускаем 64-битный клиент
        Если ТекущаяРазрядность <> ТипПлатформы.Windows_x86_64 Тогда
            
            ПараметрыЗапускаНовые = "/AppArch x86_64 /C СменаРазрядностиВыполнена";
            
            // Если не используется Windows-аутентификация, передаем имя пользователя для входа
            ИмяТекущегоПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
            ПараметрыЗапускаНовые = ПараметрыЗапускаНовые + " /N """ + ИмяТекущегоПользователя + """";
            
            // Завершаем работу и запускаем новый сеанс через стартер
            ЗавершитьРаботуСистемы(Ложь, Истина, ПараметрыЗапускаНовые);
            Отказ = Истина; // Отменяем текущий запуск
            
        КонецЕсли;
        
    Иначе
        
        // Обычным пользователям принудительно запускаем 32-битный клиент
        Если ТекущаяРазрядность <> ТипПлатформы.Windows_x86 Тогда
            
            ПараметрыЗапускаНовые = "/AppArch x86 /C СменаРазрядностиВыполнена";
            
            ИмяТекущегоПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
            ПараметрыЗапускаНовые = ПараметрыЗапускаНовые + " /N """ + ИмяТекущегоПользователя + """";
            
            ЗавершитьРаботуСистемы(Ложь, Истина, ПараметрыЗапускаНовые);
            Отказ = Истина; // Отменяем текущий запуск
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Критически важный нюанс: метод ЗавершитьРаботуСистемы с флагом перезапуска (второй параметр установлен в значение Истина) корректно отработает только в том случае, если изначально сеанс 1С был запущен через программу просмотра списка баз (стартер) 1cestart.exe. Если пользователь запустил исполняемый файл конкретного релиза напрямую (например, 1cv8c.exe из папки bin), то управление не сможет вернуться к стартеру, и ключ /AppArch будет проигнорирован.

Способ 4. Глобальная настройка через конфигурационные файлы (1cestart.cfg)

Если перед вами стоит задача централизованно задать разрядность по умолчанию для всех баз на конкретных рабочих станциях без изменения кода конфигурации, то лучшим решением будет использование файла конфигурации программы запуска 1cestart.cfg. Обычно этот файл располагается по пути %APPDATA%\1C\1CEStart\1cestart.cfg (индивидуальный для пользователя) или в каталоге общего доступа %ProgramFiles(x86)%\1cv8\common\1cestart.cfg.

Для установки приоритета разрядности по умолчанию используется параметр DefaultVersion. Рассмотрим подробнее синтаксис его заполнения:

DefaultVersion=8.3;x86_64_prt

В этой строке мы указываем, что для всех баз, использующих версию платформы 8.3, по умолчанию необходимо отдавать приоритет 64-разрядному клиенту 1С. Системные администраторы могут автоматизировать распространение этого файла конфигурации на компьютеры разработчиков и аналитиков.

Резюме и рекомендации

Мы рассмотрели четыре отличных инструмента для управления разрядностью платформы 1С при запуске. Подведем итог, какой метод и в каких ситуациях будет наиболее эффективным:

← На главную