Имя: Пароль:
1C
1C 7.7
v7: Получение значения периодического реквизита 1с 7.7
0 ring0
 
08.12.14
12:03
Добрый день! Есть самописная конфигурация на 1с 7.7. В ней есть справочник сотрудники, из коего извлекаются значения реквизитов. Вот таким способом:

асСотрудники = СоздатьОбъект("Справочник.Сотрудники");             асСотрудники.ИспользоватьРодителя(спБригада.ПолучитьЗначение(к));
асСотрудники.ВыбратьЭлементы(1);
Пока асСотрудники.ПолучитьЭлемент() = 1 Цикл
НоваяСтрока();             
Сотрудник = асСотрудники.ТекущийЭЛЕМЕНТ();
ЗаполнитьСтроку();
КонецЦикла;

И всё бы хорошо, но возникла новая задача -- получить значение периодического реквизита справочника Сотрудники на текущую дату.

Я пробовал такие варианты:
Сотрудник.ПериодРекв = Сотрудник.ПериодРекв.Получить(ДатаДок);
Сотрудник.ПериодРекв = Сотрудник.ПолучитьАтрибут("ПериодРекв").Получить(ДатаДок);

Но в итоге получал пустоту. Притом, если написать:

НоваяПеременная = Сотрудник.ПолучитьАтрибут("ПериодРекв").Получить(ДатаДок);

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

Может быть я спрашиваю глупость, прошу меня простить -- я только изучаю 1с 7.7
1 DCKiller
 
08.12.14
12:05
ИспользоватьДату(ДатаДок)
2 Ёпрст
 
08.12.14
12:06
(0) Типы не совпадают.

реквизит Сотрудник.ПериодРекв какого типа  в справочнике ?
3 Ёпрст
 
08.12.14
12:06
>>>Сотрудник.ПериодРекв = Сотрудник.ПериодРекв.Получить(ДатаДок);
Ну и это вообще какой-то поток сознания.
4 DCKiller
 
08.12.14
12:09
А мне интересно, чего это все клюшки изучать поперлись...
5 Рэйв
 
08.12.14
12:15
(4)В связи с кризисом многим будет не по карману 8-ка. Грядет массовый даунгрейд на клюшки!:-) Вот самые дальновидные зашевелились
6 DCKiller
 
08.12.14
12:17
(5) Самые дальновидные освоили клюшки еще лет 10 назад.
7 Рэйв
 
08.12.14
12:18
(6)Это да:-)
8 Ёпрст
 
08.12.14
12:29
Не , просто кто на клюшках, еще по-старинке ЗП в долларах платят в конвертике.
9 Ёпрст
 
08.12.14
12:30
Ну а тут - не детский фарт с курсом.
10 ring0
 
08.12.14
13:02
(1)
Спасибо, сейчас попробую
(2)
Реквизит Сотрудник.ПериодРекв имеет тип "Строка" длиной 5 символов
(4) (5) (6) (7) (8)
"Клюшка" обычно работает без моего участия, но тут ВНЕЗАПНО случилась реорганизация и меня попросили её поправить. ЗП, к сожалению, платят в рублях.
11 Ёпрст
 
08.12.14
13:13
>>>Проблема лишь в том, что мне надо чтобы реквизит извлекался в строку Сотрудник.ПериодРекв, а не лежал в отдельной переменной.

вот это вот рассшифруй, а то вот это всё

Сотрудник.ПериодРекв = Сотрудник.ПериодРекв.Получить(ДатаДок);
Сотрудник.ПериодРекв = Сотрудник.ПолучитьАтрибут("ПериодРекв").Получить(ДатаДок);


бред
12 compors
 
08.12.14
13:17
Сотрудник.ПериодРекв = Сотрудник.ПериодРекв.Получить(ДатаДок);
Сотрудник.ПериодРекв = Сотрудник.ПолучитьАтрибут("ПериодРекв").Получить(ДатаДок);

Это практически одно и тоже.
Пс. Есть 3 распространенных способа получения периодики (и парочка дополительных).

1. "ИспользоватьДату(ДатаДок)"
Зачение = Сотрудник.ПериодРекв;
2. Сотрудник.ПериодРекв.Получить(ДатаДок);
3. Ч/з объект периодический.

ПС. 1 и 2-й способы не совместимы, нельзя ИспользоватьДату + ПериодРекв.Получить(ДатаДок) либо один, либо другой.
13 ring0
 
08.12.14
13:21
(1)
Попробовал вот так:

асСотрудники = СоздатьОбъект("Справочник.Сотрудники");
асСотрудники.ИспользоватьРодителя(спБригада.ПолучитьЗначение(к));
асСотрудники.ВыбратьЭлементы(1);
асСотрудники.ИспользоватьДату(ДатаДок)
Пока асСотрудники.ПолучитьЭлемент() = 1 Цикл
НоваяСтрока();            
Сотрудник = асСотрудники.ТекущийЭЛЕМЕНТ();
ЗаполнитьСтроку();
КонецЦикла;

В отладчике опять пустота.

(11)

Мне необходимо чтобы реквизит "ПериодРекв" из справочника Сотрудники, вместе с другими реквизитами, присутствовал в "Сотрудник". Сейчас там реквизиты наименование, код и прочие заполняются верно, а ПериодРекв пустой.
Сейчас так:
код "003" наименование "Петров" ПериодРекв ""
Надо так:
код "003" наименование "Петров" ПериодРекв "Должность"
14 Duke1C
 
08.12.14
13:25
(13) показывай что у тебя в ЗаполнитьСтроку()
15 ring0
 
08.12.14
13:40
(14)


Процедура ЗаполнитьСтроку()
    Если Сотрудник.Выбран()=0 Тогда
        Возврат;
    КонецЕсли;
    Кл=СоздатьОбъект("Календарь.Пятидневка8");    
    Кл.УчитыватьПраздники(1);
    Кл.Автозаполнение(НачМесяца(ДатаДок),КонМесяца(ДатаДок));
    Кл.ВыбратьДаты(НачМесяца(ДатаДок),КонМесяца(ДатаДок));
    Для Д=1 По ДатаЧисло(КонМесяца(ДатаДок)) Цикл
        Кл.СледующаяДата();
        УстановитьАтрибут("Н"+Д,Кл.ПолучитьАтрибут("Значение"));
        Если Число(ПолучитьАтрибут("Н"+Д))=0 Тогда
            УстановитьАтрибут("Н"+Д,"В");
        КонецЕсли;
    КонецЦикла;
    Для Д=ДатаЧисло(КонМесяца(ДатаДок))+1 По 31 Цикл
        УстановитьАтрибут("Н"+Д,"Х");
    КонецЦикла;
КонецПроцедуры
16 DCKiller
 
08.12.14
13:43
(15) У тебя Сотрудник переменная модуля?
17 ring0
 
08.12.14
13:49
(16)
Нет, переменная в рамках процедуры. Вот целиком:

Процедура ЗаполнитьПоМастеру()
    Т = СоздатьОбъект("ТаблицаЗначений");
    Если спБригада.РазмерСписка() > 0 Тогда
        УдалитьСтроки();        
        Для к = 1 По спБригада.РазмерСписка()
        Цикл
            асСотрудники = СоздатьОбъект("Справочник.Сотрудники");
            асСотрудники.ИспользоватьРодителя(спБригада.ПолучитьЗначение(к));
            асСотрудники.ИспользоватьДату(ТекущаяДата());
            асСотрудники.ВыбратьЭлементы(1);
            асСотрудники.ИспользоватьДату(ДатаДок);
            Пока асСотрудники.ПолучитьЭлемент() = 1 Цикл
                НоваяСтрока();                           
                Сотрудник = асСотрудники.ТекущийЭЛЕМЕНТ();
                ЗаполнитьСтроку();
            КонецЦикла;
        
        КонецЦикла;
    КонецЕсли;  
            
    ВыгрузитьТабличнуюЧасть(Т,);      
    Т.НоваяКолонка("ПериодРекв");
    Т.ВыбратьСтроки();
    Пока Т.ПолучитьСтроку() = 1 Цикл
        Т.Код = Число(Т.Сотрудник.Код);
        Т.МояТабУпрОрг = Число(Т.Сотрудник.ПериодРекв);
    КонецЦикла;  
    Т.Сортировать("ПериодРекв+");
    ЗагрузитьТабличнуюЧасть(Т);  
    СортироватьСтроки("Сотрудник.ПериодРекв");
КонецПроцедуры
18 DCKiller
 
08.12.14
13:50
(17) М-да... ну и как ты хочешь, чтобы он ее у тебя во вложенной процедуре увидел?
19 Ёпрст
 
08.12.14
13:51
п...ц

И где заполнение ПериодРекв в Таблице значений перед ЗагрузитьТабличнуюЧасть ?
20 ring0
 
08.12.14
13:57
Я изначально думал что ЗаполнитьСтроку() такой же стандратный метод как НоваяСтрока(). Теперь понял свою ошибку, спасибо.