Имя и отчество сотрудника во внешней обработке
Всем привет! Я не программист, но мне нужна помощь. На работе установлена: 1С Предприятие 7.7, конфигурация "Расчет зарплаты в бюджетных организациях". Есть внешняя обработка Штатная книга, в которой формируются полностью: фамилия, имя и отчество. Просмотрела обработку через Конфигуратор, но не могу уловить - что нужно изменить в Модуле или что необходимо добавить, чтобы формировались фамилия и инициалы. Если кто-то может проконсультировать, буду благодарна.
Внешнюю обработку прилагаю
Внешнюю обработку прилагаю
Прикрепленные файлы:
Штатная книга.ert
По теме из базы знаний
- Преобразование букв ФАМИЛИЯ ИМЯ ОТЧЕСТВО в Фамилия Имя Отчество
- Универсальная загрузка данных формата Excel
- Замена английских букв в справочнике "Сотрудники организации", "Физические лица", РС "ФИО физических лиц". Украина.
- Работа с абстрактным массивом
- Заполнение e-mail и номера телефона сотрудников из ActiveDirectory для ЗУП 3.1
Найденные решения
+15 два раза один и тот же кусок использовать конечно не красиво, можно вынести в функцию, но работать и так будет....
А вообще Ваша конфа - это модификация ЗиКа ?
В ЗиКе есть вот такая функция
//******************************************************************************
// глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
// Объект - элемент справочника Сотрудники или Строка
// Фамилия - в этот параметр будет записана фамилия сотрудника
// Имя - в этот параметр будет записано имя сотрудника
// Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
// фамилия и инициалы сотрудника
//
// Описание:
// разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
// и возвращает фамилию и инициалы сотрудника
//
Тогда, если у Вас такая функция есть (это глобальный модуль), можно сделать проще
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; заменить на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
А вообще Ваша конфа - это модификация ЗиКа ?
В ЗиКе есть вот такая функция
//******************************************************************************
// глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
// Объект - элемент справочника Сотрудники или Строка
// Фамилия - в этот параметр будет записана фамилия сотрудника
// Имя - в этот параметр будет записано имя сотрудника
// Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
// фамилия и инициалы сотрудника
//
// Описание:
// разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
// и возвращает фамилию и инициалы сотрудника
//
Тогда, если у Вас такая функция есть (это глобальный модуль), можно сделать проще
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; заменить на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
у меня вашей конфигурации нет, но скорей всего в справочнике сотрудник фио вносится в одном поле.
В отчет я внесла изменения, где выделила инициалы. Попробуйте.
В отчет я внесла изменения, где выделила инициалы. Попробуйте.
Прикрепленные файлы:
Штатная книга.ert
(3) 2791, сформировала отчет. Инициалы есть. В этом всё хорошо. Но есть ошибки:
1. "Подразделение", "Должность" и "Категория персонала" обращаются к одному и тому же - "Выбор справочника", где каждый раз приходится открывать необходимый справочник. Нет непосредственного обращения к нужному справочнику.
2. Дата рождения не формируется. Появляется запись: "Значение не представляет агрегатный объект (ДатаРождения)", а в самом отчете вместо даты запись во всех строках: "ТЗППС.Сотрудник.ДатаРождения"
1. "Подразделение", "Должность" и "Категория персонала" обращаются к одному и тому же - "Выбор справочника", где каждый раз приходится открывать необходимый справочник. Нет непосредственного обращения к нужному справочнику.
2. Дата рождения не формируется. Появляется запись: "Значение не представляет агрегатный объект (ДатаРождения)", а в самом отчете вместо даты запись во всех строках: "ТЗППС.Сотрудник.ДатаРождения"
Функция ФамилияИО(ПолнИмя_) Экспорт
//Выделяет из полного имени фамилию и инициалы
// позиция первого пробела
Если ТипЗначенияСтр(ПолнИмя_)="Справочник" тогда
ПолнИмя=ПолнИмя_.Наименование;
иначе
ПолнИмя=ПолнИмя_;
КонецЕсли;
ПервПроб = Найти(ПолнИмя," ");
Если ПервПроб=0 Тогда
Возврат ПолнИмя;
Иначе
Фамилия = Лев(ПолнИмя,ПервПроб);
ИО = Сред(ПолнИмя,ПервПроб+1);
ИО = СокрЛ(ИО);
Имя = Лев(ИО,1)+".";
// позиция второго пробела
ВтПроб = Найти(ИО," ");
Если ВтПроб=0 тогда
//Если ПолнИмя на самом деле имеет структуру Иванов И.И.
ВтПроб = Найти(ИО,".");
КонецЕсли;
Если ВтПроб=0 Тогда
Возврат Фамилия+Имя;
Иначе
Возврат Фамилия+Имя+" "+Лев(СокрЛ(Сред(ИО,ВтПроб+1)),1)+".";
КонецЕсли;
КонецЕсли;
КонецФункции
//Выделяет из полного имени фамилию и инициалы
// позиция первого пробела
Если ТипЗначенияСтр(ПолнИмя_)="Справочник" тогда
ПолнИмя=ПолнИмя_.Наименование;
иначе
ПолнИмя=ПолнИмя_;
КонецЕсли;
ПервПроб = Найти(ПолнИмя," ");
Если ПервПроб=0 Тогда
Возврат ПолнИмя;
Иначе
Фамилия = Лев(ПолнИмя,ПервПроб);
ИО = Сред(ПолнИмя,ПервПроб+1);
ИО = СокрЛ(ИО);
Имя = Лев(ИО,1)+".";
// позиция второго пробела
ВтПроб = Найти(ИО," ");
Если ВтПроб=0 тогда
//Если ПолнИмя на самом деле имеет структуру Иванов И.И.
ВтПроб = Найти(ИО,".");
КонецЕсли;
Если ВтПроб=0 Тогда
Возврат Фамилия+Имя;
Иначе
Возврат Фамилия+Имя+" "+Лев(СокрЛ(Сред(ИО,ВтПроб+1)),1)+".";
КонецЕсли;
КонецЕсли;
КонецФункции
(10) wetka, проверьте такой вариант (прикреплен). Если возникнет та же проблема, что и в (5)п.1, тогда исправите так же (указать тип справочника в диалоге). Запуск через Файл - Открыть. Если всё в порядке, тогда переименуете прикрепленный файл и замените им Вашу обработку.
Прикрепленные файлы:
Штатная книга нов.ert
(11) конфу такую не нашёл, но вобщем-то и так ясною
Смотрите:
в первоначальном варианте - строка 172
ТЗППС.Сотрудник = Справочник.ТекущийЭлемент();
то есть там ССЫЛКА на элемент справочника, далее в таблице есть
"ТЗППС.Сотрудник.ДатаРождения" ,
где ДатаРождения - соответствующий реквизит элемента Сотрудник.
В исправленном варианте - строка 191
ТЗППС.Сотрудник= строка(фамилия+" "+имя+". "+отчество+".");
то есть это уже НЕ ссылка на элемент, а просто строка с ФИО сотрудника.
Естественно при обращении к
"ТЗППС.Сотрудник.ДатаРождения" возникает ошибка - никакого реквизита ДатаРождения у строки быть не может.
Что сделать?
Возьмите свой первоначальный отчёт,
найдите в модуле следующую строку
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; (она двжды встречается)
и замените её на следующий текст
ПолноеИмя=Строка(ТЗППС.Сотрудник);
ПолноеИмя=СокрЛП(ПолноеИмя);
ПозицияПервогоПробела = Найти(ПолноеИмя, " ");
Фамилия = Лев(ПолноеИмя, ПозицияПервогоПробела);
Фамилия=СокрЛП(Фамилия);
ИмяОтчество = Сред(ПолноеИмя, ПозицияПервогоПробела+1);
ИмяОтчество = СокрЛП(ИмяОтчество);
ПозицияТочки=Найти(ИмяОтчество,".");
ПозицияВторогоПробела = Найти(ИмяОтчество, " ");
Имя = Сред(ИмяОтчество,1, ПозицияВторогоПробела-1);
Имя=лев(Имя,1);
Отчество = Сред(ИмяОтчество, ПозицияВторогоПробела+1);
Отчество = лев(Отчество,1);
ПечТекстСтрокиВывод=строка(фамилия+" "+имя+". "+отчество+".");
алгоритм взят из (2).
Смотрите:
в первоначальном варианте - строка 172
ТЗППС.Сотрудник = Справочник.ТекущийЭлемент();
то есть там ССЫЛКА на элемент справочника, далее в таблице есть
"ТЗППС.Сотрудник.ДатаРождения" ,
где ДатаРождения - соответствующий реквизит элемента Сотрудник.
В исправленном варианте - строка 191
ТЗППС.Сотрудник= строка(фамилия+" "+имя+". "+отчество+".");
то есть это уже НЕ ссылка на элемент, а просто строка с ФИО сотрудника.
Естественно при обращении к
"ТЗППС.Сотрудник.ДатаРождения" возникает ошибка - никакого реквизита ДатаРождения у строки быть не может.
Что сделать?
Возьмите свой первоначальный отчёт,
найдите в модуле следующую строку
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; (она двжды встречается)
и замените её на следующий текст
ПолноеИмя=Строка(ТЗППС.Сотрудник);
ПолноеИмя=СокрЛП(ПолноеИмя);
ПозицияПервогоПробела = Найти(ПолноеИмя, " ");
Фамилия = Лев(ПолноеИмя, ПозицияПервогоПробела);
Фамилия=СокрЛП(Фамилия);
ИмяОтчество = Сред(ПолноеИмя, ПозицияПервогоПробела+1);
ИмяОтчество = СокрЛП(ИмяОтчество);
ПозицияТочки=Найти(ИмяОтчество,".");
ПозицияВторогоПробела = Найти(ИмяОтчество, " ");
Имя = Сред(ИмяОтчество,1, ПозицияВторогоПробела-1);
Имя=лев(Имя,1);
Отчество = Сред(ИмяОтчество, ПозицияВторогоПробела+1);
Отчество = лев(Отчество,1);
ПечТекстСтрокиВывод=строка(фамилия+" "+имя+". "+отчество+".");
алгоритм взят из (2).
+15 два раза один и тот же кусок использовать конечно не красиво, можно вынести в функцию, но работать и так будет....
А вообще Ваша конфа - это модификация ЗиКа ?
В ЗиКе есть вот такая функция
//******************************************************************************
// глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
// Объект - элемент справочника Сотрудники или Строка
// Фамилия - в этот параметр будет записана фамилия сотрудника
// Имя - в этот параметр будет записано имя сотрудника
// Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
// фамилия и инициалы сотрудника
//
// Описание:
// разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
// и возвращает фамилию и инициалы сотрудника
//
Тогда, если у Вас такая функция есть (это глобальный модуль), можно сделать проще
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; заменить на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
А вообще Ваша конфа - это модификация ЗиКа ?
В ЗиКе есть вот такая функция
//******************************************************************************
// глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
// Объект - элемент справочника Сотрудники или Строка
// Фамилия - в этот параметр будет записана фамилия сотрудника
// Имя - в этот параметр будет записано имя сотрудника
// Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
// фамилия и инициалы сотрудника
//
// Описание:
// разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
// и возвращает фамилию и инициалы сотрудника
//
Тогда, если у Вас такая функция есть (это глобальный модуль), можно сделать проще
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; заменить на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
(16) Timesoft, рассмотрела последний вариант и заменила только последнюю строку
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; на
Всё заработало. Вероятно, Вы правы по поводу модификации ЗиКа.
Есть еще вопрос. Если в Диалоге сделать флаг "ФИО полностью" с Идентификатором Тип4 и Тип4=1 при формировании отчета, то каким должен быть алгоритм, чтобы флаг указывал на Полное Имя, а его снятие давало только Фамилию и Инициалы?
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
Всё заработало. Вероятно, Вы правы по поводу модификации ЗиКа.
Есть еще вопрос. Если в Диалоге сделать флаг "ФИО полностью" с Идентификатором Тип4 и Тип4=1 при формировании отчета, то каким должен быть алгоритм, чтобы флаг указывал на Полное Имя, а его снятие давало только Фамилию и Инициалы?
(18) wetka,
Вместо
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
вставим следующую строку
ПечТекстСтрокиВывод=?(Тип4=1,ТЗППС.Сотрудник,глФамилияИмяОтчество(ТЗППС.Сотрудник));
при установленном флаге будет работать Ваш предыдущий вариант ТЗППС.Сотрудник, а при снятом - функция глФамилияИмяОтчество
Вместо
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
вставим следующую строку
ПечТекстСтрокиВывод=?(Тип4=1,ТЗППС.Сотрудник,глФамилияИмяОтчество(ТЗППС.Сотрудник));
при установленном флаге будет работать Ваш предыдущий вариант ТЗППС.Сотрудник, а при снятом - функция глФамилияИмяОтчество
(21) заполняется тут
ТЗППС.ВидМР=ТаблицаПриказов.Приказ.ВидМестаработы;
Вот всё же конфа Ваша - не совсем ЗиК - нет в ЗиК ВидМестаработы, поэтому поступим не совсем красиво, но думаю сработает.
Найдём строку и добавим после неё
если СокрЛП(ТЗППС.ВидМР) = "Штатный" Тогда
ТЗППС.ВидМР = "Основной";
ИначеЕсли СокрЛП(ТЗППС.ВидМР) = "Внутреннее совместительство" Тогда
ТЗППС.ВидМР = "Внутр. совместитель";
КонецЕсли;
ТЗППС.ВидМР=ТаблицаПриказов.Приказ.ВидМестаработы;
Вот всё же конфа Ваша - не совсем ЗиК - нет в ЗиК ВидМестаработы, поэтому поступим не совсем красиво, но думаю сработает.
Найдём строку и добавим после неё
если СокрЛП(ТЗППС.ВидМР) = "Штатный" Тогда
ТЗППС.ВидМР = "Основной";
ИначеЕсли СокрЛП(ТЗППС.ВидМР) = "Внутреннее совместительство" Тогда
ТЗППС.ВидМР = "Внутр. совместитель";
КонецЕсли;
(22) Timesoft, добавила, все отображается корректно. По аналогии сделала ставку вместо "0.5" -> "0,50" и т.п.(желание моего начальника ОК).
Подскажите, в какой литературе по 1с77 можно посмотреть коды отображения шрифтов? Мне нужно фамилию в штатке выделить жирным шрифтом и сделать заглавными буквами.
У нас установлена 1С Предприятие 7.7 для SQL (7.70.027).
Компоненты: Бухгалтерский учет, Оперативный учет, Расчет и Управление распределенными ИБ.
Подскажите, в какой литературе по 1с77 можно посмотреть коды отображения шрифтов? Мне нужно фамилию в штатке выделить жирным шрифтом и сделать заглавными буквами.
У нас установлена 1С Предприятие 7.7 для SQL (7.70.027).
Компоненты: Бухгалтерский учет, Оперативный учет, Расчет и Управление распределенными ИБ.
(23) wetka, да в ЖКК всё это есть
Жирный шрифт можно получить следующим образом
правой кнопкой щелкаем на нужной ячейке в таблице -> свойства - закладка Шрифт
А вот с заглавными буквами по-другому
Есть такая функция
Врег(<?>)
Синтаксис:
Врег(<Строка>)
Назначение:
Возвращает строку, полученную из исходной преобразованием всех символов в верхний регистр.
Параметры:
<Строка> - исходная строка.
Соответственно, можно в ячейке заменить
ТоЧтоВыводится на ВРег(ТоЧтоВыводится)
Жирный шрифт можно получить следующим образом
правой кнопкой щелкаем на нужной ячейке в таблице -> свойства - закладка Шрифт
А вот с заглавными буквами по-другому
Есть такая функция
Врег(<?>)
Синтаксис:
Врег(<Строка>)
Назначение:
Возвращает строку, полученную из исходной преобразованием всех символов в верхний регистр.
Параметры:
<Строка> - исходная строка.
Соответственно, можно в ячейке заменить
ТоЧтоВыводится на ВРег(ТоЧтоВыводится)
(24) Timesoft, дело в том, что мне нужно выделить только ФАМИЛИЮ. Если сделать в ячейке, то выделяется полностью и фамилия, и имя, и отчество. Поскольку изначально в конфигурации все вносится в одну строку, то выделить отдельно мне не представляется возможным. Только полезным советом.
Ну собственно говоря, можно разделить ячейку на две. В однй вывести фамилию, в другую - И.О. и поставить в первой жирный шрифт. Проблемка будет в форматировании (И.О. будет начинаться на одном уровне с разным пробелом от фамилии).
Есть еще вопрос по объединению ячеек одного и того же элемента. Прикрепила таблицу с примерами и комментарием. Ищу решение...Нужна подсказка...
Прикрепленные файлы:
Таблица к штатной книге.mxl
(31) wetka,
Посмотрел....
У Вас предполагается всегда две строки - если сотрудник работает только на основной, то вторая - пустая ?
Тогда варианты следующие.
1. Создаем секцию из двух строк, повторяющую строки с выводом информации (у вас это строка из Секции5). Для нужных ячеек (ФИО и Датарождения) выделяем ячейки первой и второй строки и объединяем их (Таблица - объединить)
В ячейках этой секции пропишем не прямые ссылки на ТЗППС, а переменные. Ну то есть вместо ТЗППС.Должность будем выводить в первой строке Должность_1, во второй Должность_2 и т.д.
При переборе ТЗППС для вывода присвоим переменным первой строки значения (Должность_1 = ТЗППС.Должность и т.д.)
Перейдём к следующей строке. Если сотрудник не изменился - Присвоим значения переменным второй строки (Должность_2 = ТЗППС.Должность и т.д.), если изменился - значит, у выбранного сотр нет совмещения - присвоим переменным второй строки пустые значения (Должность_1 = "" и т.д.). Выведем секцию....
Не забудем проверить - если сотр.уже изменился - переходить дольше не надо, если нет - перейдём на след.строку ТЗППС.
Посмотрел....
У Вас предполагается всегда две строки - если сотрудник работает только на основной, то вторая - пустая ?
Тогда варианты следующие.
1. Создаем секцию из двух строк, повторяющую строки с выводом информации (у вас это строка из Секции5). Для нужных ячеек (ФИО и Датарождения) выделяем ячейки первой и второй строки и объединяем их (Таблица - объединить)
В ячейках этой секции пропишем не прямые ссылки на ТЗППС, а переменные. Ну то есть вместо ТЗППС.Должность будем выводить в первой строке Должность_1, во второй Должность_2 и т.д.
При переборе ТЗППС для вывода присвоим переменным первой строки значения (Должность_1 = ТЗППС.Должность и т.д.)
Перейдём к следующей строке. Если сотрудник не изменился - Присвоим значения переменным второй строки (Должность_2 = ТЗППС.Должность и т.д.), если изменился - значит, у выбранного сотр нет совмещения - присвоим переменным второй строки пустые значения (Должность_1 = "" и т.д.). Выведем секцию....
Не забудем проверить - если сотр.уже изменился - переходить дольше не надо, если нет - перейдём на след.строку ТЗППС.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот