Как настроить отладку внешней обработки на клиент-сервере под Linux

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

Разработка и отладка внешних печатных форм или обработок в среде, где клиент работает на Windows, а серверная часть — на Linux, часто вызывает затруднения у разработчиков. Основная проблема заключается в том, что механизм отладки 1С требует абсолютного текстового соответствия путей к файлу в конфигураторе и в сеансе «1С:Предприятие». Проанализируем, почему не срабатывают точки останова, и разберем по шагам рабочие методики исправления этой ситуации.

Причина проблемы: Различие в путях и механизм сопоставления

Когда вы открываете файл внешней обработки в конфигураторе на своем компьютере, путь к нему выглядит по правилам Windows, например: \\ServerNaLinux\1cfiles\my_report.epf. Однако, когда сервер 1С на Linux пытается выполнить этот же файл, он обращается к нему по локальному пути Linux: /linux/1cfiles/my_report.epf.

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

Способ 1. Настройка сопоставления путей (Mapping) в конфигураторе

Это наиболее правильный и системный подход. В конфигураторе 1С предусмотрен штатный механизм «подмены» путей для отладки. Это позволяет объяснить системе, что путь на Windows-клиенте эквивалентен определенному пути на Linux-сервере.

Выполним следующие шаги для настройки:

  1. Откроем конфигуратор и перейдем в меню Сервис — Параметры.
  2. Перейдем на закладку Отладка, а затем в подраздел Произвольные серверы.
  3. Нажмем кнопку Добавить.
  4. В поле «Путь на сервере» укажем путь так, как его видит Linux-сервер: /linux/1cfiles/.
  5. В поле «Локальный путь» укажем путь, по которому файл открыт в вашем конфигураторе: \\ServerNaLinux\1cfiles\.

После такой настройки конфигуратор будет автоматически сопоставлять файлы при достижении исполняемого кода, и ваша точка останова должна сработать.

Способ 2. Использование отладочной формы (метод «Харнесс»)

Если возиться с серверными путями нет возможности или желания, применим методику «интерактивной отладки». Суть метода заключается в том, чтобы запустить обработку не через механизм БСП (Библиотеки Стандартных Подсистем) или команду «Печать» в документе, а интерактивно через Файл — Открыть. В этом случае файл будет запущен в контексте вашего клиентского сеанса, и проблем с путями не возникнет.

Проанализируем реализацию этого метода:

1. Добавим в нашу внешнюю обработку основную форму. На форме разместим реквизит СсылкаНаОбъект с типом документа, который мы хотим протестировать.

2. Создадим команду на форме и опишем вызов процедуры Печать из модуля объекта. Основная сложность здесь — подготовить параметры, которые обычно передает БСП автоматически.

Посмотрим на пример кода для вызова печати из формы обработки:


&НаКлиенте
Процедура КомандаПечать(Команда)
    // Подготовим необходимые параметры
    МассивОбъектов = Новый Массив;
    МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);
    
    КоллекцияПечатныхФорм = Новый ТаблицаЗначений; // Обычно заполняется через УправлениеПечатьюКлиент
    ОбъектыПечати = Новый СписокЗначений;
    ПараметрыВывода = Новый Структура;
    
    // Вызываем серверную процедуру печати
    ПечатьНаСервере(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры

&НаСервере
Процедура ПечатьНаСервере(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
    // Получаем экземпляр обработки и вызываем экспортную процедуру
    ОбъектОбработки = РеквизитФормыВЗначение("Объект");
    ОбъектОбработки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры

Запуская обработку таким образом, вы гарантированно попадете в точку останова внутри процедуры Печать, так как Конфигуратор и Предприятие используют один и тот же локальный файл.

Способ 3. Настройка HTTP-отладки на Linux-сервере

Если стандартная отладка через TCP работает нестабильно (например, из-за блокировок портов в сети), рекомендуется использовать протокол HTTP. В кроссплатформенных конфигурациях он работает надежнее.

Выясним причину, почему это помогает: HTTP-отладчик (процесс dbgs) выступает центральным узлом. Чтобы его включить на сервере Linux, необходимо отредактировать параметры запуска службы сервера 1С. В файле настроек (обычно это /etc/sysconfig/srv1cv83 или параметры в systemd) добавьте флаги:

-debug -http

После перезапуска службы в настройках отладки конфигуратора (Сервис — Параметры — Отладка) выберите Протокол отладки: HTTP и укажите адрес вашего сервера отладки.

Важные технические нюансы доступа в Linux

Рассмотрим ситуацию, когда даже при правильных путях код не выполняется. При работе с Linux критически важны права доступа. Процесс сервера 1С (обычно запущенный от имени пользователя usr1cv8) должен иметь права на чтение файла обработки в директории /linux/1cfiles/.

Проверьте права доступа в консоли Linux:

chmod 755 /linux/1cfiles/1.epf

chown usr1cv8:grp1cv8 /linux/1cfiles/1.epf

Если сервер не сможет прочитать файл, метод ВнешниеОбработки.Создать() вернет пустую ссылку или вызовет исключение, и отладка не начнется вовсе. Также убедитесь, что в файле /etc/hosts на сервере Linux имя сервера сопоставлено с его реальным IP-адресом, иначе процесс dbgs может не принимать соединения от вашего конфигуратора.

Заключение

Мы проанализировали основные способы запуска отладки внешних обработок в связке Windows и Linux. Самым быстрым решением является использование отладочной формы (способ 2), так как он не требует изменения настроек сервера. Однако для постоянной разработки наиболее удобным будет настройка произвольных серверов в параметрах конфигуратора (способ 1), что позволит отлаживать обработку в «боевых» условиях запуска из интерфейса документов.

← На главную