г. Санкт-Петербург
Войти
Логин
Пароль
Зарегистрироваться
После регистрации на сайте вам будет доступно отслеживание состояния заказов, личный кабинет и другие новые возможности
Заказать звонок
Логин
Пароль
Зарегистрироваться
После регистрации на сайте вам будет доступно отслеживание состояния заказов, личный кабинет и другие новые возможности
Логин
Пароль
Зарегистрироваться
После регистрации на сайте вам будет доступно отслеживание состояния заказов, личный кабинет и другие новые возможности


1
2
3
4
5
6
7
8
9
10
12
Поле не найдено ВремЗаказы.Объект, При попытке загрузить заказы в 1С
 
Управление торговлей, редакция 11 (11.4.13.57) ([URL=http://v8.1c.ru/trade/]http://v8.1c.ru/trade/[/URL])

"1С-Битрикс: Управление сайтом 17.0.0"
Sale 17.0.4

Настройки с нуля. При обмене документами выскакивает ошибка:
[CODE]{ОбщийМодуль.Б_ОбменССайтомСерверВыгрузкаДанных.Модуль(737)}: Ошибка при вызове метода контекста (Выполнить)
ТаблицаОбъектовОбменаВыгрузки = Запрос.Выполнить().Выгрузить();
по причине:
{(2, 13)}: Поле не найдено "ВремЗаказы.Объект"
ВремЗаказы.<>Объект,
[/CODE]
Такое происходит если не включена опция Настройка НСИ и Разделов-Продажи-Оптовые продажи-Заказы клиентов.
Либо опцию включили после настройки узлов обмена.
Необходимо пересоздать узел.
Изменено: pilot - 20.09.2021 23:07:20
Пересоздание чистого профиля для пользователя windows
 

Узнаем SID
wmic useraccount where name="Василий" get name,sid

1. Залогинится под другим пользователем с правами админа
2. Переименовать папку проблемного профиля.
3. Зайти в реестр по пути "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
4. Найти раздел проблемного профиля по SID юзера (например S-1-5-21-278305470-279209103-ХХХХХХХХХ-ХХХХ) и переименовать раздел например в S-1-5-21-278305470-279209103-ХХХХХХХХХ-ХХХХ.BROKEN

5. Залогиниться под пользователем с проблемным профилем, дождаться пока завершится создание папки с новым профилем.
6. Перезагрузиться и зайти под пользователем в шаге 1
7. Из переименованной папки проблемного профиля скопировать (НЕ ПЕРЕМЕСТИТЬ) всё в папку нового профиля созданного в шаге 5 (с заменой файлов и слиянием папок).
8. Попробовать зайти под проблемным юзером.

Пункт (7) можно не делать если нужно создать просто чистый профиль.

Интеграция кассы Атол 1С УТ10.3 и сайта на Битрикс Управление сайтом, Для соответствия закону интернет магазин должен выписывать чеки в момент совершения покупки на сайте, для этого предлагается интеграция с кассой атол
 
Для интеграции сервиса КОМТЕТ сначала регистрируемся на сайте [URL=https://kassa.komtet.ru/]https://kassa.komtet.ru[/URL] Далее настраиваем магазин (2.PNG)


добавляем очередь и присваиваем ей магазин
(3.PNG)


настраиваем кассу (4.PNG).

После этого заходим в личный кабинет Сбербанк эквайринг (5.PNG)

и настраиваем согласно инструкции "СберБанк Настройка фискализации.pdf".

Теперь нужно настроить приложение КОМТЕТ Касса для Windows согласно инструкции "win_instruction.pdf".

Нажимаем добавить кассу выбираем нужную модель и порт по которому соединяется касса. Вверху пишем название кассы, ID кассы и Секретный ключ кассы копируем из личного кабинета КОМТЕТ кассы.


Так как 1С и Комтет занимают порт и не могут работать одновременно на одном com порту для взаимодействия приложения КОМТЕТ Касса с 1С УТ 11 версией можно воспользоваться настройкой указанной в инструкции "1c_instruction.pdf",

Но так как мы используем 10.3 редакцию УТ, то был выбран другой способ.
На компьютер была установлена лицензионная программа VSPE. Далее все было настроено согласно инструкции

[URL=http://proftech19.ru/2017/11/%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%81%D1%81%D1%8B-%D0%BA-1%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F-%D0%B2-%D1%82%D0%B5/]http://proftech19.ru/2017/11/%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%81%D1%81%D1%8B-%D0%BA-1%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F-%D0%B2-%D1%82%D0%B5/[/URL]

В VSPE нужный COM порт разветвляется через splitter.
COM 14 настроен как источник на COM 10
COM 10 настроен как источник для COM 18 и COM 19

Далее эти COM порты пробрасываются по tcp-rdp сессии на терминал стандартными средствами
COM 18 подан на 1С УТ
COM 19 подан на Комтет кассу.
Обработка для загрузки данных с порталов Vimos в 1С УТ КАА, Готовая обработка для загрузки данных в систему 1С на базе УТ 10.3 для загрузки данных с портала x-art порталов ВИмос
 
Заказы автоматически (роботом) подгружаются в нашу (1СУТ) систему и далее менеджером помечаются как обработанные для обратной Выгрузки в систему x-art. Наверное как и у всех. Обработка производит подключение и сбор текущих заказов на портале Вимоса и загрузку в 1С УТ не управляемые формы. (в целом переделка под управляемые формы не проблема) Все заказы получают код по которому происходит идентификация заказа inkey (он уникален) пример строчки разбираемой (коды изменены естественно) [CODE][ { "ordernum": "Z/vimos00/21/ХХХХХХХХ", "inkey": "59112143", "ttype": "91", "insost": "1", "inwcode": "б", "wname": "Б Песочное стр", "direction": "Курортный филиал", "dcode": "001", "dname": "ХХХХХХХХХ АО", "indate": "13/08/21", "innumber": "325500", "innsum": "15085.00", "rpos": "1", "gcode": "26196367", "gexcode": "2022000035866,3833,3928", "gdealcode": "ЛН000109772", "gexname": "Диск стальной арматура М6", "amount": "10.000", "price": "1508.50", "sumpos": "15015.00" }, [/CODE]поскольку все строки идут подрят по параметру "rpos": "1" мы можем судить о порядке строки в документе. Обработка готова к использованию с минимальными дополнениями для автоматизации и указания пароля доступа Обработка работает с данными формата xml / json
Изменено: pilot - 04.09.2021 10:18:43
Проблема совпадающих ID номенклатуры, когда товар не отображается на сайте после обмена данными, Часто при обмене сайта и 1С некоторые позиции НЕ появляются на сайте
 

Для выгрузки из 1С складских остатков товара, в его карточке (в 1С), на закладке Реквизиты в разделе Дополнительные реквизиты, устанавливается выбранный вам признак выгрузки товара на сайт в нашем случае это свойство в карточке товара "выгружать на сайт"

В нашем случае значение Булево

Запуск обмена данными осуществляется в 1С в разделе 1С-Битрикс →

[B]Настройки обмена с интернет магазином[/B], где двойным кликом По узлу обмена

откроется окно настроек обмена, в котором необходимо нажать кнопку Выполнить обмен данными.

Проблема совпадающих ID номенклатуры, когда товар не отображается на сайте после обмена данными

Если в карточке товара в 1С, на закладке Реквизиты в разделе Дополнительные реквизиты, установлена галка Выгружать на САЙТ,
но после обмена данными с сайтом, товар на сайте не появляется и/или у какого то товара на сайте перезаписывается наименование,
то следует проверить уникальность ID этого товара в 1С:[LIST=1]
[*]В 1С переходим в раздел 1С-Битрикс → Идентификаторы объектов из интернет магазинов;
[*]Выбираем тип Объекта Справочники и Объект 1С Номенклатура;
[*]Идём на сайт в раздел панели администрирования Магазин → Каталоги товаров → Каталог из 1С → Товары и разделы;
[*]Устанавливаем в списке товаров сортировку по возрастанию ID;
[*]Переходим на последнюю страницу списка товаров и смотрим самый последний (большой) номер ID;
[*]Возвращаемся в 1С, находим нужный товар и меняем Код битрикс двойным нажатием по нему ЛКМ, на номер ID (из предыдущего пункта) увеличенный на единицу;
[*]Нажимаем на кнопку Записать изменения;
[*]Выполняем обмен данными между 1С и сайтом.
[/LIST]

К данной инструкции прикреплена картинка с разделом 1С, где осуществляется редактирование кодов битрикс, с ситуацией дублирования кодов у двух товаров (чего не должно быть).

P.S.: В базе сайта Битрикс, поле ID товара является числовым, уникальным и имеет автоматическое приращение. Поэтому при выполнении обмена данными между 1С и сайтом, после изменения кода битрикс в 1С на случайный, на сайте у товара будет ID, отличающийся от кода битрикс в 1С.

Также, поле ID на сайте может содержать только цифры. Именно поэтому, прежде чем изменять код Битрикс в 1С, надо посмотреть значение последнего используемого ID на сайте.

Изменено: pilot - 07.08.2021 18:14:42
Обработка для проверки QR кодов по поставщикам реализациям и возвратам
 

Задача разбивается на следующие части:

[LIST] [*]Получение QR-кодов из заданных документов. [*]Изучение АПИ Честного Знака. [*]Получение информации о QR-кодах с использованием АПИ Честного Знака. [/LIST]

Для работы с Честным Знаком необходимо установить Крипто-провайдера (КриптоПро), получить в Честном Знаке сертификат, и импортировать его на предполагаемом рабочем месте, где будет запускаться обработка (здесь этот процесс не описывается).

Обработка устроена по пошаговому принципу:

- Авторизация на сайте Честного знака. - Выбор документа, о QR-кодах которого необходимо получить информацию (сейчас используются документы 4-х типов - ВозвратТоваровПоставщику, ВозвратТоваровОтПокупателя, ПоступлениеТоваров, РеализациТоваровИУслуг).

- Непосредственно получение информации о владельце QR-кода и его статусе (выбыл, в обороте, и т.д.)

При выполнении длительных операций запросы выполняются пакетным способом, по несколько позиций за раз.

(напишите оператору для получения обработки)

Отключение DFSS системы ограничения ресурсов на 2008r2 и выше серверах
 
[TABLE][TR][TD]2 3 4 5 6 7 8 9 10 11 [/TD][TD]0. запускаем powershell от админа 1. выполняем команду: gwmi win32_terminalservicesetting -N "root\cimv2\terminalservices").enabledfss 2. Dynamic Fair Share Scheduling - позволяет балансировать и распределять ресурсы CPU между пользователями Если в выводе 0 значит балансировка выключена. Скорее всего дальнейшие действия не требуются. 3. На всякий случай проверяем ветки реестра. Запускаем regedit. 4. Ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System параметр EnableCpuQuota на 0 5. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk параметр EnableFairShare на 0 6. Если сделали изменения в реестре, то перезагружаем сервер. [/TD][/TR][/TABLE]
Ошибка: Не задан режим лицензирования для сервера узла сеансов удаленных рабочих столов, При настройке нового узла RDS фермы на Windows Server 2012 R2/2016/2019 вы можете столкнуться со следующим всплывающим предупреждением, которое появляется в трее:
 
При настройке нового узла RDS фермы на Windows Server 2012 R2/2016/2019
вы можете столкнуться со следующим всплывающим предупреждением, которое
появляется в трее:
[CODE]Licensing mode for the Remote Desktop Session Host is not configured.
Remote Desktop Service will stop working in xxx days.[/CODE][CODE]Не задан режим лицензирования для сервера узла сеансов удаленных рабочих
столов.
Служба удаленных рабочих столов перестанет работать через xxx
дней.

[/CODE]
Для более точной диагностики проблемы нужно запустить “Средство диагностики лицензирования удаленных рабочих столов” — lsdiag.msc (Administrative Tools -> Remote Desktop Services -> RD Licensing Diagnoser). В окне утилиты будет отображаться такая ошибка:
[CODE]Не задан режим лицензирования для сервера узла сеансов удаленных рабочих столов
[/CODE]
[IMG WIDTH=468 HEIGHT=351]https://winitpro.ru/wp-content/uploads/2018/03/ne-zadan-rezhim-licenzirovaniya-dlya-servera-uzla-sea.png[/IMG]

Все это говорит о том, что администратор не задал для этого хоста сервер лицензирования RDS и/или
режим лицензирования. Это несмотря на то, что при развертывании хоста
RDS уже был указан тип лицензирования (Configure the deployment -> RD
Licensing).

[IMG WIDTH=490 HEIGHT=210]https://winitpro.ru/wp-content/uploads/2018/03/rds-deployment.png[/IMG]


Отройте консоль PowerShell и проверьте, задан ли сервер лицензирования RDS с помощью следующих команд:

$obj = gwmi -namespace "Root/CIMV2/TerminalServices" Win32_TerminalServiceSetting
$obj.GetSpecifiedLicenseServerList()

$obj. SetSpecifiedLicenseServerList("computername")

где computername = имя компьютера вашего сервера.

Параметры сервера лицензирования RDS также можно задать через политики GPO (локальную или доменную политику).

Если сервер RDS находится в рабочей группе (не добавлен в домен Active Directory), используйте локальный редактор политик gpedit.msc. Перейдите в раздел Конфигурация компьютера -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Лицензирование (Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Licensing).

[B]Нас интересуют две политики:[/B]

[LIST]
[*]Использовать указанные серверы лицензирования удаленных рабочих столов (Use
the specified Remote Desktop license servers) — включите политику и
укажите адрес сервера лицензирования RDS. Если сервер лицензий RDS CAL
запущен на этом же сервере, укажите 127.0.0.1;
[/LIST]

[IMG WIDTH=634 HEIGHT=307]https://winitpro.ru/wp-content/uploads/2018/03/ispolzovat-ukazannye-servery-licenzirovaniya-udal.png[/IMG]

После перезагрузки сервера откройте средство диагностики лицензирования RDS. Если вы все настроили правильно, должно появится число доступных RDS лицензий и указан режим лицензирования.

[IMG WIDTH=501 HEIGHT=239]https://winitpro.ru/wp-content/uploads/2018/03/rds-server-licenzirovan-polzovatelskie-licenzi.png[/IMG]

Дополнительно установите утилиту для диагностики проблем лицензирования на серверах RDS — Remote Desktop Licensing Diagnoser (lsdiag.msc),

которую можно установить с помощью Server Manager: Features -> Remote Server Administration Tools -> Role Administration Tools -> Remote Desktop Services Tools -> Remote Desktop Licensing Diagnoser Tools

(по умолчанию при установке службы RDS-Licensing устанавливается только консоль Remote Desktop Licensing Manager — licmgr.exe).

licmgr.exe

Установка сервера терминалов в Windows Server 2016
 
Установка сервера терминалов в Windows Server 2016


Что будем делать?


[LIST]
[*]Подключение к серверу терминалов
[*]Установка лицензий на сервер лицензирования службы удаленных рабочих столов
[*]Определение сервера лицензирования для службы удаленных рабочих столов
[*]Установка службы удаленных рабочих столов
[/LIST]


Что понадобится?


[LIST]
[*]Компьютер (сервер) с установленной на нем Windows Server 2016 и права администратора на данном сервере.
[*]Действительная
клиентская лицензия сервера терминалов, приобретенная по одной из
существующих программ лицензирования. (В данной случае я буду
использовать найденный в интернете номер соглашения, по программе
Enterprise Agriment. На момент написания рабочими были номера: 6565792,
5296992, 3325596, 4965437, 4526017.)
[*]Доступ к сети Internet для активации сервера лицензирования и установки лицензий (возможна также активация и по телефону).
[/LIST]


Установка службы удаленных рабочих столов



1) Запускаем Диспетчер серверов.

Его можно запустить с ярлыка на панели задач, или же выполнив команду servermanager.exe (Для этого необходимо нажать комбинацию клавиш Win + R, в появившемся окне в поле «Открыть» (Open) написать имя команды и нажать «ОК» )

2) В меню, в верхнем правом углу, выбираем «Управление» (Manage) — «Добавить роли и компоненты» (Add Roles and Features).

Запустится
«Мастер добавления ролей и компонентов» (Add Roles and Features
Wizard). Нажимаем «Далее» (Next) на начальной странице.
[LIST]
[*]Оставляем
переключатель на «Установка ролей и компонентов» (Role-based or
features-based installation) и снова жмем «Далее» (Next) .
[*]Выбираем
тот сервер из пула серверов, на который будет установлена служба
терминалов. В моем примере это данный локальный сервер. Нажимаем «Далее»
(Next)
[*]Отмечаем роль «Службы удаленных рабочих столов» (Remote Desktop Services) в списке ролей и жмем «Далее» (Next) .
[*]Компоненты оставляем в том виде, в котором они есть. Ничего не отмечая жмем «Далее» (Next) .
[*]Читаем описание службы удаленных рабочих столов и нажимаем «Далее» (Next) .
[/LIST]
3) Теперь необходимо выбрать устанавливаемые службы ролей.

[LIST]
[*] Как
минимум нам пригодится «Лицензирование удаленных рабочих столов»
(Remote Desktop Licensing) (также соглашаемся на установку
дополнительных компонент нажав на «Добавить компоненты» (Add Features) в
появившемся мастере)
[*]и «Узел сеансов удаленных рабочих столов»
(Remote Desktop Session Host) (опять соглашаемся на установку
дополнительных компонент нажав на «Добавить компоненты» (Add Features) в
открывшемся окне).
[*]Отметив необходимы службы ролей, нажимаем «Далее» (Next) .
[/LIST]

Все параметры установки роли определены. На последней странице установим флаг «Автоматический перезапуск конечного сервера, если требуется» (Restart the destination server automatically if required), подтвердим выбор нажав «Да» (Yes) в появившемся окне и нажмем «Установить» (Install) для запуска установки службы. Если все прошло хорошо, после перезагрузки, увидим сообщение об успешной установке всех выбранных служб и компонент.

Нажимаем «Закрыть» (Close) для завершения работы мастера.


Определение сервера лицензирования для службы удаленных рабочих столов


1) Запустим «Средство диагностики лицензирования удаленных рабочих столов» (RD Licensing Diagnoser).

Сделать это можно из диспетчера серверов, выбрав в правом верхнем меню «Средства» (Tools) — «Terminal Services» — «Средство диагностики лицензирования удаленных рабочих столов» (RD Licensing Diagnoser) .Здесь мы видим, что доступных лицензий пока нет, т. к. не задан режим лицензирования для сервера узла сеансов удаленных рабочих столов.Сервер лицензирования указывается теперь в локальных групповых политиках.

2) Для запуска редактора выполним команду gpedit.msc.

Откроется редактор локальной групповой политики. В дереве слева раскроем вкладки:

[LIST]
[*]«Конфигурация компьютера» (Computer Configuration)
[*]«Административные шаблоны» (Administrative Templates)
[*]«Компоненты Windows» (Windows Components)
[*]«Службы удаленных рабочих столов» (Remote Desktop Services)
[*]«Узел сеансов удаленных рабочих столов» (Remote Desktop Session Host)
[*]«Лицензирование» (Licensing)
[/LIST]
3) Откроем
параметры «Использовать указанные серверы лицензирования удаленных
рабочих столов» (Use the specified Remote Desktop license servers).

В окне редактирования параметров политики, переставим переключатель в «Включено» (Enabled) .
Затем необходимо определить сервер лицензирования для службы удаленных рабочих столов.
В моем примере сервер лицензирования находится на этом же физическом сервере. Указываем сетевое имя или IP-адрес сервера лицензий и нажимаем «ОК» .

