Склонение ФИО, должностей и подразделений в 1С? Это просто!    
   
Главная | Словоблудие | Изучаем | Подключаем | Склоняем | Файлы и ссылки
   

 

 


Склоняем с padeg.dll

Проведя столь важный этап инициализации, мы уже полностью готовы к склонению всех и вся. Для простоты и чистоты экспериментов предлагается минимально изменять глобальный модуль пустой конфигурации, при этом во всех экспериментах для проверки значений достаточно использовать стандартное средство 1С - Табло. Рекомендуется также установить файл справки Синтакс-Помощника для более удобной навигации по описаниям функций библиотеки. Для подключения ALS-справки к 1С-Предприятию (ей можно пользоваться в режиме Конфигуратора) просто поместите соответствующий ALS-файл в каталог исполняемых файлов V77 (по-умолчанию %ProgramFiles%\1Cv77\BIN, в таком случае ALS-справка будет доступна при открытии любой базы) или в каталог информационной базы (тогда справка будет доступна только при открытии этой базы). Если база уже открыта в Конфигураторе, то кликните правой кнопкой мыши в любом месте Синтакс-Помощника и выберите Обновить - во встроенной справке появится новый узел с соответствующим названием.

Начнем с испытания библиотеки. Откройте в Конфигураторе глобальный модуль пустой информационной базы и вставьте такой текст:

Перем PDS;
PDS = СоздатьОбъект( "Padeg.Declension" );

Сохраните изменения и запустите 1С в режиме "Предприятие" (F11 из Конфигуратора). Ничего не произошло? Если нет - замечательно, это значит, что наш объект успешно создан и у нас есть ссылка на него . (Если же получили сообщение об ошибке, то, скорее всего, что-то напутали с регистрацией класса) Проверим, так ли это. Откройте Табло (меню "Сервис"). В табло напишите имя созданной нами переменной PDS и нажмите Enter, после чего система должна вывести значение переменной:

PDS = OLE.IDeclension

COM-объекты общаются между собой посредством интерфейсов, IDeclension в нашем случае и есть интерфейс объекта библиотеки. Мы на финишной прямой. Напишите (можно "скопипастить", конечно, не забудьте только переключить раскладку на ввод кириллицы) в табло строчку (не стесняйтесь и вместо Пример-Примерыча укажите свои реальные данные):

PDS.GetFIOPadegFS( "Примеров Пример Примерович",, 3 )

После нажатия Enter система выведет результат склонения вашего собственного ФИО в дательный падеж ("кому"). Функция при этом автоматически попытается определить род, потому что он здесь не указан. Используя Табло, можно убедиться в работоспособности почти всего функционала библиотеки.

Ограничения padeg.dll

В списке методов объекта имеется процедура, предназначенная для разделения ФИО, записанного одной строкой, на составляющие (Ф, И, О). Данный метод - единственный в арсенале объекта, возвращающий значения результата в параметры, для проверки его работы проще всего добавить описания переменных и вызов метода в глобальный модуль, например, так:

Перем PDS, Фа, Им, От;
PDS = СоздатьОбъект( "Padeg.Declension" );
Фа = ""; Им = ""; От = "";
PDS.SeparateFIO( "Примеров Пример Примерович", Фа, Им, От);

Если перезапустить 1С в режиме "Предприятие" и проверить в табло значения переменных Фа,Им,От , то можно обнаружить, что они не принимают значений, т.е. остаются пустыми (на самом деле - становятся), хотя метод работает без ошибок! Данная странность проявляется только при работе с COM-объектом, созданным в среде 1С (на VBA или Delphi, например, всё отлично работает). Дело в том, что движок 1С "позволяет" такие выкрутасы только "своим" COM-серверам, реализующим определенные интерфейсы - внешним компонентам. Объект библиотеки Padeg таким условиям не удовлетворяет, поэтому метод и "шалит".

Объект библиотеки понимает всего 2 типа данных (строки и числа) и не производит никаких автоматических преобразований типов исходных данных. Если в ИБ имеется, например, справочник "Сотрудники" (типичная ситуация), то выполнение, скажем, следующего кода в форме списка этого справочника сгенерирует исключение "Плохой тип переменной":

Кому = PDS.GetFIOPadegFS( ТекущийЭлемент(),, 3 )

Это всегда следует учитывать при обработке агрегатных (в терминологии 1С) типов данных. Приведенный фрагмент должен выглядеть следующим образом:

Кому = PDS.GetFIOPadegFS( ТекущийЭлемент().Наименование,, 3 )

Склоняем с ndeclin.dll

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

Перем NDS;
ЗагрузитьВнешнююКомпоненту( "ndeclin.dll" );
NDS = СоздатьОбъект( "AddIn.NameDeclination" );
Спр = СоздатьОбъект( "Справочник.Сотрудники" );
Спр.ВыбратьЭлементы();
Спр.ПолучитьЭлемент();

Если всё сделано правильно, то в основном меню программы Сервис | Параметры должна появиться закладка "Склонение ФИО" (примерно такая, как на главной странице)

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

NDS.GetFIOPadegFS( Спр.ТекущийЭлемент().Наименование,, 3 )
NDS.getfiopadegfsAS( Спр.Наименование,, "3" )
NDS.ПолучитьСклонениеФИОизСтроки( Спр,"Муж.", "Дательный" ) NDS.ПолучитьСклонениеФИОизСтроки( Спр,"Female", "dat" )

В зависимости от вашей физиологии, одна из двух последних строчек (скорее всего, последняя) выдаст исходные данные без изменений - в той строке неверно указан род. Обратите внимание, в таком случае метод отработает без ошибок, просто не произойдет нужного преобразования.

Внешняя компонента нормально относится к элементам справочников, поэтому нет нужды "разворачивать" объекты агрегатных типов данных "до последней точки" ("Спр.Должность.Наименование"). Русскоязычные методы не вредят читабельности текстов модулей, а страница свойств позволяет удобно управлять параметрами словаря исключений.

Напоследок отметим, что новый движок фирмы 1С версии v8 поддерживает ту же самую "технологию внешних компонент", что и старая добрая 7ка, так что всё сказанное актуально и для модной нынче реинкарнации популярной отечественной программы.

Свои замечания и предложения можно оставить в гостевой книге.

Удачных склонений!

   
   
(C) 2007 NDeclin
   
Hosted by uCoz