При эксплуатации крупных систем 1С часто возникает ситуация, когда множество внешних или встроенных обработок обращаются к другим базам данных. Проблема обнаруживается в момент модернизации или переноса серверов: если адрес сервера был «жестко» прописан в коде каждой обработки, то после смены имени или IP-адреса сервера все эти инструменты перестают работать. В этой статье мы проанализируем ситуацию и разберем несколько эффективных способов решения этой задачи — от быстрых административных правок до системной переработки архитектуры.
Если в коде обработок адрес сервера указан в виде текстового имени (например, Server1C-Old), самым быстрым решением будет подмена сетевого адреса на уровне операционной системы. Это позволит не менять код самих обработок вообще. Рассмотрим подробнее два варианта:
Server-New, а старый Server-Old, можно сделать так, чтобы обращение к Server-Old перенаправлялось на Server-New. Это идеальный вариант для корпоративной сети.hosts (находится по адресу C:\Windows\System32\drivers\etc\hosts). Достаточно прописать соответствие IP-адреса нового сервера старому имени.Выясним причину, почему это удобно: данный подход избавляет от необходимости открывать конфигуратор и пересохранять десятки файлов. Однако помните, что файл hosts имеет приоритет над DNS, и при следующей смене оборудования об этой «заглушке» можно легко забыть, что приведет к труднодиагностируемым ошибкам подключения.
Если мы хотим решить проблему «по-взрослому», чтобы в будущем смена сервера занимала секунды, нам придется один раз переделать код обработок. Вместо прямого указания строки соединения, разберем по шагам, как внедрить гибкую настройку:
Использование констант: Создадим в основной конфигурации константу (например, АдресСервераДляИнтеграций). В обработках заменим жесткий код на получение значения этой константы. Посмотрим на пример того, как может выглядеть код подключения:
// Вместо Сервер = "192.168.1.100";
АдресСервера = Константы.АдресСервераДляИнтеграций.Получить();
ПараметрыСоединения = "Srvr=""" + АдресСервера + """;Ref=""WorkBase"";";
// Далее используем ПараметрыСоединения для V83.ComConnector
Внешний файл настроек: Если обработки используются в разных базах, где нет общей константы, проанализируем ситуацию с выносом настроек в JSON-файл на сетевом ресурсе. Создадим файл settings.json в общей папке:
{
"ServerName": "1C-Main-Server",
"BaseName": "Accounting"
}
В коде 1С добавим чтение этого файла:
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("\\NetworkShare\Config\settings.json");
Настройки = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Сервер = Настройки.ServerName;
База = Настройки.BaseName;
Теперь при любом переезде сервера нам достаточно будет изменить одну строку в текстовом файле, и все обработки мгновенно «подхватят» новый адрес.
Когда обработок очень много и они хранятся в виде файлов .epf, ручное редактирование каждой из них через конфигуратор — слишком трудозатратный процесс. Разберем способ автоматизации с использованием утилиты OneScript или встроенных средств платформы.
Для этого процесса выполним следующие действия:
.epf в текстовый формат (XML) с помощью штатной функции платформы РазобратьВнешнююОбработку() или сторонних утилит типа v8unpack..epf.Посмотрим на пример простого скрипта PowerShell для поиска и замены в текстовых файлах выгрузки:
Get-ChildItem -Filter *.txt -Recurse | ForEach-Object {
(Get-Content $_.FullName) | ForEach-Object {
$_ -replace 'OldServerName', 'NewServerName'
} | Set-Content $_.FullName
}
Если вы имеете доступ к изменению основной конфигурации, лучшим решением будет создание Общего модуля (например, ИнтеграцияКлиентСервер) с включенным признаком «Повторное использование значений». Рассмотрим подробнее этот архитектурный подход.
В общем модуле создадим функцию:
Функция ПолучитьСтрокуСоединенияСБухгалтерией() Экспорт
// Здесь может быть логика: чтение константы, файла или реестра
Возврат "Srvr=""ActualServer"";Ref=""AccountingBase"";";
КонецФункции
Теперь во всех внешних обработках мы будем вызывать только эту функцию. Это гарантирует единую точку входа для всех интеграционных процессов. Даже если завтра сервер снова переедет, правки вносятся в одном единственном месте — в общем модуле конфигурации.
При смене сервера 1С часто возникают сопутствующие проблемы, которые стоит проанализировать заранее:
COMConnector, убедитесь, что версия платформы на новом сервере совпадает с той, что установлена на клиентских местах, иначе возникнет ошибка несоответствия версий.hosts, обязательно выполните команду ipconfig /flushdns в командной строке, чтобы очистить кэш имен в Windows.USR1CV8), есть права на чтение из выбранной сетевой папки.Подведем итог: для быстрого решения «здесь и сейчас» лучше всего подходят манипуляции с DNS или файлом hosts. Однако для обеспечения стабильности системы в будущем мы рекомендуем потратить время на рефакторинг и вынос параметров подключения в константы или централизованные общие модули.