Всем привет! Я не программист, но мне нужна помощь. На работе установлена: 1С Предприятие 7.7, конфигурация "Расчет зарплаты в бюджетных организациях". Есть внешняя обработка Штатная книга, в которой формируются полностью: фамилия, имя и отчество. Просмотрела обработку через Конфигуратор, но не могу уловить - что нужно изменить в Модуле или что необходимо добавить, чтобы формировались фамилия и инициалы. Если кто-то может проконсультировать, буду благодарна.
Внешнюю обработку прилагаю
---
+15 два раза один и тот же кусок использовать конечно не красиво, можно вынести в функцию, но работать и так будет....

А вообще Ваша конфа - это модификация ЗиКа ?
В ЗиКе есть вот такая функция
//******************************************************************************
// глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
// Объект - элемент справочника Сотрудники или Строка
// Фамилия - в этот параметр будет записана фамилия сотрудника
// Имя - в этот параметр будет записано имя сотрудника
// Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
// фамилия и инициалы сотрудника
//
// Описание:
// разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
// и возвращает фамилию и инициалы сотрудника
//

Тогда, если у Вас такая функция есть (это глобальный модуль), можно сделать проще
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; заменить на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
---
у меня вашей конфигурации нет, но скорей всего в справочнике сотрудник фио вносится в одном поле.
В отчет я внесла изменения, где выделила инициалы. Попробуйте.
---
Что с отчетом пробовали?
---
2791, сформировала отчет. Инициалы есть. В этом всё хорошо. Но есть ошибки:
1. "Подразделение", "Должность" и "Категория персонала" обращаются к одному и тому же - "Выбор справочника", где каждый раз приходится открывать необходимый справочник. Нет непосредственного обращения к нужному справочнику.
2. Дата рождения не формируется. Появляется запись: "Значение не представляет агрегатный объект (ДатаРождения)", а в самом отчете вместо даты запись во всех строках: "ТЗППС.Сотрудник.ДатаРождения"
---
Функция ФамилияИО(ПолнИмя_) Экспорт
 //Выделяет из полного имени фамилию и инициалы
 // позиция первого пробела
 Если ТипЗначенияСтр(ПолнИмя_)="Справочник" тогда
  ПолнИмя=ПолнИмя_.Наименование;
 иначе
  ПолнИмя=ПолнИмя_;
 КонецЕсли;
 ПервПроб = Найти(ПолнИмя," ");
 Если ПервПроб=0 Тогда
  Возврат ПолнИмя;
 Иначе
  Фамилия = Лев(ПолнИмя,ПервПроб);
  ИО = Сред(ПолнИмя,ПервПроб+1);
  ИО = СокрЛ(ИО);
  Имя = Лев(ИО,1)+".";
  // позиция второго пробела
  ВтПроб = Найти(ИО," ");
  Если ВтПроб=0 тогда
   //Если ПолнИмя на самом деле имеет структуру Иванов И.И.
   ВтПроб = Найти(ИО,".");
  КонецЕсли;
  Если ВтПроб=0 Тогда
   Возврат Фамилия+Имя;
  Иначе
   Возврат Фамилия+Имя+" "+Лев(СокрЛ(Сред(ИО,ВтПроб+1)),1)+".";
  КонецЕсли;
 КонецЕсли;
КонецФункции
---
brunet, к сожалению, код в нашей конфигурации не работает. Пыталась что-то изменить, но без определенных знаний программирования в 1С7.7 ничего не получается. Буду искать дальше пути решения проблемы.
---
wetka, проверьте такой вариант (прикреплен). Если возникнет та же проблема, что и в (5)п.1, тогда исправите так же (указать тип справочника в диалоге). Запуск через Файл - Открыть. Если всё в порядке, тогда переименуете прикрепленный файл и замените им Вашу обработку.
---
Pari, спасибо, получилось. Правда, пришлось опять в Диалоге исправлять типы справочников. Вашу Функцию переместила в другое место - перед Процедурой Сформировать, т.к. очень медленно формировался отчет.
---
1. Исправила - указала тип справочника в Диалоге.
---
А отчет который выкладывали нормально формировался?
---
2791, да, нормально. Дата рождения формировалась в формате хх.хх.хххх. Сравнила две обработки До и После - изменений не нашла, которые могли повлиять на Дату рождения.
---
когда отчёт правится в другой конфе - слетают типы, которых в ней нет (два таких Вы уже нашли в (6), наверно есть ещё). Возьмите свой первоначальный и перенесите туда изменения алгоритма из (2)
---
Timesoft,, увы, всё то же самое: первоначальный + алгоритм из (2). Ищу решение проблемы...
---
wetka, Конфы Вашей нет под рукой, завтра постараюсь найти и посмотреть... Если до обеда не отпишусь - up-ните ветку
---
конфу такую не нашёл, но вобщем-то и так ясною
Смотрите:
в первоначальном варианте - строка 172
ТЗППС.Сотрудник = Справочник.ТекущийЭлемент();

то есть там ССЫЛКА на элемент справочника, далее в таблице есть
"ТЗППС.Сотрудник.ДатаРождения" ,
где ДатаРождения - соответствующий реквизит элемента Сотрудник.

В исправленном варианте - строка 191
   ТЗППС.Сотрудник= строка(фамилия+" "+имя+". "+отчество+".");
то есть это уже НЕ ссылка на элемент, а просто строка с ФИО сотрудника.
Естественно при обращении к
"ТЗППС.Сотрудник.ДатаРождения" возникает ошибка - никакого реквизита ДатаРождения у строки быть не может.

Что сделать?

Возьмите свой первоначальный отчёт,
найдите в модуле следующую строку
    ПечТекстСтрокиВывод=ТЗППС.Сотрудник; (она двжды встречается)
и замените её на следующий текст

ПолноеИмя=Строка(ТЗППС.Сотрудник);
    ПолноеИмя=СокрЛП(ПолноеИмя);
    ПозицияПервогоПробела = Найти(ПолноеИмя, " ");
    Фамилия = Лев(ПолноеИмя, ПозицияПервогоПробела);
    Фамилия=СокрЛП(Фамилия);
 ИмяОтчество = Сред(ПолноеИмя, ПозицияПервогоПробела+1);
    ИмяОтчество = СокрЛП(ИмяОтчество);
    ПозицияТочки=Найти(ИмяОтчество,".");
    ПозицияВторогоПробела = Найти(ИмяОтчество, " ");
    Имя = Сред(ИмяОтчество,1, ПозицияВторогоПробела-1);
    Имя=лев(Имя,1);
    Отчество = Сред(ИмяОтчество, ПозицияВторогоПробела+1);
    Отчество = лев(Отчество,1);
 ПечТекстСтрокиВывод=строка(фамилия+" "+имя+". "+отчество+".");

алгоритм взят из (2).
---
Выложите мдшник.
---
+15 два раза один и тот же кусок использовать конечно не красиво, можно вынести в функцию, но работать и так будет....

А вообще Ваша конфа - это модификация ЗиКа ?
В ЗиКе есть вот такая функция
//******************************************************************************
// глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
// Объект - элемент справочника Сотрудники или Строка
// Фамилия - в этот параметр будет записана фамилия сотрудника
// Имя - в этот параметр будет записано имя сотрудника
// Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
// фамилия и инициалы сотрудника
//
// Описание:
// разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
// и возвращает фамилию и инициалы сотрудника
//

Тогда, если у Вас такая функция есть (это глобальный модуль), можно сделать проще
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; заменить на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
---
Timesoft, рассмотрела последний вариант и заменила только последнюю строку
ПечТекстСтрокиВывод=ТЗППС.Сотрудник; на
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);
Всё заработало. Вероятно, Вы правы по поводу модификации ЗиКа.
Есть еще вопрос. Если в Диалоге сделать флаг "ФИО полностью" с Идентификатором Тип4 и Тип4=1 при формировании отчета, то каким должен быть алгоритм, чтобы флаг указывал на Полное Имя, а его снятие давало только Фамилию и Инициалы?
---
wetka,

Вместо
ПечТекстСтрокиВывод=глФамилияИмяОтчество(ТЗППС.Сотрудник);

вставим следующую строку
ПечТекстСтрокиВывод=?(Тип4=1,ТЗППС.Сотрудник,глФамилияИмяОтчество(ТЗППС.Сотрудник));
при установленном флаге будет работать Ваш предыдущий вариант ТЗППС.Сотрудник, а при снятом - функция глФамилияИмяОтчество
---
Timesoft, всё отлично! То, что нужно.
И еще вопрос по штатке. Как заменить в "ВидМР": слова "Штатный" и "Внутреннее совместительство", которые появляется в графе "Вид места работы", на слова "Основной" и "Внутр. совместитель" соответственно?
---
заполняется тут
ТЗППС.ВидМР=ТаблицаПриказов.Приказ.ВидМестаработы;

Вот всё же конфа Ваша - не совсем ЗиК - нет в ЗиК ВидМестаработы, поэтому поступим не совсем красиво, но думаю сработает.

Найдём строку и добавим после неё

если СокрЛП(ТЗППС.ВидМР) = "Штатный" Тогда
ТЗППС.ВидМР = "Основной";
ИначеЕсли СокрЛП(ТЗППС.ВидМР) = "Внутреннее совместительство" Тогда
ТЗППС.ВидМР = "Внутр. совместитель";
КонецЕсли;
---
Timesoft, добавила, все отображается корректно. По аналогии сделала ставку вместо "0.5" -> "0,50" и т.п.(желание моего начальника ОК).
Подскажите, в какой литературе по 1с77 можно посмотреть коды отображения шрифтов? Мне нужно фамилию в штатке выделить жирным шрифтом и сделать заглавными буквами.
У нас установлена 1С Предприятие 7.7 для SQL (7.70.027).
Компоненты: Бухгалтерский учет, Оперативный учет, Расчет и Управление распределенными ИБ.
---
wetka, да в ЖКК всё это есть
Жирный шрифт можно получить следующим образом
правой кнопкой щелкаем на нужной ячейке в таблице -> свойства - закладка Шрифт
А вот с заглавными буквами по-другому

Есть такая функция
Врег(<?>)
Синтаксис:
Врег(<Строка>)
Назначение:
Возвращает строку, полученную из исходной преобразованием всех символов в верхний регистр.
Параметры:
<Строка> - исходная строка.

Соответственно, можно в ячейке заменить
ТоЧтоВыводится на ВРег(ТоЧтоВыводится)
---
Timesoft, дело в том, что мне нужно выделить только ФАМИЛИЮ. Если сделать в ячейке, то выделяется полностью и фамилия, и имя, и отчество. Поскольку изначально в конфигурации все вносится в одну строку, то выделить отдельно мне не представляется возможным. Только полезным советом.
---
Случайная ошибка в закрытии вопроса!
---
Насколько я помню, выводите Вы фамилию и инициалы. То есть хотите фамилию жирным шрифтом, а ио обычным ? Думаю, не получится....
Только разделять на отдельные ячейки
---
Timesoft, только при формировании полного имени нужно выделение фамилии. Собственно говоря, я так и думала, что отдельно выделить нельзя. В 8-ке, наверное, было бы проще это сделать, т.к. там все вводится в отдельных ячейках.
---
Ну собственно говоря, можно разделить ячейку на две. В однй вывести фамилию, в другую - И.О. и поставить в первой жирный шрифт. Проблемка будет в форматировании (И.О. будет начинаться на одном уровне с разным пробелом от фамилии).
---
Ну собственно говоря, можно разделить ячейку на две
Если бы я знала как это сделать...Знаний нет, только на примерах могу что-то сотворить.
---
Если фамилию выделить заглавными буквами, она и так хорошо будет выделяться без жирности.
---
Есть еще вопрос по объединению ячеек одного и того же элемента. Прикрепила таблицу с примерами и комментарием. Ищу решение...Нужна подсказка...
---
wetka,
Посмотрел....
У Вас предполагается всегда две строки - если сотрудник работает только на основной, то вторая - пустая ?

Тогда варианты следующие.
1. Создаем секцию из двух строк, повторяющую строки с выводом информации (у вас это строка из Секции5). Для нужных ячеек (ФИО и Датарождения) выделяем ячейки первой и второй строки и объединяем их (Таблица - объединить)
В ячейках этой секции пропишем не прямые ссылки на ТЗППС, а переменные. Ну то есть вместо ТЗППС.Должность будем выводить в первой строке Должность_1, во второй Должность_2 и т.д.
При переборе ТЗППС для вывода присвоим переменным первой строки значения (Должность_1 = ТЗППС.Должность и т.д.)
Перейдём к следующей строке. Если сотрудник не изменился - Присвоим значения переменным второй строки (Должность_2 = ТЗППС.Должность и т.д.), если изменился - значит, у выбранного сотр нет совмещения - присвоим переменным второй строки пустые значения (Должность_1 = "" и т.д.). Выведем секцию....
Не забудем проверить - если сотр.уже изменился - переходить дольше не надо, если нет - перейдём на след.строку ТЗППС.
---
2 вариант.
Выводим строки, потом объединим нужные ячейки через
НашаТаблица.Область(ПервыйОюъедСтолбец,ПервОбъедСтрока,ПослОбъедСтолбец,ПослОбъедСтрока).Объединить();

здесь задачка - подсчитать нужные номера объединяемых строк и столбцов.