Имя: Пароль:
1C
1C 7.7
v7: Запрос
, , ,
0 ВежливаяТварь
 
22.03.13
13:06
Добрый день. Работаю в основном на 8.2, но возникла необходимость написать одну обработку на 1с 7. Столкнулся с некоторыми проблемами при создании запроса. Мне необходимо вытянуть данные о продажах за период в разрезе номенклатуры. Конфа "Тороговля и склад для украины".
Пробую так
   Запрос=СоздатьОбъект("Запрос");
   ТекстЗапроса="
   |Период с Дата1 по Дата2;
   |Фирма      =Регистр.ПартииТоваров.Фирма;
   |Товар      =Регистр.ПартииТоваров.Товар;
   |Покупатель =Регистр.ПартииТоваров.Контрагент,
   |Оборот        = Регистр.ПартииТоваров.Оборот;
   |КодОперации   = Регистр.ПартииТоваров.КодОперации;  
   |Документ=Регистр.ПартииТоваров.ПрихДокумент;  
   |Условие (Фирма=ПолучитьПустоеЗначение(""Справочник.Фирмы""));
   |Условие (Товар в СписокТоваров);
   |Условие (Покупатель в СписокКонтрагентов);
   |";

Выдает это:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{C:\DOCUMENTS AND SETTINGS\KRUCHEK\РАБОЧИЙ СТОЛ\ВЫГРУЗКА РУТА ОБЪЕДИНЕННАЯ (SPOT 2D).ERT(490)}:  <<?>> Оборот        = Регистр.ПартииТоваров.Оборот;
Запрос[6] : Неверно заданный путь 'Оборот'
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{C:\DOCUMENTS AND SETTINGS\KRUCHEK\РАБОЧИЙ СТОЛ\ВЫГРУЗКА РУТА ОБЪЕДИНЕННАЯ (SPOT 2D).ERT(490)}:  <<?>> Документ=Регистр.ПартииТоваров.ПрихДокумент;  
Запрос[8] : Неизвестая ошибка 'Документ'
1 dusn
 
22.03.13
13:08
Документ - предопредленное имя, нельзя использовать

регистры уже не помню, там есть такое измерение?
2 ВежливаяТварь
 
22.03.13
13:12
Есть я проверял. А как же мне узнать какой документ сделал запись в регистре. Или лучше банальным перебором документов?
3 dusn
 
22.03.13
13:14
(2) назвать переменную не Документ, а, допустим, ПрихДок
Либо сделать группировку по Документу


Регистр оборотный или остаточный?

Запрос конструктором создан?
4 ВежливаяТварь
 
22.03.13
13:17
(3) Нет запрос сам делал по примеру других запросов, регистр остатки
5 Ёпрст
 
22.03.13
13:22
(0)
//  |Покупатель =Регистр.ПартииТоваров.Контрагент,
 |Покупатель =Регистр.ПартииТоваров.Контрагент;
6 Srg
 
22.03.13
13:23
Переименуй Документ и Оборот
Например в Док и Обор
7 ВежливаяТварь
 
22.03.13
13:31
(6) не помогло, сейчас попробую сделать через конструктор.
8 ВежливаяТварь
 
22.03.13
13:37
|    Период с Дата1 по Дата2;
   |Обрабатывать НеПомеченныеНаУдаление;
   |Фирма = Регистр.ПартииТоваров.Фирма;
   |Товар = Регистр.ПартииТоваров.Товар;
   |Контрагент = Регистр.ПартииТоваров.Контрагент;
   |ПрихДокумент = Регистр.ПартииТоваров.ПрихДокумент;
   |Стоимость = Регистр.ПартииТоваров.Стоимость;
   |ПродСтоимость = Регистр.ПартииТоваров.ПродСтоимость;
   |НДС = Регистр.ПартииТоваров.НДС;
   |Оборот = Регистр.ПартииТоваров.Оборот;
   |КодОперации = Регистр.ПартииТоваров.КодОперации;
   |ТекущийДокумент = Регистр.ПартииТоваров.ТекущийДокумент;
   |Условие(Фирма=ГлПустаяФирма);
   |Условие(Товар в СписокТоваров);";Сделал вот так,



но ничего  возвращает одну строку с нулями
9 Ёпрст
 
22.03.13
13:37
(7) см. (5) + переименуй переменную Документ в тексте запроса + добавь функции, иначе выборка всегда пустой будет
10 Ёпрст
 
22.03.13
13:37
(8) нет функций в тексте запроса
11 ВежливаяТварь
 
22.03.13
13:37
(9) Любую функцию? Это такой баг?
12 Ёпрст
 
22.03.13
13:40
(11) да не любую, а нужную - для остаткового регистра это
Приход/Расход/НачОст/КонОст

для оборотного - Сумма
13 ВежливаяТварь
 
22.03.13
13:44
(12) Сделал так
|Период с Дата1 по Дата2;
   |Фирма = Регистр.ПартииТоваров.Фирма;
   |Товар = Регистр.ПартииТоваров.Товар;
   |Контрагент = Регистр.ПартииТоваров.Контрагент;
   |ПрихДокумент = Регистр.ПартииТоваров.ПрихДокумент;
   |Стоимость = Регистр.ПартииТоваров.Стоимость;
   |НДС = Регистр.ПартииТоваров.НДС;
   |ПродСтоимость = Регистр.ПартииТоваров.ПродСтоимость;
   |Оборот = Регистр.ПартииТоваров.Оборот;
   |КодОперации = Регистр.ПартииТоваров.КодОперации;
   |Функция СтоимостьКонОст = КонОст(Стоимость);";    

Выводит одну строку но заполненную, не ту функцию поставил?
14 Ёпрст
 
22.03.13
13:45
(13) А ты чего от запроса получить то хочешь в итоге ?
Если че, КонОст - это получение конечного остатка на дату
15 ВежливаяТварь
 
22.03.13
13:45
(14)Мне нужны все продажи за период. Мне тогда нужен расход?
16 Ёпрст
 
22.03.13
13:47
(15) ну как минимум, взять нужно другой регистр для этого - Продажи.
и у него функция Сумма влепить, ну или готовый отчет посмотреть в типовой - АнализПродаж.
17 ВежливаяТварь
 
22.03.13
13:47
(14) Или если это регистр остатков обороты из него не получить?
18 viktor_vv
 
22.03.13
13:47
(15) Расход с условием на КодОперации, а то в расходе и списания могут быть.
19 Ёпрст
 
22.03.13
13:48
А в партиях, у тебя расход будут делать не только документы продажи, но и перемещения/списания и т.д.. Оно тебе надо ?
20 viktor_vv
 
22.03.13
13:48
(18)+ Ну и таки да, лучше (16).
21 Ёпрст
 
22.03.13
13:48
(17) получить, если с умом подойти.. :)
22 Ёпрст
 
22.03.13
13:49
+ не факт, что в партиях у тебя есть продажная стоимость (в типовых её конечно лепят, в реквизит регистра, а чего у тебя за конфа - хз)
23 ВежливаяТварь
 
22.03.13
13:49
(16) Посмотрел, регистра продажи у меня нет.
24 ВежливаяТварь
 
22.03.13
13:50
Может легче перебором документов?
25 sapphire
 
22.03.13
13:51
(0) regprint.ert
26 ВежливаяТварь
 
22.03.13
14:16
Вот так заработало    Запрос=СоздатьОбъект("Запрос");
   ТекстЗапроса="
   |Период с Дата1 по Дата2;
   |Фирма      =Регистр.ПартииТоваров.Фирма;
   |Товар      =Регистр.ПартииТоваров.Товар;
   |Докум      =Регистр.ПартииТоваров.ТекущийДокумент;
   |Покупатель =Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент,
   |";
   
   Если Флаг=1 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладнаяШ.Контрагент,
       |";
   КонецЕсли;
   
   ТекстЗапроса=ТекстЗапроса+"
   |Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяРозничная.Контрагент,
   |Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент,
   |Регистр.ПартииТоваров.ТекущийДокумент.ПродажаРеализатора.Контрагент,
   |Регистр.ПартииТоваров.ТекущийДокумент.ЧекКА.ЭККА,
   |Регистр.ПартииТоваров.ТекущийДокумент.ОтчетКА.ЭККА;
   |ОстатокТовара = Регистр.ПартииТоваров.ОстатокТовара;
   |Оборот        = Регистр.ПартииТоваров.Оборот;
   |КодОперации   = Регистр.ПартииТоваров.КодОперации;
   |Группировка Товар Без групп;
   |Группировка Докум;
   |Функция Расход       = Расход(ОстатокТовара) когда(КодОперации В КодыОперацийПродажи);
   |Функция ОборотТовара = Сумма(Оборот)         когда(КодОперации В КодыОперацийПродажи);
   |Условие (Фирма=глПустаяФирма);
   |Условие (Товар в СписокТоваров);
   |Условие (Покупатель в СписокКонтрагентов);
   |";

Всем огромное спасибо.