Вход | Регистрация


Информационные технологии ::

Метки:Запросы и построители

Запрос не получается

Я
   Таня
 
18.01.04 - 21:52
У меня почему-то запрос не хочет выбирать информацию из регистра.

оборотный регистр ПродажиТоваров:
Товар
Поставщик
Отдел
Количество
Сумма

Туда записываются обороты с документа ТоварныйЧек:
ВыбратьСтроки();
   Пока ПолучитьСтроку() = 1 Цикл
Регистр.ПродажиТоваров.Движение(Товар,Товар.Поставщик,Отдел,Количество,Стоимость);
   КонецЦикла;

В обработке я пишу:
Процедура Выполнить()
ДатаПрихода=Дата(НомерГода,ВыбМесяц.ТекущаяСтрока(),01);
ДатаКонца =  КонМесяца(ДатаПрихода);
ДатаНачала = ДатаПрихода;  
   
УстановитьТАна(ДатаКонца);
РассчитатьРегистрыНа(ДатаКонца,);          

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

в документе ПриходнаяНакладная я пишу:
Процедура ОбработкаПроведения()
   Спр = СоздатьОбъект("Справочник.Отделы");
Отдел = Спр.НайтиПоНаименованию("Склад магазина",1);
   ВыбратьСтроки();
   Пока ПолучитьСтроку() = 1 Цикл
Регистр.ТоварныйЗапас.ДвижениеПриход(Товар,Отдел,Количество,Стоимость);
   КонецЦикла;
КонецПроцедуры

Ни на чё не ругается, но и Приходник не записывает
Товарный Чек все формирует, то есть регистр не пустой

Отладчиком проверяла обработку, он в месте
   Пока Запрос.Группировка("Поставщик") = 1 Цикл
выдает Запрос.Группировка("Поставщик") = 0

Помогите мне кто-нибудь. Пожалуйста.
 
  Рекламное место пустует
   skunk
 
1 - 18.01.04 - 22:00
А что ты в запросе выбираешь? где ресурс?

|Кол = Регистр.ПродажиТоваров.Количество;
|Функция КонКол = КонОст(Кол);

или подобное в этом духе, смотря чего надо.
   ezh
 
2 - 18.01.04 - 22:00
у тебя запрос пустой выходит. потому-что не запрашиваешь ни одной функции. нужна хоть одна функция в запросе.
   ezh
 
3 - 18.01.04 - 22:01
а еще не понятно, зачем ты одновременно используешь две функции:
УстановитьТАна(ДатаКонца);
РассчитатьРегистрыНа(ДатаКонца,);

выбери что-нибудь одно.
   GrayT
 
4 - 18.01.04 - 22:05
И зачем постоянно двигать ТА на конец месяца и временный расчет производить на конец месяца. С точки зрения оп. учета не корректно
   Таня
 
5 - 18.01.04 - 22:05
Я думала оно не обязательно
Спасибо, щас попробую
   GrayT
 
6 - 18.01.04 - 22:07
Ой, думал это в модуле документа
   WhiteCat
 
7 - 18.01.04 - 22:10
Привет, Таня. Я уже сайт сделал, давай пиши статьи по бухучету для программеров!

По твоему вопросу. Цитирую ЖКК, книга № 2, страница 815:
"Операторы функций в запросе можно опускать, тогда запрос просто не будет ничего вычислять... Однако это справедливо ТОЛЬКО для работы запросов по СПРАВОЧНИКАМ и ДОКУМЕНТАМ. При работе запроса по регистрам следует помнить, что в этом случае ОБЯЗАТЕЛЬНО НАЛИЧИЕ ФУНКЦИЙ, причем только в том случае, когда их вычисленные значения отличны от нуля (хотя бы одной из функций)"

Другими словами, добавь какую-нибудь переменную и функцию по ней, например Счётчик и, как говорят на этом форуме, будет тебе счастье
RTFM, однако!
   Таня
 
8 - 18.01.04 - 22:10
Добавила Количество и Сумму    
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса ="
   |Период с ДатаНачала по ДатаКонца;
   |Товар = Регистр.ПродажиТоваров.Товар;
   |Поставщик = Регистр.ПродажиТоваров.Поставщик;
   |Количество = Регистр.ПродажиТоваров.Количество;
   |Сумма = Регистр.ПродажиТоваров.Сумма;
   |Группировка Поставщик;
   |Группировка Товар;";

Все равно не получается :(
   Таня
 
9 - 18.01.04 - 22:11
Щас добавлю функцию :)
   WhiteCat
 
10 - 18.01.04 - 22:12
<Мысли про себя> "Ни фига себе. Пока текст набирал, успело прийти 6 ответов. Взаимопомощь, однако!"
 
 
   WhiteCat
 
11 - 18.01.04 - 22:14
Таня! ФУНКЦИЮ добавь! Переменной недостаточно!
   GrayT
 
12 - 18.01.04 - 22:15
И все-таки не понятно, зачем трогать ТА. А временный расчет нужен нужен только если документ сам не стоит на ТА. Временный расчет занимает время. И надо указать, какие регистры будут учавствовать во временном расчете
См. ИтогиАктуальны(), СравнитьТА(), ВременныйРасчет()
   Таня
 
13 - 18.01.04 - 22:26
Теперь поставщика выбирает, а товар нет :(
skunk, у меня дата нормально работает, я в глобальном модуле вставила процедуру гл12Месяцев()
   Таня
 
14 - 18.01.04 - 22:26
И поэтому ругается, что количество = 0
   WhiteCat
 
15 - 18.01.04 - 22:28
Кста, добавь еще строку "Без Итогов"

ТекстЗапроса ="
  |Период с ДатаНачала по ДатаКонца;
  |Товар = Регистр.ПродажиТоваров.Товар;
  |Поставщик = Регистр.ПродажиТоваров.Поставщик;
  |Количество = Регистр.ПродажиТоваров.Количество;
  |Сумма = Регистр.ПродажиТоваров.Сумма;
  |Группировка Поставщик;
  |Группировка Товар;
  |Без Итогов;";

Тебе ведь только список нужен, без цифр, запрос быстрее работать будет
   ezh
 
16 - 18.01.04 - 22:28
1. сама подумай, Количество и Сумма - существуют ТОЛЬКО для ЗАПИСЕЙ регистра. А ты хочешь получить значения Количества и Суммы для измерений, т.е. тебе НУЖНЫ ФУНКЦИИ. в (2) - правильный пример.
2. А если ты все-таки добавишь функции в запрос, то: во-первых она заработает, и, во-вторых, тебе действительно не нужны будут расчет временных итогов и сдвиг ТА.
   Таня
 
17 - 18.01.04 - 22:33
Все, получилось, только все равно до подсознания еще не дошло как оно работает

Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса ="
   |Период с ДатаНачала по ДатаКонца;
   |Товар = Регистр.ПродажиТоваров.Товар;
   |Поставщик = Регистр.ПродажиТоваров.Поставщик;
   |Количество = Регистр.ПродажиТоваров.Количество;
   |Сумма = Регистр.ПродажиТоваров.Сумма;
   |Функция  ИтогоКоличество = Сумма(Количество);
   |Функция ИтогоСумма = Сумма(Сумма);
   |Группировка Поставщик;
   |Группировка Товар;";

   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;
   
   Пока Запрос.Группировка("Поставщик") = 1 Цикл
       ПрихНакл.Новый();
       ПрихНакл.ДатаДок = ДатаПрихода;
       ПрихНакл.АвтоВремяНачалоДня();
       ПрихНакл.Поставщик = Запрос.Поставщик;
       Пока Запрос.Группировка(2) = 1 Цикл
           ПрихНакл.НоваяСтрока();
           ПрихНакл.Товар = Запрос.Товар;
           ПрихНакл.Количество = Запрос.ИтогоКоличество;
           ПрихНакл.Стоимость = Запрос.ИтогоСумма;
           ПрихНакл.ЦенаЗакупки = ПрихНакл.Стоимость/ПрихНакл.Количество;
       КонецЦикла;
       ПрихНакл.Записать();
       ПрихНакл.Провести();
   КонецЦикла;
   ezh
 
18 - 18.01.04 - 22:37
ай, молодца!!!!
   WhiteCat
 
19 - 18.01.04 - 22:37
+15, пардон, это я затупил, итоги тебе нужны, они же в документы заносятся...
   GrayT
 
20 - 18.01.04 - 22:46
Без итогов можно обойтись, а вот в группировках по товару и товару точно надо вставить без групп. А то будут накладные по группам поставщиков и в строках группы товара :))
   WhiteCat
 
21 - 18.01.04 - 22:49
(20) Угу
   GrayT
 
22 - 18.01.04 - 22:49
С Итогами:
Поставщик   Товар  Количество
                     10
Пост1                 5
пост1       товар1    3
пост1        товар2   2
пост2                 5
пост2       товар1    5
БезИтогов:
Пост1       товар1    3
пост1       товар2    2
пост2       товар1    5

Чтоб понять как работает, можно выгрузить Запрос в ТЗ и посмотреть на форме, или распечатать побыстрому
   GrayT
 
23 - 18.01.04 - 22:51
Ха, получается что надо БезИтогов, а то первый документ будет по пустому поставщику, а в каждом документе первый товар пустой.
   Таня
 
24 - 18.01.04 - 23:06
Ничего он не пустой :(
   ezh
 
25 - 18.01.04 - 23:09
(23) да как же он будет пустой? ведь выборка идет по группировкам! екарный бабай, может прежде чем советовать, самому разобраться?
   GrayT
 
26 - 18.01.04 - 23:10
А товар? Поставщик правильно не пустой, начался обход группировки, т.е. с первой строки результата запроса сошли :)
   GrayT
 
27 - 18.01.04 - 23:10
(25) Ну погарячился
   Таня
 
28 - 18.01.04 - 23:12
Вот только при повторном выполнении Закупки, формируется второй комплект Приходников, ну это понятно почему, а вот как-бы от этого избавиться?
Я думала в константу записывать признак выполнения Закупки за месяц, а при выполнении обработки проверять значение константы и удалять Приходники. Можно так?
   ezh
 
29 - 18.01.04 - 23:19
по правильному:
1. все приходники долбануть, причем железно, именно удалить, а не пометить на удаление.
2. создать их заново.
3. восстановить последовательность.

именно так и делают.



Список тем форума
  Рекламное место пустует
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует