Имя: Пароль:
1C
1С v8
помогите с запросом
,
0 suvolod
 
08.08.12
19:31
Нужно сделать запрос, который соединяет три таблицы:

табличную часть документа
регистр ТоварыВРознице
регистр Продажи

по регистрам ТоварыВРознице и Продажи, соответственно, нужно выбрать записи только документу, которому принадлежит табличная часть (т.е первая таблица)

вроде больших проблем нет, если делать это через виртуальные таблицы регистров... но как сделать то-же самое, обращаясь к регистру напрямую?

я написал такой запрос:

ВЫБРАТЬ
   ОтчетОРозничныхПродажахТовары.НомерСтроки КАК НомерСтроки,
   ОтчетОРозничныхПродажахТовары.Номенклатура,
   ОтчетОРозничныхПродажахТовары.ЕдиницаИзмерения,
   ОтчетОРозничныхПродажахТовары.Количество,
   ЕСТЬNULL(ТоварыВРознице.СуммаПродажная, 0) КАК СуммаРозничная,
   ЕСТЬNULL(Продажи.Стоимость, 0) КАК СуммаПродажи,
   ЕСТЬNULL(ТоварыВРознице.СуммаПродажная - Продажи.Стоимость, 0) КАК СуммаСкидки,
   ВЫБОР
       КОГДА ЕСТЬNULL(ТоварыВРознице.Количество, 0) = 0
           ТОГДА 0
       ИНАЧЕ ВЫРАЗИТЬ(ТоварыВРознице.СуммаПродажная / ТоварыВРознице.Количество КАК ЧИСЛО(15, 2))
   КОНЕЦ КАК ЦенаРозничная
ИЗ
   Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРознице КАК ТоварыВРознице
       ПО ОтчетОРозничныхПродажахТовары.НомерСтроки = ТоварыВРознице.НомерСтроки
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
       ПО ОтчетОРозничныхПродажахТовары.НомерСтроки = Продажи.НомерСтроки
ГДЕ
   ОтчетОРозничныхПродажахТовары.Ссылка = &Регистратор
   И Продажи.Регистратор = &Регистратор
   И ТоварыВРознице.Регистратор = &Регистратор

УПОРЯДОЧИТЬ ПО
   НомерСтроки

в итоге по тем, документам, где есть табличная часть и движения по обоим регистрам, он отрабатывает нормально. Но если проводить такой документ, например, по оптовому складу (который не делает движений по регистру ТоварыВРознице), то в выборку не попадает ни одна запись... потому-что срабатывает условие И (в самом конце). Я же хочу в этом случае получить в результате запроса просто нуль по полям того регистра, который отсутствует.
1 kotletka
 
08.08.12
19:33
ппц а в условиях связи указать регистратор нельзя?
2 DrShad
 
08.08.12
19:34
отчет о розничных продажах ты проводишь по оптовому складу?
3 DrShad
 
08.08.12
19:35
вообще какой-то дебильный запрос, ибо номер строки не соотвествует номеру строки документа
4 kotletka
 
08.08.12
19:35
да и с виртуальными таблицами надо работать и ограничение если уж не в связях ( в вашем случае правильно будет сделать в связях таблиц), то в параметрах вирт таблиц
5 luckyluke
 
08.08.12
19:40
(4) Умеешь указывать регистратор в параметрах виртуальной таблицы регистра накопления?
6 suvolod
 
08.08.12
19:40
насчет связи по регистратору понял.. сейчас попробуй. А вот замечание (3) не совсем понял.. почему не соответствует? Если в документе есть строки с одной и той-же номенклатурой, разве не могу я, используя НомерСтроки, однозначно определить какой строке документа принадлежат движения по регистратору?
7 suvolod
 
08.08.12
19:41
(5)указывать умею :). просто стало вдруг интересно - а не проще не использовать вирт. таблицы
8 luckyluke
 
08.08.12
19:42
(7) и ты тоже умеешь указывать регистратор в параметрах виртуальной таблицы регистра накопления? научи.
9 DrShad
 
08.08.12
19:43
(6) вообще-то в ОРП должно уже быть свернуто все
10 suvolod
 
08.08.12
19:45
с регистратором погорячился. признаюсь
11 suvolod
 
