Имя: Пароль:
1C
1С v8
Подскажите по запросам.
0 fungus
 
21.11.12
15:37
Добрый день. Подскажите пожалуйста что нужно делать чтобы научиться правильно писать запросы, что почитать-посмотреть? Я имею ввиду что синтаксис запроса мне понятен, понятно как пользоваться конструктором запросов, как сделать объединение соединение, вирутальные таблицы и т.п.  Все время возникает проблема потому что я неправильно определяю что зачем нужно сделать , ну т.е. объединить две таблицы из двух регистров, а потом присоединить третью, может надо было соединять их все три по очереди. В результате получается бред, либо пустые поля либо дублирующиеся строки которые потом пытаюсь сгруппировать и получается еще хуже.
1 Лефмихалыч
 
21.11.12
15:39
нужно решать практические задачи
2 ковер
 
21.11.12
15:41
нужно курить мануалы
3 GLazNik
 
21.11.12
15:41
(0) если почитать... то я бы предложил почитать по SQL запросам
4 Drac0
 
21.11.12
15:41
Либо взять любую конфигурацию и с помощью консоли запросов поэкспериментировать вдоволь.
5 fungus
 
21.11.12
15:46
ну вот например такой запрос пишу, нужно все заявки показать по которым либо не было ничего либо была опла или отгрузка либо и то и другое. В результате не могу понять почему в поле заявок дубли.

ВЫБРАТЬ
   ЗаказыПокупателей.Регистратор КАК ДокЗаявка,
   СУММА(ЗаказыПокупателей.СуммаВзаиморасчетов) КАК СуммаЗаявка,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
               ИЛИ ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ОплатаОтПокупателяПлатежнойКартой
           ТОГДА ВзаиморасчетыСКонтрагентами.Регистратор
       ИНАЧЕ NULL
   КОНЕЦ КАК ДокОплата,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
               ИЛИ ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ОплатаОтПокупателяПлатежнойКартой
           ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов
       ИНАЧЕ NULL
   КОНЕЦ КАК СуммаОплата
ПОМЕСТИТЬ ТабЗаявкаОплата
ИЗ
   РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
       ПО ЗаказыПокупателей.Регистратор = ВзаиморасчетыСКонтрагентами.Сделка
ГДЕ
   ЗаказыПокупателей.Регистратор ССЫЛКА Документ.ЗаказПокупателя
   И ЗаказыПокупателей.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон

СГРУППИРОВАТЬ ПО
   ЗаказыПокупателей.Регистратор,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
               ИЛИ ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ОплатаОтПокупателяПлатежнойКартой
           ТОГДА ВзаиморасчетыСКонтрагентами.Регистратор
       ИНАЧЕ NULL
   КОНЕЦ,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
               ИЛИ ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ОплатаОтПокупателяПлатежнойКартой
           ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов
       ИНАЧЕ NULL
   КОНЕЦ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТабЗаявкаОплата.ДокЗаявка,
   ТабЗаявкаОплата.СуммаЗаявка,
   ТабЗаявкаОплата.ДокОплата,
   ТабЗаявкаОплата.СуммаОплата,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
           ТОГДА ВзаиморасчетыСКонтрагентами.Регистратор
       ИНАЧЕ NULL
   КОНЕЦ КАК ДокОтгрузка,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
           ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов
       ИНАЧЕ NULL
   КОНЕЦ КАК СуммаОтгрузка
ИЗ
   ТабЗаявкаОплата КАК ТабЗаявкаОплата
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
       ПО ТабЗаявкаОплата.ДокЗаявка = ВзаиморасчетыСКонтрагентами.Сделка

СГРУППИРОВАТЬ ПО
   ТабЗаявкаОплата.ДокЗаявка,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
           ТОГДА ВзаиморасчетыСКонтрагентами.Регистратор
       ИНАЧЕ NULL
   КОНЕЦ,
   ТабЗаявкаОплата.ДокОплата,
   ТабЗаявкаОплата.СуммаЗаявка,
   ТабЗаявкаОплата.СуммаОплата,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
           ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов
       ИНАЧЕ NULL
   КОНЕЦ
6 Александр Б
 
21.11.12
15:48
А еще для понимания работы "физики" запросов бывает полезно на листочке нарисовать таблички, и что будет после каждого соединения объединения.
7 GLazNik
 
21.11.12
15:51
(5) это типа ход такой? начать из далека и попросить разобрать запрос?
Дубли как правило возникают из-за кривого соединения.
8 fungus
 
21.11.12
15:53
(7) извеняюсь что код криво написан, не часто пишу сюда поэтому так получилось. Ща почитаюю гденить как правилно вставлять.
9 fungus
 
21.11.12
15:54
(7) или я неправильно понял ?
10 program1Cer
 
21.11.12
15:56
Теорию множеств почитай, объединение (union) пересечение (inner join) и так далее ноги от туда растут.
11 fungus
 
21.11.12
16:03
В принципе чтобы код не читать. Этот запрос к УТ 10.3.
Нужно получить таблицу где будут перечислены все заявки, если заявка оплачена или отгружена, то напротив нее документ оплаты и отгрузка. Я выбираю из регистра ЗаявкаПокупателей Все заявки, и соединяю по сделке (заказ) результат этого запроса с выборкой оплат из регистра ВзаиморасчетыСКонтрагентами (платежка или оплата по платежной карте), потом к получившемуся результату присоединяю выборку реализаций соединяю также по сделке (заказ).
12 fungus
 
21.11.12
16:04
Принцип склетвания таблиц правильный или нет?
13 program1Cer
 
23.11.12
07:42
Принцип склеивания может и правильный, но зачем группировать по числовым полям таким как сумма взаиморасчетов, сумма заявки, сумма оплаты? помести их в функцию
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.