|   |   | 
| 
 | 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 | 
        Я изначально думал что ЗаполнитьСтроку() такой же стандратный метод как НоваяСтрока(). Теперь понял свою ошибку, спасибо.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |