Имя: Пароль:
1C
1C 7.7
v7: Помогите с запросом к регистру взаиморасчетов
0 vadim777
 
15.06.16
14:57
Смысл запроса: получить документы движения регистра по условию СуммаОсн <> СуммаВал. Запрос не выводит документы.
Процедура Сформировать1()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать1)
    //|Период с Дата1 по Дата2;
    //|Обрабатывать НеПомеченныеНаУдаление;
    |Клиент = Регистр.Взаиморасчеты.Клиент;
    |Заказ = Регистр.Взаиморасчеты.Заказ;
    |СуммаОсн = Регистр.Взаиморасчеты.СуммаОсн;
    |СуммаВал = Регистр.Взаиморасчеты.СуммаВал;
    |Док = Регистр.Взаиморасчеты.ТекущийДокумент;
    |Группировка Клиент;
    |Группировка Заказ;
    |Группировка Док;
    |Условие(СуммаОсн <> СуммаВал);
    |Функция сСуммаОсн = КонОст(СуммаОсн);
    |Функция сСуммаВал = КонОст(СуммаВал);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать1");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Клиент
        Таб.ВывестиСекцию("Клиент");
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей Заказ
            Таб.ВывестиСекцию("Заказ");
            Пока Запрос.Группировка(3) = 1 Цикл
                // Заполнение полей Док
                Таб.ВывестиСекцию("Док");
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать1", "");
КонецПроцедуры
1 AlexYurg
 
15.06.16
14:59
Попробуй вместо КонОст() использовать Приход() или Расход()
2 Масянька
 
15.06.16
15:00
(0) Из СП:
Группировка <?> Упорядочить по ;
Синтаксис:
Группировка <ИмяГруппировки>|<ПредопредГруппировка> [Упорядочить по <КонкретизацГруппировки>, ...][Без Упорядочивания][Без Групп][Все [ВошедшиеВЗапрос]];
Англоязычный синоним:
Group <ИмяГруппировки>|<ПредопредГруппировка> [Order By КонкретизацГруппировки, ...][Without Groups][All [IncludedInQuery]];
Назначение:
Установить порядок выборки информации.
Параметры:
<ИмяГруппировки> - имя внутренней переменной, задающей группировку;
<ПредопредГруппировка> - ключевое слово одной из встроенных группировок;
<КонкретизацГруппировки> - конкретизация переменной <ИмяГруппировки>, задающая порядок групп.
Ключевые слова:
Упорядочить по - параметры, следующие за данным ключевым словом, определяют упорядочивание строк в группировке.
Без Упорядочивания - необязательное добавочное ключевое слово, которое преследует цель уменьшения времени формирования запроса, при условии, что ни упорядочивание, ни значения упорядочивания при использовании данного запроса не нужны.
Без Групп -  группы справочника не выводятся в запрос (для группировки по справочнику);
Все - в запрос выводятся все значения, и нулевые тоже (используется для группировок по справочникам и временных группировок).
ВошедшиеВЗапрос - уточняет предыдущее ключевое слово 'Все'. Использование данного слова подразумевает, что в каждую строку запроса будут включены значения данных (в том числе нулевые), для которых есть ненулевое значение хотя бы в одной строке запроса.
Замечание:
Предопределенные группировки:
  Документ (Document) - позволяет детализацию до документа;
  СтрокаДокумента (DocumentLine) - позволяет детализацию до строки документа;
3 vadim777
 
15.06.16
15:10
(1) Результат запроса пуст.
4 AlexYurg
 
15.06.16
15:11
(3) Присоединяюсь к (2) - вместо "Группировка Док" нужно использовать предопределенную группировку: "Группировка Документ"
5 vadim777
 
15.06.16
15:12
(2) Попробовал так:
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать1)
    //|Период с Дата1 по Дата2;
    //|Обрабатывать НеПомеченныеНаУдаление;
    |Клиент = Регистр.Взаиморасчеты.Клиент;
    |Заказ = Регистр.Взаиморасчеты.Заказ;
    |СуммаОсн = Регистр.Взаиморасчеты.СуммаОсн;
    |СуммаВал = Регистр.Взаиморасчеты.СуммаВал;
    //|Док = Регистр.Взаиморасчеты.ТекущийДокумент;
    |Группировка Клиент;
    |Группировка Заказ;
    |Группировка Документ;
    |Условие(СуммаОсн <> СуммаВал);
    |Функция сСуммаОсн = КонОст(СуммаОсн);
    |Функция сСуммаВал = КонОст(СуммаВал);
    |"//}}ЗАПРОС

Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Клиент
        Таб.ВывестиСекцию("Клиент");
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей Заказ
            Таб.ВывестиСекцию("Заказ");
            Пока Запрос.Группировка(3) = 1 Цикл
                // Заполнение полей Док
                Сообщить(Запрос.Документ);
                Таб.ВывестиСекцию("Док");
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
В цикл по 3-й группировке процесс не входит.
6 Ёпрст
 
15.06.16
15:15
(0)
>>> |Условие(СуммаОсн <> СуммаВал);

зачем тебе это бредовое условие при вычислении останков в запросе ?

Че надо то хоть ?
7 Ёпрст
 
15.06.16
15:17
>>>получить документы движения регистра

При функции КонОст, их не было нет и не будет, от слова никогда.
8 vadim777
 
15.06.16
15:18
(6) Найти документы, которые сформировали движение регистра Взаиморасчеты, где СуммаОсн <> СуммаВал.
9 Ёпрст
 
15.06.16
15:20
(8) Зачем тогда смотришь на останки ? Они к документам движения никоим боком не относятся
10 vadim777
 
15.06.16
15:22
(8) Так без функций запрос по регистрам вообще не работает. Какую функцию использовать в моем случае?
11 Mikeware
 
15.06.16
15:25
(10) Приход. Или расход.
ибо документ либо приходует, либо расходует
12 vadim777
 
15.06.16
15:27
(11) Пробовал и Приход(..), и Расход(..). Результат запроса нулевой - даже в первую группировку цикл не входит.
13 Масянька
 
15.06.16
15:30
(12)
    |Период с ДатаНачала по ДатаКонца;
    |Контрагент     = Регистр.Покупатели.Договор.Владелец;
    |Док             = Регистр.Покупатели.ТекущийДокумент;
    |ВидДолга        = Регистр.Покупатели.ВидДолга;
    |Операция        = Регистр.Покупатели.КодОперации;
    |СуРубли         = Регистр.Покупатели.СуммаРуб;
    |СуВалюта         = Регистр.Покупатели.СуммаУпр;
    |Основание         = Регистр.Покупатели.ТекущийДокумент.Реализация.ДокОснование,
    |                  Регистр.Покупатели.ТекущийДокумент.ПКО.ДокОснование,
    |                  Регистр.Покупатели.ТекущийДокумент.СтрокаВыпискиПриход.ДокОснование;
    |Кред             = Регистр.Покупатели.КредДокумент;
    |Оплата            = Регистр.Покупатели.ДокументОплаты;
    |Группировка Док Упорядочить по Док.ДатаДок;
    |Функция ПриходРуб = Приход(СуРубли);
    |Функция РасходРуб = Расход(СуРубли);
    |Функция НачОстРуб = НачОст(СуРубли);
    |Функция НачОстВал = НачОст(СуВалюта);
    |Функция КонОстРуб = КонОст(СуРубли);
    |Условие(Контрагент = СписокКлиентов);

Попробуй условие обрабатывать не в запросе.
14 vadim777
 
15.06.16
15:34
(13) Что такое
|Док             = Регистр.Покупатели.ТекущийДокумент;

ТекущийДокумент - это предопределенный реквизит?
15 Масянька
 
15.06.16
15:38
(14) Ты издеваешься?
16 Ёпрст
 
15.06.16
15:38
(12) и,.. за какой период смотрел приход и расход *
17 Ёпрст
 
15.06.16
15:38
?
18 vadim777
 
15.06.16
15:40
(16) За все
19 Ёпрст
 
15.06.16
15:40
(18) Где это "за все" в тексте запроса ?
20 vadim777
 
15.06.16
15:41
(15) Стормозил. Вот такой запрос сейчас, все равно документы не выводит:
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать1)
    |Клиент = Регистр.Взаиморасчеты.Клиент;
    |Заказ = Регистр.Взаиморасчеты.Заказ;
    |СуммаОсн = Регистр.Взаиморасчеты.СуммаОсн;
    |СуммаВал = Регистр.Взаиморасчеты.СуммаВал;
    |Док = Регистр.Взаиморасчеты.ТекущийДокумент;
    |Группировка Клиент;
    |Группировка Заказ;
    |Группировка Док Упорядочить По Док.ДатаДок;
    |Функция ПриходСуммаОсн = Приход(СуммаОсн);
    |Функция ПриходСуммаВал = Приход(СуммаВал);
    |Функция НачОстСуммаОсн = НачОст(СуммаОсн);
    |Функция НачОстСуммаВал = НачОст(СуммаВал);
    |Функция РасходСуммаОсн = Расход(СуммаОсн);
    |Функция РасходСуммаВал = Расход(СуммаВал);
    |Функция КонОстСуммаОсн = КонОст(СуммаОсн);
    |Функция КонОстСуммаВал = КонОст(СуммаВал);
    |"//}}ЗАПРОС
    ;
21 Ёпрст
 
15.06.16
15:42
(20) На ТА нет прихода или Расхода по этому регистру.
22 vadim777
 
15.06.16
15:42
(19) Наверно, это ключевой момент. Как указать, что за весь период?
23 Зая Бусечка
 
15.06.16
15:43
(22) Укажи начдату с 1973 года
24 пипец
 
15.06.16
15:43
конструктором запросов не пользовался никогда ?
25 пипец
 
15.06.16
15:44
Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "//{{ЗАПРОС(Сформировать)
        |Период с ДатаНачала по ДатаКонца;
26 vadim777
 
15.06.16
15:44
(24) Изначально конструктором и был создан.
27 Масянька
 
15.06.16
15:44
(23) Какая умная девочка. :)
Предлагаю - 01.01.0001 :)
28 vadim777
 
15.06.16
15:46
(25) А если вообще не указывать даты - запрос будет за весь период, или на ТА?
29 Ёпрст
 
15.06.16
15:47
(28) Открой СП и почитай, там, если че , написано :)
30 Зая Бусечка
 
15.06.16
15:47
(27) Успехов вам, мадам Горски ))
(28) На ТА
31 Mikeware
 
15.06.16
15:47
(28) ты "за" и "на" отличаешь?
32 Масянька
 
15.06.16
15:49
(30) Не смотрела... Отрицательный персонаж?
33 vadim777
 
15.06.16
15:50
Ну понял, понял. Завтра даты буду использовать - домой пора.
34 Масянька
 
15.06.16
15:50
(31) Ты еще спроси про "РассчитатьНа" и "РассчитатьПо" :))))
35 пипец
 
16.06.16
09:43
еще про временный расчет )))
36 Зая Бусечка
 
16.06.16
10:22