08.08.12
19:45
не факт что свернуто. Если цены были в чеках ККМ были разные (разные скидки давались, например), закрытие разобъет на 2 строки
12 DrShad
 
08.08.12
19:47
(11) это таки да, но в большинстве случаев номер строки в доке и в регистре не имеюют ничего общего
13 kotletka
 
08.08.12
19:47
(5)где то писал про указание в параметрах виртуальной таблицы регистратора? нигде, наоборот сказал что в связи надо указывать
14 kotletka
 
08.08.12
19:47
по регистратору и номенклатуре связывай
15 luckyluke
 
08.08.12
19:48
(13) ты видишь хоть один параметр у него кроме регистратора?
16 kotletka
 
08.08.12
19:49
(15) "ограничение если уж не в связях ( в вашем случае правильно будет сделать в связях таблиц), то в параметрах вирт таблиц" - спецально выделил в скобках что в его случае делать а что в общем. Не читатель?
17 luckyluke
 
08.08.12
19:51
(16) Ты сам прочитай, что ты написал. Если не в связях, то в параметрах вирт таблицы. Я у тебя спросил, умеешь ли ты указывать регистратор в параметрах вирт таблицы, что не так?
18 kotletka
 
08.08.12
19:52
пнх дятел
19 suvolod
 
08.08.12
19:53
сделал так

ВЫБРАТЬ
   ОтчетОРозничныхПродажахТовары.НомерСтроки КАК НомерСтроки,
   ОтчетОРозничныхПродажахТовары.Номенклатура,
   ОтчетОРозничныхПродажахТовары.ЕдиницаИзмерения,
   ОтчетОРозничныхПродажахТовары.Количество,
   ЕСТЬNULL(ТоварыВРознице.СуммаПродажная, 0) КАК СуммаРозничная,
   ЕСТЬNULL(Продажи.Стоимость, 0) КАК СуммаПродажи,
   ЕСТЬNULL(ТоварыВРознице.СуммаПродажная - Продажи.Стоимость, 0) КАК СуммаСкидки,
   ВЫБОР
       КОГДА ЕСТЬNULL(ТоварыВРознице.Количество, 0) = 0
           ТОГДА 0
       ИНАЧЕ ВЫРАЗИТЬ(ТоварыВРознице.СуммаПродажная / ТоварыВРознице.Количество КАК ЧИСЛО(15, 2))
   КОНЕЦ КАК ЦенаРозничная
ИЗ
   Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРознице КАК ТоварыВРознице
       ПО ОтчетОРозничныхПродажахТовары.НомерСтроки = ТоварыВРознице.НомерСтроки
           И ОтчетОРозничныхПродажахТовары.Ссылка = ТоварыВРознице.Регистратор
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
       ПО ОтчетОРозничныхПродажахТовары.НомерСтроки = Продажи.НомерСтроки
           И ОтчетОРозничныхПродажахТовары.Ссылка = Продажи.Регистратор
ГДЕ
   ОтчетОРозничныхПродажахТовары.Ссылка = &Регистратор

УПОРЯДОЧИТЬ ПО
   НомерСтроки

работает...
если убрать связь по номеру строки, а сделать связь по номенклатуре - полная ерудна получается
20 suvolod
 
08.08.12
19:54
так я и не понял насчет НомерСтроки. Почему вы пишете, что в регистре может не совпадать с номером в табличной части документа?
21 kotletka
 
08.08.12
19:54
оставь ещё и номер
22 DrShad
 
08.08.12
19:55
а нафига ты вообще берешь ТЧ дока?
23 luckyluke
 
08.08.12
19:56
(20) а ты попробуй вбей в ТЧ две строки с одинаковой номенклатурой и разной единицей измерения, например, и сформируй запрос.
24 suvolod
 
08.08.12
20:00
сейчас у меня товар (по документу) с полями Количество и СуммаРозничная:


Braun MR-120 OMELLETE  блендер            1  1800
Nokia 6101 ALWISE авто зар.устройство        1  100
Braun MR-120 OMELLETE  блендер            2  3000

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

Braun MR-120 OMELLETE  блендер            1  1800
Braun MR-120 OMELLETE  блендер            1  3000
Nokia 6101 ALWISE авто зар.устройство        1  100
Braun MR-120 OMELLETE  блендер            2  1800
Braun MR-120 OMELLETE  блендер            2  3000
25 suvolod
 
08.08.12
20:01
(22) ТЧ из дока брал, т.к. без него запрос сортировал записи видимо по внутреннему представлению (не по порядку строк в документе).
26 luckyluke
 
08.08.12
20:02
(24) Ну если при проведении таблица не сворачивается, то можешь использовать номер строки.
27 luckyluke
 
08.08.12
20:05
(25) Хотя нет, это у тебя документ реализации. Всё зависит от того как делает движения документ ОтчетОРозничныхПродажах, я так понимаю это УТ? По партиям учет есть?
28 suvolod
 
08.08.12
20:06
да, партионный учет, в т.ч. по складам
29 DrShad
 
08.08.12
20:06
какая нафиг разница в твоем запросе какой порядок вывода? и накуя вообще ТЧ документа кроме порядка?
30 suvolod
 
08.08.12
20:06
(23) попробовал только-что. У "Braun MR-120 OMELLETE  блендер" создал новую ед. измерения - пачки. Добавил... проверил.. вроде работает правильно
31 luckyluke
 
08.08.12
20:08
(30) а теперь попробуй заведи две партии поступления "Braun MR-120 OMELLETE  блендер" и одну строку на списание.
32 suvolod
 
08.08.12
20:08
(29)Ну, кроме порядка вроде больше не нужно. А учитывая, что по регистру Продажи запись при проведение пишется всегда, и там есть НомерСтроки, можно и вообще отказаться от этой таблицы в запросе
33 luckyluke
 
08.08.12
20:09
(32) Если можешь, то отказывайся. Сортируй по номеру строки.
34 suvolod
 
08.08.12
20:09
сейчас попробую... в чем подвох, может сразу скажешь? я ведь не по ПартииТоваровНаСкладах запрос делаю, а по ТоварыВРознице и Продажи. Партии к ним вообще никаким боком
35 luckyluke
 
08.08.12
20:11
(34) Ну я не знаю как списываются товары в УТ. По идее может быть такая ситуация, когда в ТЧ больше строк, чем строк в регистре, например при сворачивании таблицы перед проведением или когда списывается с партий, а потом по этой ТЗ списаных партий двигаются продажи.
36 suvolod
 
08.08.12
20:11
.. кажется я понял что ты хотел сказать. по одной строке могут списаться товар из нескольких партий. То есть по ПартииТоваровНаСкладах будут две записи с одним НомерСтроки. Но это все-таки другой случай - не мой.
37 suvolod
 
08.08.12
20:12
Тогда я бы перед соединением с ПартииТоваров на складах их сворачивал по тому-же номерСтроки, выгружал во ВремТаб, и только потом соединял
38 luckyluke
 
08.08.12
20:13
(34) или опять же, вот может быть такая ситуация, что в ТЧ:
номенклатура1
номенклатура2
номенклатура3

по номенклатура1 и номенклатура3 есть остатки, по ним прошли движения, а по номенклатура2 нет остатков и по ним движений не прошло, тогда у номенклатура3 будет строка №2, а в ТЧ строка №3
39 suvolod
 
08.08.12
20:15
(38) этот вариант я сейчас проработаю. Но насколько я понимаю смысл номерстроки в регистре, он должен привязаться к правильному номеру в документе, т.е. будут две записи по регистру с НомерСтроки = 1 и 3
40 luckyluke
 
08.08.12
20:15
+(38) но это если документ двигается, если нет остатков по идее. Суть в том, что подвох вылезти может неожиданно, так как номер строки в ТЧ и номер строки в регистре не связаны или вообще могут быть перемешаны.
41 suvolod
 
08.08.12
20:15
а ты бы как сам написал такой запрос?
42 luckyluke
 
08.08.12
20:16
(39) в том то и суть, что нет, в регистре будет номер строки, по идее, по порядку.
43 luckyluke
 
08.08.12
20:19
(41) Я не понимаю задачи что тебе надо, но вообще, лучше свернуть таблицы без номера строки, а потом соединять по регистратору и номенклатуре, но здесь еще надо учесть, что единицы измерения могут не совпадать. Т.е. надо кол-во переводить в базовую единицу измерения, если использовать ТЧ.
44 DrShad
 
08.08.12
20:21
(43) по сабжу вообще не нужна ТЧ документа для расчета разницы между розничной ценой и ценой продажи
45 suvolod
 
08.08.12
20:23
(42) Ты оказался прав. Списал сейчас отчетом три ед. разного товара, по одному (второму) остатка не было. док создал две записи по ПартииТоваровНаСкладах, с номерами 1 и 2 (а не 1 и 3, как я думал)
46 luckyluke
 
08.08.12
20:24
(44) Ну я не знаю как что в УТ проводится, может ли быть, так что в ТЧ есть номенклатура, а в регистре Продажи нет. Если не может, то, кончено, не нужна ТЧ.
47 DrShad
 
08.08.12
20:25
(46) если была продажа, то запись 200% будет
48 luckyluke
 
08.08.12
20:25
(47) ок :)
49 suvolod
 
08.08.12
20:27
(43). бухи поставили задачу - вывести в печатную форму всю номенклатуру, которая есть в самом документе (строго в том же порядке, что и в документе, в том числе с "задвоенной" номенклатурой, если она в отчет попала в таком виде). Плюс каждую строку этого документа дополнить ценами/суммами, по которым товар списывается с подотчета и продажной суммой. ну и вывести разницу между ними. Хотел все это в один запрос запихнуть..
50 DrShad
 
08.08.12
20:29
(49) бухи то тут каким боком? шли их на й_ух
51 suvolod
 
08.08.12
20:30
они музыку заказывают.. по условиям задачи я могу отказать, только если они пытаются сломать типовой механизм работы программы. А печатные формы - какую сказали, такую и приходтиься делать
52 DrShad
 
08.08.12
20:31
пусть объяснять накуя им это нужно? какую жизненно важную инфу они от этого получат?
53 DrShad
 
08.08.12
20:32
как бух заявляю - ничего она им не даст для бух учета, а по-сему пусть курят
54 suvolod
 
08.08.12
20:33
короче, чтобы не попасть впросак с номером строки, да и единицами измерения тоже, вижу только один выход. перебирать ТЧ, и на каждую строку сделать отдельный подзапрос, который будет выдергивать из регистров нужные цифры. Неоптимально конечно, но зато гораздо читабельнее и не запутаешься
55 DrShad
 
08.08.12
20:35
(54) выдыхай!!!!
56 suvolod
 
08.08.12
20:35
Бухи - это отдельная песня :). До меня была самописная семерка, где я видел такую форму: цена без ндс, с ндс, сумма без ндс учетная, ндс учетное, с ндс учетная, сумма реализации - тоже без ндс, ндс, с ндс...

Перекрестился.. ладно еще налог с продаж отменили. А то бы и его старого программиста заставили прикрутить
57 DrShad
 
08.08.12
20:40
(56) позволишь им ездить на себе - не слезут! запомни
58 suvolod
 
08.08.12
20:47
(2) ты писал: отчет о розничных продажах ты проводишь по оптовому складу?

а что не так в такой методике? Насколько мне известно, это не совсем правильно - чисто юридически, но 1С-ка позволяет это делать. Склад должен быть именно оптовым, т.к. учетной политикой закреплен учет склада по себестоимости. И операторам проще - набьют за смену кучу чеков ККМ, а потом сведут их в отчет о розничных продажах. сразу видно, что отпустили юр. лицам, а что простым частникам
59 DrShad
 
08.08.12
20:49
(58) полнейший бред сивого мерина в лунную ночь
60 suvolod
 
08.08.12
20:56
Вот тут с тобой точно не соглашусь, т.к. этот вопрос в свое время прорабатывал. Задай себе хотя-бы такой вопрос - зачем в типовом функционале УТ 1С-ники оставили возможность и в чеках ККМ, и ОРП выбирать оптовые склады?
61 DrShad
 
08.08.12
20:58
(60) в какой УТ?
62 vmv
 
08.08.12
22:11
(0) не вникал, но замечу при создании запросом виртуальных таблиц как соединение ре6адьных таблиц БД среди которых табличная часть - условия виборки табличных частей оптимальнее строить постредством проверки номера строки.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn