Имя: Пароль:
1C
1C 7.7
v7: Запрос в 7-ке не работает условие ОбрабатыватьДокументы...
,
0 Джордж1
 
08.02.22
19:49
Запрос    

|Период с Дата1 по Дата2;
    |ОбрабатыватьДокументы Проведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контрагент = Регистр.ОтгрузкиПоДоговорам.Договор.Владелец,Документ.СводнаяРеализацияПоДоговору.Договор.Владелец;
    |Договор = Регистр.ОтгрузкиПоДоговорам.Договор,Документ.СводнаяРеализацияПоДоговору.Договор;
    |КатегорияДоговора = Регистр.ОтгрузкиПоДоговорам.Договор.Категория,Документ.СводнаяРеализацияПоДоговору.Договор.Категория;
    |_Отгружено = Регистр.ОтгрузкиПоДоговорам.Сумма;
    |_Сумма = Документ.СводнаяРеализацияПоДоговору.Сумма;
    |Условие (ПустоеЗначение(Договор)=0);
    |Функция Отражено = Сумма(_Сумма);
       |Функция Отгружено = Приход(_Отгружено);
       |Функция Выставлено = Расход(_Отгружено);

Попадают в результаты как минимум НЕпроведенные документы.

Чего может быть не так?
1 Джордж1
 
08.02.22
19:56
А вот это  |Обрабатывать НеПомеченныеНаУдаление; - вполне работает
2 welwel
 
08.02.22
20:13
Обычно достаточно
|ОбрабатыватьДокументы Проведенные;
Без этого:
|Обрабатывать НеПомеченныеНаУдаление;
3 Chieftain
 
08.02.22
20:24
Вообще, если память не изменяет, без указания "ОбрабатыватьДокументы" подтягивает только проведенные документы. Чтобы непроведенные показались - нужно писать "ОбрабатыватьДокументы Все;"
4 Chieftain
 
08.02.22
20:31
Сделай одну группировку по документу, в обработке выведи документы по условию документ.Проведен()=0.
Сдается мне при таком запросе что-то не так посчитали, а запрос работает как надо
5 Джордж1
 
08.02.22
21:29
(4)мне не нужна группировка по документам. Запрос чем хорош - сделает сам группировки и суммы по ним посчитает.

(2,3) так до - но не работает такое
6 Ёпрст
 
08.02.22
21:40
(0) как минимум, всё в топку. Скрещивать движения регистра с документом в одном запросе..это надо уметь
7 Джордж1
 
08.02.22
21:42
(6)Зачем же в топку - все же штатно и даже работает.

Если делать по отдельности, то потом формировать отчет из разных источников замучаешься - про произвольные группировки можно сразу забыть
8 DCKiller
 
08.02.22
21:47
(7) Ну сделай в запросе переменную "Документ"

Документ = Регистр.ОтгрузкиПоДоговорам.ТекущийДокумент;
...
Условие(Документ.Проведен() = 1);

как-то так, короче...
9 Джордж1
 
08.02.22
21:51
(8)во первых - такое условие скорее всего отбросит все итоги по регистрам
во вторых делал такое условие но к функции Функция ... Когда (Регистр.ОтгрузкиПоДоговорам.ТекущийДокумент()=1) - ругается на условие
10 Смотрящий
 
08.02.22
21:52
|ОбрабатыватьДокументы Проведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
Выбрось
Замени
    |Функция Отражено = Сумма(_Сумма) Когда (Документ.СводнаяРеализацияПоДоговору.Проведен() = 1);
11 Джордж1
 
08.02.22
21:54
(10)см.выше - ругается на условие так почему то
12 DCKiller
 
08.02.22
21:55
(9), (10) у тя ТекущийДокумент в запросе со скобками, вот и ругается.
13 Джордж1
 
08.02.22
21:55
и на такое
Документ.СводнаяРеализацияПоДоговору.Проведен() = 1
и на такое
Документ.СводнаяРеализацияПоДоговору.ТекущийДокумент.Проведен() = 1
14 DCKiller
 
08.02.22
21:56
"ТекущийДокумент()=1"

а это что вообще такое?..
15 Джордж1
 
08.02.22
21:56
(12)я в посте ошибся. писал правильно - см (13)

Счас еще попробую
16 Джордж1
 
08.02.22
21:56
(14)обшибся в посте говорю, не в запросе
17 Джордж1
 
08.02.22
21:59
{Отчет.СверкаСводныхРеализаций.Форма.Модуль(101)}: Функция Отражено = Сумма(_Сумма) Когда ( <<?>> ,Документ.СводнаяРеализацияПоДоговору.Проведен()=1);
Запрос[10] : Ожидается логическое выражение

{Отчет.СверкаСводныхРеализаций.Форма.Модуль(101)}: Функция Отражено = Сумма(_Сумма) Когда ( <<?>> ,Документ.СводнаяРеализацияПоДоговору.ТекущийДокумент.Проведен()=1);
Запрос[10] : Ожидается логическое выражение
18 Ёпрст
 
08.02.22
21:59
Если че, по-умолчанию, чорий запрос по докам всегда обрабатывает только проведенные.
19 Ёпрст
 
08.02.22
21:59
А так, всё в топку.
20 Джордж1
 
08.02.22
22:00
(18)ну вот видишь не только
21 Смотрящий
 
08.02.22
22:01
(17) Лепи переменную запроса тогда
_Документ = Документ.СводнаяРеализацияПоДоговору.ТекущийДокумент или как он там сожрет ее
А в когда уже проверяй на проведен() по переменной запроса
22 Джордж1
 
08.02.22
22:02
(21)Так работает почти. - Значение не представляет агрегатный объект Проведен()
23 Джордж1
 
08.02.22
22:03
Хрень какая то. Хотя запросы в 7-ке дело темное, особенно к разным таблицам
24 Ёпрст
 
08.02.22
22:04
(20)в (0) я вижу какую то ересь..то что оно что-то возвращает, уже подвиг.
25 Смотрящий
 
08.02.22
22:05
(22) Когда убери )
26 Ёпрст
 
08.02.22
22:06
И..в (0) не видно, какой ты там вообще документ увидел.
27 Джордж1
 
08.02.22
22:07
(24)У меня все отчеты унифицированы - с произвольными отборами и группировками.

Можно было сделать через 2 запроса и ТЗ - но получилось бы некрасиво.

Данный отчет - он поверочный - в принципе не так страшно если туда что-то лишнее попадет. Решаем локальную редкую задачу

(25) убираешь и попадают непроведенные документы в результаты
28 Джордж1
 
08.02.22
22:07
(26)В смысле какой документ - написано же какой
29 Ёпрст
 
08.02.22
22:08
(28) где написано? В какой переменной/группировке запроса он в (0) ?
30 Джордж1
 
08.02.22
22:09
(29)Я сейчас попробывал через переменную Док=Документ.СводнаяРеализацияПоДоговору.ТекущийДокумент

и проверку в Когда

результат в (22)
31 DCKiller
 
08.02.22
22:14
(30) Ну, тогда лепи свою функцию, которая будет проверять, проведен переданный в нее параметром док или нет, и в запросе вызывай в условие...

Условие(ДокументПроведен(Док) = 1);
32 Джордж1
 
08.02.22
22:17
(31)Думал об этом.

но решил не делать, потому как непонятно на что это ругань идет

{Отчет.СверкаСводныхРеализаций.Форма.Модуль(101)}: Функция Отражено = Сумма(_Сумма) Когда ( <<?>> Документ.СводнаяРеализацияПоДоговору.Проведен()=1);
Запрос[10] : Ожидается логическое выражение

Чего здесь интерпритатору может не нравиться
33 DCKiller
 
08.02.22
22:23
(32) В запросе создай переменную "Док"

Док = Документ.СводнаяРеализацияПоДоговору.ТекущийДокумент, Документ.ЕщеКакойНибудьДокумент.ТекущийДокумент;

а в функцию

Функция Отражено = Сумма(_Сумма) Когда ((Док.Вид() = "СводнаяРеализацияПоДоговору") И (Док.Проведен() = 1));

вроде в запросе "Проведен()" со скобками всё же должно работать, пишут...
34 Джордж1
 
08.02.22
22:23
(33)Я проверил - так работает
35 DCKiller
 
08.02.22
22:24
Уже лет 5 клюшки не ковырял, позабывал всё... эх!.. :-'(
36 Джордж1
 
08.02.22
22:26
(35)не идей почему на такое условие ругается

{Отчет.СверкаСводныхРеализаций.Форма.Модуль(101)}: Функция Отражено = Сумма(_Сумма) Когда ( <<?>> Документ.СводнаяРеализацияПоДоговору.Проведен()=1);
Запрос[10] : Ожидается логическое выражение
37 DCKiller
 
08.02.22
22:28
(36) Чем (33) не устраивает? Или ты хочешь заставить запрос, чтобы он отрабатывал именно эту конструкцию?
Ругается он потому, что ожидает переменную с именем "Документ", которая д.б. объявлена выше в тексте запроса, а поскольку не находит - то и пишет, что идите вы, уважаемый, отседова... с таким кодом.
38 Джордж1
 
