Имя: Пароль:
1C
1C 7.7
v7: Поиск документа запросом
0 Wefast
 
29.07.16
14:37
Я совсем плох в 7
У меня есть сумма и дата. Мне нужно по этим условиям найти документ

    ДАтаДок = Дата(2016,07,29);
    Выручка = 12345;
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "
    |ОбрабатыватьДокументы все;
    |Реализация = Документ.Реализация.ТекущийДокумент;
    |Выручка = Документ.Реализация.Выручка;
    |Функция РеализацияВыручкаСумма = Сумма(Выручка);
    |Условие(Реализация.ДатаДок = ДатаДок);
    |Условие(Выручка = Выручка);
    |"
                        ;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат 0;
    КонецЕсли;

И как потом все это обойти?
Пока Запрос.Группировка()=1 Цикл
Сообщить(ЗАпрос.Реализация.ДатаДок);
Сообщить(Запрос.Выручка);
КонецЦикла;

Что я не так делаю? запрос то простейший вроде
1 Это_mike
 
29.07.16
14:38
открой для себя конструктор,Ю чтоль...
2 Wefast
 
29.07.16
14:39
(1) я им и делал
3 MrStomak
 
29.07.16
14:41
Тебя самого как, не смущает такая строка?

    |Условие(Выручка = Выручка);
4 Wefast
 
29.07.16
14:43
(3) Конструктор так сделал. Но да ладно переменную я переименую.
Он и без этого условия только по дате ничего не находит судя по всему
5 MrStomak
 
29.07.16
14:47
(4) ну для даты можно использовать конструкцию Период С <?> По
6 Wefast
 
29.07.16
14:57
(5) сделал вот так
КонецПроцедуры
  Процедура Сформ()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформ)
    |ОбрабатыватьДокументы все;
    |Без итогов;
    |ТекущийДокумент = Документ.Реализация.ТекущийДокумент;
    |ДатаДок = Документ.Реализация.ДатаДок;
    |Выручка = Документ.Реализация.Выручка;
    |Функция ВыручкаСумма = Сумма(Выручка);
    |Группировка ТекущийДокумент;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформ");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка() = 1 Цикл
        // Заполнение полей Сформ
        Таб.ВывестиСекцию("Сформ");
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформ", "");
КонецПроцедуры

Все с помощью конструктора. Дату вообще нигде не выбирал. Условий не ставил.
В итоге он  на макет созданный конструктором выводит 5 строчек. Документов же over9000
7 lamme
 
29.07.16
15:03
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат 0;
    КонецЕсли;

ТЗ = новый ТаблицаЗначений; // тут не так в 7-ке

Запрос.выгрузить(ТЗ);
Тз.выбратьстроку();
8 MishaD
 
29.07.16
15:03
Запросы, по крайней мере в файловой 7.7(не прямые) сильно тормознутые. Простая выборка отработает в 1.5 - 2 раза быстрее.
9 Wefast
 
29.07.16
15:11
(7) Показывает 5 строчек всего не понятно каких, выручка у них 0 и дату не выводит
10 lamme
 
29.07.16
15:14
ТекстЗапроса =
    "
    |ОбрабатыватьДокументы все;
    |Реализация = Документ.Реализация.ТекущийДокумент;    ||РеализацияДата = Документ.Реализация.ДатаДок;

    |Выручка = Документ.Реализация.Выручка;
    |Функция РеализацияВыручкаСумма = Сумма(Выручка);
    |Условие(Реализация.ДатаДок = ДатаДок);
    |Условие(Выручка = Выручка);
    |Группировка Реализация"
    |Группировка РеализацияДата"
                        ;
11 lamme
 
29.07.16
15:14
(9)
нет группировок по необходимым тебе полям
12 Ёпрст
 
29.07.16
15:15
>>>    |Условие(Реализация.ДатаДок = ДатаДок);

за такое надо линейкой по пальчикам, стальной
13 lamme
 
29.07.16
15:16
(12)
кстати да ...
там по другому период обрабатывается
14 Это_mike
 
29.07.16
15:17
(12) да пусть развлекаются...
15 lamme
 
29.07.16
15:18
"//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
16 Wefast
 
29.07.16
15:28
(15) спасибо
17 Wefast
 
29.07.16
15:31
(15)
    |ОбрабатыватьДокументы все;
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ТекущийДокумент = Документ.Реализация.ТекущийДокумент;
    |ДатаДок = Документ.Реализация.ДатаДок;
    |Выручка = Документ.Реализация.Выручка;
    |Функция ВыручкаСумма = Сумма(Выручка);
    |Группировка ТекущийДокумент;
    |Группировка ДатаДок;
    |;

    ТЗ = СоздатьОбъект("ТаблицаЗначений");
Запрос.выгрузить(ТЗ);
Тз.выбратьстроку();

Выводит 3 строки
пусто пусто сумма
пусто дата сумма
док дата сумма


Как иерархию в общем. Как с этим бороться?
18 lamme
 
29.07.16
15:33
|Без итогов;
|ОбрабатыватьДокументы все;
..
19 Builder
 
29.07.16
15:49
Нахрена 2 группировки?
  |Группировка ТекущийДокумент;
  |Группировка ДатаДок;
Оставь одну
  |Группировка ТекущийДокумент;
20 Builder
 
29.07.16
15:51
Документ.Реализация.Выручка - это реквизит табличной части или документа?
21 csharpprogrammer
 
29.07.16
16:24
Функция Всего(Док)
    Возврат Док.Итог("Выручка");
КонецФункции

Процедура Сформировать()

    ДатаДок = Дата(2016, 7, 29);
    Выручка = 12345;
    
    Запрос = СоздатьОбъект("Запрос");
    
    ТекстЗапроса = "
    |Период С ДатаДок По ДатаДок;
    |ОбрабатыватьДокументы Все;
    |Док = Документ.Реализация.ТекущийДокумент;
    |Условие(Всего(Док) = Выручка);
    |Группировка Док;
    |";

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    Пока Запрос.Группировка() = 1 Цикл
        Сообщить(Запрос.Док);
    КонецЦикла;

КонецПроцедуры