|
помогите с запросом | ☑ | ||
---|---|---|---|---|
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адьных таблиц БД среди которых табличная часть - условия виборки табличных частей оптимальнее строить постредством проверки номера строки.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |