Разработка и отладка внешних печатных форм или обработок в среде, где клиент работает на Windows, а серверная часть — на Linux, часто вызывает затруднения у разработчиков. Основная проблема заключается в том, что механизм отладки 1С требует абсолютного текстового соответствия путей к файлу в конфигураторе и в сеансе «1С:Предприятие». Проанализируем, почему не срабатывают точки останова, и разберем по шагам рабочие методики исправления этой ситуации.
Когда вы открываете файл внешней обработки в конфигураторе на своем компьютере, путь к нему выглядит по правилам Windows, например: \\ServerNaLinux\1cfiles\my_report.epf. Однако, когда сервер 1С на Linux пытается выполнить этот же файл, он обращается к нему по локальному пути Linux: /linux/1cfiles/my_report.epf.
Для отладчика 1С это два совершенно разных файла. Даже если содержимое идентично до последнего байта, отладчик не сможет сопоставить исполняемый код на сервере с открытым модулем в конфигураторе из-за несовпадения строк пути. Рассмотрим подробнее, как преодолеть этот барьер несколькими способами.
Это наиболее правильный и системный подход. В конфигураторе 1С предусмотрен штатный механизм «подмены» путей для отладки. Это позволяет объяснить системе, что путь на Windows-клиенте эквивалентен определенному пути на Linux-сервере.
Выполним следующие шаги для настройки:
/linux/1cfiles/.\\ServerNaLinux\1cfiles\.После такой настройки конфигуратор будет автоматически сопоставлять файлы при достижении исполняемого кода, и ваша точка останова должна сработать.
Если возиться с серверными путями нет возможности или желания, применим методику «интерактивной отладки». Суть метода заключается в том, чтобы запустить обработку не через механизм БСП (Библиотеки Стандартных Подсистем) или команду «Печать» в документе, а интерактивно через Файл — Открыть. В этом случае файл будет запущен в контексте вашего клиентского сеанса, и проблем с путями не возникнет.
Проанализируем реализацию этого метода:
1. Добавим в нашу внешнюю обработку основную форму. На форме разместим реквизит СсылкаНаОбъект с типом документа, который мы хотим протестировать.
2. Создадим команду на форме и опишем вызов процедуры Печать из модуля объекта. Основная сложность здесь — подготовить параметры, которые обычно передает БСП автоматически.
Посмотрим на пример кода для вызова печати из формы обработки:
&НаКлиенте
Процедура КомандаПечать(Команда)
// Подготовим необходимые параметры
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);
КоллекцияПечатныхФорм = Новый ТаблицаЗначений; // Обычно заполняется через УправлениеПечатьюКлиент
ОбъектыПечати = Новый СписокЗначений;
ПараметрыВывода = Новый Структура;
// Вызываем серверную процедуру печати
ПечатьНаСервере(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
&НаСервере
Процедура ПечатьНаСервере(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
// Получаем экземпляр обработки и вызываем экспортную процедуру
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
ОбъектОбработки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
Запуская обработку таким образом, вы гарантированно попадете в точку останова внутри процедуры Печать, так как Конфигуратор и Предприятие используют один и тот же локальный файл.
Если стандартная отладка через TCP работает нестабильно (например, из-за блокировок портов в сети), рекомендуется использовать протокол HTTP. В кроссплатформенных конфигурациях он работает надежнее.
Выясним причину, почему это помогает: HTTP-отладчик (процесс dbgs) выступает центральным узлом. Чтобы его включить на сервере Linux, необходимо отредактировать параметры запуска службы сервера 1С. В файле настроек (обычно это /etc/sysconfig/srv1cv83 или параметры в systemd) добавьте флаги:
-debug -http
После перезапуска службы в настройках отладки конфигуратора (Сервис — Параметры — Отладка) выберите Протокол отладки: HTTP и укажите адрес вашего сервера отладки.
Рассмотрим ситуацию, когда даже при правильных путях код не выполняется. При работе с 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), что позволит отлаживать обработку в «боевых» условиях запуска из интерфейса документов.