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