Учим внешнюю компоненту правильному склонению не только ФИО, но и должностей, и подразделений (ЗУП 2.5)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

64 Comments

  1. sound

    Исправьте опечатку «павильному» в заголовке

    Reply
  2. Alraune

    И еще «внешнЮю» там же

    Reply
  3. sound

    (2) странно, что я только одну ошибку заметил, наверно спать пора 🙂

    Reply
  4. Abadonna

    Чем так париться с перемещением по пробелу, имхо, проще так:

    // избавимся от лишних пробелов
    // запросто могут быть!
    Пока Найти(Стр,»  «)>0 Цикл
    Стр=СтрЗаменить(Стр,»  «,» «); // двойной пробел на одинарный
    КонецЦикла;
    // делаем многострочной и потом с ней работаем
    Стр=СтрЗаменить(Стр,» «,Символы.ПС);
    Сообщить(Стр);
    

    Показать

    В результате вместо:

    главный_ _ _ _ _специалист (_ — пробелы)

    получим:

    главный

    специалист

    Для А=1 По СтрЧислоСтрок(Стр) Цикл
    БудемСклонять=СтрПолучитьСтроку(Стр,А);
    КонецЦикла
    

    Reply
  5. director04

    Спасибо всем лингвистам за поправки — всегда был не в ладах с «великим и могучим» 😀

    Отдельное и искренне спасибо (4) за конструктивное пожелание. Код не претендует на максимальную оригинальность, а всего лишь показывает путь объезда узких мест в работе внешней компоненты.

    Если кому поможет — буду рад.

    Reply
  6. XoloD

    А если в родительном склонять должность заместитель генерального директора, то на выходе получается заместителя главного директорЫ

    Reply
  7. Kuzkin_otets

    Описание склоняемых фраз на старославянском — это однозначна плюс!!! 🙂

    Да призовете Главные специалисте!!!

    И да починита косяки юзерския!!! 🙂

    Reply
  8. XoloD

    (6) на выходе получается заместитель генерального директорЫ 🙂

    Reply
  9. CC

    начальника службы управлении персоналома 😀

    Reply
  10. cool.vlad4

    (9) надо делить пополам

    Кто? — начальник службы

    Кого? — начальника службы (родительный падеж)

    Кому? — начальнику службы

    Кого? — начальника службы (винительный падеж)

    Кем? — начальником службы

    О ком? — о начальнике службы

    и вторая часть управления персоналом, в общем я пользуюсь http://nano.yandex.ru/project/inflect/ без компонент

    Reply
  11. ApocalypseNTC

    Используйте немного упрощённую функцию. Работает на конфигурациях «БП,ЗУП,КА,УПП»

    Перем КомпонентаСклоненияФИО;

    Функция ПросклонятьФразуПоСловам(Знач Должность, Падеж) Экспорт

    Результат = «»;

    Для каждого
    Элемент из ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Должность, » «) Цикл

    Результат = Результат + КомпонентаСклоненияФИО.Просклонять(Элемент, Падеж) + » «;

    КонецЦикла;

    Возврат
    СокрЛП(Результат);

    КонецФункции

    КомпонентаСклоненияФИО = глЗначениеПеременной(«глКомпонентаСклоненияФИО»);

    Reply
  12. Лингвист

    Есть платная внешняя компонента Morpher.dll, вышеупомянутые должности склоняет на ура:

    генеральный директор

    главный специалист

    начальник службы управления персоналом

    http://morpher.ru/1c

    Reply
  13. director04

    (12)

    Лингвист пишет:

    Есть платная внешняя компонента Morpher.dll, вышеупомянутые должности склоняет на ура:

    А зачем платить деньги, если можно получить тот же результат — бесплатно?

    PS: Если не ошибаюсь, разработчики ЗУП уже включили данный механизм в типовую конфигурацию.

    Reply
  14. Лингвист

    Вся эта тема возникла из того, что встроенный в ЗУП механизм не справляется со склонением должностей, а предлагаемый метод разбивки на слова приводит к результатам:

    (8) заместитель генерального директорЫ

    (9) начальника службы управлении персоналома

    Буду рад, если покажете, как получить правильное склонение бесплатно.

    Reply
  15. nikk

    Спасибо.

    Использовал на Комплексной автоматизации, склоняет как надо.

    От меня Вам +

    Reply
  16. hobi

    С должностями и подразделениями не все так однозначно, как с ФИО (да и при склонении ФИО встречаются ошибки, например когда фамилия «по жизни» не склоняется, а компонента её склоняет). Особенность склонения представлений объектов, не являющихся ФИО, в том, что нужно склонять не все слова.

    Поскольку фантазия пользователей не ограничена, они вводят такие должности, которые «без разбега» и не выговорить. Как, например, просклонять следующую должность :

    Первый заместитель руководителя дивизиона — Управляющий директор ЗАО «Рога и копыта» ?

    В дательному падеже нужно бы получить

    Первому заместителю руководителя дивизиона — Управляющему директору ЗАО «Рога и копыта» .

    Т.е. склонять нужно первое, второе, пятое и шестое слово !

    Мне кажется, единственный подходящий способ следующий:

    — добавить в конфигурацию регистр сведений «ИсключенияСклонений», который имеет единственное строковое измерение «ИменительныйПадеж» и строковые ресурсы по остальным падежам;

    — в общий модуль ввести функцию «Просклонять» с двумя аргументами — склоняемая строка и номер падежа; Эта функция должна вначале искать нормализованное (в одном регистре, без лишних пробелов и знаков препинания) представление строки в регистре «ИсключенияСклонений». Если нашла, возвращать значение ресурса, соответствующее падежу. Если не нашла — возвращать результат склонения каждого слова с помощью компоненты склонения ФИО;

    — вынести в интерфейс печатных форм кнопку «Исключение склонений», которая будет вызывать, например, поиск строки выделенного блока результата печати в регистре ИсключенияСклонений и открывать форму для модификации или добавления исключений.

    Т.е. общий принцип — пользователь должен проверить результат печати (в табличном или текстовом документе) и, если считает, что фраза «Заместителя директора по кадрама» выведена неверно, выделить ошибочную фразу и нажать кнопку.

    Более изящного решения в голову не приходит.

    Reply
  17. director04

    (16) hobi, Мое решение я не ставлю как альфа и омега — это всего лишь удобный способ объехать большинство камней (не зря его взяли разработчики ЗУП в новые релизы конфигурации). Конечно неточностей склонений еще более чем предостаточно, но, в разы менее чем при стандартном методе.

    По вашему варианту решения: мое мнение — слишком громоздко и сложно для пользователей.

    Подозреваю, что и при этом методе вполне возможны подводные камни. Один изобретает щит, который не берет ни одно копье, другой — копье, которое пробивает любой щит ))))) Велик и многообразен руский язык. Без работы не останемся.

    PS: Спасибо за предложенное решение.

    Reply
  18. Лингвист

    (16) hobi,

    Да, возможность проверки и корректировки склонения пользователями могла бы многим упростить жизнь. Жаль, что ее нет в стандартных средствах 1С. А пока можно использовать стороннюю компоненту, которая правильно склоняет приведенный вами пример:

    Первый заместитель руководителя дивизиона — Управляющий директор ЗАО «Рога и копыта»

    И даже во множественном числе! 🙂 Вот описание компоненты:

    http://morpher.ru/1c

    Reply
  19. director04

    (18), Да я ЗА качественный коммерческий контент. Но, у человека должен быть и выбор: если человек не готов голосовать рублем, то данное решение эффективно, как правило в 85 случаях из 100.

    Только опять же, не стоит нарушать правила форума, которые не разрешают ссылки на сторонние ресурсы. Надо искать альтернативные способы саморекламы. Вам ведь, как и руководству Инфостарта, было бы неприятно видеть на своем сайте рекламу других ресурсов? Я не прав?

    Reply
  20. Лингвист

    (19) поддерживаю Вас в том, что у каждого должен быть выбор. И сообщение написал с этой целью — дать интересующимся этой темой возможность информированного выбора. Спамом я считаю не относящующся к теме информацию, а моя информация как раз в тему. На сайте Морфер.ру много ссылок на сторонние ресурсы, в т.ч. на конкурирующие продукты: http://morpher.ru/Competition

    Если нарушил правила форума, прошу прощения. Правила, запрещающего «ссылки на сторонние ресурсы», я не нашел. Было бы глупо запрещать релевантные, полезные ссылки. Пускай нас рассудит модератор.

    Reply
  21. director04
    Спамом я считаю не относящующся к теме информацию, а моя информация как раз в тему. На сайте Морфер.ру много ссылок на сторонние ресурсы, в т.ч. на конкурирующие продукты: http://morpher.ru/Competition

    Да, пожалуйста, собственно я не против, публикация то бесплатная ! 🙂

    Reply
  22. torgmontag_cto

    Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)

    ДолжностьРуководителяРодительный=ПросклонятьФразуПоСловам(<<?>>ДолжностьРуководителя,2); (Проверка: Толстый клиент (обычное приложение))

    Или где-то надо что-то дописать?

    Reply
  23. director04

    (22) torgmontag_cto,

    Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)

    Андрей, для начал необходимо чтоб вы озвучили версию программы. (включая название и номер релиза).

    Постараюсь помочь. Правда сейчас сильно отвлекает отчетность.

    Reply
  24. torgmontag_cto

    ЗУП_2.5.50.1 (8.2) Мне нужно просклонять ФИО и должность руководителя в трудовом договоре.

    Поправьте,пожалуйста,если что-то делаю не так…

    Добавляю строчку в коде(Общие Модули/Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, ЭтотОбъект) Экспорт):

    ДолжностьРуководителяРодительный = ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2);

    Добавляю Функцию…пишет ошибку:Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)

    Reply
  25. director04

    (24) torgmontag_cto,

    Добавляю Функцию…пишет ошибку:Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)

    Андрей, содержание ошибки говорит о том, что вы, перед тем как вызвать процедуру

    «ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2);»

    не определили переменную «ДолжностьРуководителя». То есть, программе нужно определить, откуда взять значение этой переменной.

    БОлее подробно могу дать совет, тоько после того, как вы дадите кусок редактируемого кода.

    Reply
  26. torgmontag_cto
    Reply
  27. director04

    (26) torgmontag_cto,

    Строку:ДолжностьРуководителяРодительный = ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2); поменял на:

    Макет.Параметры.ДолжностьРуководителя = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);

    и в самом макете задал параметр [ДолжностьРуководителяРП],но теперь на печатную форму вообще не выводится должность.

    Андрей, а для чего в самом макете вы объявили параметр [ДолжностьРуководителяРП] ?

    Посмотрите, выделенную вами красную фразу — там вы присваиваете значение параметру «ДолжностьРуководителя »

    Измените либо название параметра в Макете, либо измените красную строку на следующую:

    //***************

    Макет.Параметры.ДолжностьРуководителяРП = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);

    //*************

    Если не поможет, тогда рекомендую обратиться к более опытному программисту — подскажет.

    Reply
  28. torgmontag_cto

    Если так:

    Макет.Параметры.ДолжностьРуководителяРП = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);

    то должность вообще не выводится.

    Если так:

    Макет.Параметры.ДолжностьРуководителя = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);

    то выводит в именительном падеже.

    Но все равно спасибо…

    Reply
  29. torgmontag_cto

    Компонента работает,прошу прощения,не заметил,в типовой форме трудового договора должность склоняется.У меня внешняя обработка,скорее всего из-за этого.

    Reply
  30. torgmontag_cto

    Единственное,ФИО пишет с маленькой буквы

    Reply
  31. quares

    Не работает. Попробуйте: «Заведующий отделением»

    Reply
  32. director04

    Не работает. Попробуйте: «Заведующий отделением»

    Согласен. Корректная работа склонений достигается на 95% словосочетаний.

    Считаю, что это невысокая плата за «бесплатное решение проблемы«.

    Оставшиеся 5% словосочетаний можно поправить врукопашную. Если это так критично, то можно использовать платные внешние компоненты.

    Выбор остается за вами.

    Reply
  33. kanalex

    (30)надо убрать нРег() из кода, тогда все будет ОК

    Reply
  34. AlexO

    Меня всегда интересовал вопрос — а почему СклонениеФИО нужно выносить обязательно в отдельную компоненту? 1с-ники настолько тупы, что даже написать Склонение ФИО не могут на своем извращенческом языке? 🙂

    Reply
  35. inv7

    Потребовалось в фразе не изменять заглавные буквы. добавил параметр в вызове.

    Функция ПросклонятьФразуПоСловам(Знач ИсходнаяСтрока, Падеж, НР=ложь) Экспорт



    Результат = СокрЛП(Результат + » » + ?(НР,НРег(СловоВПадеже),СловоВПадеже));

    Автору респект.

    Reply
  36. alexpa2005

    Использовал код публикации с поправкой (35). Действительно, работает более корректно!!! Автору плюс.

    Reply
  37. maxim72e

    Спасибо, избавили от траты времени на создание велосипеда. Автору плюс.

    Reply
  38. Sasha255n

    У меня такой вопрос. Вот предположим стоит такая задача просклонять фамилию, но есть фамилии какие не склоняются типа Герасимчук как отделить те какие склоняются от тех какие не склоняются?

    Reply
  39. director04
    У меня такой вопрос. Вот предположим стоит такая задача просклонять фамилию, но есть фамилии какие не склоняются типа Герасимчук как отделить те какие склоняются от тех какие не склоняются?

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

    Компонента не в состоянии 100- процентно определить необходимость склонения.

    Но решение все же есть.

    Я поступил следующим образом:

    = добавил новый регистр сведений. Всего одно измерение «Падеж именит» — тип строка. И 5 ресурсов (все падежи)

    = При склонении фраз проверяю, есть ли в данном регистре точное соответствие фразы именительной, если есть, то выбираю склонение.

    В случае, если фраза не определена, то использую для склонения внешнюю компоненту (как рассказывал выше)

    Достоинство: склонять правильно можно абсолютно все . Правильный вариант определяет сам пользователь.

    Reply
  40. KliMich

    Спасибо! Пригодилось.

    P.S. Хотя не все должности и подразделения склоняет правильно (не взяло примерно 10%). Наверное идеального решения не сущестрвует…

    Reply
  41. елена777

    Спасибо, пригодилось! Но не все названия должностей и подразделений склоняет верно…

    Reply
  42. taasha25

    Спасибо!

    Reply
  43. agentesecreto

    УниверсальныеМеханизмы.Просклонять() в ЗУП 8.2 нормально склоняет Генерального директора, а в БП 8.2 почему-то выдает Генеральныя…

    спасибо автору

    Reply
  44. agentesecreto

    и все равно косячок, в родительном падеже… если должность вида прилагательное-существительное (например Генеральный директор) то склоняет правильно. а в случае если должность вида существительное-существительное (например если «Председатель правления», то результат будет «Председателя правлении»). для таких экзотических должностей пришлось сделать проверку на окончение второго слова, и если заканчивается на «-ия» то склонять только первое слово.

    Reply
  45. AlexO

    (39)

    И 5 ресурсов (все падежи)

    Маловато у вас падежей….

    (40) KliMich,

    Наверное идеального решения не сущестрвует…

    Может существовать. Просто подходить надо академически.

    вот тут уже писал на эту тему

    Reply
  46. AlexO

    (44) agentesecreto,

    пришлось сделать проверку на окончение второго слова, и если заканчивается на «-ия» то склонять только первое слово.

    Лаврентий <Палыч> Берия что-нибудь отстрелил бы, наверное, за такие склонения ))

    Reply
  47. Tapochki-tmn

    Даже при разбиении на отдельные слова:

    Начальник отдела продаж = Начальника отделы продажа

    Так что, разделение на слова не панацея, конечно.

    Где-то работает, где-то нет.

    Проверял в УПП 1.3 и в ЗУП на 23.07.2015 — одинаково.

    Наилучший вариант, который смог придумать — дополнительный реквизит в форме справочника должностей для указания должности в родительном падеже.

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

    Кому надо больше падежей, тому реализовывать более сложные механизмы, а для вывода должности в печатных формах договоров вполне сойдет.

    Reply
  48. director04

    (47) Tapochki-tmn, Я у себя использую другой способ: добавил в конфигурацию отдельный регистр сведений «СклоненияПроизвольныхФраз». Добавил в интерфейс пользователя вызов формы записи. Регистр имеет одно измерение «ИменительныйПадеж» и пять ресурсов — остальные падежи.

    При попытке получить склонение универсальная функция менеджера данного регистра пытается найти требуемую вам фразу по им-му падежу. Если находит — по возвращает требуемый падеж, какой заказал пользователь, ну а если не находит — то пытается просклонять по словам.

    Reply
  49. makaorel

    спасибо автору

    Reply
  50. spe1c

    (34) AlexO, Уже давно написан алгоритм склонения ФИО на языке 1С, я нашел в яндексе за 10 минут

    Reply
  51. semina-2016

    Спасибо автору еще раз))

    Reply
  52. Alexey_Gru

    Спасибо автору! Очень пригодилось с минимальными доработками!

    Reply
  53. lemni

    С подразделениями хуже. Стандартная компонента не хочет работать со средним родом. Например, Основное производство, компонента вообще никак не склоняет (ни по отдельности по словам, ни фразу целиком).

    Reply
  54. lemni

    Подскажите, Вы сталкивались со средним родом, может уже есть пути решения?

    Reply
  55. director04

    (54) lemni, Почитайте предыдущие посты — там есть решения с использованием доп. регистров сведений (лично я делаю так, да и в типовых редакциях 3.0 аналогичное решение).

    Если же конфигурация под замочком, то тогда можно «правильное» склонение хранить в хранилище значения, ключем фразы можно назначить саму фразу + падеж.

    Reply
  56. MICK77

    беда стандартного склонения это должности типа управляющий — управляющего

    еще на 77 были функции ПадежС и ПадежП. ПадежП как паз склоняет должности вполне корректно

    Reply
  57. cry

    столкнулся с данной проблемой, помогло public/330103/

    Reply
  58. Tavisdm

    ЗУП 3.1.

    Сотрудник -> Должность -> Позиция штатного расписания -> Наименование -> Склонение по падежам.

    Подскажите, пожалуйста, как можно получить во ВПФ эту информацию для выбранного сотрудника.

    Reply
  59. director04

    В ЗУП3.1 имеется механизм «Склонения объектов». Он позволяет для любой должности указать «правильное» склонение. (Просто зайти в элемент справочника и указать варианты для всех падежей)

    Reply
  60. Tavisdm

    (59) Спасибо за желание помочь. Но я не понимаю с чем мне связывать в запросе справочник Сотрудники. Подскажите, пожалуйста!

    Reply
  61. director04

    (60)

    Спасибо за желание помочь. Но я не понимаю с чем мне связывать в запросе справочник Сотрудники. Подскажите, пожалуйста!

    С регистром сведений «СклоненияПредставленийОбъектов». А лучше, воспользуйтесь функциями общих модулей библиотеки стандартных подсистем, такие как:

    — СклонениеПредставленийОбъектов.ПросклонятьФИОСПомощьюКомпоненты()

    — СклонениеПредставленийОбъектов.ПросклонятьПредставление

    — СклонениеПредставленийОбъектов.ПросклонятьФИО

    — СклонениеПредставленийОбъектов.ПросклонятьПредставлениеПоВсемПадежам

    Reply
  62. Tavisdm

    (61) Спасибо, Валерий, за подсказку. Сам не сообразил.

    Reply
  63. lev6975

    О, не, даже и не пытался… Ничем не заставишь программу склонять должность «оператор котлов», например, не как ФИО, он непременно просклоняет «оператора котлова»)))

    Поступил проще — в расширении к справочнику должности прибабахал поле «должность в родительном», пускай при создании новой должности заполняют сами один раз а потом юзают без вопросов

    Reply
  64. director04

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

    Сегодня гораздо удобней воспользоваться подсистемой склонение обьектов, входящей в БСП любой конфигурации

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *