Как реализовать склонение ФИО в печатной форме 1С 7.7 и куда вписать код

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Разработка и поддержка конфигураций на платформе 1С:Предприятие 7.7 в наши дни по-прежнему остается актуальной задачей. Одной из классических проблем, с которой сталкиваются программисты при формировании печатных форм (договоров, приказов, доверенностей), является необходимость автоматического склонения ФИО сотрудников или контрагентов по падежам. В отличие от современных версий платформы 1С 8.х, где существуют удобные встроенные механизмы, в «семерке» разработчику приходится решать эту задачу обходными путями.

В этой статье мы подробно разберем, как реализовать склонение ФИО в 1С 7.7 с использованием внешних библиотек и силами чистого кода на встроенном языке, а также детально изучим процесс интеграции готового решения в конфигурацию.

Способ 1. Использование официальной внешней компоненты NameDecl.dll

Рассмотрим наиболее надежный и точный способ решения нашей задачи — подключение специализированной библиотеки NameDecl.dll, которая поставлялась фирмой 1С. Логика склонения (правила русского языка, обработка исключений, определение пола) зашита внутри скомпилированного файла, что гарантирует высокую скорость работы и корректность результатов.

Для начала работы нам необходимо убедиться, что файл NameDecl.dll физически находится в каталоге базы данных (в подкаталоге Bin платформы или непосредственно в папке с базой данных). Проанализируем программный код, который осуществляет загрузку этой компоненты и выполняет склонение:


// Функция выполняет склонение ФИО с помощью внешней компоненты NameDecl.dll
Функция глПросклонятьФИО_NameDecl(ФИО, НомерПадежа, Пол = 0) Экспорт
    
    // Проверим наличие и успешность загрузки внешней библиотеки
    Если ЗагрузитьВнешнююКомпоненту("NameDecl.dll") <> 1 Тогда
        Предупреждение("Внимание! Не удалось загрузить компоненту NameDecl.dll. Склонение ФИО недоступно.");
        Возврат ФИО; // возвращаем исходную строку, если библиотека отсутствует
    КонецЕсли;
    
    Попытка
        // Создаем COM-объект склонения через стандартный метод 1С 7.7
        ОбъектПадеж = СоздатьОбъект("AddIn.NameDeclension");
    Исключение
        Предупреждение("Не удалось инициализировать объект AddIn.NameDeclension!");
        Возврат ФИО;
    КонецПопытки;
    
    // Вызываем метод склонения. 
    // Параметры метода Просклонять:
    // 1. Исходная строка (ФИО)
    // 2. Номер падежа (1 - Именительный, 2 - Родительный, 3 - Дательный, 4 - Винительный, 5 - Творительный, 6 - Предложный)
    // 3. Пол (0 - автоопределение, 1 - мужской, 2 - женский)
    РезультатСклонения = "";
    Попытка
        РезультатСклонения = ОбъектПадеж.Просклонять(ФИО, НомерПадежа, Пол);
    Исключение
        РезультатСклонения = ФИО;
        Сообщить("Ошибка при вызове метода Просклонять: " + ОписаниеОшибки(), "!");
    КонецПопытки;
    
    Возврат РезультатСклонения;
КонецФункции

Способ 2. Использование альтернативной библиотеки Padeg.dll

Выясним особенности работы с еще одной популярной внешней компонентой — Padeg.dll. Данная библиотека часто применяется в унаследованных системах автоматизации и отлично справляется со сложными фамилиями и именами собственными. Обратите внимание, что эта компонента регистрируется в операционной системе Windows как OLE-сервер.

Посмотрим на пример вызова функций библиотеки Padeg.dll из программного кода 1С 7.7:


// Функция склонения ФИО с помощью библиотеки Padeg.dll
Функция глПросклонятьФИО_Padeg(ФИО, НомерПадежа, Пол = 2) Экспорт
    // Параметр Пол в Padeg.dll принимает значения: 1 - мужской, 2 - женский, 3 - автоопределение
    
    ПеременнаяСклонения = "";
    Попытка
        // Создаем COM-объект
        СерверСклонения = СоздатьОбъект("Padeg.Declension");
        // Вызываем метод получения ФИО в нужном падеже
        // Синтаксис метода: GetFIOPadegFS(ФИО, Пол, НомерПадежа)
        ПеременнаяСклонения = СерверСклонения.GetFIOPadegFS(ФИО, Пол, НомерПадежа);
    Исключение
        Сообщить("Системная ошибка: библиотека Padeg.dll не зарегистрирована в ОС. " + ОписаниеОшибки(), "!");
        ПеременнаяСклонения = ФИО;
    КонецПопытки;
    
    Возврат ПеременнаяСклонения;
КонецФункции

Способ 3. Чистый код 1С 7.7 (Без использования внешних библиотек)

Рассмотрим ситуацию, когда по соображениям безопасности или из-за архитектурных ограничений (например, работа в терминальном режиме без прав администратора на сервере) регистрация сторонних DLL-файлов в системе невозможна. В этом случае мы можем позаимствовать проверенный временем алгоритм склонения из типовой конфигурации «1С:Зарплата и Кадры 7.7».

Для этого нам потребуется открыть конфигурацию «Зарплата и Кадры 7.7» в режиме Конфигуратора, зайти в Глобальный модуль и найти там встроенную функцию глПадежФИО и сопутствующие ей служебные процедуры анализа окончаний. Мы можем полностью перенести данный блок кода в свою рабочую базу. Ниже представлен пример того, как выглядит вызов такой функции после её переноса:


// Пример использования портированной функции из типовой ЗиК 7.7
Процедура ВыполнитьСклонениеНаЧистомКоде()
    ИсходноеИмя = "Иванов Петр Сидорович";
    // Вызов перенесенной функции глПадежФИО(ФИО, Падеж, Пол)
    // Где Падеж - объект "Падеж" (или числовой индекс падежа в зависимости от реализации)
    ФИО_Дательный = глПадежФИО(ИсходноеИмя, 3); 
    Сообщить("Кому: " + ФИО_Дательный);
КонецПроцедуры

Инструкция: Куда конкретно вписать программный код в 1С 7.7

Разберем детально процесс внедрения созданных функций в конфигурацию. В зависимости от бизнес-требований, мы можем разместить наш код либо глобально для всей системы, либо локально внутри конкретного документа.

Вариант А. Размещение кода в Глобальном модуле (Рекомендуется)

Если вам требуется склонять ФИО в различных печатных формах (например, в счетах-фактурах, актах, договорах и накладных), целесообразно вынести код в Глобальный модуль.

  1. Запустите программу 1С 7.7 в режиме Конфигуратор.
  2. В главном меню перейдите по пути: Конфигурация — Открыть конфигурацию.
  3. В появившемся дереве метаданных найдите самый верхний корневой элемент (название вашей конфигурации), нажмите на него правой кнопкой мыши и выберите пункт Глобальный модуль.
  4. Прокрутите открывшийся текстовый файл в самый низ. После всех существующих процедур и функций вставьте наш код склонения ФИО (например, функцию глПросклонятьФИО_NameDecl).
  5. Важное правило: в конце сигнатуры функции (перед её телом) обязательно укажите ключевое слово Экспорт. Без этого слова функция будет видна только внутри самого глобального модуля, и вы не сможете вызвать её из печатных форм документов.
  6. Сохраните изменения в конфигурации (нажав клавиши Ctrl + S).

Вариант Б. Размещение кода в Локальном модуле печатной формы

Если задача ограничивается изменением лишь одной конкретной печатной формы (например, внешней формы договора dogovor.ert), то засорять глобальный модуль не стоит. Впишем код локально:

  1. Откройте необходимый документ в дереве конфигурации или откройте файл внешнего отчета/обработки (расширение .ert) через меню Файл — Открыть.
  2. Перейдите на вкладку Модуль в нижней части окна редактора объекта.
  3. Поместите функцию склонения в самое начало модуля, перед процедурой формирования печати (например, перед процедурой Печать()). Ключевое слово Экспорт в данном случае указывать не требуется.

Выводим просклоненное значение в печатную форму (Таблицу)

Теперь разберем, как связать программный код с визуальным шаблоном печатной формы. Проанализируем по шагам процесс вывода подготовленной переменной на печать:

  1. Откройте вкладку Таблица (шаблон печатной формы) вашего документа или внешней обработки.
  2. Найдите ячейку, в которую должно выводиться ФИО в нужном падеже (например: "Договор заключен с...").
  3. Дважды кликните по этой ячейке для открытия окна свойств.
  4. В поле Тип обязательно установите значение Выражение (по умолчанию там может быть установлен "Текст").
  5. В поле Текст (которое теперь выступает в роли исполняемого кода) напишите обращение к нашей функции. Вы можете передать аргументы напрямую:

Пример записи выражения непосредственно в ячейке таблицы:

глПросклонятьФИО_NameDecl(Сотрудник.Наименование, 3)

Если вы предпочитаете готовить данные заранее в модуле документа (что является более профессиональным подходом с точки зрения читаемости кода), сделайте следующее:

  1. В процедуре печатной формы перед выводом секции таблицы объявите локальную переменную:

// Подготовка данных для вывода в печатную форму
ФИО_Дательный = глПросклонятьФИО_NameDecl(ВыбСотрудник.Наименование, 3);
// Код вывода секции таблицы, содержащей ячейку с выражением "ФИО_Дательный"
Таб.ВывестиСекцию("Строка_Договора");
  1. В свойствах ячейки таблицы укажите тип Выражение, а в самом поле выражения напишите имя созданной переменной: ФИО_Дательный.

Таким образом, мы успешно настроили систему динамического изменения окончаний ФИО. Использование внешних компонент или встроенных алгоритмов гарантирует правильное склонение фамилий, имен и отчеств ваших сотрудников, что значительно повысит качество формируемых документов и минимизирует количество ошибок, вызванных человеческим фактором.

← На главную