|
Прямой запрос на 1с 7.7 к базе данных mssql 2008r2 с использованием динамического списка.
|
|||
---|---|---|---|
#18+
Добрый день, уважаемые форумчане! У меня возникла такая ситуация: "Есть прямой запрос на sql к базе, который дважды выбирает один и тот же документ в подзапросе". На дбф формате процедура выглядит так: Функция ВернутьсуммуОплаты(ДокОсн) Сум=0; ДокПодчиненные = СоздатьОБъект("Документ"); Если ПустоеЗначение(ДокОсн)=0 Тогда Если СписокДок.НайтиЗначение(ДокОсн)=0 Тогда Если ДокПодчиненные.ВыбратьПодчиненныеДокументы(,,ДокОсн) = 1 Тогда Пока ДокПодчиненные.ПолучитьДокумент() = 1 Цикл Если ДокПодчиненные.Проведен() = 0 Тогда Продолжить; КонецЕсли; Если ДокПодчиненные.Вид() = "РКО" Тогда Сум=ДокПодчиненные.Сумма+Сум; КонецЕсли; КонецЦикла; КонецЕсли; СписокДок.ДобавитьЗначение(ДокОсн); КонецЕсли; КонецЕсли; Возврат Сум; КонецФункции А запрос так: "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |ТекущийДокумент = Документ.ПоступлениеТМЦ.ТекущийДокумент; |Фирма = Документ.ПоступлениеТМЦ.Фирма; |КодОперации = Документ.ПоступлениеТМЦ.КодОперации; |ДатаДок = Документ.ПоступлениеТМЦ.ДатаДок; |ДатаВык = Документ.ПоступлениеТМЦ.ДатаВык; |Номенклатура = Документ.ПоступлениеТМЦ.Номенклатура; |Цена = Документ.ПоступлениеТМЦ.Цена; |ЦенаВык = Документ.ПоступлениеТМЦ.ЦенаВыкупа; |Оценка = Документ.ПоступлениеТМЦ.Номенклатура.Оценка; |Сумма = Документ.ПоступлениеТМЦ.Сумма; |ЦенаВДрМаг = Документ.ПоступлениеТМЦ.ЦенаВДругомМагазине; |Источник = Документ.ПоступлениеТМЦ.ИсточникРознЦеныВДругомМагазине; |Функция ОбщСумма = Сумма(Сумма); |Функция СуммаОплаты = Сумма(ВернутьСуммуОплаты(ТекущийДокумент)); |Функция СуммаОплатыВык = Сумма(ВернутьСуммуОплатыВык(ТекущийДокумент)); |Функция ОбщЦенаВык = Сумма(ЦенаВык); |"; Вот мой текст на скл: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
Вопрос в том, что мне надо в результирующей выборке получить сумму по документу один раз, который потом встречается еще несколько раз, а у меня суммируется по два раза по документу, если в этом документе две номенклатуры (группировка по номенклатуре), как можно это сделать на sql? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2013, 21:58 |
|
Прямой запрос на 1с 7.7 к базе данных mssql 2008r2 с использованием динамического списка.
|
|||
---|---|---|---|
#18+
сначала приведите Ваш код к виду 1с++ запросов. почитайте про nolock и индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2013, 00:25 |
|
Прямой запрос на 1с 7.7 к базе данных mssql 2008r2 с использованием динамического списка.
|
|||
---|---|---|---|
#18+
ON REPLACE(ДокРКО.Child,' ','')=REPLACE(Жур.IDDoc,' ','') не нужны SUBSTRING(Отбор1.ParentVal,7,LEN(Отбор1.ParentVal)-6) AS Child тоже - бред GROUP BY GROUPING то же. спросите на мисте. там есть добрый епрст он Вам подскажет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2013, 00:30 |
|
Прямой запрос на 1с 7.7 к базе данных mssql 2008r2 с использованием динамического списка.
|
|||
---|---|---|---|
#18+
Вы хотите сумму по документу? А зачем тогда обращаетесь к номенклатуре?... Пример простенький напишите - что вы хотите. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2013, 00:50 |
|
Прямой запрос на 1с 7.7 к базе данных mssql 2008r2 с использованием динамического списка.
|
|||
---|---|---|---|
#18+
Извините, что не написал в виде 1с++, это я готовый текст скопировал с отладки, а так я строкой строю. Обращаюсь к номенклатуре, потому что нужна группировка по номенклатуре. Можно взять пример не с моего примера, а так, что мне нужно реализовать такую штуку, т.е. есть документы и есть подчиненные документы, мне нужно, чтобы в переборе по подчиненным документам обрабатывать только один документ, без повтора, а на дбф запросе, там используется список, в который добавляются документы, по которым была выборка, и , соответственно, если потом встретится такой документ, он уже не берется и сумма становится нормальной. А у меня берется несколько раз. Просто я хочу реализовать это в одном запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2013, 18:29 |
|
Прямой запрос на 1с 7.7 к базе данных mssql 2008r2 с использованием динамического списка.
|
|||
---|---|---|---|
#18+
Меня волнует значение переменной СуммаОплаты ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2013, 18:31 |
|
Прямой запрос на 1с 7.7 к базе данных mssql 2008r2 с использованием динамического списка.
|
|||
---|---|---|---|
#18+
Не совсем понятно, как приведенный код 7.7 соотносится с озвученой задачей. Вы хотите по группировке позиций приходного/расходного документа получить суммы оплат? Если бизнес-процессы позволяют утверждать, что всегда подчиненным документом оплачивается 100%, то: 1. Групируете номенклатуру нужных документов и сумму по ним. 2. Подбираете нужные документы оплаты. 3. Через case указываете оплаченную сумму,по условию null, для документа оплаты. Если нельзя утверждать вышесказанное, то к вышеуказанному: 1. Добавляем нумерацию и джойним полученную группировку поступлений/продаж саму на себя получая еще нарстающуюю сумму по строкам документа. 2. Case применяем относительно нарастающей суммы. ЗЫ С вашим where работать будет дольше, чем через платформу. При join`нах отбор по таблицам надо делать в условиях соединений. Итоговое условие должно отсекать то лишне, что образовалось в процессе соединения. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2013, 22:11 |
|
|
start [/forum/topic.php?fid=28&msg=38330100&tid=1519761]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 442ms |
0 / 0 |