4) Далее меняем параметры политики.

«Задать режим лицензирования удаленных рабочих столов» (Set the Remote licensing mode) .Также устанавливаем переключатель в «Включено» (Enabled) и указываем режим лицензирования для сервера узла сеансов удаленных рабочих столов.

Возможны 2 варианта: «На пользователя» (Per User) «На устройство» (Per Device)
Предположим, у Вас есть 5 лицензий.
При режиме «На устройство» вы можете создать неограниченное число пользователей на сервере, которые смогут подключаться через удаленный рабочий стол только с 5 компьютеров, на которых установлены эти лицензии.Если выбрать режим «На пользователя», то зайти на сервер смогут только 5 выбранных пользователей, независимо с какого устройства они подключаются.

Выбираем тот режим, который наиболее подходит для ваших нужд и нажимаем «ОК».

5) Возвращаемся
в оснастку «Средство диагностики лицензирования удаленных рабочих
столов» (RD Licensing Diagnoser) и видим новую ошибку, указывающую на
то, что сервер лицензирования указан, но не включен.

Для запуска сервера лицензирования переходим в «Диспетчер лицензирования удаленных рабочих столов» (RD Licensing Manager).
Найти его можно в диспетчере серверов, вкладка «Средства» (Tools) — «Terminal Services» — «Диспетчер лицензирования удаленных рабочих столов» (Remote Desktop Licensing Manager) .
Здесь найдем наш сервер лицензирования, со статусом «Не активирован» (Not Activated) . Для активации кликаем по нему правой кнопкой мыши и в контекстном меню выбираем «Активировать сервер» (Activate Server).

[LIST]
[*]Запустится Мастер активации сервера. Жмем «Далее» (Next) на первой странице мастера.
[*]Затем выбираем метод подключения («Авто» (Automatic connection) по умолчанию) и жмем «Далее» (Next) .
[*]Вводим сведения об организации (эти поля обязательны для заполнения) после чего жмем «Далее» (Next) .
[*]Вводим дополнительные сведения об организации (необязательно) и снова нажимаем «Далее» (Next) .
[*]Сервер лицензирования активирован.
[/LIST]
6) Теперь следует установить лицензии.

Для этого нажимаем «Далее» (Next) оставив включенным флаг «Запустить мастер установки лицензий» .
Установка лицензий на сервер лицензирования службы удаленных рабочих столов Нажимаем «Далее» (Next) на начальной странице Мастера установки лицензий.
Затем выбираем необходимую вам программу лицензирования.
В моем примере это «Соглашение «Enterprise Agreement«» .
Жмем «Далее» (Next) .
Вводим номер соглашения и нажимаем «Далее» (Next) .
Указываем версию продукта, тип лицензии и количество лицензий в соответствии с вашей программой лицензирования. Жмем «Далее» (Next) .
Ну и дожидаемся завершения работы мастера установки лицензий с сообщением о том, что запрошенные лицензии успешно установлены.
В диспетчере лицензирования убеждаемся, что сервер работает, а также видим общее и доступное число установленных лицензий.
Ну и наконец возвращаемся в «Средства диагностики лицензирования удаленных рабочих столов» (RD Licensing Diagnoser) и видим, что ошибок нет, а число лицензий, доступных клиентам, соответствует тому, что мы вводили на предыдущем шаге.
На этом установка сервера терминалов в Windows Server 2016 завершена.

Обмен \ получение данных по QR коду от Честного знака через APi
 
Данные взяты с публикации infostart Для доработки оригинал статьи: [URL=https://infostart.ru/public/1276725/]https://infostart.ru/public/1276725/[/URL] [CODE]&НаСервере Процедура ЗаписатьВЖурнал(Данные) Файл = Новый ЗаписьТекста(ПутьКФайламОтветов + "log.txt",,,Истина); Файл.ЗаписатьСтроку(Строка(ТекущаяДата()) + ": " + Данные); Файл.Закрыть(); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Поиск доступных сертификатов CAPICOM_CURRENT_USER_STORE = 2; //2 - Искать сертификат в ветке "Личное" хранилища. CAPICOM_MY_STORE = "My"; // Указываем, что ветку "Личное" берем из хранилища текущего пользователя CAPICOM_STORE_OPEN_READ_ONLY = 0; // Открыть хранилище только на чтение oStore = Новый COMОбъект("CAdESCOM.Store"); // Объект описывает хранилище сертификатов oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов // 1 вариант: поиск сертификата по отпечатку //CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0; //Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, ОтпечатокСтр); //Рез = Certificates.Item(1); //2 вариант: обходом по коллекции и сравнение с отпечатком Для Каждого ТекСертификат Из oStore.Certificates Цикл НоваяСтрока = Сертификаты.Добавить(); НоваяСтрока.Владелец = ТекСертификат.SubjectName; НоваяСтрока.ПериодС = ТекСертификат.ValidFromDate; НоваяСтрока.ПериодДо = ТекСертификат.ValidToDate; НоваяСтрока.Контейнер = ТекСертификат.PrivateKey.UniqueContainerName; НоваяСтрока.Отпечаток = ТекСертификат.Thumbprint; КонецЦикла; //Запрос = "/api/v3/facade/identifytools/listV2?cisStatus=INTRODUCED&limit=10000"; Запрос = "/api/v3/facade/cis/cis_list?cis=010462007200949521tkHSO<.I)jqC("; Сервер = "ismp.crpt.ru"; ПутьКФайламОтветов = "C:\temp\GISMT\"; КонецПроцедуры &НаКлиенте Процедура СертификатыПриАктивизацииСтроки(Элемент) СертификатДляОбмена = Элемент.ТекущиеДанные.Отпечаток; КонецПроцедуры &НаКлиенте Процедура ПолучитьТокен(Команда) ПолучитьТокенНаСервере(); КонецПроцедуры &НаСервере Процедура ПолучитьТокенНаСервере() // Получение данных для получения токена HTTPСоединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = новый HTTPЗапрос("/api/v3/auth/cert/key"); HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("GET",HTTPЗапрос); ОтветСтрока = HTTPОтвет.ПолучитьТелоКакСтроку("UTF-8"); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветСтрока); ДанныеJSON = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); УИД = ДанныеJSON.uuid; ДанныеДляПолученияТокена = ДанныеJSON.data; ЗаписатьВЖурнал("Получение данных /api/v3/auth/cert/key" + Символы.ПС + ДанныеДляПолученияТокена); // Подписание данных для получения токена ДанныеДляПолученияТокена = ПодписатьТекст(ЗашифроватьBase64(ДанныеДляПолученияТокена, КодировкаТекста.UTF8),СертификатДляОбмена,Ложь); ЗаписатьВЖурнал("Подписано сертификатом " + СертификатДляОбмена + Символы.ПС + ДанныеДляПолученияТокена); // Получение токена с использованием подписанных данных Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL); Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "application/json; charset=UTF-8"); Заголовки.Вставить("Accept", "application/json"); HTTPЗапрос = Новый HTTPЗапрос("/api/v3/auth/cert/",Заголовки); ЗаписьJOIN = Новый ЗаписьJSON; ЗаписьJOIN.УстановитьСтроку(); ДанныеДляЗапроса = Новый Структура; ДанныеДляЗапроса.Вставить("uuid",УИД); ДанныеДляЗапроса.Вставить("data",ДанныеДляПолученияТокена); ЗаписатьJSON(ЗаписьJOIN,ДанныеДляЗапроса); СтрокаДляЗапроса = ЗаписьJOIN.Закрыть(); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Токен = ПрочитатьJSON(ЧтениеJSON, Ложь).token; КонецПроцедуры &НаСервере Функция ЗашифроватьBase64(Строка, Кодировка) Экспорт ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, Кодировка); ЗаписьТекста.Записать(Строка); ЗаписьТекста.Закрыть(); Двоичные = Новый ДвоичныеДанные(ИмяВременногоФайла); Результат = Base64Строка(Двоичные); Если Лев(Результат, 4) = "77u/" Тогда Результат = Сред(Результат, 5); КонецЕсли; Результат = СтрЗаменить(Результат, Символы.ПС, ""); УдалитьФайлы(ИмяВременногоФайла); Возврат Результат; КонецФункции &НаСервере // sThumbprint - отпечаток сертификата, используемого для подписи; строка, // представляющая отпечаток в шестнадцатеричном виде // пример 195934d72dcdf69149901d6632aca4562d8806d8 // ТекстДляПодписи должен быть в Base64 // bDetached - Истина/Ложь - откреплённая(для подписания документов)/прикреплённая(для получения токена авторизации) подпись Функция ПодписатьТекст(ТекстДляПодписи, sThumbprint, bDetached) CADESCOM_BASE64_TO_BINARY = 1; // Входные данные пришли в Base64 CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0; // Атрибут штампа времени подписи oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи. oSigner.Certificate = ПолучитьСертификатПоОтпечатку(sThumbprint); oSigningTimeAttr = Новый COMОбъект("CAdESCOM.CPAttribute"); oSigningTimeAttr.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME; oSigningTimeAttr.Value = ТекущаяДата(); oSigner.AuthenticatedAttributes2.Add(oSigningTimeAttr); ТекстДляПодписи = СокрЛП(ТекстДляПодписи); oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью. oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY; oSignedData.Content = СокрЛП(ТекстДляПодписи); EncodingType = 0; sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись. Возврат sSignedMessage; // Подпись в формате Base64 КонецФункции &НаСервере //Отпечаток - строка HEX Функция ПолучитьСертификатПоОтпечатку(ОтпечатокСтр) Рез = Неопределено; // Найденный сертификат (Com-объект) CAPICOM_CURRENT_USER_STORE = 2; //2 - Искать сертификат в ветке "Личное" хранилища. CAPICOM_MY_STORE = "My"; // Указываем, что ветку "Личное" берем из хранилища текущего пользователя CAPICOM_STORE_OPEN_READ_ONLY = 0; // Открыть хранилище только на чтение oStore = Новый COMОбъект("CAdESCOM.Store"); // Объект описывает хранилище сертификатов oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов // 1 вариант: поиск сертификата по отпечатку //CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0; //Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, ОтпечатокСтр); //Рез = Certificates.Item(1); //2 вариант: обходом по коллекции и сравнение с отпечатком Для Каждого ТекСертификат Из oStore.Certificates Цикл ТекОтпечаток = ТекСертификат.Thumbprint; // возвращается отпечаток в шестнадцатеричном виде Если ВРЕГ(ТекОтпечаток) = ВРЕГ(ОтпечатокСтр) Тогда Рез = ТекСертификат; Прервать; КонецЕсли; КонецЦикла; oStore.Close(); // Закрыть хранилище сертификатов и освободить объект 61 Возврат Рез; КонецФункции &НаКлиенте Процедура ОтправитьЗапрос(Команда) ОтправитьЗапросНаСервере(); КонецПроцедуры &НаСервере Процедура ОтправитьЗапросНаСервере() HTTPСоединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = новый HTTPЗапрос(Запрос); HTTPЗапрос.Заголовки.Вставить("Authorization","Bearer "+Токен); HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("GET",HTTPЗапрос); Сообщить(HTTPОтвет.КодСостояния); ИмяФайлаОтвета = ПутьКФайламОтветов + Строка(Новый УникальныйИдентификатор)+".json"; HTTPОтвет.ПолучитьТелоКакДвоичныеДанные().Записать(ИмяФайлаОтвета); ЗаписатьВЖурнал("Запрос: " + Запрос + Символы.ПС + "Ответ: " + ИмяФайлаОтвета); КонецПроцедуры [/CODE]
Изменено: pilot - 19.05.2021 20:19:09
1
2
3
4
5
6
7
8
9
10
12