Консультация № 143282
07.09.2008, 17:41
0.00 руб.
07.09.2008, 17:46
0 9 1
В конфигурации 1С 7.7 Зарплата и кадры получил данные из документа ПриказПоОтпуску.
ДокОтпуск = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокОтпуск.Выбрать("Журнал.КадровыеПриказы");
Сотрудник=ДокОтпуск.Сотрудник;
Далее нужно получить должность и подразделение Сотрудника.
Пробовал получить из Справоник.Сотрудники, в одной конфигурации ЗиК сработало, в другой ЗиК нет.
Переменная Должность имеет тип Справочник.Должности.
Переменная Подразделение соотвтетственно Справочник.Подразделения.
Подскажите как правильно получить Должность и Подразделение сотрудника имея ФИО полученные из документа ПриказПоОтпуску.

Заранее благодарен за ответ.

Обсуждение

Неизвестный
08.09.2008, 10:29
общий
2 Kriman:
Я так понимаю, не срабатывает стандартный способ?
СотрДолжность=Сотрудник.Должность;
СотрПодразделение=Сотрудник.Подразделение;
Неизвестный
08.09.2008, 18:22
общий
Уважаемый Gl0betrotter, да по началу я так и сделал, но т.к. в документе ПриказПоОтпуску нет данных Должность и Подразделение и я пытаюсь их получить из справочника сотрудники.
Процедура НаКнопку()
ДокПриказПоОтпуску = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокПриказПоОтпуску.Выбрать("Журнал.КадровыеПриказы"); //выбираем нужный нам приказ
НомерДок=ДокПриказПоОтпуску.НомерДок;
Сотрудник=ДокПриказПоОтпуску.Сотрудник;
ДатаДок=ДокПриказПоОтпуску.ДатаДок;
КоличествоДнейОтпуска=ДокПриказПоОтпуску.КоличествоДнейОтпуска;
Начало=ДокПриказПоОтпуску.Начало;
Окончание=ДокПриказПоОтпуску.Окончание;
НачалоПериода=ДокПриказПоОтпуску.НачалоПериода;
ОкончаниеПериода=ДокПриказПоОтпуску.ОкончаниеПериода;
//Должность имеет тип Справочник.Должности
//Подразделение соотвтетственно Справочник.Подразделения
СпрСотрудники=СоздатьОбъект("Справочник.Сотрудники");
СпрСотрудники.ВыбратьЭлементы();
Пока СпрСотрудники.ПолучитьЭлемент() = 1 Цикл
Если Сотрудник = СпрСотрудники.ТекущийЭлемент() Тогда
Сообщить("равно"); // вот здесь сообщает равно, а как дальше?
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Неизвестный
09.09.2008, 10:03
общий
2 Kriman:

Вариант 1:

Процедура НаКнопку()
ДокПриказПоОтпуску = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокПриказПоОтпуску.Выбрать("Журнал.КадровыеПриказы"); //выбираем нужный нам приказ
НомерДок=ДокПриказПоОтпуску.НомерДок;
Сотрудник=ДокПриказПоОтпуску.Сотрудник;
ДатаДок=ДокПриказПоОтпуску.ДатаДок;
КоличествоДнейОтпуска=ДокПриказПоОтпуску.КоличествоДнейОтпуска;
Начало=ДокПриказПоОтпуску.Начало;
Окончание=ДокПриказПоОтпуску.Окончание;
НачалоПериода=ДокПриказПоОтпуску.НачалоПериода;
ОкончаниеПериода=ДокПриказПоОтпуску.ОкончаниеПериода;
//Должность имеет тип Справочник.Должности
//Подразделение соотвтетственно Справочник.Подразделения
СпрСотрудники=СоздатьОбъект("Справочник.Сотрудники");

СпрСотрудники.НайтиЭлемент(Сотрудник); //Просто производим позиционирование на конкретном элементе справочника
СотрДолжность=СпрСотрудники.Должность; //Определяемся с должностью
СотрПодразделение=СпрСотрудники.Подразделение; //Определяемся с подразделением
КонецПроцедуры

Вариант 2:

Процедура НаКнопку()
ДокПриказПоОтпуску = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокПриказПоОтпуску.Выбрать("Журнал.КадровыеПриказы"); //выбираем нужный нам приказ
НомерДок=ДокПриказПоОтпуску.НомерДок;
Сотрудник=ДокПриказПоОтпуску.Сотрудник;
ДатаДок=ДокПриказПоОтпуску.ДатаДок;
КоличествоДнейОтпуска=ДокПриказПоОтпуску.КоличествоДнейОтпуска;
Начало=ДокПриказПоОтпуску.Начало;
Окончание=ДокПриказПоОтпуску.Окончание;
НачалоПериода=ДокПриказПоОтпуску.НачалоПериода;
ОкончаниеПериода=ДокПриказПоОтпуску.ОкончаниеПериода;

СотрДолжность=Сотрудник.Должность; //Определяемся с должностью, незачем идти в справочник, если можем получить значение реквизита у объекта сразу
СотрПодразделение=Сотрудник.Подразделение; //Определяемся с подразделением, незачем идти в справочник, если можем получить значение реквизита у объекта сразу
КонецПроцедуры

Оба варианта ДОЛЖНЫ работать...
Неизвестный
09.09.2008, 14:12
общий
Gl0betrotter

Не работают оба. Второй и не должен работать, нет в ПриказПоОтпуску должности и подразделения.
Ранее у меня получалось получить должность и подразделение через Справочнк.Сотрудники
методом Получить() но работало только на одной конфигурации на другой аналогичной нет. Удалил этот код а теперь точно не помню как делал, да и зачем если там где нужно он и не работает.
Спасибо за помощь.
Неизвестный
09.09.2008, 14:33
общий
2 Kriman:

Вас понял. Просто Должность и Подразделение - это периодические реквизиты справочника. В таком случае несколько модифицируем ответ:

Вариант 1:

Процедура НаКнопку()
ДокПриказПоОтпуску = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокПриказПоОтпуску.Выбрать("Журнал.КадровыеПриказы"); //выбираем нужный нам приказ
НомерДок=ДокПриказПоОтпуску.НомерДок;
Сотрудник=ДокПриказПоОтпуску.Сотрудник;
ДатаДок=ДокПриказПоОтпуску.ДатаДок;
КоличествоДнейОтпуска=ДокПриказПоОтпуску.КоличествоДнейОтпуска;
Начало=ДокПриказПоОтпуску.Начало;
Окончание=ДокПриказПоОтпуску.Окончание;
НачалоПериода=ДокПриказПоОтпуску.НачалоПериода;
ОкончаниеПериода=ДокПриказПоОтпуску.ОкончаниеПериода;
//Должность имеет тип Справочник.Должности
//Подразделение соотвтетственно Справочник.Подразделения
СпрСотрудники=СоздатьОбъект("Справочник.Сотрудники");

СпрСотрудники.НайтиЭлемент(Сотрудник); //Просто производим позиционирование на конкретном элементе справочника
СотрДолжность=СпрСотрудники.Должность.Получить(ДатаДок); //Определяемся с должностью на дату документа
СотрПодразделение=СпрСотрудники.Подразделение.Получить(ДатаДок); //Определяемся с подразделением на дату документа
КонецПроцедуры

Вариант 2:

Процедура НаКнопку()
ДокПриказПоОтпуску = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокПриказПоОтпуску.Выбрать("Журнал.КадровыеПриказы"); //выбираем нужный нам приказ
НомерДок=ДокПриказПоОтпуску.НомерДок;
Сотрудник=ДокПриказПоОтпуску.Сотрудник;
ДатаДок=ДокПриказПоОтпуску.ДатаДок;
КоличествоДнейОтпуска=ДокПриказПоОтпуску.КоличествоДнейОтпуска;
Начало=ДокПриказПоОтпуску.Начало;
Окончание=ДокПриказПоОтпуску.Окончание;
НачалоПериода=ДокПриказПоОтпуску.НачалоПериода;
ОкончаниеПериода=ДокПриказПоОтпуску.ОкончаниеПериода;

СотрДолжность=Сотрудник.Должность.Получить(ДатаДок); //Определяемся с должностью на дату документа, незачем идти в справочник, если можем получить значение реквизита у объекта сразу
СотрПодразделение=Сотрудник.Подразделение.Получить(ДатаДок); //Определяемся с подразделением на дату документа, незачем идти в справочник, если можем получить значение реквизита у объекта сразу
КонецПроцедуры

Второй вариант тоже работоспособен (мало того, он еще и практичнее) - не смотря на то, что в документе "ПриказПоОтпуску" нет должности и подразделения, мы их берем непосредственно через реквизиты Сотрудника - смотрите, что я написал Сотрудник.Должность.Получить(ДатаДок) и Сотрудник.Подразделение.Получить(ДатаДок)
Неизвестный
10.09.2008, 20:59
общий
Gl0betrotter Огромное спасибо, второй вариан заработак как надо, первый даже не стал проверять, нет смысла. Я так и делал в самом начале Получить() только без ДатаДок.
Неизвестный
11.09.2008, 11:07
общий
2 Kriman:
Если Вы не против, для рассылки я помещу свой последний ответ из мини-форма в форму ответа?
Неизвестный
11.09.2008, 14:34
общий
Gl0betrotter, да конечно можете размещать, этот код мной использовался для вывода на печать справки об отпуске и выписки из приказа об увольнении (естественно при увольнении выбирается приказ об увольнении и заполняються другие поля, но принцип тот же).
Неизвестный
11.09.2008, 15:00
общий
это ответ
Здравствуйте, Kriman!

Процедура НаКнопку()
ДокПриказПоОтпуску = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокПриказПоОтпуску.Выбрать("Журнал.КадровыеПриказы"); //выбираем нужный нам приказ
НомерДок=ДокПриказПоОтпуску.НомерДок;
Сотрудник=ДокПриказПоОтпуску.Сотрудник;
ДатаДок=ДокПриказПоОтпуску.ДатаДок;
КоличествоДнейОтпуска=ДокПриказПоОтпуску.КоличествоДнейОтпуска;
Начало=ДокПриказПоОтпуску.Начало;
Окончание=ДокПриказПоОтпуску.Окончание;
НачалоПериода=ДокПриказПоОтпуску.НачалоПериода;
ОкончаниеПериода=ДокПриказПоОтпуску.ОкончаниеПериода;
//Должность имеет тип Справочник.Должности
//Подразделение соотвтетственно Справочник.Подразделения
СпрСотрудники=СоздатьОбъект("Справочник.Сотрудники");

СпрСотрудники.НайтиЭлемент(Сотрудник); //Просто производим позиционирование на конкретном элементе справочника
СотрДолжность=СпрСотрудники.Должность.Получить(ДатаДок); //Определяемся с должностью на дату документа
СотрПодразделение=СпрСотрудники.Подразделение.Получить(ДатаДок); //Определяемся с подразделением на дату документа
КонецПроцедуры

Вариант 2:

Процедура НаКнопку()
ДокПриказПоОтпуску = СоздатьОбъект("Документ.ПриказПоОтпуску");
ДокПриказПоОтпуску.Выбрать("Журнал.КадровыеПриказы"); //выбираем нужный нам приказ
НомерДок=ДокПриказПоОтпуску.НомерДок;
Сотрудник=ДокПриказПоОтпуску.Сотрудник;
ДатаДок=ДокПриказПоОтпуску.ДатаДок;
КоличествоДнейОтпуска=ДокПриказПоОтпуску.КоличествоДнейОтпуска;
Начало=ДокПриказПоОтпуску.Начало;
Окончание=ДокПриказПоОтпуску.Окончание;
НачалоПериода=ДокПриказПоОтпуску.НачалоПериода;
ОкончаниеПериода=ДокПриказПоОтпуску.ОкончаниеПериода;

СотрДолжность=Сотрудник.Должность.Получить(ДатаДок); //Определяемся с должностью на дату документа, незачем идти в справочник, если можем получить значение реквизита у объекта сразу
СотрПодразделение=Сотрудник.Подразделение.Получить(ДатаДок); //Определяемся с подразделением на дату документа, незачем идти в справочник, если можем получить значение реквизита у объекта сразу
КонецПроцедуры

Второй вариант тоже работоспособен (мало того, он еще и практичнее) - не смотря на то, что в документе "ПриказПоОтпуску" нет должности и подразделения, мы их берем непосредственно через реквизиты Сотрудника - смотрите, что я написал Сотрудник.Должность.Получить(ДатаДок) и Сотрудник.Подразделение.Получить(ДатаДок)

Удачи!

PS Ответ перенесен из мини-форума вопроса для отправки в рассылку.
Форма ответа