sign 26.900.0 Заметное

Sign 26.900.0: представитель компании подписывает кадровые документы Госключом

3 мин чтения
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Sign 26.900.0 для коробочного Битрикс24 добавляет в мастер КЭДО выбор, чем подписывает представитель компании: УКЭП или Госключом. Выбор появится только у компаний с провайдером goskey-lite и только там, где его открыл сервис подписи. Ещё переписали повторную отправку документа из таймлайна, и uid участника из чужого документа она больше не примет.

Новое

Выберите, чем подпишет представитель компании

На шаге сторон в мастере кадрового документа появился список «Способ подписи представителя» с двумя значениями: «УКЭП» и «Госключ (УКЭП для Гендиректора)». Список виден, если у компании выбран провайдер goskey-lite и сервис подписи вернул флаг goskey_representative_signing_available. В PHP флаг лежит в Item\Company::$goskeyRepresentativeSigningAvailable, отдельно от промо-флага goskeyLiteAvailable. Если goskey-lite ограничен тарифом, флаг сбрасывается в false. Раскаткой управляет сервис подписи по client id, он и решает, кому показывать список.

Если сервис подписи прислал для представителя поле СНИЛС, модуль оставляет его только при подписи Госключом и помечает обязательным. В остальных случаях поле выбрасывается.

Обрабатывайте отказ при сохранении сторон

Сам портал проверяет только два условия. Госключ допустим, когда представитель задан конкретным человеком (роль из структуры компании не подходит) и провайдер документа GOS_KEY_LITE. Отказ приходит с кодом SIGNING_METHOD_PERMISSION_REQUIRED, а проверка стоит в трёх местах:

  • AJAX sign.api_v1.document.member.checkRepresentativeSigningMethod с параметрами documentUid, representativeId, signingMethod и representativeEntityType (по умолчанию EntityType::USER). Нужно право ACTION_DOCUMENT_EDIT или ACTION_B2E_DOCUMENT_EDIT. Мастер вызывает его, когда уходит со шага. representativeId проверяется только на > 0 и дальше не используется.
  • setupB2eParties принимает signingMethod у участника с ролью assignee и проверяет то же самое. На неизвестное значение он отвечает «Invalid signingMethod value». load теперь отдаёт signingMethod каждого участника.
  • Service\Sign\Document\DirectorSigningGuardService::check() срабатывает на пути к подписанию, его вызывают Operation\ConfigureDocument и ConfigureFillAndStart. Во втором проверку продублировали, потому что документ в статусе READY проходит мимо ConfigureDocument.

Если у вас свой мастер или документы запускаются из кода, обрабатывайте ошибку SIGNING_METHOD_PERMISSION_REQUIRED и при сохранении сторон, и при старте. Одного checkRepresentativeSigningMethod для этого мало: мастер берёт его ответ как подсказку, а сохранение сторон и старт проверяют заново. Код ошибки сравнивайте с константой DirectorSigningGuardService::ERROR_CODE_NOT_ALLOWED.

Значения лежат в Type\Member\SigningMethod: GOS_KEY = 'goskey', UKEP = 'ukep', плюс getAll() и isValid(). Класс повторяет закрытый \Bitrix\SignSafe\Type\Member\SigningMethod. Неизвестное значение signsafe считает невыбранным способом, то есть УКЭП, поэтому портал отказывает явно и мусор не сохраняет. Экшены мастера прогоняют значение через SigningMethod::isValid(). Делайте так же, когда пишете способ сами через новый последний параметр MemberService::addForDocument(..., signingMethod: ...).

DirectorSigningGuardService можно получить через Container::getDirectorSigningGuardService() (сервис sign.service.sign.document.directorSigningGuard) и вызвать заранее. Вот как найти документы, где представитель выбрал Госключ, и узнать, какие из них проверку не пройдут:

        <?php declare(strict_types=1);

use Bitrix\Main\Loader;
use Bitrix\Sign\Internal\MemberTable;
use Bitrix\Sign\Service\Container;
use Bitrix\Sign\Type\Member\Role;
use Bitrix\Sign\Type\Member\SigningMethod;

Loader::requireModule('sign');

$rows = MemberTable::query()
    ->setSelect(['DOCUMENT_ID'])
    ->where('ROLE', Role::convertRoleToInt(Role::ASSIGNEE))
    ->where('SIGNING_METHOD', SigningMethod::GOS_KEY)
    ->setOrder(['ID' => 'DESC'])
    ->setLimit(50)
    ->fetchAll();

$container = Container::instance();
$documents = $container->getDocumentRepository();
$guard = $container->getDirectorSigningGuardService();

foreach ($rows as $row) {
    $document = $documents->getById((int)$row['DOCUMENT_ID']);
    if ($document === null) {
        continue;
    }

    $result = $guard->check($document);
    if (!$result->isSuccess()) {
        printf("%d: %s\n", $document->id, implode('; ', $result->getErrorMessages()));
    }
}

    

ROLE в таблице хранится числом, поэтому роль переводится через Role::convertRoleToInt().

Что сломается

Передавайте зависимости ConfigureFillAndStart по именам

Как и в 26.800.0, новый параметр вставили в середину конструктора. В Operation\ConfigureFillAndStart::__construct параметр ?DirectorSigningGuardService $directorSigningGuardService стоит перед ?DocumentAgentService $documentAgentService. new ConfigureFillAndStart($uid) работает как раньше. Если же вы передавали DocumentAgentService четвёртым аргументом, например мок в тесте, получите TypeError.

Новые параметры MemberService::addForDocument, Item\Company, Item\B2e\RequiredField и Item\Api\Property\Request\Signing\Configure\Member добавлены в конец сигнатур и необязательны.

БД

В b_sign_member появилась колонка SIGNING_METHOD varchar(20), в Bitrix\Sign\Internal\MemberTable — поле SIGNING_METHOD (StringField, size 20, nullable). MemberRepository его читает и пишет, а у Item\Member есть свойство signingMethod.

Мелочи и находки

  • Повторная отправка из таймлайна (Controller\Internal\Document::resendFileAction) для документов версии 2 и новее теперь всегда идёт через сервис подписи: кадровые получают sendInvite, остальные resendMessage. Раньше через сервис шла только версия 2, и всегда через sendInvite. V3 и V4, а с V4 создаются все новые документы, уходили в старый Proxy::sendCommand('document.resend'). memberHash теперь должен быть uid участника этого же документа, иначе ответ ACCESS_DENIED: раньше значение из запроса без проверки подставлялось в путь запроса к сервису подписи. Прокси остался только для V1, и там участник, которого не нашли по хешу, тоже даёт ACCESS_DENIED.
  • В Item\Member::__construct между role и configured появился ?string $signingMethod. Сдвиг заденет только вызов, где по позиции передано двадцать аргументов и больше.
  • В .settings.php появился регион md: адрес сервиса https://sign.bitrix24.eu, домен https://www.bitrix24.md. Включены service.publicity, service.b2e.publicity, service.b2e.document-message.publicity и service.b2e.robot.publicity, а service.b2e.init-by-employee.publicity выключен.
  • У Item\B2e\RequiredField появился флаг required (по умолчанию true). Он читается из ключа required в списке полей и отдаётся в toArray().

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

sign 26.800.0 Безопасность Свежее

Sign 26.800.0: закрыли доступ к чужим документам, к приглашению на подпись можно дописать текст

Sign 26.800.0 для коробочного Битрикс24 закрывает несколько дыр в проверке прав: часть AJAX-экшенов модуля не проверяла, есть ли у пользователя доступ к конкретному документу, группе или участнику. Если на портале подписывают документы, с сотрудниками или с клиентами, обновляйтесь. Из нового — текст…

2 мин
sign 26.600.0 Безопасность Свежее

Sign 26.450.0–26.600.0: IDOR в AccessCheck, установщик на миграциях и папки в сейфе компании

Версии 26.450.0, 26.500.0 и 26.600.0 модуля sign («Подписание документов») вышли в коробочный Битрикс24 одним днём, 11 сентября 2026 года, так указано в официальном канале «Битрикс24 changelog». Срочнее всего 26.500.0, которая закрывает IDOR в фильтре `AccessCheck` и заодно переводит установщик на м…

5 мин
sign 26.700.0 Безопасность Свежее

Sign 26.700.0: чужие группы подписантов закрыли проверкой доступа, подписания можно аннулировать

Модуль «Подписание документов» (sign) версии 26.700.0 вышел в коробочный Битрикс24 17 сентября 2026 года, так указано в официальном канале «Битрикс24 changelog». В релизе закрыли утечку состава чужих групп подписантов и документов, добавили проверки доступа к повторной отправке и выпустили аннулиров…

4 мин
timemanmobile 26.400.0 Заметное Свежее

Timemanmobile 26.0.0–26.400.0: окно «Начало рабочего дня» и рабочие отчёты в мобильном Битрикс24

Новый модуль timemanmobile («Мобильный учёт рабочего времени») пришёл в коробочный Битрикс24 сразу пятью версиями: 26.0.0, 26.100.0, 26.200.0, 26.300.0 и 26.400.0. Он добавляет в мобильное приложение окно «Начало рабочего дня», рабочие отчёты, экран «Рабочие дни» и плашку рабочего дня. Все версии ст…

4 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти