В крупных и средних компаниях процесс внесения новых контрагентов в информационную базу часто жестко регламентирован. Прежде чем внести нового партнера в систему, его должна проверить служба безопасности, юристы должны согласовать проект договора, а бухгалтерия — подтвердить корректность реквизитов. Для решения этой задачи идеально подходит программный продукт «1С:Документооборот» (1С:ДО).
Однако у начинающих разработчиков и аналитиков часто возникает ступор: как связать документ-заявку и элемент справочника Контрагенты? Ведь в «1С:Документооборот» сами «документы» (внутренние, входящие, исходящие) физически хранятся в справочниках конфигурации. Разберем детально, как спроектировать и внедрить этот процесс с нуля.
Прежде чем перейти к настройкам, проанализируем важную особенность архитектуры «1С:Документооборот». В отличие от учетных решений (таких как «1С:Бухгалтерия» или «1С:ERP»), где документы делают движения по регистрам бухгалтерии и накопления, в 1С:ДО документы — это инструменты для организации процессов, хранения файлов и реквизитов.
В версиях 1С:ДО 2.1 документы физически хранятся в иерархическом справочнике ВнутренниеДокументы. В версии 1С:ДО 3.0 концепция была модернизирована, и теперь они располагаются в едином справочнике ДокументыПредприятия. Таким образом, создание нового «вида документа» в пользовательском режиме — это фактически создание новой логической категории внутри единого справочника документов.
Для реализации нашей задачи мы можем пойти тремя путями:
---
Рассмотрим самый простой способ реализации, который не требует программирования и отлично подходит для базового внедрения функционала.
Шаг 1. Настройка нового вида документа
Перейдем в раздел НСИ — Виды документов и создадим новый вид документа:
ИНН (строка, обязательное для заполнения), КПП, Полное наименование, Вид контрагента (Юридическое или Физическое лицо).Шаг 2. Создание шаблона процесса
Для того чтобы заявка не просто висела в системе, а двигалась по регламентированному маршруту, настроим шаблон комплексного процесса (в 1С:ДО 2.1) или правило обработки документов (в 1С:ДО 3.0):
Контрагенты.Шаг 3. Создание контрагента исполнителем
Когда исполнителю приходит задача «Внести контрагента в базу», он открывает согласованную заявку, копирует из нее ИНН, переходит в справочник Контрагенты и нажимает кнопку Создать. Благодаря встроенному сервису «1С:Контрагент», система автоматически заполнит все реквизиты по ИНН из базы ФНС (ЕГРЮЛ/ЕГРИП).
После создания карточки исполнитель прикрепляет созданного контрагента к исходному документу-заявке (в качестве связанного объекта или заполняет стандартный реквизит «Контрагент» в документе) и закрывает задачу исполнения.
---
Если ручной ввод контрагента исполнителем кажется вам неэффективным, мы можем автоматизировать этот шаг. Выясним, как сделать так, чтобы система сама создавала элемент справочника Контрагенты в момент согласования заявки.
Для этого воспользуемся механизмом Обработчиков бизнес-событий (вкладка «Настройка и администрирование» — «Бизнес-события»). Этот функционал позволяет писать код на встроенном языке 1С непосредственно в пользовательском режиме, не снимая конфигурацию с поддержки.
Рассмотрим пример программного кода, который можно привязать к событию выполнения задачи согласования или к этапу автозапуска процесса:
// Получаем объект документа-заявки
ДокументОбъект = СсылкаНаОбъект.ПолучитьОбъект();
// Извлекаем ИНН из дополнительных реквизитов документа
ИННКонтрагента = "";
Для Каждого СтрокаРеквизита Из ДокументОбъект.ДополнительныеРеквизиты Цикл
Если СтрокаРеквизита.Свойство.Наименование = "ИНН" Тогда
ИННКонтрагента = СокрЛП(СтрокаРеквизита.Значение);
Прервать;
КонецЕсли;
КонецЦикла;
Если ПустаяСтрока(ИННКонтрагента) Тогда
ЗаписатьВЖурналРегистрации("СозданиеКонтрагента", УровеньЖурналаРегистрации.Предупреждение, , , "В заявке не заполнен ИНН!");
Возврат;
КонецЕсли;
// Проверяем дубли в базе, чтобы избежать хаоса в НСИ
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИННКонтрагента);
Если ЗначениеЗаполнено(НайденныйКонтрагент) Тогда
// Если контрагент уже существует, просто связываем его с документом
ДокументОбъект.Контрагент = НайденныйКонтрагент;
ДокументОбъект.Записать();
Иначе
// Создаем новый элемент справочника Контрагенты
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = ДокументОбъект.Наименование;
НовыйКонтрагент.ИНН = ИННКонтрагента;
// Заполняем прочие реквизиты по умолчанию
НовыйКонтрагент.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;
Попытка
НовыйКонтрагент.Записать();
// Связываем созданную карточку с нашей заявкой
ДокументОбъект.Контрагент = НовыйКонтрагент.Ссылка;
ДокументОбъект.Записать();
ЗаписатьВЖурналРегистрации("СозданиеКонтрагента", УровеньЖурналаРегистрации.Информация, , , "Успешно создан контрагент: " + НовыйКонтрагент.Наименование);
Исключение
ЗаписатьВЖурналРегистрации("СозданиеКонтрагента", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка записи контрагента: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Этот скрипт автоматически проверит базу на наличие дубликатов по ИНН, создаст новую карточку партнера и привяжет её к исходной заявке. Таким образом, юрист или исполнитель получит уже готовую карточку контрагента в один клик.
---
В реальной практике контрагенты чаще всего нужны не в самом Документообороте, а в финансовой системе предприятия — например, в «1С:Бухгалтерии» (БП) или «1С:ERP Управление предприятием». В таком случае рекомендуется использовать механизм Бесшовной интеграции.
Проанализируем оптимальную схему работы при такой архитектуре:
Контрагенты (настраиваются соответствующие права доступа).Заявка на контрагента непосредственно в ERP.Мы рассмотрели различные варианты решения задачи. Какой из них выбрать — зависит от масштаба вашей автоматизации: