Имя: Пароль:
1C
1C 7.7
v7: Помогите, пожалуйста с запросом.
0 GirlProgram
 
08.09.14
14:14
Торговля и склад.
Необходимо получить всю номенклатуру, которую в течении полугода заказывали у определенного поставщика.

        Перем Запрос, ТекстЗапроса;  
    Запрос = СоздатьОбъект("Запрос");
    ТекДата2 = ТекущаяДата();
    
    Если ТекДата2>ПолучитьДатуТА() Тогда
        ТекДата2=ПолучитьДатуТА()
    КонецЕсли;
    ТекДата1 = ДобавитьМесяц(ТекДата2, -6);    
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ТекДата1 по ТекДата2;
    |Номенклатура = Регистр.Заказы.Номенклатура;
    |Поставщик = Регистр.Заказы.ДоговорПоставщика.Владелец;
    |ГРУППИРОВКА Номенклатура упорядочить по Номенклатура.Наименование;
    //|Условие(Поставщик = Контрагент);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Пока Запрос.Группировка("Номенклатура") = 1 Цикл

             Сообщить(Запрос.Номенклатура);
        Конеццикла;

В итоге Запрос.Группировка("Номенклатура") = 0 :( Пробовала убрать условие - аналогичная ситуация, посмотрела, что в заданный период были заказы у поставщика.
Что я не правильно делаю?
1 fedoss
 
08.09.14
14:16
В запросе к регистру должна быть функция
2 GirlProgram
 
08.09.14
14:27
(1) ок, попробую
3 GirlProgram
 
08.09.14
14:31
(1) добавила такую функцию
|Функция НоменклатураМинОстатокСумма = Сумма(Номенклатура.МинОстаток);

все равно пустой результат
4 fedoss
 
08.09.14
14:34
Количество = Регистр.Заказы.КоличествоПриход;
Функция ПриходКоличество = Приход(Количество);
5 КонецЦикла
 
08.09.14
14:37
(3) Делай конструктором
Тебе нужен мин остаток? Зачем лезть в регистр?
И это... номенклатура и так будет упорядочена... ничего там после Группировка Номенклатура писать не нужно
6 GirlProgram
 
08.09.14
20:24
(5) я и делала конструктором, мне вообще не нужно ни количество, ни минимальный остаток, мне нужна только номенклатура и поставщик и все.
А как мне получить информацию о поставщике и номенклатуре у них заказанной за определенный период? Делать выборку из табличных частей документов? мне казалось через регистр будет быстрее....
7 GirlProgram
 
08.09.14
20:48
Сделала такой запрос:

"//{{ЗАПРОС(Сформировать)
    |Период с ТекДата1 по ТекДата2;
    |Номенклатура = Регистр.Заказы.Номенклатура;
    |Поставщик = Регистр.Заказы.ДоговорПоставщика.Владелец;
    |Количество = Регистр.Заказы.КоличествоПриход;
    |Функция ПриходКоличество = Приход(Количество);
    |Группировка Номенклатура упорядочить по Номенклатура.Наименование;
    |Условие(Поставщик = Контрагент);
    |"//}}ЗАПРОС

В итоге номенклатура выводится, но выводится вся, не обрабатывается Условие.
8 kobzon
 
08.09.14
20:55
Какое? |Условие(Поставщик = Контрагент) Это условие не выполняется?
9 GirlProgram
 
08.09.14
21:01
(8) да, вернее выполняется как-то странно, выводится номенклатура этого поставщика и номенклатура, у которого не указан поставщик,  как такое может быть не понятно, другие поставщики не захватываются
10 GirlProgram
 
08.09.14
21:02
Плюс пытаюсь вывести такое сообщение:

Сообщить(Запрос.Номенклатура + " " + Запрос.ПриходКоличество + " " + Запрос.Поставщик);

Но выводится только Запрос.Номенклатура
11 kobzon
 
08.09.14
21:14
Толи у меня ТиС какой то не такой, но у меня нет такого регистра.
12 kobzon
 
08.09.14
21:21
(7) Если плохо понимаешь запросы, регистры, делай как понимаешь. Как и хотела выборкой документов. Не думаю, что прям в миллион раз будет медленнее.
13 GirlProgram
 
08.09.14
21:23
(11) ничего не могу сказать, мне дали базу очень древнего релиза, которая подписывалась под организацию, возможно этот регистр самописный, с торговлей никогда дело не имела, а 7ку вообще забыла как страшный сон, а тут "Здрасте"... И ведь в регистр не заглянешь, чтобы понять, откуда номенклатура без поставщика берется.....
14 GirlProgram
 
08.09.14
21:25
(12) один фиг разбираться, в 8ке я бы уже давно все что угодно состряпала, а тут.... что не фраза - то какая-то фигня...
16 GirlProgram
 
08.09.14
21:31
(15) Возможно. Но мне нужна просто информация о том, какую номенклатуру можно заказать у этого поставщика, в 8ке есть привязка номенклатуры к поставщику, в 7ке этого нет, поэтому хотела извратиться и на основе сведений о уже заказанной номенклатуры у данного поставщика вывести инфу по возможной номенклатуре.
17 kobzon
 
08.09.14
21:33
(13) Рег = СоздатьОбъект("Регистр.Заказы");
   Рег.ВыбратьДвижения(ДатаНач, ДатаКон);
Пока Рег.ПолучитьДвижение()=1 Цикл  
КонецЦикла;

В цикле пропишешь свои реквизиты регистра и посмотришь откуда берутся пустые поставщики.
18 GirlProgram
 
08.09.14
21:37
(17) все, я уже разобралась, эти пустые значения оказываются наименованиями папок, в которых расположена та или иная из заказанных номенклатур, теперь осталось понять, почему запрос мне выдает помимо номенклатуры еще и ее папку
19 КонецЦикла
 
08.09.14
21:39
(16) Ну это не проблема сделать... можно даже воспользоваться имеющимся механизмом свойств
(18) Без групп - есть такие слова после группировки, может поможет

А вообще, если дружишь с восьмеркой - то добро пожаловать в не кастрированный и дружелюбный T-SQL + 1C++
20 GirlProgram
 
08.09.14
21:40
Сделала так
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ТекДата1 по ТекДата2;
    |Номенклатура = Регистр.Заказы.Номенклатура.Наименование;
    |Поставщик = Регистр.Заказы.ДоговорПоставщика.Владелец;
    |Количество = Регистр.Заказы.КоличествоПриход;
    |Функция ПриходКоличество = Приход(Количество);
    |Группировка Номенклатура;
    |Условие(Поставщик = Контрагент);
    |"//}}ЗАПРОС

все получилось
21 GirlProgram
 
08.09.14
21:42
теперь вместо вывода в сообщении

Пока Запрос.Группировка("Номенклатура") = 1 Цикл

      Сообщить(СокрЛП(Запрос.Номенклатура) + " " + СокрЛП(Запрос.ПриходКоличество) + " " + СокрЛП(Запрос.Поставщик));
Конеццикла;

Мне нужно номенклатуру засунуть в Список ВыбНоменклатуры
22 kobzon
 
08.09.14
21:43
(20)А что поменяла то?)
(21) В ТЗ добавляй и там сворачивай.
23 GirlProgram
 
