Имя: Пароль:
1C
 
Как написать запрос, позволяющий вывести поля таблицы в документе и их типы данных?
0 TCD85
 
07.08.09
13:32
Т.е. Необходимо получить все поля таблицы и их типы данных (Наименования поля, Тип данных). Может кто знает как это сделать при помощи запроса. Документ можно для примера взять. "Реализация товаров и услуг" таблица "Товары".
1 Mort
 
07.08.09
13:36
Зачем?
2 Murzz
 
07.08.09
13:37
вроде никак
3 Рэйв
 
07.08.09
13:38
Проще будет через метаданные.
4 Михей
 
07.08.09
13:38
разве что динамически формировать текст запроса
5 TCD85
 
07.08.09
13:39
Я изучаю книжку "Использование запросов в системе "1С: Предприятия"
Там вот такое задание. Я вот тоже голову ломаю. Вроде тоже никак. Хотя может можно использовать Функцию "Тип".
6 Рэйв
 
07.08.09
13:39
(5)"Не всегда верь тому что написано"(С)Моска-Кассиопея.
Сам тоже думать не забывай.
7 quazare
 
07.08.09
13:41
(5) а скинь ссылочку на данную книжку - не знаю такую.... :(
8 Mitriy
 
07.08.09
13:41
Выбор Когда Таблица Ссылка Документ.ТакойТо Тогда
"ДокументСсылка: ТакойТо"
Когда...
...
Иначе
"Этого типа не учли"
Конец
9 TCD85
 
07.08.09
13:42
А через метаданные можете текст написать?
10 TCD85
 
07.08.09
13:47
http://MoiDisk.ru/12xptf4olv7e
Я выложил книгу. Там Практикум №7 Задание №1
11 Mort
 
07.08.09
13:48
В отладчике тормозишь выполнение, жмешь shift+F9 набираешь "метаданные" и все станет понятно самому.
12 Рэйв
 
07.08.09
13:50
(9)На вскидку нашел что первое попалось.Я так искад битые ссылки в свое время:-)
Медитируй
//--------------
Процедура кнОбъектНеНайденНажатие(Элемент)
   спДокументов=новый СписокЗначений;
   Для Каждого Эл Из спВидыДок Цикл
       Если Эл.Пометка Тогда
           спДокументов.Добавить(Эл.Значение);
       КонецЕсли;
       
   Конеццикла;    
   
   тБитые=Новый ТаблицаЗначений;
   тБитые.Колонки.Добавить("Тип");
   тБитые.Колонки.Добавить("ИД");
   
   Для Каждого ВыборкаМенеджер из Документы Цикл
       Если спДокументов.НайтиПоЗначению(ВыборкаМенеджер)=Неопределено Тогда
           Продолжить;
       КонецЕсли;    
       
       
       ОбработкаПрерыванияПользователя();
       н=0;
       Выборка=ВыборкаМенеджер.Выбрать();
       Пока Выборка.Следующий() Цикл
           н=н+1;
           Состояние(""+н+"."+Выборка.Ссылка);
           ОбработкаПрерыванияПользователя();
           Для Каждого Рек Из Выборка.Ссылка.Метаданные().Реквизиты цикл
               ОбработкаПрерыванияПользователя();
               
               ИмяРек=Рек.Имя;
               Если Лев(Строка(Выборка.Ссылка[ИмяРек]),7)="<Объект" Тогда
                   Сообщить("Реквизит."+Выборка.Ссылка+"... Имя="+ИмяРек+"...Значение="+Выборка[ИмяРек]);
                   НовСтр=тБитые.Добавить();
                   НовСтр.Тип=ТипЗнч(Выборка[ИмяРек]);
                   НовСтр.ИД=Строка(Выборка[ИмяРек]);
               КонецЕсли;
           Конеццикла;    
           СсылкаДок=Выборка.Ссылка;
           Для Каждого ТЧ Из СсылкаДок.Метаданные().ТабличныеЧасти Цикл
               Для Каждого Стр Из СсылкаДок[ТЧ.Имя] Цикл
                   Для Каждого РекТЧ Из ТЧ.Реквизиты Цикл
                       
                       ИмяРек=РекТЧ.Имя;
                       Если Лев(Строка(Стр[ИмяРек]),7)="<Объект" Тогда
                           Сообщить(""+СсылкаДок[ТЧ.Имя].Индекс(Стр)+".["+ТЧ.Имя+"]."+СсылкаДок+"... Имя="+ИмяРек+"...Значение="+Стр[ИмяРек]);
                           НовСтр=тБитые.Добавить();
                           НовСтр.Тип=ТипЗнч(Стр[ИмяРек]);
                           НовСтр.ИД=Строка(Стр[ИмяРек]);
                           
                       КонецЕсли;
                       
                   КонецЦикла;    
               Конеццикла
           КонецЦикла;    
       Конеццикла;    
       
   Конеццикла;    
   тБитые.Свернуть("Тип,ИД","");
   тДок=тБитые.Скопировать();
   ЭлементыФормы.тДок.СоздатьКолонки();
КонецПроцедуры
13 TCD85
 
07.08.09
13:50
(11)То понятно. Так даже можно смотреть тексты модулей обработок которые закрыты на изменения )))
14 Mitriy
 
07.08.09
13:58
(10) так в этом задании ничего про типы не сказано... ты это сам придумал...
15 TCD85
 
07.08.09
14:08
Хорошо я что там сказано по твоему?
16 Mitriy
 
07.08.09
14:10
(15) если коротко, то "написать запрос по шапке документа"...
17 TCD85
 
07.08.09
14:13
Ты это текст запроса можешь выложить? Я чтот не догоняю как это сделать.
18 Mitriy
 
07.08.09
14:16
Выбрать
Док.*
Из Документ.Приходная КАК Док
19 TCD85
 
07.08.09
14:17
Лол спасибо.