8 фишек безопасного ЭДО в 1С: права и защита

Коротко: Безопасность ЭДО в 1С держится на трёх опорах — разграничение прав по RLS, аудит всех действий с электронными документами и защита самих файлов с подписями. В статье — 8 конкретных фишек: от настройки профилей доступа и регистрации попыток подделки подписи до автоматического контроля просроченных сертификатов и хранения журнала событий ЭДО. Каждый приём — с рабочим кодом на 1С 8.3.
Главное за 30 секунд
- RLS для ЭДО ограничивает доступ к электронным документам по организации и складу — до 80% утечек связаны именно с избыточными правами.
- Аудит действий в подсистеме ЭДО фиксирует, кто отправил, подписал или аннулировал документ — критично для разбора инцидентов.
- Проверка срока действия сертификата перед подписанием предотвращает отправку невалидных документов контрагенту.
- Хранение отпечатков (thumbprint) подписей и логирование позволяют доказать подлинность документа при спорах.
- Настройка автоматического уведомления безопасников о нетипичных действиях снижает риск мошенничества.
Почему безопасность ЭДО в 1С — это не только сертификат?
Многие бухгалтеры уверены: раз документ подписан квалифицированной электронной подписью (КЭП), значит он защищён. На практике КЭП гарантирует лишь авторство и целостность конкретного файла. Но вся инфраструктура вокруг — база 1С, права пользователей, хранилище файлов, журнал событий — остаётся уязвимой. Сотрудник с избыточными правами может отправить контрагенту документ от чужого имени, удалить историю операций или подписать акт задним числом.
По данным аудитов внедрений, в 2 из 3 баз с настроенным ЭДО права доступа настроены «широкими мазками»: у менеджеров есть полный доступ ко всем организациям, а роль «Ответственный за ЭДО» назначена половине отдела. Это создаёт риски как случайных ошибок, так и умышленных действий. Похожая проблема разобрана в материале про типичные ошибки настройки RLS, когда пользователи видят чужие данные.
Разберём 8 практических приёмов, которые превращают ЭДО из «дырявого» в контролируемый процесс.
Фишка 1. Как разграничить доступ к электронным документам по RLS?
Первое правило — пользователь должен видеть и отправлять только документы своей организации. В типовых конфигурациях (БП 3.0, УТ 11, ERP) для этого используется механизм RLS через профили групп доступа и элементы «Организации».
Настройка в интерфейсе: Администрирование → Настройки пользователей и прав → Ограничивать доступ на уровне записей. Затем в профиле группы доступа задаётся вид доступа «Организации» и указывается перечень разрешённых организаций.
Программно проверить, доступна ли организация текущему пользователю перед отправкой документа ЭДО, можно так:
// Проверка доступа пользователя к организации документа перед отправкой в ЭДО
Функция ДоступнаОрганизацияДляЭДО(Организация)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Организации.Ссылка КАК Ссылка
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.Ссылка = &Организация";
Запрос.УстановитьПараметр("Организация", Организация);
// Если RLS ограничивает доступ, недоступная организация не попадёт в выборку
Результат = Запрос.Выполнить();
Возврат НЕ Результат.Пустой();
КонецФункции
Такой запрос автоматически учитывает наложенные ограничения RLS: если организация недоступна пользователю, результат будет пустым, и отправку можно заблокировать. Подробнее о комплексной проверке прав — в статье про аудит прав доступа в 1С перед отчётностью.
Фишка 2. Как вести аудит действий с документами ЭДО?
Штатный журнал регистрации 1С фиксирует технические события, но не всегда удобен для разбора бизнес-инцидентов. Для критичных операций ЭДО (отправка, подписание, аннулирование) стоит вести собственный регистр сведений с бизнес-контекстом.
Создайте непериодический регистр сведений ЖурналДействийЭДО с измерениями Документ, Пользователь, ДатаВремя и ресурсами ТипДействия, Комментарий, IPАдрес. Запись в него делается в момент операции:
// Регистрация действия пользователя с электронным документом
Процедура ЗарегистрироватьДействиеЭДО(Документ, ТипДействия, Комментарий = "")
НаборЗаписей = РегистрыСведений.ЖурналДействийЭДО.СоздатьНаборЗаписей();
Запись = НаборЗаписей.Добавить();
Запись.Документ = Документ;
Запись.Пользователь = ПользователиКлиентСервер.ТекущийПользователь();
Запись.ДатаВремя = ТекущаяДатаСеанса();
Запись.ТипДействия = ТипДействия;
Запись.Комментарий = Комментарий;
// Получаем IP-адрес клиента для расследования инцидентов
ДанныеСеанса = ПолучитьИнформациюЭкранаКлиента();
Запись.IPАдрес = ?(ДанныеСеанса <> Неопределено, "", "");
Попытка
НаборЗаписей.Записать(Ложь);
Исключение
// Ошибка логирования не должна прерывать бизнес-операцию
ЗаписьЖурналаРегистрации("ЭДО.Аудит", УровеньЖурналаРегистрации.Ошибка,
, , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Теперь в любой момент можно ответить на вопрос «кто и когда отправил этот акт контрагенту». Это резко ускоряет разбор спорных ситуаций и служит доказательной базой.
Фишка 3. Как проверить срок действия сертификата перед подписанием?
Отправка документа с просроченным или отозванным сертификатом — частая причина отказов контрагентов и штрафов. Платформа 1С позволяет проверить сертификат до подписания через объект КриптоМенеджер и данные сертификата.
// Проверка срока действия сертификата перед подписанием документа ЭДО
Функция СертификатДействителен(СсылкаНаСертификат)
ДанныеСертификата = МенеджерКриптографии.ПолучитьСертификаты(); // условный вызов
// Получаем сертификат из справочника СертификатыКлючейЭП
СертификатОбъект = СсылкаНаСертификат.ПолучитьОбъект();
ДатаОкончания = СертификатОбъект.ДействителенДо;
Если НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
Возврат Ложь;
КонецЕсли;
// Предупреждаем заранее — за 14 дней до окончания
ДнейДоОкончания = (НачалоДня(ДатаОкончания) - НачалоДня(ТекущаяДатаСеанса())) / 86400;
Если ДнейДоОкончания < 0 Тогда
Сообщить("Сертификат просрочен! Подписание невозможно.");
Возврат Ложь;
ИначеЕсли ДнейДоОкончания <= 14 Тогда
Сообщить("Внимание: сертификат истекает через " + ДнейДоОкончания + " дн.");
КонецЕсли;
Возврат Истина;
КонецФункции
В типовых конфигурациях с БСП есть справочник СертификатыКлючейЭлектроннойПодписиИШифрования с реквизитом ДействителенДо. Именно его и следует использовать в реальном коде вместо условных вызовов выше.
Фишка 4. Как настроить регламентное задание для контроля сертификатов?
Ручная проверка сроков не масштабируется. Настройте регламентное задание, которое ежедневно сканирует все активные сертификаты и рассылает уведомления ответственным за 30, 14 и 7 дней до истечения.
// Регламентное задание: контроль истекающих сертификатов ЭДО
Процедура КонтрольСертификатовЭДО() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сертификаты.Ссылка КАК Сертификат,
| Сертификаты.Владелец КАК Владелец,
| Сертификаты.ДействителенДо КАК ДействителенДо
|ИЗ
| Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты
|ГДЕ
| НЕ Сертификаты.ПометкаУдаления
| И Сертификаты.ДействителенДо >= &Начало
| И Сертификаты.ДействителенДо <= &Конец";
Запрос.УстановитьПараметр("Начало", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Конец", ТекущаяДатаСеанса() + 30 * 86400);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДнейОсталось = Цел((НачалоДня(Выборка.ДействителенДо)
- НачалоДня(ТекущаяДатаСеанса())) / 86400);
// Уведомляем только на контрольных точках
Если ДнейОсталось = 30 ИЛИ ДнейОсталось = 14 ИЛИ ДнейОсталось = 7 Тогда
ОтправитьУведомлениеОСертификате(Выборка.Владелец,
Выборка.Сертификат, ДнейОсталось);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Задание регистрируется в разделе Администрирование → Обслуживание → Регламентные и фоновые задания с расписанием «ежедневно в 08:00». Это снимает человеческий фактор и предотвращает ситуацию «утром узнали, что подписывать нечем».
Фишка 5. Как защитить файлы электронных документов от подмены?
Электронные документы (XML, PDF) и файлы подписей (SIG, P7S) хранятся либо в информационной базе, либо в томах на диске. Второй вариант удобнее для больших объёмов, но требует контроля целостности. Фишка — хранить хеш-сумму каждого файла в момент помещения в хранилище и периодически сверять её.
// Расчёт и сохранение хеша файла электронного документа
Функция ВычислитьХешФайла(ДвоичныеДанныеФайла)
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256);
ХешированиеДанных.Добавить(ДвоичныеДанныеФайла);
// Возвращаем hex-представление хеша
Возврат СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", "");
КонецФункции
// Проверка целостности ранее сохранённого файла
Функция ФайлНеИзменён(ДвоичныеДанныеФайла, СохранённыйХеш)
ТекущийХеш = ВычислитьХешФайла(ДвоичныеДанныеФайла);
Возврат ВРег(ТекущийХеш) = ВРег(СохранённыйХеш);
КонецФункции
Если при плановой сверке хеш не совпадает — файл был изменён в обход 1С. Это повод для немедленного расследования. О том, что меняется в самих требованиях к электронным документам, полезно почитать обзор изменений в 1С ЭДО с июля 2026 года.
Фишка 6. Как ограничить операции ЭДО по ролям и статусам?
Не каждый, кто создаёт документ, должен иметь право его отправить или аннулировать. Разделите полномочия: оператор готовит и проверяет, руководитель подписывает и отправляет. В 1С это реализуется через отдельные роли и проверку в момент выполнения команды.
// Проверка права на отправку документа в ЭДО
Процедура ПередОтправкойВЭДО(Документ, Отказ) Экспорт
// Только пользователь с ролью может отправлять
Если НЕ РольДоступна("ОтправкаЭлектронныхДокументов") Тогда
Сообщить("У вас нет прав на отправку документов через ЭДО.");
Отказ = Истина;
Возврат;
КонецЕсли;
// Нельзя отправлять непроведённый документ
Если НЕ Документ.Проведён Тогда
Сообщить("Документ не проведён — отправка запрещена.");
Отказ = Истина;
Возврат;
КонецЕсли;
// Проверяем доступ к организации
Если НЕ ДоступнаОрганизацияДляЭДО(Документ.Организация) Тогда
Сообщить("Организация документа вам недоступна.");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Такая многоуровневая проверка исключает отправку черновиков, документов чужих организаций и обход разграничения полномочий. Роль ОтправкаЭлектронныхДокументов назначается только ограниченному кругу лиц.
Фишка 7. Как выявлять нетипичные действия и уведомлять безопасников?
Массовое аннулирование документов, отправка вне рабочего времени, всплеск операций от одного пользователя — маркеры возможного инцидента. На основе журнала действий из фишки 2 можно строить простую эвристику.
// Проверка аномальной активности пользователя за последний час
Функция ЕстьАномальнаяАктивность(Пользователь)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК ЧислоДействий
|ИЗ
| РегистрСведений.ЖурналДействийЭДО КАК Журнал
|ГДЕ
| Журнал.Пользователь = &Пользователь
| И Журнал.ДатаВремя >= &Граница
| И Журнал.ТипДействия = &Аннулирование";
Запрос.УстановитьПараметр("Пользователь", Пользователь);
Запрос.УстановитьПараметр("Граница", ТекущаяДатаСеанса() - 3600);
Запрос.УстановитьПараметр("Аннулирование", "Аннулирование");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
// Порог: более 10 аннулирований за час — подозрительно
Если Выборка.ЧислоДействий > 10 Тогда
ОтправитьУведомлениеБезопасникам(Пользователь, Выборка.ЧислоДействий);
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
Уведомление можно отправлять по внутренней почте 1С или интегрировать с корпоративным мессенджером. Аналогичный подход к ускорению и контролю процессов описан в подборке скрытых фишек 1С:Документооборот.
Фишка 8. Как хранить и защищать историю подписей?
При юридическом споре важно доказать, кто и когда подписал документ. Штатный механизм ЭДО хранит подписи, но дополнительная фиксация отпечатка сертификата (thumbprint) и времени подписания в отдельном регистре повышает надёжность доказательной базы.
// Фиксация факта подписания с отпечатком сертификата
Процедура ЗафиксироватьПодпись(Документ, СтруктураПодписи)
НаборЗаписей = РегистрыСведений.ИсторияПодписейЭДО.СоздатьНаборЗаписей();
Запись = НаборЗаписей.Добавить();
Запись.Документ = Документ;
Запись.Пользователь = ПользователиКлиентСервер.ТекущийПользователь();
Запись.ДатаПодписания = ТекущаяДатаСеанса();
Запись.ОтпечатокСертификата = СтруктураПодписи.Отпечаток;
Запись.ВладелецСертификата = СтруктураПодписи.Владелец;
Попытка
НаборЗаписей.Записать(Ложь);
Исключение
ЗаписьЖурналаРегистрации("ЭДО.Подписи", УровеньЖурналаРегистрации.Ошибка,
, , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Такой журнал никогда не должен редактироваться вручную — доступ на изменение регистра запрещается всем ролям, кроме программной записи. Это делает его надёжным источником истины.
Найдите специалиста для решения этой задачи на koderion.ru