08.02.22
22:33
(37)Получается в условиях можно использовать только явно объявленные переменные, в отличии от 8-ки
39 Злопчинский
 
09.02.22
01:20
Поддерживаю Епрста.
На удостоверение в том что запрос выдает вменяемые данные времени гораздо больше чем просто тупо скрестить результаты двух запросов 9тем более что с ИТЗ это враз быстрее чем с просто ТЗ).
.
ну и Когда - отрабатывает уже "потом" на сделанной выборке, а не во время собственно самой выборки данных запросом)
40 Злопчинский
 
09.02.22
01:22
Группировки вообще не указаны. хрень какая-то.
при этом запросто при таком вымученном запросе могут получитьяс совершенно "разные" результаты (неожидаемые) в зависимости от периода
41 acanta
 
09.02.22
01:42
Обрабатывать (не)помеченные на удаление о носится к запросу по любой таблице (справочник или документы), а (не)проведенные к таблице документов. На регистры (накопления/бухгалтерии)как бы вообще не должно влиять, но это не точно.
42 Chieftain
 
09.02.22
01:50
(34) А я тебе говорил - выведи группировки по документам и проверь - если среди них непроведенные. Так ты выяснишь правильно ли запрос отрабатывает.
(36) Потому что нет такого поля в запросе "Документ.СводнаяРеализацияПоДоговору"
43 Chieftain
 
09.02.22
01:52
(20) Ты ересь пишешь, специально проверил - все работает, непроведенные документы в запросе только при "ОбрабатыватьДокументы Все;"
44 Джордж1
 
09.02.22
08:14
(40)Группировки потом добавляются - через универсальный механизм

(41) вот не накладывается условие на таблицу докумнета

(42)еще раз - при группировке по документам - итогов по группировкам не получишь

(43) Хреново проверил.
45 АгентБезопасной Нацио
 
09.02.22
08:39
(39) если есть ИТЗ - значит, есть 1с++. Если есть 1с++ - какой смысл лепить черный запрос?
зы. может, конечно, я предвзят - но я забросил черные запросы сразу, как появился механизм прямых... и так "черные" и не освоил.
46 Ёпрст
 
09.02.22
10:09
(45) ага, и после прямых, такой дичи как в (0) даже в чорных перестал бы писать, после усвоения.
47 Chieftain
 
09.02.22
12:20
(44) Группировка по документам - для проверки, что действительно попадают непроведенные документы в результатах запроса. А то пока только твои слова, что данные неверные.
Еще вариант как достоверно проверить - создай непроведенный документ СводнаяРеализацияПоДоговору с неприлично большой суммой и сравни результаты запроса с ним и без.
Проверил хорошо, с разными вариантами соединения таблиц и тестовым документом.
48 Джордж1
 
09.02.22
13:04
(47)А врать или придумывать мне зачем. - я сразу в результатах отчета вижу данные по непроведенному документу. + в тестовой базе ситуацию моделировал -

ОбрабатыватьДокументы Проведенные; - не работает
49 Chieftain
 
09.02.22
22:03
(48) Не врать, а заблуждаться. Поэтому и говорю - вывод самый простой способ гарантированно проверить достоверность твоего "вижу"
Я сделал простой тест, результат различается, значит работает
Проверил попутно воспоминания, что по умолчанию именно "ОбрабатыватьДокументы Проведенные;"

    НаДату                = '02.02.22';
    ТекстЗапроса        = "
    |Период с НаДату По НаДату;
    |ОбрабатыватьДокументы Проведенные;
    |Контрагент            = Регистр.Долги.Контрагент,Документ.Реализация.Контрагент;
    |ТекущийДокумент    = Регистр.Долги.ТекущийДокумент,Документ.Реализация.ТекущийДокумент;
    |_СуммаРег            = Регистр.Долги.Долг;
    |_Сумма                = Документ.Реализация.СуммаВзаиморасчетов;
    |Функция Сумма        = Сумма(_Сумма);
    |Функция СуммаРег    = Приход(_СуммаРег);
    |Группировка Контрагент;
    |";
    
    Запрос                = СоздатьОбъект("Запрос");
    Запрос.Выполнить(ТекстЗапроса);
    
    Сообщить("Проведенные: "+Запрос.Сумма+" <> "+Запрос.СуммаРег,"!!!");

    ТекстЗапроса        = СтрЗаменить(ТекстЗапроса,"ОбрабатыватьДокументы Проведенные;","ОбрабатыватьДокументы Все;");
    Запрос            = СоздатьОбъект("Запрос");
    Запрос.Выполнить(ТекстЗапроса);
    
    Сообщить("Все: "+Запрос.Сумма+" <> "+Запрос.СуммаРег,"!!!");
50 Злопчинский
 
09.02.22
23:27
(48) для теста выкинь обращение к этому документу по ссылке из регистра и потом посмотри...
.
Я, всегда оставляю 1℅ в своих утверждениях про бред, ибо всё возможнт в этом подлунном мире.
.
Но с учётом того что прямыми запросами я не пользуюсь - косяк бы выплыл...
.
Дай текст запроса для воспроизводимого текста, самому мне влом хреначить
51 Злопчинский
 
09.02.22
23:53
Автор в этой ветке - неадекват (не вообще, а в данной ветке)
Не приведен ПОЛНЫЙ ТЕКСТ "неработающего" запроса
52 Злопчинский
 
10.02.22
00:24
Воспроизводим ситуацию.
1. ТиС, текущая дата, документов в текущей дате нет
2. Заявка покупателя, проводим (движения по заявке в плюс, Фирма-Номенклатура-Договор-Заявка)
3. Реализация на основании заявки покупателя, проводим (движения по заявке в минус, Фирма-Номенклатура-Договор-Заявка)
4. Заявку покупателя - отменяем проведение
https://www.screencast.com/t/EtYm2WRb

Вменяемый запрос в адекватном виде
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{хрен вам а не конструктор
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы Проведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |СуммаВзаиморасчетов = Документ.ЗаявкаПокупателя.СуммаВзаиморасчетов;
    |Функция СуммаСуммаВзаиморасчетов = Сумма(СуммаВзаиморасчетов);
    |Группировка Документ;
    |"//}}хрен вам а не конструктор
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
    ТЗ = ""; Запрос.Выгрузить(ТЗ,1,1);
    ПечатьТЗ(ТЗ,"Тест (Мутный запрос), итоги");

Итог - пустой.
работает правильно и ожидаемо, ибо запрос вменяемый
.
теперь делаем невменяемый запрос, аналог (0)
.
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{хрен вам а не конструктор
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы Проведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контрагент = Регистр.Заявки.ДоговорПокупателя.Владелец, Документ.ЗаявкаПокупателя.Договор.Владелец;
    |Договор = Регистр.Заявки.ДоговорПокупателя, Документ.ЗаявкаПокупателя.Договор;
    |СтоимостьРасход = Регистр.Заявки.СтоимостьРасход;
    |СуммаВзаиморасчетов = Документ.ЗаявкаПокупателя.СуммаВзаиморасчетов;
    |Функция СуммаСтоимостьРасход = Расход(СтоимостьРасход);
    |Функция СуммаСуммаВзаиморасчетов = Сумма(СуммаВзаиморасчетов);
    |Условие (ПустоеЗначение(Договор)=0);
    |Группировка Контрагент Без групп;
    |Группировка Договор Без Групп;
    |Группировка Документ;
    |"//}}хрен вам а не конструктор
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    ТЗ = ""; Запрос.Выгрузить(ТЗ,1,1);
    ПечатьТЗ(ТЗ,"Тест (Мутный запрос), итоги");
.
Получаем результат, в котором присутствует непроведенный документ, внезапно, да?
https://www.screencast.com/t/zUjM4Bng7t
.
Причину - я указал в 50.
А главная причина почему у меня такой хрени не вылазит - я не пишу мутных запросов.
53 Злопчинский
 
10.02.22
00:26
А теперь делаем еще интереснее для понимания почему у автора вылезла "хрень" - распроводим и реализацию - итого в периоде вообще нет проведенных документов...
и смотрим результат по запросу с заремленной строкой и разремленной... с учетом того что в периоде вообще нет движений по регистру... и думаем... в основном ТС пусть думает
.
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы Проведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контрагент = Документ.ЗаявкаПокупателя.Договор.Владелец;
    |Договор = Документ.ЗаявкаПокупателя.Договор;
    //|СтоимостьРасход = Регистр.Заявки.СтоимостьРасход; //а вот если эту строку разремить!!
    |СуммаВзаиморасчетов = Документ.ЗаявкаПокупателя.СуммаВзаиморасчетов;
    |Функция СуммаСуммаВзаиморасчетов = Сумма(СуммаВзаиморасчетов);
    |Условие (ПустоеЗначение(Договор)=0);
    |Группировка Контрагент Без групп;
    |Группировка Договор Без Групп;
    |Группировка Документ;
54 Злопчинский
 
10.02.22
00:30
а извращениями как у ТС я в рабочее время не занимаюсь, только как хобби ;-)
https://infostart.ru/1c/articles/485039/
55 Злопчинский
 
10.02.22
10:47
что, у автора кончилась фантазия?