Имя: Пароль:
1C
1С v8
Универсальный запрос
0 rodrigez
 
28.05.13
17:00
Здравсвуйте! Не выполняется универсальный запрос к выбраным регистрам. Хочется узнать есть ли грамматические ошибки? Спасибо.

&НаСервереБезКонтекста
Функция ПроверитьСущесвуютЛиДвиженияПоРегистрамНакопления(ОбъектМетаданныхРегистр, СсылкаДокумент);
   Запрос = Новый Запрос;
   Запрос.Текст ="ВЫБРАТЬ
   |    "+ОбъектМетаданныхРегистр.Имя+".Регистратор.Ссылка  
   |ИЗ
   |    РегистрНакопления."+ОбъектМетаданныхРегистр.Имя+" Как ТекущийРегистр
   |ГДЕ
   |ТекущийРегистр.Регистратор.Ссылка = &РегистраторРегистраНакопления";  
   
   Запрос.УстановитьПараметр("РегистраторРегистраНакопления", СсылкаДокумент);
   РезульатЗапроса = Запрос.Выполнить();
   
   Если  Не РезульатЗапроса.Пустой() Тогда
       ЕстьЛиДвижения = Истина
   Иначе
       ЕстьЛиДвижения = Ложь;
   КонецЕсли;
   Сообщить(ЕстьЛиДвижения);
   Возврат ЕстьЛиДвижения;    
КонецФункции
1 salvator
 
28.05.13
17:02
Есть. "ВыбранНым".
2 ДенисЧ
 
28.05.13
17:02
Если есть ошибки, то 1с тебе про них скажет...
3 asady
 
28.05.13
17:03
(0) .Регистратор.Ссылка   - побежал за линейкой
4 Maxus43
 
28.05.13
17:04
точку останова тут: РезульатЗапроса = Запрос.Выполнить();

и смотри что в Запрос.Текст
и думай потом...
5 ДенисЧ
 
28.05.13
17:04
(3) думаешь, у него длинней и испугался?
6 Лефмихалыч
 
28.05.13
17:05
Во-первых, есть опечатки.
Во-вторых, скорее всего документ двигает не только регистры накопления, но и какие-то еще регистры, а код, который вызывает функцию ПроверитьВотЖтуВсюХунью() этого не учитывает и вызывает ее для всех прочих регистров тоже, а она в состоянии только накопления проверять
7 rodrigez
 
28.05.13
17:09
(6) Двигать не должен

Функция ПолучитьМакетНаСервере(ВыбДокумент)
   
   Макет = Обработки.ОтслеживаниеПроведенияДокументов.ПолучитьМакет("Макет");
   ТабДок = Новый ТабличныйДокумент;
   
   ОбластьЗаголовка = Макет.ПолучитьОбласть("Заголовок");
   ШапкаСвойствРегистров = Макет.ПолучитьОбласть("ШапкаСвойствРегистров");
   СвойстваРегистровНакопления = Макет.ПолучитьОбласть("СвойстваРегистровНакопления");
   СвойстваРегистровСведений = Макет.ПолучитьОбласть("СвойстваРегистровСведений");
   СвойстваРегистровРасчета = Макет.ПолучитьОбласть("СвойстваРегистровРасчета");
   СвойстваРегистровБухгалтерии = Макет.ПолучитьОбласть("СвойстваРегистровБухгалтерии");
   
   ОбъектОбработки = Объект.МетаДокумент.Ссылка.ПолучитьОбъект();
   МетаданныеДокумента = ОбъектОбработки.Метаданные();
   ОбластьЗаголовка.Параметры.СсылкаДокумент = ВыбДокумент;
   ТабДок.Вывести(ОбластьЗаголовка);
   ТабДок.Вывести(ШапкаСвойствРегистров);
   
   Номер = 0;
   Для Каждого РегистрОъектМетаданных Из МетаданныеДокумента.Движения Цикл
       ПолноеИмяОбъектаМетаданных = РегистрОъектМетаданных.ПолноеИмя();
       СтрукутраВидовРегистров = (ОпеределитьВидРегистра(РегистрОъектМетаданных));
       ПредставлениеРегистра = СтрукутраВидовРегистров.ВидРегистра+"."+СтрукутраВидовРегистров.НазваниеРегистра;        
       
       ВидРегистра = СтрукутраВидовРегистров.ВидРегистра;
       НазваниеРегистра = СтрукутраВидовРегистров.НазваниеРегистра;
       
       ПредставлениеВОтчете = ВидРегистра+"."+РегистрОъектМетаданных.Имя ;
       Номер = Номер+1;
       
       Если ВидРегистра = "РегистрыНакопления" Тогда
           ВидРегистраНакопления = РегистрОъектМетаданных.ВидРегистра;    
           
           СвойстваРегистровНакопления.Параметры.ВидИНазваниеРегистра = ПредставлениеВОтчете;
           СвойстваРегистровНакопления.Параметры.Номер = Номер;
           СвойстваРегистровНакопления.Параметры.СвойствоВидРегистра = ВидРегистраНакопления;
           ТабДок.Вывести(СвойстваРегистровНакопления);
           ДвиженияРН = ПроверитьСущесвуютЛиДвиженияПоРегистрамНакопления(РегистрОъектМетаданных, ВыбДокумент);

       ИначеЕсли  ВидРегистра = "РегистрыСведений"  Тогда
           ПериодичностьРегистраСведений = РегистрОъектМетаданных.ПериодичностьРегистраСведений;
           РежимЗаписи = РегистрОъектМетаданных.РежимЗаписи;
           
           СвойстваРегистровСведений.Параметры.ВидИНазваниеРегистра = ПредставлениеВОтчете;
           СвойстваРегистровСведений.Параметры.Номер = Номер;
           СвойстваРегистровСведений.Параметры.Периодичность = ПериодичностьРегистраСведений;
           СвойстваРегистровСведений.Параметры.РежимЗаписи = РежимЗаписи;
           ТабДок.Вывести(СвойстваРегистровСведений);  
           
                   ИначеЕсли  ВидРегистра = "РегистрыБухгалтерии"  Тогда    
           СвойстваРегистровБухгалтерии.Параметры.ВидИНазваниеРегистра = ПредставлениеВОтчете;
           СвойстваРегистровБухгалтерии.Параметры.Номер = Номер;
           ТабДок.Вывести(СвойстваРегистровБухгалтерии);  
           
       Иначе    
           СвойстваРегистровРасчета.Параметры.ВидИНазваниеРегистра = ПредставлениеВОтчете;
           СвойстваРегистровРасчета.Параметры.Номер = Номер;
           ТабДок.Вывести(СвойстваРегистровРасчета);  
       КонецЕсли;
       
       Сообщить(""+Номер +"."+ ПредставлениеРегистра);        
                       
   КонецЦикла;
   Возврат ТабДок;
КонецФункции
8 rodrigez
 
28.05.13
17:09
(6) а опечатки какие?
9 Лефмихалыч
 
28.05.13
17:11
(7) юзай отладчик, не телепи мозг
(8) посчитай буквы "РезульатЗапроса"
10 zladenuw
 
28.05.13
17:12
если проверяешь на регистратор. то можно и через объект получить регистры в которые пишутся движения
Ссылка.ПолучитьОбъект().Движения - а тут коллекция регистров
11 Bober
 
28.05.13
17:13
(0)
- заменить во всех местах Регистратор.Ссылка на Регистратор
- |"+ОбъектМетаданныхРегистр.Имя+".Регистратор.Ссылка
заменить на | ТекущийРегистр.Регистратор
12 Bober
 
28.05.13
17:15
(0) потом переделать запрос на

ВЫБРАТЬ ПЕРВЫЙ 1
   1 КАК ЕстьЗаписи ИЗ " + ОбъектМетаданныхРегистр.ПолноеИмя() + " КАК РН ГДЕ РН.Регистратор = &Регистратор";
13 Bober
 
28.05.13
17:16
(10) очень сомнительное предложение в плане производительности.
14 Лефмихалыч
 
28.05.13
17:17
(13) да там и так запрос в цикле, какая в зад производительность?..
15 Bober
 
28.05.13
17:19
(14) получить объект - уже затраты, прочитать все движения из базы - еще затраты. А требуется всего лишь по ссылке понять по каких регистрам есть движения.
PS запросом будет эффективнее
16 rodrigez
 
28.05.13
17:21
Спасибо
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn