1c. Tips and tricks

Небольшой ликбез на тему работы 1С, пригодится в первую очередь для администраторов системы.

1С регистрируется в качестве службы, запуская основной файл - агент сервера ragent.
Служба содержит дополнительные параметры для запуска:
regport - порт на котором будет висеть rmngr , по умолчанию 1541, принимает подключение от клиента 1С.
port - порт на котором будет висеть ragent, по уомлчанию 1540, к нему подключаемся консолью 1С.
range - диапазон портов на которых создаются рабочие процессы rphost, к ним также подключается клиент.
/d - директория в которой лежат конфигурационные файлы и кеш.

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

Для этого можно создать bat файл, предварительно установив нужную версию платформы, и сняв галочку “установить как службу”, что бы не затереть текущие настройки. В bat файла добавить следующий код:

@echo off
rem %1 – полный номер версии 1С:Предприятия
rem %2 – первые две цифры номеров портов. Для портов 1540,1541,1560:1591 – это цифра 15
rem %3 – каталог с данными реестра кластера
set SrvUserName=.\USR1CV8
set SrvUserPwd=user1CV8
set RangePort=%260:%291
set BasePort=%241
set CtrlPort=%240
set SrvcName="1C:Enterprise 8.3 Server Agent port 8542 %CtrlPort% %1"
set BinPath="\"C:\Program Files (x86)\1cv8\%1\bin\ragent.exe\" /srvc /agent /regport %BasePort% /port %CtrlPort% /range %RangePort% /d \"%~3\" /debug"
set Desctiption="Agent 1c.Parametrs: %1, %CtrlPort%, %BasePort%, %RangePort%"
if not exist "%~3" mkdir "%~3"
sc stop %SrvcName%
sc delete %SrvcName%
sc create %SrvcName% binPath= %BinPath% start= auto obj= %SrvUserName% password= %SrvUserPwd% displayname= %Desctiption% depend= Dnscache/Tcpip/lanmanworkstation/lanmanserver

Запускать данный файл следует так:
c:\newserv.bat 8.3.12.1790 25 “C:\Program Files\1cv8\srvinfo25”
В строке запуска должна быть версия сервера 1С, порт на котором будет висеть 1С (исходя из примера будет: 2540, 2541, 2561-2590 ) и каталог для данных сервера.
Клиентам подключаться к серверу нужно с указанием порта: 1cserver:2541

Для включения режима отладки нужно добавить в конец строки запуска службы ключ debug (в bat файле он присутствует.)
Если Вы захотите изменить параметры службы, это можно сделать через реестр, ищите в этой ветке:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)

Что делать если нужно удалить базу из консоли 1С, но Вы не знаете к ней пароль? Нужно иметь доступ к MS SQL (или postgresql) серверу. Отмонтируем базу на сервере, после этого можно будет удалить базу из кластера 1С, выбрав вариант не изменять базу данных при удалении.

В такой же ситуации иногда нужно поменять параметры настройки базы,. например отключить регламентные задания.
Для этого ищем в директории конфигурационных файлов 1С файл с именем 1CV8Clst, находим похожую строку для базы, и меняем единичку на нолик.
{0,00010101000000,00010101000000,"","",""},0,1,"",0,"","",11338260}.

Также в папке с конфигурацией хранится журнал 1С - 1Cv8Log и кеш полнотекстового поиска 1Cv8FTxt.
Лог иногда имеет смысл перевести в старый формат lgf, так в новом формате lgd файлы могут занимать очень много места и тормозить сервер.

Не забываем, что сервер перед подобными действиями нужно останавливать, все тщательно проверять, и иметь бекап.

Комплексно почистить кеш 1С, заменить файлы lgd на lgf и очистить кеш полнотекстового поиска можно следующим скриптом powershell:

Get-ChildItem -Path "C:\Program Files\1cv8\srvinfo" -Recurse -Include 1Cv8log | Get-ChildItem | Where {$_.extension -like ".lgf"} | Remove-Item

Get-ChildItem -Path "C:\Program Files\1cv8\srvinfo" -Recurse -Include 1Cv8log | Get-ChildItem | Where {$_.extension -like ".lgp"} | Remove-Item

Get-ChildItem -Path "C:\Program Files\1cv8\srvinfo" -Recurse -Include 1Cv8log | Get-ChildItem | Where {$_.extension -like ".lgd"} | Remove-Item

Get-ChildItem -Path "C:\Program Files\1cv8\srvinfo" -Recurse -Include 1Cv8log | Get-ChildItem | Where {$_.extension -like ".lgd-journal"} | Remove-Item

Get-ChildItem -Path "C:\Program Files\1cv8\srvinfo" -Recurse -Include 1Cv8FTxt | Get-ChildItem | remove-item -Confirm:$false

$1cv8log = Get-ChildItem -Path "C:\Program Files\1cv8\srvinfo" -Recurse -Include 1Cv8log

New-Item -Path $1cv8log -Name "1Cv8.lgf" -ItemType "file"

Вместо пути “C:\Program Files\1cv8\srvinfo” укажите свой путь к нужной папке сервера.

Для команд разработчиков целесообразно использовать сервер хранилища 1С. Прочитать про его настройку, в TCP или HTTP варианте можно здесь:

Лучший вариант использования это совместить на одном компьютере сервер SQL и 1С, в этом случае мы снизим накладные расходы, за счет использования механизма shared memory.