Готовим 1С-Отчетность в Linux
Здравствуйте, уважаемые читатели и писатели, а также неизменно прекрасные читательницы и писательницы Гиктаймс. Прошло уже полтора года с момента написания предыдущей статьи и можно сказать, что лед тронулся. Во всяком случае, отчетность сдать из 1С, не загружаясь в Windows, уже можно. Путь к звездам, как всегда, будет тернист и полон подводных камней, подстерегающих неосторожного путника, но при правильном подходе у Вас все получится. Итак, приступим:
Для приготовления отчетности нам понадобится:
- Конфигурация: 1С Бухгалтерия предприятия 3.0 Проф
- Технологическая платформа: 1С Бухгалтерия 8.3.11 или выше
- Криптопровайдер: КриптоПро 4.0.9929 или выше
- Операционная система: GNU\Linux (Mint, Ubuntu, Fedora, RHEL или SUSE), по вкусу
- Оператор документооборота: ООО «Такском» или ЗАО «Калуга-Астрал»
- Воля для войны с ИТС и технической поддержкой оператора документооборота
Часть первая: Готовим
коржи сервер.
Итак, если у Вас ещё нет своего кластера 1С, то самое время его поднять. Если есть — можно приступать к следующему шагу. Я не буду детально разбирать базовые вещи, они и без меня хорошо освещены на портале ИТС и других технических ресурсах, посвященных 1С бухгалтерии. Вместо этого я акцентирую внимание на мелочах, на которые следует обратить внимание и о которых обычно забывают.
Определяемся с лицензиями
В 1С есть два типа лицензий — на сервер и на клиент. Лицензии на
сервер позволяют работать в режиме клиент-сервера, а именно это нам и
нужно для работы 1С-Отчетности в Linux. Лицензии на клиент позволяют
запустить клиентское программное обеспечение (толстый, тонкий, веб) и
регламентируют одно подключение к базе (программные) или много
подключений с одного устройства (аппаратные).
Если у вас нет лицензии на сервер, то теоретически должен работать
тонкий клиент при подключении к файловой базе через Apache — но данная
конфигурация не проверялась.
Если у вас только одна информационная база — то выгоднее использовать
программные клиентские лицензии. При количестве баз больше двух,
например Торговля, Зарплата и Бухгалтерия — выгоднее аппаратная
лицензия. Конечно, при условии, что все пользователи работают в
нескольких базах одновременно.
Если у вас с каждой базой работает не более 5и человек одновременно, то
можно с чистой совестью брать лицензию на Сервер-Мини на 5 подключений.
Она и стоит не дорого, и держит 5+1 (клиент+конфигуратор) подключений
(сеансов) до каждой информационной базы, для 32х и 64х битного варианта
сервера.
Если у вас клиентская лицензия программная, и она одна (например в
случае с электронной поставкой), то имейте в виду, что программная
лицензия в клиент-серверном варианте расходуется на каждое подключение к
базе. То есть запустить конфигуратор и клиент одновременно по сети уже
не получится. Единственный выход, например, для отладки кода —
подключаться к серверу через SSH+X11 Forwarding и запускать конфигуратор
с клиентом уже "локально".
Ещё момент, и он очень важен: Аппаратная лицензия расходуется на каждого
клиента (IP адрес) а программная — на подключение (сеанс) пользователя.
Количество программных лицензий равно максимальному количеству
подключений. Программная лицензия при этом привязана к оборудованию, и
очень жестко, по этому общая рекомендация — выносить сервер
лицензирования как отдельную виртуальную машину с 2ГБ (двумя
Гибибайтами) оперативной памяти и виртуальным дисковым контроллером SATA
или IDE, обязательно указав серийные номера дисков. Сам сервер
лицензирования не требует серверной лицензии.
В качестве платформы виртуализации подойдет KVM (qemu), Citrix (Xen) или
VMWare (V-Sphere, ESXi), использовать VirtualBox или Hyper-V не
рекомендую.
Выбираем архитектуру
С лицензиями определились, теперь выделяем одну (аппаратные лицензии) или две (программные лицензии) виртуальные машины под кластер 1С. Характеристики машин примерно такие:
- Сервер лицензирования — 2ГБ памяти, и 15ГБ на жестком диске.
- Сервер 1С бухгалтерии — 14-16ГБ памяти, 15ГБ на жестком диске. Если сервер совмещает в себе функции СУБД — то ещё порядка 30-300ГБ на жестком диске.
- Сервер баз данных — в зависимости от типа сервера (PostgreSQL или Oracle, MS SQL 2017 пока не поддерживается) 4-16ГБ памяти, и 30-300 ГБ на жестком диске под хранение информационных баз. Опять же объём может быть и больше, зависит от того что и как вы храните.
PostgreSQL можно держать на той же машине что и саму 1С.
Обратите внимание, что виртуальные диски лучше держать на шине SATA или
SCSI (виртуальная машина с поддержкой UEFI загрузки, например ovmf), и
физически осуществлять хранение на lvm томе или iSCSI/FiberChannel/SAS
LUN´e. Это позволит Вам в любой момент увеличить объем диска под нужды
операционной системы или базы данных.
Если вы используете KVM, то укажите шину IDE для сервера лицензирования и VirtIO-SCSI для кластера 1С/СУБД.
После подготовки машин устанавливаем туда любимый дистрибутив (для
начинающих я рекомендую Ubuntu Server 16.04 LTS), СУБД (например
PostgreSQL), серверную часть платформы 1С предприятия на сервера
лицензирования и кластер 1С. При желании можно дополнить конфигурацию
веб-сервером Apache2.4 на кластере серверов 1С-предприятия (я использую
его совместно с nginx для аутентификации снаружи по сертификатам, но это
лирика).
Поднимаем кластер
Для установки кластера на сервере лицензирования и будущем кластере
1С нужно распаковать архив серверной части 1С. Раньше её можно было
скачать с помощью обозревателя elinks, но сейчас такой способ больше не
работает (говорит что файл не найден).
P.S. Если кто нибудь знает способ скачать дистрибутив 1С не прибегая
к корпоративному репозиторию, непосредственно из командной строки
сервера, напишите в комментариях.
Далее все примеры будут приводиться для дистрибутива Ubuntu Server 16.04
LTS и командной оболочки bash. Для RHEL-based дистрибутивов замените
dpkg на rpm.
Распаковываем архив:
mkdir 1c-dist
tar -zxf deb64.tar.gz -C 1c-dist
Устанавливаем 1С на сервере лицензирования и на кластере серверов, если вам не нужен веб сервер:
sudo dpkg -i 1c-dist/1c-enterprise83-{common,server}*.deb
Устанавливаем 1С на кластере серверов, если вам нужен веб-сервер:
sudo dpkg -i 1c-dist/1c-enterprise83-{common,server,ws}*.deb
Активируем запуск кластера серверов и запускаем его:
sudo systemctl enable srv1cv83
sudo systemctl start srv1cv83
Теперь можно настроить кластер серверов 1С предприятия. Сделать это можно с командной строки или из графической оснастки MMC на платформе Windows. В будущем я возможно сделаю свою оболочку над консольной утилитой, но пока хватает и этого.
Запускаем клиент-серверный менеджер управления кластером для управления с командной строки:
sudo /opt/1C/v8.3/x86_64/ras cluster --daemon
Получаем информацию по кластеру:
/opt/1C/v8.3/x86_64/rac localhost:1545 cluster list
Параметр localhost:1545 можно опустить если вы планируете управлять
только локальным кластером. При необходимости можно управлять любым
кластером, бал бы нужный логин и пароль администратора кластера серверов
1С предприятия. Далее предполагаем что команды выполняются локально на
каждом из серверов, например по SSH. Тем не менее никто не запрещает нам
управлять обоими серверами с одной консоли.
Самое главное в выхлопе команды для нас — GUID нашего кластера, копируем
его, в буфер обмена или сохраняем его в сессионную переменную вот так
(на обоих серверах — лицензирования и основном сервере 1С):
cluster=$(/opt/1C/v8.3/x86_64/rac localhost:1545 cluster list | awk '/cluster/ { print $3 }')
На сервере лицензирования удаляем кластер серверов:
/opt/1C/v8.3/x86_64/rac localhost:1545 cluster remove --cluster=$cluster
На основном сервере 1С добавляем новый сервер в кластер:
/opt/1C/v8.3/x86_64/rac localhost:1545 server --cluster=$cluster insert --agent-host=<адрес сервера лицензирования> --agent-port=1540 --port-range=1560:1591 --name="Сервер лицензирования" --using=normal
Получаем идентификатор нашего сервера:
/opt/1C/v8.3/x86_64/rac localhost:1545 server --cluster $cluster list
или
server=$(/opt/1C/v8.3/x86_64/rac localhost:1545 server --cluster $cluster list | awk '/server/ { print $3 }' | tail -n 1)
Удаляем все требования назначения роли:
for rule in $(/opt/1C/v8.3/x86_64/rac localhost:1545 rule --cluster=$cluster list --server=$server | awk '/rule / { print $3 }'); do /opt/1C/v8.3/x86_64/rac localhost1545 rule --cluster=$cluster remove --server=$server --rule=$rule; done
Добавляем роль сервера лицензирования:
/opt/1C/v8.3/x86_64/rac localhost:1545 rule --cluster=$cluster insert --server=$server --position=0 --object-type=LicenseService --rule-type=always
/opt/1C/v8.3/x86_64/rac localhost:1545 rule --cluster=$cluster insert --server=$server --position=1 --rule-type=never
После настройки кластера серверов и переноса сервера лицензирования на отдельный узел (возможно придется прописать их в файле hosts, если у Вас нет собственного DNS сервера) мы можем приступить к следующей части.
Часть вторая: Готовим
начинку клиент
Установка клиентской части в чем то тривиальна — устанавливаем общие
компоненты из состава сервера и толстый клиент (для рабочих мест можно
только тонкий). В качестве клиентской системы я рекомендую что-нибудь
простое и удобное для простого пользователя, все таки работать в системе
будет либо руководство, либо бухгалтер, возможно ещё кассиры и иной
персонал. В моем случае выбор падает на Linux Mint, вы можете выбрать и
другой дистрибутив, например Rosa или Astra Linux, в силу религиозных
государственных предпочтений. Нужно отметить что на текущий момент 1С не
очень хорошо дружит с Gnome 3.0 и его производными, в частности на
момент написания статьи 1С 8.3.11 при запуске роняла Cinnamon, поэтому
лучшим выбором будет Xfce, KDE или Mate среда окружения. Для
руководства, привыкших к Mac подойдет связка Mate+CairoDock.
На настоящий момент 1С-Отчетность работает только с СКЗИ КриптоПро
(захардкожено в 1С), тем не менее ЭДО можно использовать с тем же VipNet
или другим CADES совместимым СКЗИ.
Толстый и тонкий клиент:
mkdir 1c-dist
tar -zxf deb64.tar.gz -C 1c-dist
tar -zxf client-deb64.tar.gz -C 1c-dist
sudo dpkg -i 1c-dist/1c-enterprise83-{common,server,client}*.deb
Только тонкий клиент:
mkdir 1c-dist
tar -zxf thin.client-deb64.tar.gz -C 1c-dist
sudo dpkg -i 1c-dist/1c-enterprise83-thin-client*.deb
Устанавливаем КриптоПро 4.0:
mkdir cp-csp
tar -zxf linux-amd64_deb.tgz -C cp-csp
sudo apt-get install pcscd pcsc-tools opensc lsb-core lsb-release
sudo dpkg -i cp-csp/linux-amd64_deb/cprocsp-{compat-debian,curl,rdr-emv,rdr-gui-gtk,rdr-mskey,rdr-novacard,rdr-pcsc,rdr-rutoken,rsa}*.deb cp-csp/linux-amd64_deb/lsb-cprocsp-{base,ca-certs,capilite,kc1,pkcs11,rdr-64}*.deb
Проверяем и устанавливаем лицензию на КриптоПро (можно остаться на пробной версии и попробовать продукт перед приобретением, или если у вас лицензия на КриптоПро в составе сертификата — ничего не делать):
/opt/cprocsp/sbin/amd64/cpconfig -license -view
/opt/cprocsp/sbin/amd64/cpconfig -license -set <ваш лицензионный ключ>
Теперь подключаем к рабочей станции USB токен, смарт-карту, флешку с контейнером КриптоПро, производим вывод перечня контейнеров и импортируем сертификаты. При импорте с рутокена могут быть проблемы с кодировкой в наименовании контейнера, в этом случае можно воспользоваться inline вызовом iconv для преобразования кодировки, там cp1251.
/opt/cprocsp/bin/amd64/csptest -keyset -enum -verifycontext -fqcn
На выходе должны получить список контейнеров вида:
\.\Aktiv Rutoken lite 00 00\blahblahblah
\.\Aktiv Rutoken ECP\blahblahblah
\.\HDIMAGE\mycont
Если получили крякозяблики в имени контейнера пробуем вывести сведения вот так:
/opt/cprocsp/bin/amd64/csptest -keyset -enum -verifycontext -fqcn | iconv -f cp1251
В случае если контейнер создан в ОС Windows и имеет в имени кириллицу, импорт конкретного контейнера будет чуть чуть усложнен, но не невозможен.
/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont '\\.\Aktiv Rutoken lite 00 00\blahblahblah'
Или в случае cp1251
/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont "$(echo '\\.\Aktiv Rutoken lite 00 00\вашконтейнер' | iconv -t cp1251)"
Далее нам нужно получить сертификат головного УЦ выдавшего Ваш сертификат. Для этого нам нужно вывести список сертификатов установленных в хранилище личных сертификатов пользователя:
/opt/cprocsp/bin/amd64/certmgr -list -store uMy
Нам нужно значение поля "CA cert URL”, автоматически скачать сертификаты удостоверяющих центров можно так:
mkdir CAs
wget -P CAs $(/opt/cprocsp/bin/amd64/certmgr -list -store uMy | awk '/CA cert URL/ { print $5 }')for cert in $(ls -1 CAs/*.crt); do sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file $cert; done
Если нам требуется поддержка ЭЦП BrowserPlugin, он ставится в два этапа — плагин для Linux + плагин для Firefox/Chrome обозревателя.
sudo apt-get install alien
tar -zxf cades_linux_amd64.tar.gz -C cp-csp
alien -kci cp-csp/cprocsp-pki*.rpm
Проверяем работу криптопровайдера через портал КриптоПро (веб) или из командной строки. Если через веб у вас не увиделся
сертификат, значит машина не может проверить подлинность сертификата
головного УЦ выпустившего сертификат, либо сертификат не прошел проверку
подлинности. Возможно потребуется скачать и вручную установить CRL,
например если доступ в интернет с машины ограничен или на шаге ранее вы
не установили клиент curl.
Для проверки с командной строки с проверкой всей цепочки УЦ, воспользуемся следующими командами:
touch /tmp/test/opt/cprocsp/bin/amd64/cryptcp -sign -dn <e-mail адрес> -errchain /tmp/test /tmp/test.sgn
rm /tmp/test /tmp/test.sgn
Теперь, когда программное обеспечение на клиенте установлено, приступаем к завершающему этапу — настройке самой отчетности.
Часть третья: Покрываем глазурью
Завершающий этап самый важный. На этой стадии мы уже имеем
установленный и настроенный кластер серверов 1С предприятия, и
клиентскую машину с тонким и толстым клиентами 1С. Толстый клиент нам
понадобится для первоначального развертывания ИБ, активации лицензий и
обновления конфигурации ИБ (режим конфигуратора) в остальных случаях нам
хватит тонкого клиента. Сама 1С-Отчетность работает только в тонком
клиенте.
P.S. Может быть сотрудники 1С или Калуги-Астрал пояснят такое
поведение системы при работе с внешней компонентой взаимодействия с
СКЗИ.
Настраиваем подключение к базе:
Запускаем клиент 1С и добавляем новое подключение к информационной базе.
Если база данных на кластере серверов ещё не существует, создаем её из
толстого клиента, можно пустую с последующим импортом дампа средствами
конфигуратора (dt,cf файл) или СУБД. В принципе здесь все как обычно,
указываем наименование головного узла кластера серверов, имя
информационной базы и выбираем преимущественный тип запуска "Тонкий
клиент”.
Настраиваем СКЗИ в 1С:
Все настройки приводятся для интерфейса "Такси”, если вы используете
классический интерфейс 1С-Предприятия — выбирайте соответствующие пункты
главного меню программы.
Открываем "Администрирование” -> "Настройки программы”: "Обмен электронными документами”.
Из открывшейся вкладки выбираем "Электронная подпись и шифрование”: "Настройки электронной подписи и шифрования”.
Переходим на вкладку "Программы”, находим "КриптоПро CSP (ГОСТ 2001)” и
"КриптоПро CSP (ГОСТ 2012)” — для этих программ указываем путь
"/opt/cprocsp/lib/amd64/libcapi20.so”. После ввода пути программы можем
переключиться на любой пункт списка, состояние результата проверки
должно смениться с "Не указан путь к программе” на "Установлена на
компьютере”.
Добавляем сертификаты и проверяем работу СКЗИ:
Переходим на вкладку "Сертификаты”, нажимаем кнопку "Добавить” из
установленных на компьютере. Выпускать сертификат на стороне тонкого
клиента я ещё не пробовал, раньше он не работал. Выбираем сертификат из
установленных в хранилище пользователя, нажимаем кнопку "Проверить”,
вводим
пинкод пароль. Должны получить окно с прошедшей проверкой сертификата:
Добавляем оператора документооборота:
Теперь нам нужно добавить оператора документооборота, если он не
настроен на уровне Windows клиента ранее. Для этого открываем "Отчеты”
-> "1С-Отчетность”: "Регламентированные отчеты”. Из открывшейся
вкладки выбираем пункт "Настройки” и далее "Заявление на подключение к
1С-Отчетности” или "Настройки обмена с контролирующими органами”. В
случае ручной настройки обмена с КО, нажимаем на направление сдачи
отчетности, которое мы настраиваем, например ФНС. В открывшемся окне
выбираем "Документооборот в универсальном формате с использованием
встроенного механизма” и создаете новую учетную запись документооборота
(или выбираете уже существующую).
В "Назначении” учетной записи указываете направления обмена у данного
оператора, выбираете оператора ЗАО "Калуга-Астрал” или ООО "Такском”.
Почтовый адрес — указываете адрес электронной почты выданный оператором
ЭДО. Идентификатор документооборота — указываете ваш, присвоенный
оператором ЭДО и идентификатор оператора (первая часть вашего
идентификатора до дефиса).
Осуществляем автонастройку оператора:
Выбираете пользователей и нажимаете "Автонастройка”. Должен пройти обмен
данными, расшифроваться xml контейнер с настройками и обновиться
сертификаты головных и подчиненных УЦ. Данную операцию (автонастройку)
нужно провести первый раз вручную на всех линукс-клиентах.
Настраиваем сервер на автоматический обмен ЭДО и ЭДКО (опционально):
Открываем "Администрирование” -> "Настройки программы”:
"Обслуживание”. Далее "Регламентные операции”: "Регламентные и фоновые
задания”. Находим в списке "Обновление проверок контролирующими
органами”, "Получение результатов отправки отчетности” и "Обмен с
контролирующими органами”. Назначаем расписание обмена. У меня стоит
ежедневно. Запрашиваться будет только при открытии клиентской программы 1
раз в день.
Проверяем работу оператора документооборота, ЭДО и 1С-Отчетности.
К сожалению все ещё остается проблема в реализациях подсистем ЭДО и
ЭДКО. Например при получении подтверждения и отправке отчета в
контролирующие органы необходимо каждый раз вводить пин-код контейнера
для каждого факта подписания данных. Пин-код, сохраненный в настройках
ЭДО не учитывается конфигурацией 1С, возможно такое поведение исправят в
следующих версиях ПО. Одно можно сказать точно: лед тронулся.