При работе с крупными контрагентами юристы и менеджеры часто сталкиваются с проблемой «раздутых» договоров. Начальный текст документа может составлять 20 страниц, а объем последующих дополнительных соглашений и протоколов разногласий — переваливать за сотню. В такой ситуации крайне сложно быстро определить, какая редакция конкретного пункта (например, об условиях отсрочки или размере штрафных санкций) действует в настоящий момент. Разберем, как спроектировать систему, которая позволит автоматически собирать актуальный текст договора, сохраняя историю всех изменений.
Традиционный подход, когда договор хранится в 1С в виде прикрепленного файла Word или PDF, не позволяет эффективно управлять изменениями. Для решения задачи нам необходимо перейти к атомарной структуре хранения. Проанализируем, что это означает на практике: договор должен рассматриваться не как монолитный текст, а как структурированный набор объектов (параграфов, пунктов и подпунктов) в базе данных.
Каждый пункт договора в системе должен иметь свой уникальный идентификатор (ID). В этом случае любое дополнительное соглашение (ДС) перестает быть просто «текстом на бумаге» и превращается в набор команд для системы:
Для реализации этой логики в 1С нам потребуется создать определенную структуру метаданных. Рассмотрим пошагово, какие объекты конфигурации помогут решить задачу:
1. Справочник «Пункты договоров». Здесь мы будем хранить структуру документа. Каждый элемент справочника привязан к конкретному договору и имеет иерархическую связь (родительские пункты и подчиненные подпункты).
2. Регистр сведений «История редакций пунктов». Это ключевой объект системы. Рассмотрим его измерения и ресурсы:
Договор, ПунктДоговора (ссылка на справочник), ДатаНачалаДействия.ТекстПункта (строка неограниченной длины), ДокументОснование (ссылка на ДС или протокол разногласий).Проанализируем работу этой схемы: когда подписывается новое ДС, ответственный сотрудник (юрист или менеджер) вносит изменения через специальную обработку. Система записывает в регистр новую строку с актуальной датой. При необходимости получить текст договора на текущий момент, мы просто делаем запрос к регистру сведений на актуальную дату (срез последних).
Одной из главных задач является удобная визуализация для руководителя. Мы хотим видеть не просто итоговый текст, но и понимать, каким документом внесены правки. Для этого лучше всего использовать HTML-поле на форме 1С.
Рассмотрим алгоритм формирования интерактивного текста:
Пример программного кода для сборки текста в HTML-поле может выглядеть следующим образом:
Функция СформироватьТекстДоговора(СсылкаНаДоговор, ДатаАктуальности) Экспорт
ТекстHTML = "<html><body>";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсторияПунктовСрезПоследних.ПунктДоговора.Заголовок КАК Заголовок,
| ИсторияПунктовСрезПоследних.ТекстПункта КАК Текст,
| ИсторияПунктовСрезПоследних.ДокументОснование КАК Основание
|ИЗ
| РегистрСведений.ИсторияПунктов.СрезПоследних(&Дата, Договор = &Договор) КАК ИсторияПунктовСрезПоследних
|УПОРЯДОЧИТЬ ПО
| ИсторияПунктовСрезПоследних.ПунктДоговора.Порядок";
Запрос.УстановитьПараметр("Дата", ДатаАктуальности);
Запрос.УстановитьПараметр("Договор", СсылкаНаДоговор);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстHTML = ТекстHTML + "<h3>" + Выборка.Заголовок + "</h3>";
ТекстHTML = ТекстHTML + "<p>" + Выборка.Текст;
ТекстHTML = ТекстHTML + " <small>(<a href='" + ПолучитьНавигационнуюСсылку(Выборка.Основание) + "'>изм. по ДС</a>)</small></p>";
КонецЦикла;
ТекстHTML = ТекстHTML + "</body></html>";
Возврат ТекстHTML;
КонецФункции
Чтобы упростить работу юриста, можно внедрить алгоритмы автоматического сравнения текстов (аналог режима исправлений в Word). Существует множество библиотек, реализующих diff алгоритмы. В 1С это можно реализовать через интеграцию с внешними скриптами на Python или используя встроенные возможности по работе со строками.
Выясним причину, почему это важно: когда юрист вставляет текст нового пункта из ДС, система может автоматически сравнить его с предыдущей версией в базе и подсветить только те слова, которые реально изменились (например, только сумму штрафа или срок оплаты). Это сводит риск человеческой ошибки к минимуму.
Современные технологии позволяют пойти еще дальше. Проанализируем возможность использования больших языковых моделей (LLM) для «разбора» сканов дополнительных соглашений. Сценарий работы может быть таким:
Подводя итог, выделим основные принципы создания качественного конструктора договоров:
Реализация такого проекта в 1С требует времени, но она окупается за счет кратного снижения юридических рисков и возможности за секунды получить ответ на вопрос: «Что у нас сейчас с отсрочкой по этому сложному контракту?».