Привет, коллеги! Хочу поделиться опытом создания одного интересного расширения для 1С, которое помогает решить больную тему - передачу персональных данных во внешние сервисы, в том числе в облачные модели ИИ. Наверняка вы сталкивались с ситуацией, когда хочется использовать мощь больших языковых моделей (например, для анализа обращений клиентов, генерации ответов или классификации текстов), но юридические риски не позволяют отправлять исходные данные с ФИО, телефонами и адресами наружу. Федеральный закон №152-ФЗ, политики информационной безопасности... В общем, сплошные ограничения. Но я, как разработчик, люблю находить обходные пути, которые не нарушают закон, а наоборот - делают работу безопаснее.
Не буду мучить вас длинными предисловиями. Расскажу про расширение «Маскировка персональных данных» (МПД), которое я сделал для платформы 8.3.27. Оно работает как дополнение (AddOn) и позволяет на лету заменять чувствительные фрагменты текста на маски-токены, а потом так же легко восстанавливать оригиналы. Идея не нова - что-то похожее реализовано в проекте CloakLLM. Но я переложил её на родной язык 1С, чтобы всё крутилось внутри инфраструктуры предприятия без лишних телодвижений.
Суть проста. У вас есть исходный текст, например: «Евгений Трофимов, телефон +79835286215, паспорт 520332 5955». Расширение отправляет этот текст (строго внутри вашей сети) в локальную модель ИИ - я использую Ollama с моделью qwen2.5:1.5b. Модель возвращает список найденных персональных данных: ["Евгений Трофимов", "+79835286215", "520332 5955"]. Дальше специальный модуль ищет эти строки в регистре сведений: если встречает впервые - генерирует уникальную маску вроде {{Data_1}}, {{Data_2}}, {{Data_3}} и сохраняет связь «оригинал ↔ маска». Затем в исходном тексте всё это заменяется. На выходе получаем: «Data_1, телефон Data_2, паспорт Data_1». Такой обезличенный текст можно смело отправлять в любой облачный ИИ - хоть в ChatGPT, хоть в YandexGPT - закон не нарушен, потому что персональные данные уже заменены на неинформативные токены.
А когда из облака приходит ответ (например, сгенерированное письмо, где тоже могут встретиться эти маски), расширение запускает обратную процедуру - расшифровку. Оно сканирует текст по регулярному выражению, находит все токены {{...}}, подставляет из регистра исходные значения и показывает пользователю уже полноценный текст с восстановленными ФИО, телефонами и так далее.
Почему для извлечения ПД я выбрал именно qwen2.5:1.5b? Это модель от Alibaba, она отлично знает русский язык (в отличие от многих западных собратьев), при этом имеет размер всего 1.5 миллиарда параметров. Что это даёт? Во-первых, скорость. На обычном ноутбуке или сервере без видеокарты она выдаёт ответ за пару секунд. Во-вторых, её можно запустить на том же хосте, где крутится 1С:Сервер, без существенной нагрузки. В-третьих, она достаточно умна, чтобы выделить из текста ФИО, телефоны, email, адреса, должности, места работы и многое другое. Промпт я зашил прямо в расширение - он просит модель вернуть JSON-массив с найденными фрагментами точно в том виде, как они написаны в тексте. Это удобно для последующей замены.

