|
Запрос с левым соединением | ☑ | ||
---|---|---|---|---|
0
Djiney
19.07.14
✎
21:47
|
Здравствуйте. Конфигурация 8.2.10, самописная.
В процессе построения запроса у меня возникла проблема, вроде бы не сложная, однако не могу понять что нужно сделать. Смысл в том, что нужно составить запрос, выбирающий все элементы из номенклатуры, попутно вытягивая остатки и цены из регистров накопления. Выглядит запрос следующим образом: Запрос = Новый Запрос("ВЫБРАТЬ | СпрНоменклатура.Ссылка, | ОстаткиОстатки.КоличествоОстаток, | ЦеныОстатки.ЦенаОстаток |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Цены.Остатки КАК ЦеныОстатки | ПО (ЦеныОстатки.Номенклатура = СпрНоменклатура.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки | ПО (ОстаткиОстатки.Номенклатура = СпрНоменклатура.Ссылка) |ГДЕ | СпрНоменклатура.Ссылка <> &Ссылка | И (ЦеныОстатки.ТипЦены = &ТипЦены | ИЛИ СпрНоменклатура.ЭтоГруппа = &ЭтоГруппа)"); Однако, в регистре цен есть 2 измерения, "Номенклатура" и "ТипЦены", для хранения закупочных цен, розничных цен и т.д., и необходимо, что бы по всем показывались либо заданные цены, либо 0, если записей о такой цене нет. С остатками это работает, т.е. нулевые остатки выводятся. А вот с ценами не получается, я так понимаю из-за условия. Пробовал добавлять в ИЛИ комбинации (примерно): ЦеныОстатки.ТипЦены = Null; ЦеныОстатки.ТипЦены = Неопределено; ЦеныОстатки.ТипЦены = Справочники.ТипЦен.ПустаяСсылка(); ЦеныОстатки.ЦенаОстаток = 0; ЦеныОстатки.ЦенаОстаток = Null А так же их комбинации. Не сработало. Подскажите пожалуйста, как правильно задать условие! P.S. Условие "СпрНоменклатура.ЭтоГруппа = &ЭтоГруппа" нужно для того, что бы в результате так же выводились группы. |
|||
1
France
19.07.14
✎
21:49
|
Для цен полное соединение.
И, за рн для цен сейчас истерия будет)) |
|||
2
DCKiller
19.07.14
✎
21:50
|
У номенклатуры тип цены где хранится? Если в справочнике самой номенклатуры, то сделай соединение с регистром цен еще по типу цены.
|
|||
3
Djiney
19.07.14
✎
21:54
|
(1) Спасибо, сейчас попробую. Просто заказчик хотел что бы было видно как меняются цены в магазине, пришлось извращаться)
(2) Типы цен хранятся в самом регистре, т.к. для розничных покупателей и оптовиков разные цены на одну и ту же позицию. |
|||
4
Djiney
19.07.14
✎
22:01
|
(1) Если просто поменять для цен на полное соединение, то результата никакого, так же позиции не показываются. Полное соединение представляет собой комбинацию левого и правого, но ведь не может быть так, что бы в регистре была ссылка на несуществующий элемент номенклатуры :/
|
|||
5
DCKiller
19.07.14
✎
22:08
|
Вообще-то, судя по запросу, все должно показываться. ИМХО, или ты сам не знаешь, чего хочешь, или нам чего-то недоговариваешь...
|
|||
6
Djiney
19.07.14
✎
22:14
|
Вроде все сказал. Попробую так:
Имею: 1) Справочник номенклатуры 2) РН Остатки с 1 измерением (номенклатура) 3) РН Цены с 2 измерениями (номенклатура и тип цен) Хочу: Пользователь выбирает тип цены (закупочная, розница и т.д.) и ему по этой цене выводятся ВСЕ элементы номенклатуры с остатками и ценами, в т.ч. и группы (просто названием, разумеется). При чем, если в РН нет записи с такой комбинацией измерений (номенклатура + определенная цена), то должен выводиться 0 (иди хотябы что-нибудь). Конкретнее сформулировать не могу :( |
|||
7
Djiney
19.07.14
✎
22:19
|
Нашел 1 из вариантов решения, запрос делать просто с левым соединением, а тип цен фильтровать в процессе обработки выборки. Однако это весьма долго для 15000 позиций номенклатуры -_-
|
|||
8
mistеr
19.07.14
✎
22:22
|
(1) Неверно.
(0) Условие на ТипЦены - в параметры ВТ. Условие на ЭтоГруппа - в мусорку. Наличие в ГДЕ условий на "правую" сторону левого соединения превращает соединение во внутреннее. Сколько раз можно повторять. |
|||
9
France
19.07.14
✎
22:24
|
(8) левое соединение даст на одну запись номенклатуры две записи регистра цен?
|
|||
10
mistеr
19.07.14
✎
22:25
|
Да, РегистрНакопления.Цены.Остатки это 5+
|
|||
11
mistеr
19.07.14
✎
22:26
|
(9) С чего вдруг?
|
|||
12
Wobland
19.07.14
✎
22:28
|
>РегистрНакопления.Цены.Остатки
что это? |
|||
13
Wobland
19.07.14
✎
22:30
|
+(12) цены повышаются, их цены постоянно растут. водка разбавляется водой безо всяких мер ©
прогоните Чегракова от компьютера |
|||
14
Wobland
19.07.14
✎
22:31
|
(13) *Чигракова
|
|||
15
DCKiller
19.07.14
✎
22:34
|
(11) А почему нет? если у каждой записи регистра разный тип цен...
|
|||
16
mistеr
19.07.14
✎
22:35
|
(13) Там у них есть менеджер по повышению цен и менеджер по снижению цен. И вот они целый день колотят параллельно то +10%, то -5%. А те, кто продает, реальные цены поймать не могут. Поэтому (воздевает указательный палец к небу) - Остатки. Все по ТЗ.
|
|||
17
mistеr
19.07.14
✎
22:36
|
(15) Внимательно читаем сообщение еще раз.
|
|||
18
Djiney
19.07.14
✎
22:36
|
(10) Хорошо, изучу ВТ. Посоветуйте тогда, пожалуйста, более удобный способ показать заказчику, что сегодня у него цена на железяку 2000р, месяц назад была 2100р, а 5 месяцев назад была 1990р
|
|||
19
Wobland
19.07.14
✎
22:38
|
(18) запрос предлагать? или только извращения?
|
|||
20
mistеr
19.07.14
✎
22:40
|
(18) ВТ это виртуальная, не временная. Так, на всякий случай.
|
|||
21
Wobland
19.07.14
✎
22:40
|
(19) к регистру сведений, конечно. например, срез последних на каждую дату
|
|||
22
Djiney
19.07.14
✎
22:49
|
(21) а в чем принципиальная разница? Ну, за исключением того что в РН вбивать цены несколько экзотичнее
|
|||
23
Reaper_1c
19.07.14
✎
22:52
|
(22) В том, что твое приложение просто не будет отвечать на действия пользователя, подернется белой плесенью и будет иметь в диспетчере задач пометку "не отвечает".
|
|||
24
Wobland
19.07.14
✎
22:53
|
(22) в смысле. цены не накапливаются
|
|||
25
mistеr
19.07.14
✎
22:54
|
(22) Ага, исправил прошлогоднюю ошибку, перепахиваешь весь год, делаешь десять новых ошибок. Экзотика...
|
|||
26
Djiney
19.07.14
✎
23:01
|
Ну, учитывая то, что в регистр данные вносятся автоматически путем однократного ввода цены, а затем изменения на +100р и -100р не думаю что возникают подобные неудобства. Хотя, срез последних никогда не использовал, каюсь.
|
|||
27
Wobland
19.07.14
✎
23:09
|
(26) +100 к 2100 - это будет 2200?
|
|||
28
France
19.07.14
✎
23:15
|
(11) (11) подумал, прежде чем писать??
|
|||
29
Djiney
19.07.14
✎
23:15
|
(27) А разве нет?
|
|||
30
Wobland
19.07.14
✎
23:18
|
(29) да, действительно, проверил на калькуляторе. это я сейчас тебе какие-то _сведения_ рассказал
|
|||
31
Reaper_1c
19.07.14
✎
23:25
|
(26) А ты попробуй прикрутить теперь:
1. прикрутить к документу закупки автоматическую регистрацию закупочной цены. 2. написать обработку загрузки цен из прайса 3. сделать механизм установки розничной цены наценкой к закупочной. 4. Сравнить цены сегодня и год назад, приведенные к транзитной валюте (цена на золото, к примеру) по курсу на дату установки цены. Результат должен отображать изменение цен в процентном выражении в валюте цен и транзитной валюте для сравнения. Соответственно по всему диапазону номенклатуры, с подведением итогов по иерархии - как расчета медианы от ряда процентов входящего в группу. |
|||
32
Wobland
19.07.14
✎
23:26
|
(31) 10 баллов
|
|||
33
Djiney
19.07.14
✎
23:33
|
(31) 1) Прикручено;
2) Написано, только не из прайса, а из счета фактуры/приходных накладных; 3) На данный момент конфигурация интернет магазина, и цены заказчик устанавливает вручную; 4) Мне кажется это слишком сложно для небольшой фирмы из 6 человек, а на сильно большее я пока и не замахиваюсь. Да и я в любом случае, прикрутить можно все что угодно и к чему угодно) |
|||
34
Wobland
19.07.14
✎
23:35
|
(33) а кто изобрёл РН для цен? что он тогда пил/курил?
|
|||
35
Wobland
19.07.14
✎
23:39
|
было дело - эмулировал РС на РН. или РН на РС, не помню. требовалось совмещение обеих функциональностей, долго думали... очень хитрый бизнес-процесс
|
|||
36
R41
19.07.14
✎
23:39
|
Условие левого соединения нужно перенести в условие ПО, иначе это будет внутреннее соединение. Сделай вот так:
Запрос = Новый Запрос("ВЫБРАТЬ | СпрНоменклатура.Ссылка, | ОстаткиОстатки.КоличествоОстаток, | ЦеныОстатки.ЦенаОстаток |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Цены.Остатки КАК ЦеныОстатки | ПО (ЦеныОстатки.Номенклатура = СпрНоменклатура.Ссылка И ЦеныОстатки.ТипЦены = &ТипЦены) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки | ПО (ОстаткиОстатки.Номенклатура = СпрНоменклатура.Ссылка) |ГДЕ | СпрНоменклатура.Ссылка <> &Ссылка | "); P.S. Условие про группу не понял, поэтому убрал.... |
|||
37
Djiney
19.07.14
✎
23:40
|
(34) Я написал всю конфигурацию с 0, ибо изначально для учета использовалась какая-то мистическая комбинация из 1С 7.7, Excel, Access и админки сайта, и стояла срочная задача запихать все ото всюду в 1С, и думать над особо сложными задачами на будущее как в (31) 4 не было времени)
А так исправлю, я и не утверждал что это правильно, я в этом деле новичок) |
|||
38
R41
19.07.14
✎
23:41
|
В самой выборке лучше (но необязательно) использовать ISNULL:
СпрНоменклатура.Ссылка, ISNULL(ОстаткиОстатки.КоличествоОстаток,0) КАК КоличествоОстаток ISNULL(ЦеныОстатки.ЦенаОстаток,0) КАК ЦенаОстаток |
|||
39
Djiney
19.07.14
✎
23:45
|
(36) Большое спасибо, ваш вариант помог! В (38) тоже полезная информация, благодарю за совет.
|
|||
40
Reaper_1c
19.07.14
✎
23:52
|
(33) Да что ты, а когда тебя попросят открыть в системе 7й аккаунт ты скажешь: "У вас же не большая фирма! Зачем вам 7й человек? Гоните его в шею, вам больше чем 6 человек на фирме не надо!" - правильно я понимаю?
|
|||
41
Reaper_1c
19.07.14
✎
23:54
|
(33) Модуль регистрации цены поставщика при поступлении приложи - хоть поржем... это ж надо, сколько у человека лишнего времени то.
|
|||
42
Djiney
20.07.14
✎
00:00
|
(40) Я конечно извиняюсь, но мне кажется, что у вас почему-то яро бомбит на эту тему. Я же не настаиваю что мой вариант единственно верный и непоколебимый.
Или вы не считаете, что у разных фирм разные потребности? И что немало небольших контор для учета до сих пор пользуются просто тетрадями или экселем, где такое в принципе невозможно, причем им этого достаточно, вам это тоже кажется чем-то нерациональным? |
|||
43
Reaper_1c
20.07.14
✎
00:15
|
(42) Мне кажется, ты игноrиrуешь вопrосы, напrямую относящиеся к теме твоего же топика и пытаешься пеrевести rазговоr в плоскость личных оскоrблений...
|
|||
44
RomanYS
20.07.14
✎
00:23
|
(43) мне кажется ты ошибаешься
ТС задал вопрос и уже получил ответ А твое желание поржать над решением ТС к теме мало относится |
|||
45
Djiney
20.07.14
✎
00:24
|
(43) Т.е. Сообщения (22), (26), (40) и (41), по вашему мнению, напрямую относятся к интересующему меня вопросу? Мне кажется, что в ваших сообщения вы даже не пытались подсказать мне решение моего вопроса, а просто прицепились к РН цен и просто насмехались над этим решением, разве не так?
|
|||
46
Reaper_1c
20.07.14
✎
00:34
|
(44) О да, ответы просто супер. Помогут спрятать грабли в высокой траве так, чтобы потом с первого раза проломить ТС череп к чертовой матери.
(45) Как бы тебе сказать, что нужно из конфигурации твой регистр удалить к чертовой матери и тебя при этом не обидеть-то, а? Да еще так, чтобы ты сам осознал, какую свинью сам себе подложил? |
|||
47
Djiney
20.07.14
✎
00:43
|
(46) Ну, например прямым текстом, как это обычно делают взрослые люди? Что-то вроде "Ваше решение в корне неверно, и, в дальнейшем, могут возникнуть проблемы с обработкой и управлением данными. Лучшим вариантом будет перейти на РС как можно быстрее.".
Безусловно, из данной темы я вынес множество полезной информации, и уже начал перерабатывать конфигурацию под запись цен в РС вместо РН. Что я могу вам ответить, так это это то, что если вы и пытались мне как-то помочь, то делали это в корне неправильно. Буду надеяться, что вас данное замечание не обидело. |
|||
48
Reaper_1c
20.07.14
✎
00:51
|
(47) Это интернет, детка!
|
|||
49
France
20.07.14
✎
00:59
|
Кхм... из 1 "И, за рн для цен сейчас истерия будет))"
|
|||
50
Djiney
20.07.14
✎
01:01
|
(48) А жаль, что с интернетом нынче только такая ассоциация.
|
|||
51
France
20.07.14
✎
01:05
|
(50) все правильно тут делали)) жизнь жестока - надо где люлей получить)) лучше тут, чем от клиент(ов)а
|
|||
52
Djiney
20.07.14
✎
01:16
|
(51) Ну, для того, чтобы пойти нужным путем не обязательно получать люли. Достаточно ёмкого комментария с намеком на решение. Лично мне, для того, чтобы пересмотреть свое решение, было достаточно (21). Как говорится - "зачем же платить больше?"
|
|||
53
France
20.07.14
✎
01:17
|
И, чтобы ты успокоился: за не один лям баксов реализовали механизм регистра бухгалтерии на рн для очень крупной металлургической компании. Экспертом выступал сотрудники1с.
Так называемый РАУЗ был реализован для дочки газпрома с подачи сотрудника ДУК, опять таки сотрудник 1с даже там тусовался, и даже перешел в компанию внедренца (Карташов, Кулешов-не помню). РАУЗ успешно используется в одном из лидеров металлургии России Типовое решение 1с для вузов - опять таки за базу идея той же компании)) (здравствуйте, Марина :)) |
|||
54
France
20.07.14
✎
01:18
|
(52) ты правильно идёшь. У большинства тут мозги зациклены на типовых..
|
|||
55
France
20.07.14
✎
01:19
|
(53) + после этого, собственно, рауз в типовых и появился
|
|||
56
Reaper_1c
20.07.14
✎
01:48
|
(54) Правильно - это когда объект выбирается по совокупности методического назначения и технической реализации, а не потому, что другими объектами не пользовался. Наш ТС тебе вряд ли порядок измерений в регистрах защитить сможет, а ты ему про РАУЗ...
|
|||
57
К_Дач
20.07.14
✎
11:47
|
(31) это и РН может обеспечить... а вот что будет, если ввести цену в РН задним числом или изменить ранее созданный документ... что будет с последующими ценами - ТС явно не подумал)))
|
|||
58
Reaper_1c
20.07.14
✎
13:08
|
(57) Я вообще могу все это по тетрадке посчитать, и что?
|
|||
59
Djiney
20.07.14
✎
18:17
|
(57) Было так:
Допустим, 3 документа по 1 номенклатуре, ставящие цены 100, 110 и 105 рублей. В регистре в таком порядке будет 3 записи: +100 +10 -5 Т.о. последняя цена 105. Изменяем цену в середине: +100 +20 -15 В итоге 105. Перепроводим последнюю запись задним числом, получаем. +105 -5 +10 В итоге 110 (ибо последнее изменение было на 110). Да, есть проблема в том, что при перепроведении одного документа проводятся остальные, содержащие информацию о данном элементе, однако все работает. Но данное уже не актуально, т.к. уже все переписал под РС. Собственно, РС удобнее в плане того, что не нужно проводить заново все документы при перепроведении одного, ну и ввод проще, не отрицаю. |
|||
60
Wobland
20.07.14
✎
18:20
|
(59) фак мой мозг, как ты это сделал, демон?
|
|||
61
Drac0
20.07.14
✎
18:33
|
(59) Ничего себе "маленькое" неудобство
|
|||
62
Djiney
20.07.14
✎
19:25
|
(60) При проведении документа, документ смотрит остатки по цене на время проведения, после чего высчитывает разницу между ценой из остатков и ценой, указанной в нем, после чего разницу записывает в регистр. Соответственно, приход или расход определяет + или - значения разницы цены.
(61) Я и не уточнял размер неудобства) Хотя, это не самое неудобное из того, что приходилось делать в 1С. |
|||
63
Wobland
20.07.14
✎
19:31
|
(62) я понимаю, как это сделать технически. я не понимаю, на хрена это сделать по-человечески
|
|||
64
Djiney
20.07.14
✎
19:44
|
(63) ну как это часто бывает, было мало времени и много работы, первое что пришло в голову, то и было реализовано)
|
|||
65
Wobland
20.07.14
✎
19:48
|
вот бы у меня с девушками так: первое что пришло в голову - а она уже согласна
|
|||
66
m-serg74
20.07.14
✎
20:41
|
(1) садись кол
|
|||
67
m-serg74
20.07.14
✎
20:44
|
(28) сам думал когда (1) писал?
|
|||
68
Reaper_1c
20.07.14
✎
21:34
|
(64) Ну и как? Меньше времени заняло чем РС сделать?
|
|||
69
Djiney
20.07.14
✎
21:51
|
(68) Ну, практически так же. В получении данных изменилось только Цены.Остатки на Цены.СрезПоследних, в модулях убрал только 15 строчек из проведения движения и все.
|
|||
70
m-serg74
20.07.14
✎
22:56
|
(69) дело не в количестве строчек, если ты до сих пор не понял
|
|||
71
Djiney
20.07.14
✎
23:56
|
(70) К сожалению в данном вопросе у меня недостаточно опыта, потому причин кроме небольшого усложнения кода и некоторого увеличения времени выполнения определенных задач я не вижу.
|
|||
72
France
25.07.14
✎
00:47
|
(56) по поводу назначения к 1с и акселоту с конфой управление складом. Наклали на назначения и сделали замечательную конфу (была, по крайней мере)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |