Имя: Пароль:
1C
1С v8
Что в запросе у меня не так?
,
0 kyrgyz
 
24.06.12
23:29
Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ЗаказПокупателя.ДатаОтгрузки,
   |    ЗаказПокупателя.Товары.Номенклатура КАК Номенклатура,
   |   СУММА(ЗаказПокупателя.Товары.Количество) как Количество,
   |    ЗаказПокупателя.СкладГруппа
   |ИЗ
   |    Документ.ЗаказПокупателя КАК ЗаказПокупателя
   |ГДЕ
   |    ЗаказПокупателя.СкладГруппа = &СкладПолучатель
   |
   |СГРУППИРОВАТЬ ПО
   |    Номенклатура";// Вставить содержимое обработчика.
   
   Запрос.УстановитьПараметр("СкладПолучатель", СкладПолучатель);
   ВыборкаРезультата = Запрос.Выполнить().Выбрать();
   
   Пока ВыборкаРезультата.Следующий() цикл
       НоваяСтрока = ЭтотОбъект.Товары.Добавить();
       НоваяСтрока.Номенклатура = ВыборкаРезультата.Номенклатура;
       НоваяСтрока.Количество = ВыборкаРезультата.Количество;
   КонецЦикла;

Пишет Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(2027)}: Ошибка при вызове метода контекста (Выполнить)
   ВыборкаРезультата = Запрос.Выполнить().Выбрать();
по причине:
{(12, 2)}: Поле не найдено "Номенклатура"
<<?>>Номенклатура
1 Пеппи
 
24.06.12
23:30
ты вручную чтоли группировал? неправильная у тя группировка то.
2 Пеппи
 
24.06.12
23:31
сделай автоматом с помощью конструктора
3 kyrgyz
 
24.06.12
23:31
Конструкторм сделал потом кое что удалил
4 Пеппи
 
24.06.12
23:32
а зачем? О_о говорю же, неправильно сгруппировано
5 PR
 
24.06.12
23:32
(3) LOL
6 PR
 
24.06.12
23:33
Человек видимо перепутал СГРУППИРОВАТЬ и ИТОГИ
7 kyrgyz
 
24.06.12
23:34
Не смейтесь товарищи делаю в первый раз. Мало ли бывает.
8 PR
 
24.06.12
23:35
(7) Делаешь в первый раз — не шлифуй руками, доверься конструктору.
Да и вообще не стоит руками что-то править.
9 kyrgyz
 
24.06.12
23:41
Сделала еще раз внемааательно. Ошибок нет. Это уже радостно.

Но блин не грузится док!?

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

   Запрос.УстановитьПараметр("дата", дата);
   Запрос.УстановитьПараметр("СкладПолучатель", СкладПолучатель);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       // Вставить обработку выборки ВыборкаДетальныеЗаписи
   КонецЦикла;

   Пока ВыборкаДетальныеЗаписи.Следующий() цикл
       НоваяСтрока = ЭтотОбъект.Товары.Добавить();
       НоваяСтрока.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
       НоваяСтрока.Количество = ВыборкаДетальныеЗаписи.Количество;
   КонецЦикла;
10 kyrgyz
 
24.06.12
23:44
По ходу понимаю что даты ведь не совпадают. В документе загрузки с временем дата а в исходном без времени.

Как это одолеть?
11 experimentator76
 
24.06.12
23:44
(9) "Сделала" "Пол:Мужской"
о_О
12 kyrgyz
 
24.06.12
23:47
(11) Да не русский я. Не обращай внимания тем более это у меня чисто механическая ошибка. Лучше делом помоги.
13 kyrgyz
 
24.06.12
23:48
(11) лучше был бы пол женский, помогли бы быстрее :)
14 experimentator76
 
24.06.12
23:50
(13) женский+фотка
15 experimentator76
 
24.06.12
23:50
(12) ни разу так не описывался
16 kyrgyz
 
24.06.12
23:51
Пишет:

{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(2044)}: Поле объекта не обнаружено (Номенклатура)
       НоваяСтрока.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
17 notebug
 
24.06.12
23:53
один цикл прибей
18 kyrgyz
 
24.06.12
23:53
Уже прибил. Дошло до (16)
19 kyrgyz
 
24.06.12
23:55
Как из выборки запроса выбрать мне  Номенклатуру то?
20 notebug
 
24.06.12
23:55
твоя номенклатура сидит в ТЧ и "ВыборкаДетальныеЗаписи.Номенклатура" само собой не обнаружено. такой запрос ай-ай...
21 experimentator76
 
24.06.12
23:57
запрос дурацкий
22 notebug
 
24.06.12
23:57
+(20) тебе нужно перебирать строки ТЧ, чтобы получить номенклатуру, а в данный момент ты получаешь поля выбранные (дата, склад) + коллекцию значений в виде таб части "Товары"
23 kyrgyz
 
24.06.12
23:58
(20) Умом я понимаю что ТЧ это отдельная таблица. Но запрос от клюшек ведь сломал мой мозг
24 kyrgyz
 
24.06.12
23:59
(22) Может в запросе бырать доки а потом без запроса по документам ходит по их табличной части?
25 Пеппи
 
25.06.12
00:00
(9) не найден документ просто. задача в чем, по запросу непонятно совершенно.
26 experimentator76
 
25.06.12
00:00
(24) ни в коме случае
27 experimentator76
 
25.06.12
00:00
(23) в данном случае надо делать вложенную выборку и выборки верхнего уровня по ТЧ
28 kyrgyz
 
25.06.12
00:01
(27) Есть док Перемещение в него надо грузануть данные из документа ЗаказыПокупателей отбор по складу и по дате.
29 experimentator76
 
25.06.12
00:01
либо использовать итоги в запросе
30 experimentator76
 
25.06.12
00:01
в конце концов почитай литературу по запросам
31 Пеппи
 
25.06.12
00:02
(28) параметры как заполняешь? но дата у тебя точно неправильно заполняется ;))
32 experimentator76
 
25.06.12
00:03
ладно девочки я спать))
33 kyrgyz
 
25.06.12
00:03
(30) Каюсь что недочитал. Вот надо же взять  задачу и еще обещать завтра к утру сделать.

(31) Понимаю что дата нет так заполняется. Но как правильно не знаю.
34 Пеппи
 
25.06.12
00:06
Дата задается в документах с точность до секунды, так понятно? Используй вместо равенства неравенство и все будет ок ;)
35 kyrgyz
 
25.06.12
00:11
(34) ДА понял я это еще как сделал запрос и глянул на даты дока и дату отгрузки дата отгрузки без времени а док с временем. А Правильно не знаю. Прочитать откуда тоже пока не могу найти.
36 kyrgyz
 
25.06.12
00:12
И как перебрать из тч не знаю.
37 notebug
 
25.06.12
00:12
(9) можно особо не заморачиваться, убрать из запроса агрегацию (СУММА) и группировку:

Запрос.Текст =
       "ВЫБРАТЬ
       |    ЗаказПокупателя.ДатаОтгрузки,
       |    ЗаказПокупателя.СкладГруппа,
       |    ЗаказПокупателя.Товары.(
       |        Количество,
       |        Номенклатура
       |    )
       |ИЗ
       |    Документ.ЗаказПокупателя КАК ЗаказПокупателя
       |ГДЕ
       |    ЗаказПокупателя.СкладГруппа = &СкладПолучатель
       |    И ЗаказПокупателя.ДатаОтгрузки = &дата";


Если помимо табчасти нужны и другие поля для заполнения, тогда внутри цикла получаем следующее (правда цикл в цикле не гуд, но...решение тривиальное):

...
Пока ВыборкаДетальныеЗаписи.Следующий() цикл
...
   ТабЧасть= ВыборкаДетальныеЗаписи.Товары.Выгрузить();
   ТабЧасть.Свернуть("Номенклатура", "Количество");
   Для Каждого ТекСтрока Из ТабЧасть Цикл
       НоваяСтрока = ЭтотОбъект.Товары.Добавить();
       НоваяСтрока.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
           НоваяСтрока.Количество = ВыборкаДетальныеЗаписи.Количество;
   КонецЦикла;
...
КонецЦикла;
38 Пеппи
 
25.06.12
00:15
|ГДЕ
       |    ЗаказПокупателя.СкладГруппа = &СкладПолучатель
       |    И ЗаказПокупателя.ДатаОтгрузки >= &НачалоПериода и ЗаказПокупателя.ДатаОтгрузки <= &КонецПериода";
39 notebug
 
25.06.12
00:16
(38) тогда уже МЕЖДУ
40 Пеппи
 
25.06.12
00:17
а лучше так

Запрос.Текст =
       "ВЫБРАТЬ
       |    ЗаказПокупателя.Номенклатура,
       |    ЗаказПокупателя.Количество
       |ИЗ
       |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателя
       |ГДЕ
       |    ЗаказПокупателя.СкладГруппа = &СкладПолучатель
       |    И ЗаказПокупателя.ДатаОтгрузки >= &НачалоПериода и ЗаказПокупателя.ДатаОтгрузки <= &КонецПериода";
41 Пеппи
 
25.06.12
00:18
(39) ну это в конструкторе можно сделать а я руками пишу
42 kyrgyz
 
25.06.12
00:18
(37) О! Снекс Выручил. Ведь видел же когда читал книжку что-то подобное. Видимо надо не только читать еще руки набивать.

(38) И осталось мне определить Начала периода и конец периода с помощью даты документа так?
43 Пеппи
 
25.06.12
00:21
(42) понятия не имею что у тебя с датами, если за один день тогда так

НачалоПериода=НачалоДня(Период)
КонецПериода=КонецДня(Период)
где Период задан на форме документа
44 notebug
 
25.06.12
00:21
(41) можно и вне конструктора руками набрать МЕЖДУ ;)
(42) не привыкай к таким решениям =) и максимально все делать стоит в запросе, а дальше уже использовать полученный результат (ну "до утра" думаю сойдет, хех)
45 Пеппи
 
25.06.12
00:21
(44) зануда ))
46 kyrgyz
 
25.06.12
00:23
(43) Как раз то что надо. Снекс.

И это мне еще в параметр засунуть?
47 Пеппи
 
25.06.12
00:26
(46) ясен пень ))
48 kyrgyz
 
25.06.12
00:32
Спасибо ребяты! Век не забуду! С почином меня...

Получилось. Но блин что-туго воспринимаю.Как всегда лиха беда начала...
49 kyrgyz
 
25.06.12
07:00
Зря мы убрали группировки. В док одноименные товары попадают по нескольку раз.
Хотелось бы свернутые данные.
50 Пеппи
 
25.06.12
07:31
добавь группировку, не вижу проблем. Ты какой запрос использовал?
51 notebug
 
25.06.12
08:44
а свертку мы зачем делали внутри первого цикла? не уж-то не свернулось?!
52 experimentator76
 
25.06.12
08:50
(51) у него там еще и поименные дубли))
53 kyrgyz
 
25.06.12
10:13
Помогли переделал все и ок.

НачалоПериода=НачалоДня(Дата);
   КонецПериода=КонецДня(Дата);
   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ЗаказПокупателяТовары.Номенклатура,
       |    СУММА(ЗаказПокупателяТовары.Количество) КАК Количество,
       |    ЗаказПокупателяТовары.ЕдиницаИзмерения,
       |    ЗаказПокупателяТовары.Коэффициент,
       |    ЗаказПокупателяТовары.Цена
       |ИЗ
       |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
       |ГДЕ
       |    ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки МЕЖДУ &НачалоПериода И &КонецПериода
       |    И ЗаказПокупателяТовары.Ссылка.СкладГруппа = &СкладПолучатель
       |    И ЗаказПокупателяТовары.Ссылка.Проведен
       |
       |СГРУППИРОВАТЬ ПО
       |    ЗаказПокупателяТовары.Номенклатура,
       |    ЗаказПокупателяТовары.ЕдиницаИзмерения,
       |    ЗаказПокупателяТовары.Коэффициент,
       |    ЗаказПокупателяТовары.Цена";
   Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
   Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
   Запрос.УстановитьПараметр("СкладПолучатель", СкладПолучатель);

   Результат = Запрос.Выполнить();
   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       НоваяСтрока = ЭтотОбъект.Товары.Добавить();
       НоваяСтрока.Номенклатура    = ВыборкаДетальныеЗаписи.Номенклатура;
       НоваяСтрока.Количество      = ВыборкаДетальныеЗаписи.Количество;
       НоваяСтрока.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.ЕдиницаИзмерения;
       НоваяСтрока.Коэффициент    = ВыборкаДетальныеЗаписи.Коэффициент;
       НоваяСтрока.Цена = ВыборкаДетальныеЗаписи.Цена;
       ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(НоваяСтрока, ЭтотОбъект);
       ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(НоваяСтрока, "Товары", Истина);
       НоваяСтрока.Качество = Справочники.Качество.Новый;
   КонецЦикла;
54 notebug
 
25.06.12
10:17
(52) подразумеваю просто, что здесь был выложен сначала изначальный код запроса, под него подстроились, потом он был модифицирован, а код перебора остался прежним...
(53) финишед хим? :)
55 kyrgyz
 
25.06.12
10:27
(54) НУ да все срослось.

Не подумал что ТЧ можно как отдельную таблице расматривать.