|
Нужна помощь в написании запроса | ☑ | ||
---|---|---|---|---|
0
capllary
02.10.14
✎
08:01
|
Требуется получить ОборотКт 51 счета с отбором по статье движения денежных средств.
Пока написал вот что, но почему то результат выходит нулевой, хотя в оборотке вижу движения за этот период по данным СДДС: ПС = ПланыСчетов["Хозрасчетный"]; Счет51 = ПС.НайтиПоКоду("51"); Субконто1 = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000039"); Субконто2 = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000040"); Субконто3 = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000154"); ТекстЗапроса = "ВЫБРАТЬ | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&Счет51), , Субконто1 В (&Субконто1, &Субконто2, &Субконто3)) КАК ХозрасчетныйОстаткиИОбороты |ИТОГИ ПО | ОБЩИЕ"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачПериода", мДатаНачалаПериодаОтчета); Запрос.УстановитьПараметр("КонПериода", КонецДня(мДатаКонцаПериодаОтчета)); Запрос.УстановитьПараметр("Счет51", Счет51); Запрос.УстановитьПараметр("Субконто1", Субконто1); Запрос.УстановитьПараметр("Субконто2", Субконто2); Запрос.УстановитьПараметр("Субконто3", Субконто3); Запрос.Текст = ТекстЗапроса; РезультатЗапроса = Запрос.Выполнить().Выбрать(); РезультатЗапроса.Следующий(); Сообщить(РезультатЗапроса.СуммаДокумента); |
|||
2
capllary
02.10.14
✎
08:06
|
Последнюю строку не ту скопировал:
Вместо: Сообщить(РезультатЗапроса.СуммаДокумента); Вот что: Сообщить(РезультатЗапроса.СуммаОборотКт); |
|||
3
Wobland
02.10.14
✎
08:10
|
ну и сообщается тебе нулл согласно этогам
|
|||
4
capllary
02.10.14
✎
08:12
|
(3) Сообщается не NULL, а 0
|
|||
6
Wobland
02.10.14
✎
08:13
|
ноль так ноль. итоги тебе зачем?
|
|||
8
capllary
02.10.14
✎
08:14
|
(5) Щас качну консоль.
|
|||
9
Wobland
02.10.14
✎
08:14
|
(7) запятую пропустил
|
|||
11
capllary
02.10.14
✎
08:16
|
(9) Где запятую пропустил?
|
|||
12
Wobland
02.10.14
✎
08:16
|
(11) перед неопределённым артиклем
|
|||
13
capllary
02.10.14
✎
08:16
|
(6) Итоги убрал, все равно 0
|
|||
14
Галахад
гуру
02.10.14
✎
08:17
|
Чо-то, новое:
Субконто1 В (&Субконто1, &Субконто2, &Субконто3) |
|||
15
Wobland
02.10.14
✎
08:17
|
теперь сумму убери
|
|||
16
capllary
02.10.14
✎
08:21
|
(12) Что за артикл?
|
|||
17
capllary
02.10.14
✎
08:21
|
(15) Сумму убрал, эффект тот же.
|
|||
18
Wobland
02.10.14
✎
08:23
|
(17) всё правильно
|
|||
19
organizm
02.10.14
✎
08:25
|
запихай Субконто1,2,3 в массив и сделай его параметром
|
|||
20
organizm
02.10.14
✎
08:26
|
ИТОГИ зачем? если есть агрегатная функция
|
|||
21
ChiginAV
02.10.14
✎
08:27
|
Запрос = Новый Запрос("ВЫБРАТЬ
| СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета), , Субконто2 В (&МассивСтатейДДС), , ) КАК ХозрасчетныйОбороты"); Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", Новый Граница(КонПериода, ВидГраницы.Включая)); МассивСтатейДДС = Новый Массив; МассивСтатейДДС.Добавить(Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000039")); МассивСтатейДДС.Добавить(Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000040")); МассивСтатейДДС.Добавить(Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000154")); Запрос.УстановитьПараметр("МассивСтатейДДС", ); Выборка = Запрос.Выполнить().Выбрать(); Сообщить(?(Выборка.Следующий(), Выборка.СуммаОборотКт, 0)); |
|||
22
organizm
02.10.14
✎
08:27
|
вид субконто определи в параметрах виртуальной таблицы
|
|||
23
ChiginAV
02.10.14
✎
08:28
|
(21) Упс, последний параметр не установил
|
|||
24
Cube
02.10.14
✎
08:28
|
(0) Начнем с того, что надо бы называть переменные своими именами. В частности в строке
РезультатЗапроса = Запрос.Выполнить().Выбрать(); Метод запроса Выбрать() возвращает выборку из результатов запроса, поэтому правильно писать Выборка = Запрос.Выполнить().Выбрать(); |
|||
25
organizm
02.10.14
✎
08:28
|
Сообщить(?(Выборка.Следующий(), Выборка.СуммаОборотКт, 0));
это то же очень оригинально. "Выборка.Следующий()" отдельно вверх |
|||
26
Cube
02.10.14
✎
08:29
|
(21) Не взлетит. В запрос надо список значений сувать, а не массив.
|
|||
27
ChiginAV
02.10.14
✎
08:29
|
(25) Зачем?
|
|||
28
Cube
02.10.14
✎
08:30
|
(25) Здесь как раз, всё отлично.
|
|||
29
ChiginAV
02.10.14
✎
08:30
|
(26) Попробуй сначала
|
|||
30
organizm
02.10.14
✎
08:30
|
(26) да?!..
|
|||
31
Cube
02.10.14
✎
08:30
|
+(28) Ой, я думал, что у него написано Сообщить(?(Выборка.Следующий(), Выборка.СуммаОборотКт, 0)); и тебе не нравится)))
|
|||
32
capllary
02.10.14
✎
08:36
|
Пробую.
|
|||
33
organizm
02.10.14
✎
08:36
|
ВЫБРАТЬ
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), &ВС, Субконто1 В (&МассивСтатейДДС), , ) КАК ХозрасчетныйОбороты |
|||
34
Cube
02.10.14
✎
08:37
|
+(26) Чёрд! Я точно помню, что не работало... Потому что в этом случае можно было бы пользоваться методом ВыгрузитьКолонку() у ТЗ, но приходилось перебором создавать СЗ и скармливать его запросу...
|
|||
35
organizm
02.10.14
✎
08:37
|
в &ВС поставь ПВС
|
|||
36
organizm
02.10.14
✎
08:38
|
* ПВХ
|
|||
37
organizm
02.10.14
✎
08:39
|
(34) в консоли только СЗ, в коде и массив нормально кушает.
|
|||
38
capllary
02.10.14
✎
08:40
|
(33) Пока что по прежнему 0
|
|||
39
ChiginAV
02.10.14
✎
08:40
|
Еще вот так, чтоб совсем хорошо было
"ВЫРАЗИТЬ(Субконто2 КАК Справочник.СтатьиДвиженияДенежныхСредств) В (&МассивСтатейДДС)" |
|||
40
Cube
02.10.14
✎
08:42
|
(38) Убери отбор по статьям ДДС и в запрос добавь все поля, оттуда и пляши потом.
|
|||
41
organizm
02.10.14
✎
08:43
|
в &ВС устанавливаешь каким должен быть Субконто1 для отбора. Если у тебя 51 счет "Банковские счета", "Статьи ДС", можно в &ВС поставить ПВХ.СтатьиДС и отбирай как хотел.
|
|||
42
organizm
02.10.14
✎
08:43
|
короче посиди подумай, все должно работать. посмотри Оборотку, может там и нет ничего
|
|||
43
ChiginAV
02.10.14
✎
08:45
|
Посмотрел бы оборотку по 51, чтоб быть уверенным, что есть обороты за период по выбранным статьям
|
|||
44
capllary
02.10.14
✎
08:47
|
(43) Оборот точно есть.
|
|||
45
capllary
02.10.14
✎
08:48
|
Мне просто вообще нужен отбор по 20 статьям ДДС.
|
|||
46
capllary
02.10.14
✎
08:48
|
(44) И оборот точно Кт именно по 51 счету.
|
|||
47
ChiginAV
02.10.14
✎
08:49
|
(44) Оборот есть. Запрос рабочий. Кто тогда слабое звено?
|
|||
48
capllary
02.10.14
✎
08:49
|
В не за данный период есть один документ Платежное поручение исходящее со статьей, у которой код 000000154
|
|||
49
capllary
02.10.14
✎
08:50
|
В ней, в оборотке
|
|||
50
capllary
02.10.14
✎
08:51
|
Убираю субконто, выдает полный оборотКт по 51 счету за данный период.
|
|||
52
capllary
02.10.14
✎
08:51
|
Значит точно проблема в Субконто1
|
|||
54
organizm
02.10.14
✎
08:52
|
ВЫБРАТЬ
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиДвиженияДенежныхСредств), Субконто1 В (&МассивСтатейДДС), , ) КАК ХозрасчетныйОбороты |
|||
55
capllary
02.10.14
✎
08:52
|
(39) Кстати, почему написано "ВЫРАЗИТЬ(Субконто2 КАК Справочник.СтатьиДвиженияДенежныхСредств) В (&МассивСтатейДДС)". В плане есть ли разница между Субконто1 и Субконто2?
|
|||
56
organizm
02.10.14
✎
08:52
|
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий(); Сообщить(Выборка.СуммаОборотКт); |
|||
57
organizm
02.10.14
✎
08:53
|
(55) смотри (54)
|
|||
58
capllary
02.10.14
✎
08:53
|
(54) Щас попробую.
|
|||
59
ChiginAV
02.10.14
✎
08:54
|
(55) Тип значений разный
|
|||
60
ChiginAV
02.10.14
✎
08:54
|
(56) Если выборка пустая, ошибка будет
|
|||
61
organizm
02.10.14
✎
08:57
|
(60)ну можно и так:
РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат 0; КонецЕсли; Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); Сообщить(Выборка.СуммаОборотКт); |
|||
62
hhhh
02.10.14
✎
08:57
|
(58) да, там на счете 51 статьи - это Субконто2
|
|||
63
ChiginAV
02.10.14
✎
08:57
|
(61) То-есть если пустой, то сообщать об этом не надо?
|
|||
64
organizm
02.10.14
✎
08:58
|
можно еще и так:
СУММА(ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотКт,0)) КАК СуммаОборотКт |
|||
65
organizm
02.10.14
✎
08:58
|
(63) сообщи
|
|||
66
capllary
02.10.14
✎
08:59
|
(65) Пока никак, щас скину полный код, который у меня.
|
|||
67
capllary
02.10.14
✎
09:00
|
ТекстЗапроса =
"ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиДвиженияДенежныхСредств), Субконто1 В (&МассивСтатейДДС)) КАК ХозрасчетныйОстаткиИОбороты"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачПериода", НачалоМесяца(мДатаКонцаПериодаОтчета)); Запрос.УстановитьПараметр("КонПериода", КонецДня(мДатаКонцаПериодаОтчета)); МассивСтатейДДС = Новый Массив; МассивСтатейДДС.Добавить(Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000039")); МассивСтатейДДС.Добавить(Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000040")); МассивСтатейДДС.Добавить(Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000151")); Запрос.УстановитьПараметр("МассивСтатейДДС", ); Запрос.Текст = ТекстЗапроса; РезультатЗапроса = Запрос.Выполнить().Выбрать(); РезультатЗапроса.Следующий(); Сообщить(НачалоМесяца(мДатаКонцаПериодаОтчета)); Сообщить(мДатаКонцаПериодаОтчета); Сообщить(РезультатЗапроса.СуммаОборотКт); |
|||
68
capllary
02.10.14
✎
09:01
|
По этому Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000151") точно есть сумма за данный период
|
|||
69
organizm
02.10.14
✎
09:03
|
(68) может они группа ?
|
|||
70
capllary
02.10.14
✎
09:03
|
(64) Когда вставляю твой код, конструктор запроса пишет что поле не найдено.
|
|||
71
ChiginAV
02.10.14
✎
09:03
|
(67) Субконто2 же
|
|||
72
capllary
02.10.14
✎
09:05
|
(71) Где субконто2? Тут - Субконто1 В (&МассивСтатейДДС))?
|
|||
73
ChiginAV
02.10.14
✎
09:05
|
(72) да
|
|||
74
hhhh
02.10.14
✎
09:06
|
(72) а зачем ОстаткиИОбороты? Сделай просто Обороты
|
|||
75
capllary
02.10.14
✎
09:06
|
(73) Ошибка обработки представления "РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты:Поле не найдено (Субконто2)"
<<?>>РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиДвиженияДенежныхСредств), Субконто2 В (&МассивСтатейДДС)) КАК ХозрасчетныйОстаткиИОбороты |
|||
76
capllary
02.10.14
✎
09:07
|
(74) В данном случае мне кажется разницы никакой.
|
|||
77
ChiginAV
02.10.14
✎
09:07
|
(75) У тебя в плане счетов у 51 субконто "СтатьиДДС" какое по счету?
|
|||
78
capllary
02.10.14
✎
09:09
|
(77) Субконто2
|
|||
79
capllary
02.10.14
✎
09:10
|
(77) Теперь я начал понимать в чем разница Субконто1 и Субконто2 и Субконто3
|
|||
80
hhhh
02.10.14
✎
09:11
|
(77) он же поправил, задал свой порядок субконто
ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиДвиженияДенежныхСредств), |
|||
81
hhhh
02.10.14
✎
09:11
|
(79) правильно написано. Субконто1
|
|||
82
ChiginAV
02.10.14
✎
09:13
|
(80) Не порядок, а тип значения
(81) Неправильно |
|||
83
capllary
02.10.14
✎
09:15
|
(82) Сделал так, все равно 0 возвращает.
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), , Субконто2 В (&МассивСтатейДДС)) КАК ХозрасчетныйОстаткиИОбороты" |
|||
84
ChiginAV
02.10.14
✎
09:15
|
Вставляем запрос из (21) в консоль. Проверяем. Удостоверяемся, что он работает. Думаем
|
|||
85
hhhh
02.10.14
✎
09:16
|
(82) синтакс помощник с вами не согласен
Субконто Субконто (необязательный) Тип параметра: ПланВидовХарактеристикСсылка.; Массив; ФиксированныйМассив; СписокЗначений. Ссылка, или массив ссылок, или фиксированный массив ссылок, или список значений, содержащий ссылки, на виды субконто. Задает набор и порядок субконто, которыми можно оперировать в запросе. Накладывает фильтр на записи по видам субконто (если массив, то по И). Если параметр <Субконто> не задан, то субконто определяются позиционно. То есть выбирается вид субконто соответствующего счета из соответствующей позиции. Так, если <Субконто> не определен, и выполняется запрос по счету, у которого определены виды субконто первое "Материалы", второе "Склад", то поле "Субконто1" будет содержать материалы, а поле "Субконто2" - склады. Если выполняется запрос по двум счетам, при этом у первого настройка субконто "Материалы, Склад", а у второго "Склад, Материал" и не задан параметр <Субконто>, то поле "Субконто1" будет содержать и материалы для первого счета, и склады для второго счета. Поле "Субконто2" будет содержать склады для первого счета и материалы для второго. Если параметр <Субконто> задан, то выбираются данные только по тем счетам, у которых определены все указанные виды субконто. При этом поля "Субконто<N>" будут содержать значения, соответствующие переданным видам субконто. Например, если один счет имеет настройку субконто "Материалы, Склад", а второй "Склад, Материалы", и параметр "Виды субконто" задан как массив "Материалы, Склад", то поле "Субконто1" будет содержать материалы, а поле "Субконто2" - склады независимо от счета. Параметр "Субконто" не существует, если при конфигурировании для плана счетов не указаны субконто. Значение по умолчанию: Неопределено. |
|||
86
capllary
02.10.14
✎
09:17
|
Все получилось, щас опишу как.
|
|||
87
ChiginAV
02.10.14
✎
09:18
|
(85) Хм, не знал. Соглашусь
|
|||
88
capllary
02.10.14
✎
09:21
|
Все банально:
Субконто8 = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000151"); Субконто9 = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000149"); Субконто10 = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000148"); Субконто11 = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000152"); ТекстЗапроса = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), , Субконто2 В (&Субконто2, &Субконто1)) КАК ХозрасчетныйОстаткиИОбороты"; Запрос.УстановитьПараметр("Субконто1", Субконто11); Запрос.УстановитьПараметр("Субконто2", Субконто8); |
|||
89
capllary
02.10.14
✎
09:22
|
У меня изначально все верно было, надо было просто поменять Субконто1 на Субконто2.
|
|||
90
capllary
02.10.14
✎
09:26
|
Всем спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |