Имя: Пароль:
1C
 
Как достать данные из табЧасть Справочника с помощью запроса
0 heyfec
 
13.12.14
14:48
Как достать реквизит РеквизитОдин?Пишешь Выборка.ТабЧасть.РеквизитОдин пишет нет такого реквизита.

Функция ЗапросТабличнойЧастиКолонкаОдин() Экспорт
КолонкаОдин = Новый Массив();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    Сотрудники.ТабЧасть.(
               |        Реквизит1 КАК РеквизитОдин
               |    ),
               |    Сотрудники.ФИО,
               |    Улицы.ФИО КАК ФИО1,
               |    Улицы.Улица
               |ИЗ
               |    Справочник.Сотрудники КАК Сотрудники
               |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Улицы КАК Улицы
               |        ПО Сотрудники.ФИО = Улицы.ФИО";
              
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Сбросить();
Пока Выборка.Следующий() Цикл
    
Сообщить(Выборка.ФИО + " " + Выборка.Улица);
Колонки = Выборка.ТабЧасть;
Для К = 0 по 1 Цикл
    Сообщить(Колонки);
КонецЦикла;
КонецЦикла;

Возврат КолонкаОдин;
КонецФункции
1 mrFreeman
 
13.12.14
14:52
пятнично, но сегодня суббота )
2 Sattelite
 
13.12.14
15:04
(0)Попробуй добавь синоним к ТабЧасть

Запрос.Текст = "ВЫБРАТЬ
               |    Сотрудники.ТабЧасть.(
               |        Реквизит1 КАК РеквизитОдин
               |    ) КАК ТабЧасть,
3 heyfec
 
13.12.14
15:12
Отвечает вот что
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(107)}: Поле объекта не обнаружено (РеквизитОдин)
    Сообщить(Колонки.РеквизитОдин);
4 heyfec
 
13.12.14
15:25
Если вот так то пишет
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Сбросить();
Пока Выборка.Следующий() Цикл
    
Сообщить(Выборка.ФИО + " " + Выборка.Улица);
Для Каждого ТабЧасть из Выборка Цикл
    Сообщить(ТабЧасть.РеквизитОдин);
КонецЦикла;
КонецЦикла;

Возврат КолонкаОдин;
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(107)}: Итератор для значения не определен
Для Каждого ТабЧасть из Выборка Цикл
5 heyfec
 
13.12.14
15:25
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(107)}: Итератор для значения не определен
Для Каждого ТабЧасть из Выборка Цикл
6 heyfec
 
13.12.14
15:56
Вот так он достает данные из табличной части без проблем. Но тут табЧасть находится на первом уровне.

Функция ЗапросТабличнойЧастиКолонкаОдин() Экспорт
КолонкаОдин = Новый Массив();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Справочники.Сотрудники);
Запрос.Текст = "ВЫБРАТЬ
               |    СотрудникиТабЧасть.Реквизит1 как РеквизитОдин
               |ИЗ
               |    Справочник.Сотрудники.ТабЧасть КАК СотрудникиТабЧасть";
              
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Сбросить();
Пока Выборка.Следующий() Цикл
Колонка = Выборка.РеквизитОдин;  

   Сообщить(Колонка);

КонецЦикла;
Возврат КолонкаОдин;
КонецФункции
7 Sattelite
 
13.12.14
16:27
(6)В таб части есть реквизит - "Ссылка", Это ссылка на таблицу с реквизитами шапки...
8 Кокорочка
 
13.12.14
16:30
ТС, Вы в (6) обращаетесь к табличной части справочника, а в (0) к самому справочнику.Разницу чувствуете?
9 heyfec
 
13.12.14
17:00
(8) Разницу чувствую, но как из (6) получить данные из РеквизитаОдин не понимаю.
10 heyfec
 
13.12.14
17:07
Если так то тоже не работает
Функция ЗапросТабличнойЧастиКолонкаОдин() Экспорт
КолонкаОдин = Новый Массив();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Справочники.Сотрудники);
Запрос.Текст = "ВЫБРАТЬ
               |    СотрудникиТабЧасть.Реквизит1 как РеквизитОдин
               |ИЗ
               |    Справочник.Сотрудники.ТабЧасть КАК СотрудникиТабЧасть";
              
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Сбросить();
Пока Выборка.Следующий() Цикл
Колонка = Выборка.ТабЧасть.Колонки.Получить(0);  

   Сообщить(Колонка.РеквизитОдин);

КонецЦикла;
Возврат КолонкаОдин;
КонецФункции
11 heyfec
 
13.12.14
17:09
Функция ЗапросТабличнойЧастиКолонкаОдин() Экспорт
КолонкаОдин = Новый Массив();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Справочники.Сотрудники);
Запрос.Текст = "ВЫБРАТЬ
               |    СотрудникиТабЧасть.Реквизит1 как РеквизитОдин
               |ИЗ
               |    Справочник.Сотрудники.ТабЧасть КАК СотрудникиТабЧасть";
              
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Сбросить();
Пока Выборка.Следующий() Цикл
Колонка = Выборка.ТабЧасть.Колонки.Получить(0);  
Для к=0 по 1 цикл
   Сообщить(Колонка.РеквизитОдин);
КонецЦикла
КонецЦикла;
Возврат КолонкаОдин;
КонецФункции

И так тоже не работает
12 s911Oleg
 
13.12.14
17:16
и где происходит заполнение массива "КолонкаОдин"?
13 heyfec
 
13.12.14
17:19
(12) Подожди пока до этого не дошли пока дошли до оператора Сообщить(Колонка.РеквизитОдин);
14 heyfec
 
13.12.14
17:29
По идее должно быть так
ИмяПеременной = КолонкаРезультатаЗапроса.ИмяКолонки
а для табличной части справочника
ИмяПеременной = КолонкаРезультатаЗапроса.ТабЧасть.ИмяКолонки
но так не работает не хватает кокого -то оператора.
15 heyfec
 
13.12.14
17:40
(13) В данном случае Сообщить(Колонка) выводит не то что находится в колонке а пишет "Коллекция колонок результата запроса" а то что в этих колонках написано вообще не выводит, а Сообщить(Колонка.РеквизитОдин); пишет нет такого реквизита хотя он есть и если этот запрос засунуть в отчет он выводит то что нужно, то есть запрос сам правильный.
16 Mankubus
 
13.12.14
17:50
научитесь пользоваться отладчиком
17 heyfec
 
13.12.14
18:04
И так тоже не работает
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    Сотрудники.ТабЧасть.(
               |        Реквизит1 КАК РеквизитОдин
               |    ),
               |    Сотрудники.ФИО,
               |    Улицы.ФИО КАК ФИО1,
               |    Улицы.Улица
               |ИЗ
               |    Справочник.Сотрудники КАК Сотрудники
               |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Улицы КАК Улицы
               |        ПО Сотрудники.ФИО = Улицы.ФИО";
              
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Сбросить();
Пока Выборка.Следующий() Цикл
    
Сообщить(Выборка.ФИО + " " + Выборка.Улица);
Колонки = Выборка.ТабЧасть.колонки;
Для каждого Колонка Из Колонки Цикл

ИмяПоля = Колонка.Имя;
зн = Выборка[ИмяПоля];
Сообщить(зн);
КонецЦикла;
КонецЦикла;
18 ДенисЧ
 
13.12.14
18:08
Учу пользоваться кнопкой F2. Дорого
19 heyfec
 
13.12.14
18:08
(16)Отладчиком я умею пользоваться
20 notebug
 
13.12.14
19:12
выборка.табчасть.выгрузить();
21 notebug
 
13.12.14
19:14
хотя бы в отладчике смотрели типы, с которыми работаете. это не так сложно
22 KSN
 
13.12.14
19:46
В отладчике и будет показывать таблицу значений, а на самом деле там выборка из запроса.
23 heyfec
 
13.12.14
22:14
Наконец-то заработало

КолонкаОдин = Новый Массив();

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    Сотрудники.ТабЧасть.(
               |        Реквизит1 КАК РеквизитОдин
               |    ),
               |    Сотрудники.ФИО,
               |    Улицы.ФИО КАК ФИО1,
               |    Улицы.Улица
               |ИЗ
               |    Справочник.Сотрудники КАК Сотрудники
               |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Улицы КАК Улицы
               |        ПО Сотрудники.ФИО = Улицы.ФИО";
              
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Сбросить();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.ФИО + " " + Выборка.Улица);
Колонки = Выборка.ТабЧасть.Выгрузить();
Для каждого Колонка Из Колонки Цикл
ЗН = Колонка.РеквизитОдин;
Сообщить("зн" + " " + ЗН);
КонецЦикла;
КонецЦикла;
24 heyfec
 
13.12.14
22:19
Спасибки
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн