Имя: Пароль:
1C
1С v8
обращение к таблице значений через com по индексу строки
,
0 hawksib
 
28.08.15
04:42
Вот такой код у меня перестал работать, когда функция начала возвращать Com-объект, подскажите как к таблице значений по индексу обратиться когда она передается через com соединение

                Причина = ПричинаОтсутсвия(ФизЛицоПоФИО, ДатаДня);
                Если Причина.Количество() <> 0 Тогда
                    ПричинаНарушенияГрафика = НРег(Причина[0].Причина);
                Иначе
                    ПричинаНарушенияГрафика = "";
                КонецЕсли;

Причина[0] выдает ошибку "Получение элемента по индексу для значения не определено"
1 Апош
 
28.08.15
04:44
переверни свой ком-объект в ТЗ
2 Апош
 
28.08.15
04:45
ТЗтут=ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ТЗтам))
3 hawksib
 
28.08.15
04:54
(2) не работает https://yadi.sk/i/mhDzzE7dihuRm
4 Галахад
 
гуру
28.08.15
05:03
Наверное "Причина" вовсе не таблица значений.
5 hawksib
 
28.08.15
05:04
(4) тогда что

Функция ПричинаОтсутсвия(ФизЛицо, Дата) Экспорт
    Запрос = мСоединение.NewObject("Запрос");
    Запрос.Текст =  
    "ВЫБРАТЬ
    |    СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник,
    |    СостояниеРаботниковОрганизацийСрезПоследних.Организация,
    |    СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник.ПодразделениеОрганизации КАК Подразделение,
    |    СостояниеРаботниковОрганизацийСрезПоследних.Состояние КАК Причина,
    |    СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник.Должность КАК Должность
    |ИЗ
    |    РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), Сотрудник.Физлицо = &ФизЛицо) КАК СостояниеРаботниковОрганизацийСрезПоследних
    |ГДЕ
    |    СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения > &Дата
    |    И СостояниеРаботниковОрганизацийСрезПоследних.Состояние <> &СостояниеРаботатет";
    Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("СостояниеРаботатет", мСоединение.Перечисления.СостоянияРаботникаОрганизации.Работает);
    Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
6 Апош
 
28.08.15
05:04
(3) сам догадаешься на ЗначениеВСтрокуВнутр(ТЗтам) посмотреть?
7 Апош
 
28.08.15
05:05
(5) гы. у тебя тут непримитивные типы
8 Апош
 
28.08.15
05:06
делай запрос к соседней базе без всяческих ТЗ
9 Галахад
 
гуру
28.08.15
05:09
Может результат запроса пустой?
10 Апош
 
28.08.15
05:10
(9) пустая ТЗ неплохо преобразовывается
11 hawksib
 
28.08.15
05:16
(9) пустая тз меня не интересует, по коду видно
(7) тут-то я и почуял подвох, переделаю, конечно, по другому, но все равно вопрос оставлю открытым, неужели нельзя по индексу обратиться?
12 Апош
 
28.08.15
05:18
(11) ком-объект - не коллекция. но иногда он умеет возвращать строку по номеру, я думаю
13 hawksib
 
28.08.15
05:53
переделал быдлокoд

Если Причина.Количество() <> 0 Тогда
                    Для Каждого Строка Из Причина Цикл
                        ПричинаНарушенияГрафика = мСоединение.String(Строка.Причина);
                        Прервать;
                    КонецЦикла;
                Иначе
                    ПричинаНарушенияГрафика = "";
                КонецЕсли;

работатет
14 Апош
 
28.08.15
05:54
ТЗоттуда.Получить() не работает?
15 hawksib
 
28.08.15
05:58
(14) неа, ошибка при вызове метода контекста
16 hawksib
 
28.08.15
06:00
(14) не опциональный параметр какой-то
17 Апош
 
28.08.15
06:03
Получить (Get)
Синтаксис:

Получить(<Индекс>)
Параметры:

<Индекс> (обязательный)


Примечание:

Применяется в случаях, когда использование оператора [] невозможно.
18 hawksib
 
28.08.15
06:16
(17) спасибо, работает, удаляю свой г..н.код
Закон Брукера: Даже маленькая практика стоит большой теории.