Признаюсь честно, не всё идеально. Модель иногда промахивается с паспортными данными: может не распознать серию и номер, если они написаны нестандартно, или пропустить сложный составной адрес. Но я не полагаюсь только на ИИ. В расширении есть дополнительный механизм - поиск по регулярным выражениям (ICU). Вы можете включить его в настройках, и тогда найденные телефоны, СНИЛС, email и даже рискованные паттерны (даты, номера водительских удостоверений) будут подхвачены автоматически. Получается этакий гибрид: нейросеть ловит сложные сущности, а регулярки - типовые шаблоны с гарантией. Если что-то пропустила одна система, подстрахует другая.
Но главное - это всё работает локально, в вашем контуре. Никакие облака не видят исходные данные. Ollama (сервер для запуска моделей) ставится за пару минут, скачивает модель одной командой ollama pull qwen2.5:1.5b, и вы готовы. Адрес сервера прописывается в настройках расширения. Важно только, чтобы с сервера 1С был доступ к этому адресу (обычно http://localhost:11434 или IP другого хоста). Таймаут, температуру модели, срок хранения масок (по умолчанию 90 дней) - всё можно менять через удобную форму.
Настройка вообще не вызывает сложностей. В интерфейсе появляется команда «Настройки (МПД)» - заходите, включаете или отключаете использование ИИ, задаёте модель, таймаут, температуру. Если боитесь, что ИИ нашалит, можно положиться только на регулярки. Но я рекомендую оставить оба механизма - так надёжнее. Там же можно задать служебный промпт, если захочется подкорректировать поведение нейросети под свои задачи. Для тестирования есть специальная форма - вводите текст, нажимаете кнопку, смотрите, что получилось на выходе маскировки, а потом проверяете расшифровку. Всё наглядно.

Как это использовать в коде? Элементарно. В своём серверном модуле пишете:
ОбезличенныйТекст = МПД_ОбезличиваниеПерсональныхДанных.Маскировка(ИсходныйТекст);
Отправляете ОбезличенныйТекст куда нужно (HTTP-запрос, запись в файл, передача в облачное API). Получили ответ - вызываете:
РасшифрованныйТекст = МПД_ОбезличиваниеПерсональныхДанных.Расшифровка(ТекстСМасками);
И выводите пользователю. Вся кухня с регистром сведений МПД_ПерсональныеДанные спрятана внутри.
Регистр хранит маски, исходные строки и их хэши - поиск происходит быстро. Плюс есть регламентное задание для очистки устаревших записей, чтобы база не раздувалась. По умолчанию маски живут 90 дней, но вы можете изменить этот срок или вовсе отключить автоудаление.
Конечно, есть нюансы. Модель несовершенна, регулярные выражения могут давать ложные срабатывания (особенно «рискованные» паттерны, которые я вынес отдельным флажком). Исходные данные и маски - это тоже чувствительная информация, доступ к регистру должен быть строго ограничен. И если запись удалена (например, регламентом), то восстановить текст уже не получится. Но эти риски легко контролировать настройками и политиками безопасности.
Несмотря на мелкие недостатки, я испытываю настоящий энтузиазм от этого расширения. Оно реально открывает дорогу к использованию облачных LLM в тех задачах, где раньше приходилось отказываться из-за страха утечки ПД. Теперь вы можете анализировать обращения клиентов, автоматически классифицировать заявки, генерировать персонализированные ответы - и всё это в обезличенном виде. А когда нужно показать результат человеку - маски легко превращаются обратно в понятные данные.
Я не стал реализовывать внутри расширения HTTP-клиенты к конкретным облачным сервисам (типа OpenAI или YandexGPT), потому что у каждой компании свои предпочтения и инфраструктура. Но сделать такой вызов самостоятельно из 1С - дело пяти минут. А вот грамотно спрятать персональные данные перед отправкой - вот это уже нетривиальная задача. И моё расширение решает её элегантно, с использованием локального ИИ и проверенных подходов.

Попробуйте, вам понравится. Поставили Ollama, скачали qwen2.5:1.5b, подключили расширение - и понеслась. Скорость работы приятно удивляет, качество распознавания вполне достойное для 1.5-миллиардной модели, а главное - вы спите спокойно, зная, что закон не нарушен, а персональные данные остались в вашей информационной базе. Дерзайте, коллеги!
Для тех, кто не любит лирику и хочет глубже окунуться в детали - ниже пойдёт текст более технический и подробный.
Правовое предупреждение и использование облачных моделей ИИ
Нельзя направлять в облачные (внешние) сервисы искусственного интеллекта исходный текст, содержащий или предположительно содержащий персональные данные субъектов, в том числе для их извлечения, классификации или анализа. Такая передача может квалифицироваться как обработка персональных данных третьими лицами вне правовых оснований, предусмотренных законодательством о персональных данных (в РФ — в том числе Федеральный закон № 152-ФЗ «О персональных данных»), и несёт репутационные и юридические риски.
Расширение по замыслу рассчитано на работу с локальной моделью через Ollama на инфраструктуре, контролируемой организацией. После маскировки текст можно передавать во внешние системы (в т.ч. облачный ИИ) только в обезличенном виде — когда вместо ПД подставлены маски. Восстановление исходных значений по маскам выполняется по данным регистра сведений в вашей информационной базе.
Организация самостоятельно обеспечивает соответствие своих процессов требованиям закона, локальным политикам ИБ и договорам.
Назначение
Расширение предоставляет средства обезличивания (маскировки) произвольного текста: фрагменты, отнесённые к персональным данным, заменяются на устойчивые маски-токены, при этом в регистре сведений сохраняется связь «исходная строка ↔ маска» для последующего восстановления (расшифровки) текста при отображении пользователю.
Типовые сценарии:
-
подготовка текста к передаче во внешние сервисы без раскрытия ПД в открытом виде;
-
обратная подстановка исходных формулировок после получения ответа от сервиса.
Идеология близка к подходам вроде CloakLLM (локальное извлечение сущностей с последующей заменой).
Кратко по потокам:
-
Блок «Реализовано»: извлечение и замена ПД выполняются в ИБ; к локальному Ollama уходит текст с ПД только внутри вашей сети (см. правовой блок выше). Связь «маска ↔ исходная строка» хранится в регистре.
-
Блок «Не в проекте»: после маскировки текст можно отправить в облако или к партнёрскому API; реализация канала (HTTP, очередь, ручная выгрузка) — на стороне прикладного решения или процесса. Расширение не содержит модулей для прямого обращения к облачным LLM.
-
Расшифровка снова выполняется в 1С: по маскам из ответа подставляются исходные строки из регистра — до показа результат пользователю.
Состав расширения (основные объекты)
|
Объект |
Назначение |
|---|---|
|
Общий модуль |
Экспортные процедуры/функции маскировки, расшифровки, регламентная очистка регистра |
|
Общий модуль |
Чтение/запись параметров в хранилище общих настроек |
|
Общий модуль |
HTTP-вызовы к внешнему API (Ollama) |
|
Общий модуль |
JSON и вспомогательные функции |
|
Регистр сведений |
Хранение масок, хэшей и исходных строк; менеджер — поиск/создание масок |
|
Общий макет |
Текст системного промпта по умолчанию |
|
Общая форма |
UI настроек |
|
Общая форма |
Проверка маскировки/расшифровки |
|
Регламентное задание |
Удаление устаревших записей регистра по настройке срока хранения |
|
Подсистема |
Группировка объектов в конфигураторе |
|
Роль |
Права по умолчанию для расширения |
Как это работает
Маскировка (МПД_ОбезличиваниеПерсональныхДанных.Маскировка)
-
Если включена настройка «Использовать ИИ (Ollama) для извлечения персональных данных», на сервере 1С формируется HTTP POST к API Ollama
/api/chat(формат чата с массивомmessages). В запрос передаются:-
системное сообщение: служебный промпт (из настроек или, если пусто, из макета
МПД_СлужебныйПромптОбезличиванияПД); -
пользовательское сообщение: исходный текст. Параметры модели:
model,stream: false, вoptions— температура из настроек.
-
-
Из JSON-ответа извлекается
message.content; содержимое нормализуется в массив строк — кандидатов в ПД. -
Если включено «Дополнять маскировку поиском по регулярным выражениям», массив дополняется совпадениями по шаблонам ICU (телефон, e-mail, СНИЛС и т.д.). Флаг «Рискованные паттерны…» включает шаблоны с большим числом ложных срабатываний (даты, IMEI, ВУ и др.).
-
По уникальным непустым строкам вызывается менеджер регистра
НайтиИлиСоздатьМаскиПоИсходнымЗначениям: для новых значений создаются записи с масками; возвращается соответствие «исходная подстрока → маска». -
В исходном тексте выполняется замена всех ключей соответствия на значения-маски. Результат возвращается вызывающему коду.
Если после шагов 1–3 массив ПД пуст, текст возвращается без изменений.
Расшифровка (МПД_ОбезличиваниеПерсональныхДанных.Расшифровка)
-
По тексту ищутся токены масок (шаблон регулярного выражения задаётся в менеджере регистра).
-
По найденным маскам из регистра читаются исходные строки.
-
Выполняется замена масок на исходные значения; результат возвращается вызывающему коду.
Регламентная очистка (МПД_ОбезличиваниеПерсональныхДанных.МПД_ОчисткаМасокПерсональныхДанных)
Удаляются записи регистра, у которых дата создания старше, чем «сегодня минус N суток», где N — настройка количества дней хранения. Если N ≤ 0, очистка не выполняется (маски не удаляются по этому регламенту).
Настройки
Настройки хранятся в хранилище общих настроек (ключи подсистемы МаскировкаПерсональныхДанных, пользователь настроек Администратор). Изменение выполняется с привилегированным режимом на сервере.
Форма в интерфейсе: команда «Настройки (МПД)» (группа навигации «См. также»).
|
Параметр (смысл) |
Значение по умолчанию |
Примечание |
|---|---|---|
|
Использовать ИИ (Ollama) для извлечения ПД |
|
При |
|
Адрес сервера Ollama |
|
Полный URL; важно указать порт ( |
|
Имя модели ИИ |
|
Имя модели в Ollama ( |
|
Таймаут ожидания Ollama, сек |
|
HTTP-таймаут запроса к API |
|
Температура модели Ollama |
|
Передаётся в |
|
Служебный промпт |
текст макета |
Задаёт ожидаемый формат ответа модели (JSON-массив строк с фрагментами ПД как в тексте) |
|
Дополнять маскировку регулярными выражениями |
|
Телефон, e-mail, СНИЛС и др. |
|
Рискованные паттерны регулярных выражений |
|
Даты, IMEI, ВУ, иностранный паспорт и др. — возможны ложные срабатывания |
|
Количество дней хранения масок ПД |
|
|
Программный интерфейс настроек — экспортные функции/процедуры общего модуля МПД_Настройки (суффиксы _Получить / _Установить).
Установка и настройка Ollama для вызова из 1С
1. Установка Ollama
-
Скачайте дистрибутив Ollama для вашей ОС с официального сайта: https://ollama.com.
-
Установите и убедитесь, что служба/процесс слушает API (по умолчанию порт 11434).
2. Загрузка модели
В командной строке на машине с Ollama (пример для модели по умолчанию в расширении):
ollama pull qwen2.5:1.5b
Проверка списка моделей:
ollama list
Имя модели в настройках 1С должно совпадать с именем в Ollama.
3. Доступность API для сервера 1С
Критично: запросы к Ollama выполняются с сервера приложений 1С (общий модуль с контекстом выполнения на сервере). Адрес в настройках должен быть доступен именно с этого сервера, а не с клиентского ПК.
-
Если Ollama на той же машине, что и сервер 1С, часто достаточно
http://127.0.0.1:11434илиhttp://localhost:11434. -
Если Ollama на другом хосте, укажите, например,
http://192.168.1.50:11434и:-
откройте порт в файрволе;
-
при необходимости задайте прослушивание на всех интерфейсах (в документации Ollama — переменная окружения вроде
OLLAMA_HOST=0.0.0.0для приёма подключений не только с localhost).
-
Убедитесь, что в URL явно указан порт 11434 для стандартной установки Ollama (иначе разбор адреса может подставить порт 80 для http без порта).
4. Проверка из 1С
Используйте форму «Тестирование обезличивания» (команда расширения) или вызовите МПД_ОбезличиваниеПерсональныхДанных.Маскировка / .Расшифровка из своего кода на сервере.
5. HTTPS
Если Ollama вынесен за обратный прокси с TLS, в настройках можно указать https://...; модуль разбора URL включает защищённое соединение и порт 443 по умолчанию для схемы https.
Интеграция в прикладной код
-
Маскировка:
МПД_ОбезличиваниеПерсональныхДанных.Маскировка(ИсходныйТекст)— выполнять в серверном контексте. -
Расшифровка:
МПД_ОбезличиваниеПерсональныхДанных.Расшифровка(ТекстСМасками)— также сервер.
Регламентное задание «МПД очистка масок персональных данных» нужно включить и настроить расписание в консоли кластера / администрировании ИБ, если требуется автоматическое удаление старых записей регистра.
Ограничения и риски
-
Качество извлечения ПД зависит от модели и промпта; возможны пропуски и лишние срабатывания.
-
Рискованные регулярные выражения повышают полноту, но увеличивают число ложных замен.
-
Маски и исходные строки — чувствительные данные; доступ к регистру и резервным копиям ИБ должен быть ограничен политиками безопасности.
-
После удаления записи регистра (в т.ч. регламентом) восстановить исходный текст по старой маске невозможно.
Краткая ссылка на объекты в коде
-
Настройки:
CommonModules/МПД_Настройки/Ext/Module.bsl -
Маскировка и Ollama:
CommonModules/МПД_ОбезличиваниеПерсональныхДанных/Ext/Module.bsl -
Регистр:
InformationRegisters/МПД_ПерсональныеДанные/Ext/ManagerModule.bsl -
Форма настроек:
CommonForms/МПД_Настройки/
Требования к 1С
Расширение не привязано к какой-то конкретной конфигурации 1С. Можно использовать для любой конфигурации, имеющей БСП.
Протестировано на платформе: 1С:Предприятие 8.3 (8.3.27.1719)
Конфигурация: Управление торговлей, редакция 11 (11.5.25.103)
Вступайте в нашу телеграмм-группу Инфостарт