08.09.14
21:44
(22) вместо Номенклатура = Регистр.Заказы.Номенклатура получаю
Номенклатура = Регистр.Заказы.Номенклатура.Наименование
24 GirlProgram
 
08.09.14
21:45
(23) + и тогда без групп выводится, только номенклатура
25 kobzon
 
08.09.14
21:49
(24) Ну для твоей цели наверное и так пойдет, а можно было как тебе сказали выше: после группировки написать Без Групп;
26 GirlProgram
 
08.09.14
21:51
(25) спасибо большое, но я хотела разобраться именно с тем, что в моем запросе не то, в итоге завершила следующим:

    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ТекДата1 по ТекДата2;
    |Номенклатура = Регистр.Заказы.Номенклатура.Наименование;
    |НоменклатураСсылка = Регистр.Заказы.Номенклатура;
    |Поставщик = Регистр.Заказы.ДоговорПоставщика.Владелец;
    |Количество = Регистр.Заказы.КоличествоПриход;
    |Функция ПриходКоличество = Приход(Количество);
    |Группировка Номенклатура;
    |Условие(Поставщик = Контрагент);
    |"//}}ЗАПРОС

Пока Запрос.Группировка("Номенклатура") = 1 Цикл

ВыбНоменклатуры.ДобавитьЗначение(Запрос.НоменклатураСсылка);
Конеццикла;

Все получилось. Не знаю, насколько коряво, может можно было и как-то по другому сделать, но главное это работает так как мне надо :)

Еще раз спасибо за участие.
27 GirlProgram
 
08.09.14
21:52
(4) спасибо за подсказку про функцию
28 Wirtuozzz
 
08.09.14
22:01
Эти дьявольские манускрипты на 7.7 или 8.2?
29 Wirtuozzz
 
08.09.14
22:02
... дебажутся то...
30 КонецЦикла
 
08.09.14
22:05
(28) Это убивец 8.3, пока не зарелизили...
31 lavalit
 
09.09.14
12:01
Напиши "Группировка Номенкалутра без групп"... Тогда группы(папки) не будут выводиться
Ошибка? Это не ошибка, это системная функция.