Имя: Пароль:
1C
1C 7.7
v7: Запрос не выполняется
0 Milli
 
27.12.12
13:38
При выполнении запроса выдается ошибка и выкидывает из 1С. В чем может быть причина?

   Запрос = СоздатьОбъект("Запрос");    
   СчетЗаданный = счетпокоду("23.2");
   
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |ОбрабатыватьДокументы Проведенные;
   |Сч = Документ.РасходМатериалов.СчетЗатрат;
   |Автомобиль_ = Документ.РасходМатериалов.Субконто4;  
   |Материал = Документ.РасходМатериалов.Товар;
   |Количество_ = Документ.РасходМатериалов.Количество;
   |СумМатериал_ = Документ.РасходМатериалов.Сумма;";
   
   ТекстЗапроса = ТекстЗапроса+
   "
   |Группировка Автомобиль_ Без Упорядочивания Без Групп;";
   
   ТекстЗапроса = ТекстЗапроса+
   "
   |Группировка Материал Без Упорядочивания Без Групп;
   |Функция Количество = Сумма(Количество_);
   |Функция СумМатериал = Сумма(СумМатериал_);
   |Условие (сч = СчетЗаданный);";
   
   если ПустоеЗначение(Автомобиль) = 0 тогда
       ТекстЗапроса = ТекстЗапроса +
       "                            
       |Условие (Автомобиль_ в Автомобиль);";                      
   конецесли;    
   
   ТекстЗапроса = ТекстЗапроса +
   "
   |";                      
   
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;
1 ДенисЧ
 
27.12.12
13:40
Я НЕ стану угалывать ошибку с трёх букв...
2 KishMish
 
27.12.12
13:41
ну я не телепат конечно, но
1. |Материал = Документ.РасходМатериалов.Товар
3 Milli
 
27.12.12
14:01
(2) Даже если и пропишешь Товар как Товар.Наименование все равно выдается ошибка. И ошибка указывается вот на этот участок кода:
   если ПустоеЗначение(Автомобиль) = 0 тогда
       ТекстЗапроса = ТекстЗапроса +
       "                            
       |Условие (Автомобиль_ в Автомобиль);";                      
   конецесли;

Если ставишь в условии знак "=", все нормально формируется, а если "в", выдается ошибка.
4 пипец
 
27.12.12
14:04
сделай Автомобиль  списком значений
5 viktor_vv
 
27.12.12
14:04
А что такое Автомобиль ? Ревизит формы ? Какого типа ?
6 Ёпрст
 
27.12.12
14:21
для начала, выкинуть из кода "без упорядочивания"
7 Milli
 
27.12.12
14:38
(6)"без упорядочивания" убрала.
(4) сделала Автомобиль СЗ.
ничего не помогло.
(5) Реквизит расположен на форме. Тип "Справочник.Автомобили"
Может это все из-за того, что "Автомобиль_ = Документ.РасходМатериалов.Субконто4", а Автомобиль напрямую связан со справочником Автомобили?
8 Ёпрст
 
27.12.12
14:41
(7) без условия, работает ?
и
"не работает" в чем именно заключается ? Выборка пустая ?
9 Milli
 
27.12.12
14:45
Дело не в условии. В это условие попадает, смотрела в отладчике. А вот группировка пустая по Автомобилям и соответственно не попадает в группировку.
10 Ёпрст
 
27.12.12
14:47
(9) дык всё же запрос то рабочий, просто условия не верные, не так ли ?
11 Ёпрст
 
27.12.12
14:47
и это, закрой жуколов.
12 Milli
 
27.12.12
14:48
При выборке отдельного автомобиля, отчет формируется при условии "Условие ((Автомобиль_ = Автомобиль) или(Автомобиль_ в Автомобиль))". А еще нужно чтобы и по всей группе отчет формировался.
(11) что имеете ввиду под "закрой жуколов"?
13 Ёпрст
 
27.12.12
14:50
(12) отладчик закрой
14 Ёпрст
 
27.12.12
14:51
И это, перем Автомобиль нет в коде случаем ?
15 Ganiev
 
27.12.12
14:52
Автомобиль = СоздатьОбъект("СписокЗначений");
Автомобиль.ДобавитьЗначения(//Суеш сюда свои автомобили)
 
   СчетЗаданный = счетпокоду("23.2");
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |ОбрабатыватьДокументы Проведенные;
   |Сч = Документ.РасходМатериалов.СчетЗатрат;
   |Автомобиль_ = Документ.РасходМатериалов.//ТУТ ИМЯ РЕКВИЗИТА КАК ОН У ТЕБЯ НАЗЫВАЕТСЯ;  
   |Материал = Документ.РасходМатериалов.Товар;
   |Количество_ = Документ.РасходМатериалов.Количество;
   |СумМатериал_ = Документ.РасходМатериалов.Сумма;";
   
  // ТекстЗапроса = ТекстЗапроса+
   //"
   //|Группировка Автомобиль_ Без Упорядочивания Без Групп;";
   //Зачем тебе 2 раза одна и таже группировка?????
   ТекстЗапроса = ТекстЗапроса+
   "
   |Группировка Материал Без Упорядочивания Без Групп;
   |Функция Количество = Сумма(Количество_);
   |Функция СумМатериал = Сумма(СумМатериал_);
   |Условие (сч = СчетЗаданный);";
   
   если АвтомобильРазмерСписка() > 0 тогда
       ТекстЗапроса = ТекстЗапроса +
       "                            
       |Условие (Автомобиль_ в Автомобиль);";                      
   конецесли;
16 Milli
 
27.12.12
14:59
(15)
По списку значений я сделала так:

       если Автомобиль.ЭтоГруппа()=1 Тогда
           спр = создатьобъект("справочник.автомобили");  
           спр.ИспользоватьРодителя(Автомобиль,);
           спр.выбратьэлементы();
           пока спр.получитьэлемент()<>0 цикл
               СЗ = создатьобъект("списокзначений");
               сз.добавитьзначение(спр.текущийэлемент());  
           конеццикла;
           
           ТекстЗапроса = ТекстЗапроса +
           "                            
           |Условие (Автомобиль_ в сз);";    
       иначе
           
           ТекстЗапроса = ТекстЗапроса +
           "
           |Условие ((Автомобиль_ = Автомобиль) или(Автомобиль_ в Автомобиль));";                      
       конецесли;    

Говорю же, не помогает.

"|Автомобиль_ = Документ.РасходМатериалов.//ТУТ ИМЯ РЕКВИЗИТА КАК ОН У ТЕБЯ НАЗЫВАЕТСЯ;" - на счете 23.2 Субконто4 и есть справочник Автомобили. Здесь все правильно.

"Зачем тебе 2 раза одна и таже группировка?????" - что-то я не вижу второй группировки по автомобилям?
17 Milli
 
27.12.12
14:59
(14) такой переменной в модуле нет.
18 Ёпрст
 
27.12.12
15:01
без условия что выдает ?
19 ЧеловекДуши
 
27.12.12
15:04
По счетам лучше писать на Бух.Запросах. :)
20 Milli
 
27.12.12
15:05
(18)
если просто пишешь:

           спр = создатьобъект("справочник.автомобили");  
           спр.ИспользоватьРодителя(Автомобиль,);
           спр.выбратьэлементы();
           пока спр.получитьэлемент()<>0 цикл
               СЗ = создатьобъект("списокзначений");
               сз.добавитьзначение(спр.текущийэлемент());  
           конеццикла;
           
           ТекстЗапроса = ТекстЗапроса +
           "                            
           |Условие (Автомобиль_ в сз);";    

ничего не выводит

если пишешь:

           ТекстЗапроса = ТекстЗапроса +
           "
           |Условие ((Автомобиль_ = Автомобиль) или(Автомобиль_ в Автомобиль));";                      

выводит отчет только по отдельному автомобилю, по группе пусто.
21 Milli
 
27.12.12
15:08
(19) наверно так и сделаю, если не получится через такие запросы сделать.
22 Ёпрст
 
27.12.12
15:10
Еще раз, выкини нахрен условие на автомобиль, что есть в выборке ?

Там есть то, что ты потом пытаешься в фильтр запихнуть, или нет ?