Готовим 1С-Отчетность в Linux

Здравствуйте, уважаемые читатели и писатели, а также неизменно прекрасные читательницы и писательницы Гиктаймс. Прошло уже полтора года с момента написания предыдущей статьи и можно сказать, что лед тронулся. Во всяком случае, отчетность сдать из 1С, не загружаясь в Windows, уже можно. Путь к звездам, как всегда, будет тернист и полон подводных камней, подстерегающих неосторожного путника, но при правильном подходе у Вас все получится. Итак, приступим:


Для приготовления отчетности нам понадобится:


  1. Конфигурация: 1С Бухгалтерия предприятия 3.0 Проф
  2. Технологическая платформа: 1С Бухгалтерия 8.3.11 или выше
  3. Криптопровайдер: КриптоПро 4.0.9929 или выше
  4. Операционная система: GNU\Linux (Mint, Ubuntu, Fedora, RHEL или SUSE), по вкусу
  5. Оператор документооборота: ООО «Такском» или ЗАО «Калуга-Астрал»
  6. Воля для войны с ИТС и технической поддержкой оператора документооборота

Часть первая: Готовим коржи сервер.


Итак, если у Вас ещё нет своего кластера 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С, возможно такое поведение исправят в следующих версиях ПО. Одно можно сказать точно: лед тронулся.

Who's online

There are currently 0 users and 0 guests online.