|
v7: Не правильно работает запрос | ☑ | ||
---|---|---|---|---|
0
vadim777
01.06.16
✎
13:28
|
Древняя конфа АБТ, отчет Взаиморасчеты. Текст запроса:
Если ДатаПо>=ПолучитьДатуТА() Тогда ДатаПо=ПолучитьДатуТА(); КонецЕсли; Пер = ""; Если Не(ДатаПо=0) Тогда Пер=Пер+" По ДатаПо;"; Иначе Пер=Пер+";"; КонецЕсли; ТекстЗапроса = "//{{ЗАПРОС(Взаиморасчеты) |Период с ДатаС" + Пер + " |Клиент = Регистр.Взаиморасчеты.Клиент; |ВалВз = Регистр.Взаиморасчеты.Клиент.ВалютаВзаиморасчетов; |СуммаГРН = Регистр.Взаиморасчеты.СуммаВал; |СуммаВал = Регистр.Взаиморасчеты.СуммаОсн; |СуммаНДС = Регистр.Взаиморасчеты.СуммаНДС; |Условие(Клиент в ВыбКлиент); |Группировка ВалВз; |Группировка Клиент; |Функция НачГРН = НачОст(СуммаГРН); |Функция НачНДС = НачОст(СуммаНДС); |Функция НачВал = НачОст(СуммаВал); |Функция РасхГРН = Расход(СуммаГРН); |Функция РасхНДС = Расход(СуммаНДС); |Функция РасхВал = Расход(СуммаВал); |Функция ПрихГРН = Приход(СуммаГРН); |Функция ПрихНДС = Приход(СуммаНДС); |Функция ПрихВал = Приход(СуммаВал); |Функция КонГРН = КонОст(СуммаГРН); |Функция КонВал = КонОст(СуммаВал); |Функция КонНДС = КонОст(СуммаНДС); |"//}}ЗАПРОС ; С мая 2016 никаких движений не было. Период отчета: с 01.05.2016 по 05.05.2016. Если в диалоге отчета не задавать Клиента, то отчет пуст. Если задать Клиента, то по нему будут начальные и конечные остатки, без движения, что правильно. Почему этого нет по всем клиентам? |
|||
1
ДенисЧ
01.06.16
✎
13:30
|
Проверяй пустоту клиента и убирай условие из текста...
|
|||
2
пипец
01.06.16
✎
13:31
|
|Условие(Клиент в ВыбКлиент);
группировка валюты нафига ? |
|||
3
vadim777
01.06.16
✎
13:31
|
(1) Убирал - то же самое.
|
|||
4
vadim777
01.06.16
✎
13:32
|
(2) у клиентов разная валюта взаиморасчетов.
|
|||
5
Amra
01.06.16
✎
13:32
|
(3) "Не верю"
|
|||
6
пипец
01.06.16
✎
13:33
|
группировка валюты первая ))) еще раз группировка валюты нафига ?
|
|||
7
пипец
01.06.16
✎
13:33
|
(4) ичо ? это реквизит клиента у тя в данном случае а не регистра
|
|||
8
vadim777
01.06.16
✎
13:34
|
ПС: если ДатаС берется достаточно глубоко назад, то начинают появляться строки отчета. Причем чем глубже назад ДатаС - тем больше строк отчета.
|
|||
9
vadim777
01.06.16
✎
13:36
|
(6)(7) как оправдание - это не мой отчет, стандартный. Обратил внимание, что врет он. Ты думаешь, что в этом причина? Счас попробую без валюты...
|
|||
10
vadim777
01.06.16
✎
13:39
|
Убрал группировку по валюте - все то-же самое. Даже с учетом (8).
|
|||
11
пипец
01.06.16
✎
13:40
|
ну не знаю кто так писАл и когда ))) но убрать группировку по валюте и убрать условие по клиенту и показать как выводит - де цикл то ?
|
|||
12
vadim777
01.06.16
✎
13:43
|
Вот текст вывода:
//!Пока Запрос.Группировка("ВалВз") = 1 Цикл Пока Запрос.Группировка("Клиент") = 1 Цикл Если Запрос.Клиент.ЭтоГруппа() = 1 Тогда Если ТолькоОстатки = Да Тогда Таб.ВывестиСекцию("Группа|База"); Таб.ПрисоединитьСекцию("Группа|Остаток"); Иначе Таб.ВывестиСекцию("Группа"); КонецЕсли; Оживить(1); Продолжить; КонецЕсли; ЗаписатьПерем(); Если (Режим="Свод") Тогда Если (Отбор = Перечисление.ВариантыВзаиморасчетов.НамДолжны) и (Число(КонГРН)>0) Тогда Продолжить; КонецЕсли; Если (Отбор = Перечисление.ВариантыВзаиморасчетов.МыДолжны) и (Число(КонГРН)<0) Тогда Продолжить; КонецЕсли; КонецЕсли; Валюта = ?(вВал = 1,Запрос.Клиент.ВалютаВзаиморасчетов.Кратко,Константа.ОсновнаяВалюта.Кратко); Если ТолькоОстатки = Да Тогда Таб.ВывестиСекцию("Клиент|База"); Таб.ПрисоединитьСекцию("Клиент|Остаток"); Иначе Таб.ВывестиСекцию("Клиент"); КонецЕсли; Оживить(1); Если Режим = "Свод" Тогда Продолжить; // Если свод, так он уже есть... КонецЕсли; Пока Запрос.Группировка("Заказ") = 1 Цикл ЗаписатьПерем(); Если (Отбор = Перечисление.ВариантыВзаиморасчетов.НамДолжны) и (Число(КонГРН)>0) Тогда Продолжить; КонецЕсли; Если (Отбор = Перечисление.ВариантыВзаиморасчетов.МыДолжны) и (Число(КонГРН)<0) Тогда Продолжить; КонецЕсли; Если ТолькоОстатки = Да Тогда Таб.ВывестиСекцию("Заказ|База"); Таб.ПрисоединитьСекцию("Заказ|Остаток"); Иначе Таб.ВывестиСекцию("Заказ"); КонецЕсли; Оживить(1); Если Режим = "Заказы" Тогда Продолжить; КонецЕсли; Пока Запрос.Группировка("Док") = 1 Цикл Если Запрос.Док.Выбран() = 0 Тогда Продолжить; КонецЕсли; ПрихГРН = ФРМВал(Запрос.ПрихГРН, Запрос.Клиент.ВалютаВзаиморасчетов); ПрихВал = ФРМВал(Запрос.ПрихВал, Константа.ОсновнаяВалюта); ПрихНДС = ФРМВал(Запрос.ПрихНДС, Запрос.Клиент.ВалютаВзаиморасчетов); РасхГРН = ФРМВал(Запрос.РасхГРН, Запрос.Клиент.ВалютаВзаиморасчетов); РасхВал = ФРМВал(Запрос.РасхВал, Константа.ОсновнаяВалюта); РасхНДС = ФРМВал(Запрос.РасхНДС, Запрос.Клиент.ВалютаВзаиморасчетов); Если сНДС = 1 Тогда Прих = ПрихГРН + " |" + ПрихНДС; Расх = РасхГРН + " |" + РасхНДС; ИначеЕсли вВал = 1 Тогда Прих = ПрихГРН; Расх = РасхГРН; иначе Прих = ПрихВал; Расх = РасхВал; КонецЕсли; Таб.ВывестиСекцию("Движение"); Оживить(1); КонецЦикла; КонецЦикла; КонецЦикла; Если ( ( ВыбКлиент.ЭтоГруппа() = 1 ) или ( ПустоеЗначение(ВыбКлиент) = 1 ) ) и ( вВал = 1 ) Тогда ЗаписатьПерем(); Если ТолькоОстатки = Да Тогда Таб.ВывестиСекцию("ИтогоПоВал|База"); Таб.ПрисоединитьСекцию("ИтогоПоВал|Остаток"); Иначе Таб.ВывестиСекцию("ИтогоПоВал"); КонецЕсли; КонецЕсли; //!КонецЦикла; В отладчике видно, что в цикл по самой первой группировке не входит. То есть результат запроса пустой. |
|||
13
пипец
01.06.16
✎
13:45
|
жесть ))))
|
|||
14
vadim777
01.06.16
✎
13:51
|
(13)Да вот и правда жесть. Сравниваю с подобным запросом из ТиС, здесь все правильно работает:
ТекстЗапроса = "//{{ЗАПРОС(КредитыПокупатели) |ПЕРИОД С Дата1 По Дата2; |Контрагент = Регистр.ВзаиморасчетыПокупателей.Контрагент, Регистр.ВзаиморасчетыПоставщиков.Контрагент; |Договор = Регистр.ВзаиморасчетыПокупателей.Договор, Регистр.ВзаиморасчетыПоставщиков.Договор; |Докум = Регистр.ВзаиморасчетыПокупателей.ТекущийДокумент, Регистр.ВзаиморасчетыПоставщиков.ТекущийДокумент; |Фирма = Регистр.ВзаиморасчетыПокупателей.Фирма, Регистр.ВзаиморасчетыПоставщиков.Фирма; |СтавкаНДС = Регистр.ВзаиморасчетыПокупателей.СтавкаНДС, Регистр.ВзаиморасчетыПоставщиков.СтавкаНДС; |ДолгПокуп = Регистр.ВзаиморасчетыПокупателей.Долг; |ДолгПост = Регистр.ВзаиморасчетыПоставщиков.Долг; |КодОперации = Регистр.ВзаиморасчетыПокупателей.КодОперации; |Условие (Фирма=ВыбФирма); |Группировка Контрагент упорядочить по Контрагент.Наименование;"; Если ДеталПоСтавкамНДС<>0 Тогда ТекстЗапроса = ТекстЗапроса + "Группировка СтавкаНДС;"; КонецЕсли; Если ДеталПоДоговорам<>0 Тогда ТекстЗапроса = ТекстЗапроса + "Группировка Договор;"; КонецЕсли; Если ДеталПоВсемДокументам<>0 Тогда ТекстЗапроса = ТекстЗапроса + "Группировка Докум;"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |Функция НачДолг = НачОст(ДолгПокуп); |Функция КонДолг = КонОст(ДолгПокуп); |Функция РасхДолг = Расход(ДолгПокуп); |Функция ПрихДолг = Приход(ДолгПокуп); |Функция НачДолгПост = НачОст(ДолгПост); |Функция КонДолгПост = КонОст(ДолгПост); |Функция РасхДолгПост = Расход(ДолгПост); |Функция ПрихДолгПост = Приход(ДолгПост); |"//}}ЗАПРОС ; |
|||
15
Ёпрст
01.06.16
✎
13:56
|
(0) пересчитай итоги, и базу переиндексируй.
|
|||
16
vadim777
01.06.16
✎
13:58
|
(15) на копии базы уже делается ТИИ, вторые сутки идут.
|
|||
17
Ёпрст
01.06.16
✎
14:08
|
(16) не надо делать ТиИ.
|
|||
18
Ёпрст
01.06.16
✎
14:09
|
Прерви и сделай (15).
|
|||
19
Ёпрст
01.06.16
✎
14:09
|
Итоги, можно и по одному регистру пересчитать, который , еще поди и не закрытый.
|
|||
20
vadim777
01.06.16
✎
14:31
|
(18) Прервал. В диалоге ТИИ оставил только галки Реиндексация и Пересчет итогов.
|
|||
21
Злопчинский
01.06.16
✎
14:35
|
(20) ну, на бесхозных базах - пересчет итогов обычно самая длительная операция - есть шанс не дождаться
|
|||
22
Ёпрст
01.06.16
✎
14:35
|
(20) нет.
|
|||
23
Ёпрст
01.06.16
✎
14:37
|
Прерви, удали все cdx из каталога базы, зайди монопольно и ТА взад-вперёд подвигай.
+ открой словарик, найди название своего регистра и огласи размер табличек RA и RG от этого регистра. При желании, можно штатно пересчитать итоги только по этому регистру. |
|||
24
trdm
01.06.16
✎
15:20
|
(23) > При желании, можно штатно пересчитать итоги только по этому регистру.
На dbf? Как? |
|||
25
Злопчинский
01.06.16
✎
15:22
|
(24) в полпинка.
существующие регистры скидываем в бэкап. удаляем все регистры кроме нужного для пересчета. далее как обычно. после завершения пересчета - из бэкапа возвращаем взад |
|||
26
vadim777
01.06.16
✎
15:34
|
(23) Удалил cdx, индексы сейчас восстанавливаются.
Регистр Взаиморасчеты: RG1060 - 8089 Кб, RA1060 - 4907 Кб. |
|||
27
Злопчинский
01.06.16
✎
15:36
|
(26) незакрытый регистр.
|
|||
28
trdm
01.06.16
✎
15:40
|
(25) елки-палки.... я дятел..
|
|||
29
trdm
01.06.16
✎
15:41
|
Вот что значит тупеть на фиксах.
|
|||
30
vadim777
01.06.16
✎
15:44
|
(23) Все! Итоги есть по всем клиентам.
А теперь можно разжевать - что все это значит? |
|||
31
Mikeware
01.06.16
✎
15:44
|
(28) чойто сразу вспомнился никулин из "бриллиантовой руки", как он себя по голове гипсом...
|
|||
32
Mikeware
01.06.16
✎
15:45
|
(30) пересчет итогов...
|
|||
33
trdm
01.06.16
✎
15:47
|
(30) Плановые технические работы - необходимость.
Если работают 2 разных релиза с БД могут таким образом накуралесить. Постарайся, что-бы с БД работал только 1 релиз 1С-а. |
|||
34
Mikeware
01.06.16
✎
15:53
|
(33) не всегда они необходимы в такой форме...
и релизы куролесят в основном с журналом расчетов и бухгалтерией. механизм регистров самый стабильный. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |