Вход | Регистрация
 

Отладка большого запроса

Отладка большого запроса
Я
   Nyarlathotep
 
24.04.19 - 12:17
Всем привет!

Есть большой пакетный запрос (из типовой конф-и ЕРП 2.4), где в последнем запросе пакета делается объединение большого к-ва запросов через ОБЪЕДИНИТЬ ВСЕ. Запрос тут - https://drive.google.com/file/d/1L-9azHoHBD2AmRIOdNi88Oi-jdGR9aIm/view?usp=sharing

Результатом данного запроса является 1 строка, мне нужно узнать, какой из объединяемых запросов последнего запроса в пакете ее получает. Как это сделать?

Если проще:

Есть "пакетный запрос 1", он состоит из "запрос пакета 1", "запрос пакета 2", "запрос пакета 3". "Запрос пакета 3" состоит из "запрос 1" ОБЪЕДИНИТЬ ВСЕ "запрос 2" ОБЪЕДИНИТЬ ВСЕ "запрос 3". Результат "пакетного запроса 1" - 1 строка, получаемая в итоге в "запросе пакета 3" как результат "запроса 1" или "запроса 2" или "запроса 3". Вопрос - как узнать, в каком именно запросе была получена строка?
 
 
   1Сергей
 
1 - 24.04.19 - 12:19
Добавь в каждый подзапрос
1 КАК НомерПодзапроса,
...
   Ёпрст
 
2 - 24.04.19 - 12:20
(0) в ИР посмотреть временные таблички в консоли запросов
   Nyarlathotep
 
3 - 24.04.19 - 12:23
(2) Что такое ИР?
   Ёпрст
 
4 - 24.04.19 - 12:28
ИнструментыРазработчика
   Hans
 
5 - 24.04.19 - 12:28
(3) Инстументы Разработчика на Инфостарте.
   Nyarlathotep
 
6 - 24.04.19 - 13:41
Сделал в итоге вот так:

1. Отладчиком получил текст запроса.
2. В полученном тексте дописал во всех подзапросах в объединении "n как номерПодзапроса", где n - порядковый номер каждого подзапроса.
3. Так как текст запроса формируется программно, чтобы не менять конфигурацию сделал внешнюю обработку, где в модуле объекта в функции ВыполнитьЗапрос() прописал мой текст, и, в нужный момент в отладчике в окне shift+f9 делаю вот так:

ВнешниеОбработки.Создать("C:\temp\temp.epf").ВыполнитьЗапрос(ЗапросДанных) .МенеджерВременныхТаблиц.Таблицы["Данные"].получитьДанные().выгрузить()

где ЗапросДанных - запрос, формируемый типовой конфигурацией с уже заполненными параметрами и временными таблицами по типовым алгоритмам, который я просто передаю в мою обработку, в итоге моя обработка выполняет точно такой же типовой запрос с нужным мне текстом.

Все нашел, всем спасибо.
   Buster007
 
7 - 24.04.19 - 13:43
Можно еще такое использовать
УниверсальныеМеханизмыПартийИСебестоимости.ВыполнитьЗапросСПроизвольнымТекстом(Запрос, "C:\Temp\Запрос.txt")
   Buster007
 
8 - 24.04.19 - 13:46
а для отладки запросов отражения документов в регл. учете есть и другие механизмы, например, в форме Журнал документов регл. учета включить видимость команды "Тестировать создание проводок" или как-то так
   Nyarlathotep
 
9 - 24.04.19 - 14:51
В продолжении темы...

Вот подзапрос из объединения, который получает нужную мне строку:

ВЫБРАТЬ//// Поступление аванса от клиента


    Операция.Ссылка КАК Ссылка,
    ВЫБОР КОГДА НАЧАЛОПЕРИОДА(Операция.Дата) = Операция.ДатаПроведенияБанком ТОГДА
        Операция.Дата
    ИНАЧЕ
        КОНЕЦПЕРИОДА(Операция.ДатаПроведенияБанком, ДЕНЬ)
    КОНЕЦ КАК Период,
    Операция.Организация КАК Организация,
    НЕОПРЕДЕЛЕНО КАК ИдентификаторСтроки,

    ЕСТЬNULL(РасчетыПредоплата.ПредоплатаРегл, Расчеты.СуммаРегл) КАК Сумма,
    ЕСТЬNULL(РасчетыПредоплата.ПредоплатаУпр, Расчеты.СуммаУпр) КАК СуммаУУ,

    ЗНАЧЕНИЕ(Перечисление.ВидыСчетовРеглУчета.ДенежныеСредства) КАК ВидСчетаДт,
    Операция.БанковскийСчет КАК АналитикаУчетаДт,
    НЕОПРЕДЕЛЕНО КАК МестоУчетаДт,

    Операция.Валюта КАК ВалютаДт,
    Операция.БанковскийСчет.Подразделение КАК ПодразделениеДт,
    Операция.БанковскийСчет.НаправлениеДеятельности КАК НаправлениеДеятельностиДт,

    НЕОПРЕДЕЛЕНО КАК СчетДт,
    НЕОПРЕДЕЛЕНО КАК СубконтоДт1,
    Расчеты.СтатьяДвиженияДенежныхСредств КАК СубконтоДт2,
    НЕОПРЕДЕЛЕНО КАК СубконтоДт3,
    
    ЕСТЬNULL(ДенежныеСредстваКонтрагент.СуммаПредоплатыВВалютеПлатежа, ЕСТЬNULL(РасчетыПредоплата.Предоплата, Расчеты.Сумма)) КАК ВалютнаяСуммаДт,
    0 КАК КоличествоДт,
    0 КАК СуммаНУДт,
    0 КАК СуммаПРДт,
    0 КАК СуммаВРДт,
    
    ЗНАЧЕНИЕ(Перечисление.ВидыСчетовРеглУчета.АвансыПолученные) КАК ВидСчетаКт,
    ЕСТЬNULL(Расчеты.ГруппаФинансовогоУчета, Операция.ГруппаФинансовогоУчета) КАК АналитикаУчетаКт,
    НЕОПРЕДЕЛЕНО КАК МестоУчетаКт,

    Расчеты.Валюта КАК ВалютаКт,
    ЕСТЬNULL(Расчеты.Подразделение, Операция.Подразделение) КАК ПодразделениеКт,
    Расчеты.НаправлениеДеятельности КАК НаправлениеДеятельностиКт,

    ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) КАК СчетКт,
    Расчеты.Контрагент КАК СубконтоКт1,
    Расчеты.Договор КАК СубконтоКт2,
    НЕОПРЕДЕЛЕНО КАК СубконтоКт3,

    ЕСТЬNULL(РасчетыПредоплата.Предоплата, Расчеты.Сумма) КАК ВалютнаяСуммаКт,
    0 КАК КоличествоКт,
    0 КАК СуммаНУКт,
    0 КАК СуммаПРКт,
    0 КАК СуммаВРКт,
    "Поступление аванса от клиента" КАК Содержание,
    24 как номерПодзапроса

ИЗ
    ДокументыКОтражению КАК ДокументыКОтражению
    
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        Документ.ПоступлениеБезналичныхДенежныхСредств КАК Операция
    ПО
        ДокументыКОтражению.Ссылка = Операция.Ссылка

    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        РасчетыСКлиентами КАК Расчеты
    ПО
        Расчеты.Ссылка = Операция.Ссылка

    ЛЕВОЕ СОЕДИНЕНИЕ
        РасчетыСКлиентамиПоДокументам КАК РасчетыПредоплата
    ПО
        Расчеты.Ссылка = РасчетыПредоплата.Ссылка
        И Расчеты.Контрагент = РасчетыПредоплата.Контрагент
        И Расчеты.ЗаказКлиента = РасчетыПредоплата.ЗаказКлиента
        И Расчеты.Валюта = РасчетыПредоплата.Валюта
        И Расчеты.СтатьяДвиженияДенежныхСредств = РасчетыПредоплата.СтатьяДвиженияДенежныхСредств
    
    ЛЕВОЕ СОЕДИНЕНИЕ
        ДенежныеСредстваКонтрагент КАК ДенежныеСредстваКонтрагент
    ПО
        ДенежныеСредстваКонтрагент.Ссылка = РасчетыПредоплата.Ссылка
        И ДенежныеСредстваКонтрагент.Контрагент = РасчетыПредоплата.Контрагент
        И ДенежныеСредстваКонтрагент.Договор = РасчетыПредоплата.Договор
        И ДенежныеСредстваКонтрагент.НаправлениеДеятельности = РасчетыПредоплата.НаправлениеДеятельности
        И ДенежныеСредстваКонтрагент.ОбъектРасчетов  = РасчетыПредоплата.ЗаказКлиента
        И ДенежныеСредстваКонтрагент.РасчетныйДокумент  = РасчетыПредоплата.РасчетныйДокумент
        И ДенежныеСредстваКонтрагент.СтатьяДвиженияДенежныхСредств  = РасчетыПредоплата.СтатьяДвиженияДенежныхСредств
        И ДенежныеСредстваКонтрагент.ВалютаВзаиморасчетов = РасчетыПредоплата.Валюта
        И ДенежныеСредстваКонтрагент.ВалютаПлатежа <> РасчетыПредоплата.Валюта
        
ГДЕ 
    Операция.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента)
    И ЕСТЬNULL(РасчетыПредоплата.ПредоплатаРегл, Расчеты.СуммаРегл) <> 0
    И Операция.ПроведеноБанком

вот соседний с ним подзапрос, который не получает ничего:

ОБЪЕДИНИТЬ ВСЕ


ВЫБРАТЬ//// Поступление оплаты от клиента


    Операция.Ссылка КАК Ссылка,
    ВЫБОР КОГДА НАЧАЛОПЕРИОДА(Операция.Дата) = Операция.ДатаПроведенияБанком ТОГДА
        Операция.Дата
    ИНАЧЕ
        КОНЕЦПЕРИОДА(Операция.ДатаПроведенияБанком, ДЕНЬ)
    КОНЕЦ КАК Период,
    Операция.Организация КАК Организация,
    НЕОПРЕДЕЛЕНО КАК ИдентификаторСтроки,

    ЕСТЬNULL(РасчетыПоДокументам.ДолгРегл, Расчеты.СуммаРегл) - ЕСТЬNULL(РасчетыПоДокументам.ЗалогЗаТаруРегл, 0) КАК Сумма,
    ЕСТЬNULL(РасчетыПоДокументам.ДолгУпр, Расчеты.СуммаУпр) - ЕСТЬNULL(РасчетыПоДокументам.ЗалогЗаТаруРегл, 0) / КурсВалютыУпрУчета.Курс КАК СуммаУУ,

    ЗНАЧЕНИЕ(Перечисление.ВидыСчетовРеглУчета.ДенежныеСредства) КАК ВидСчетаДт,
    Операция.БанковскийСчет КАК АналитикаУчетаДт,
    НЕОПРЕДЕЛЕНО КАК МестоУчетаДт,

    Операция.Валюта КАК ВалютаДт,
    Операция.БанковскийСчет.Подразделение КАК ПодразделениеДт,
    Операция.БанковскийСчет.НаправлениеДеятельности КАК НаправлениеДеятельностиДт,

    НЕОПРЕДЕЛЕНО КАК СчетДт,
    НЕОПРЕДЕЛЕНО КАК СубконтоДт1,
    Расчеты.СтатьяДвиженияДенежныхСредств КАК СубконтоДт2,
    НЕОПРЕДЕЛЕНО КАК СубконтоДт3,
    
    ЕСТЬNULL(ДенежныеСредстваКонтрагент.СуммаПостоплатыВВалютеПлатежа, ЕСТЬNULL(РасчетыПоДокументам.Долг, Расчеты.Сумма) - ЕСТЬNULL(РасчетыПоДокументам.ЗалогЗаТару, 0)) КАК ВалютнаяСуммаДт,
    0 КАК КоличествоДт,
    0 КАК СуммаНУДт,
    0 КАК СуммаПРДт,
    0 КАК СуммаВРДт,
    
    ЗНАЧЕНИЕ(Перечисление.ВидыСчетовРеглУчета.РасчетыСКлиентами) КАК ВидСчетаКт,
    ЕСТЬNULL(Расчеты.ГруппаФинансовогоУчета, Операция.ГруппаФинансовогоУчета) КАК АналитикаУчетаКт,
    НЕОПРЕДЕЛЕНО КАК МестоУчетаКт,

    Расчеты.Валюта КАК ВалютаКт,
    ЕСТЬNULL(Расчеты.Подразделение, Операция.Подразделение) КАК ПодразделениеКт,
    Расчеты.НаправлениеДеятельности КАК НаправлениеДеятельностиКт,

    ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) КАК СчетКт,
    Расчеты.Контрагент КАК СубконтоКт1,
    Расчеты.Договор КАК СубконтоКт2,
    НЕОПРЕДЕЛЕНО КАК СубконтоКт3,

    ЕСТЬNULL(РасчетыПоДокументам.Долг, Расчеты.Сумма) - ЕСТЬNULL(РасчетыПоДокументам.ЗалогЗаТару, 0) КАК ВалютнаяСуммаКт,
    0 КАК КоличествоКт,
    0 КАК СуммаНУКт,
    0 КАК СуммаПРКт,
    0 КАК СуммаВРКт,
    "Поступление оплаты от клиента" КАК Содержание,
    25 как номерПодзапроса

ИЗ
    ДокументыКОтражению КАК ДокументыКОтражению
    
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        Документ.ПоступлениеБезналичныхДенежныхСредств КАК Операция
    ПО
        ДокументыКОтражению.Ссылка = Операция.Ссылка

    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        РасчетыСКлиентами КАК Расчеты
    ПО
        Расчеты.Ссылка = Операция.Ссылка

    ЛЕВОЕ СОЕДИНЕНИЕ
        РасчетыСКлиентамиПоДокументам КАК РасчетыПоДокументам
    ПО
        Расчеты.Ссылка = РасчетыПоДокументам.Ссылка
        И Расчеты.Контрагент = РасчетыПоДокументам.Контрагент
        И Расчеты.ЗаказКлиента = РасчетыПоДокументам.ЗаказКлиента
        И Расчеты.Валюта = РасчетыПоДокументам.Валюта
        И Расчеты.СтатьяДвиженияДенежныхСредств = РасчетыПоДокументам.СтатьяДвиженияДенежныхСредств    

    ЛЕВОЕ СОЕДИНЕНИЕ
        КурсыВалют КАК КурсВалютыУпрУчета
    ПО
        КурсВалютыУпрУчета.Валюта = &ВалютаУпрУчета
        И КурсВалютыУпрУчета.Дата = Операция.ДатаПроведенияБанком

    ЛЕВОЕ СОЕДИНЕНИЕ
        ДенежныеСредстваКонтрагент КАК ДенежныеСредстваКонтрагент
    ПО
        ДенежныеСредстваКонтрагент.Ссылка = РасчетыПоДокументам.Ссылка
        И ДенежныеСредстваКонтрагент.Контрагент = РасчетыПоДокументам.Контрагент
        И ДенежныеСредстваКонтрагент.Договор = РасчетыПоДокументам.Договор
        И ДенежныеСредстваКонтрагент.НаправлениеДеятельности = РасчетыПоДокументам.НаправлениеДеятельности
        И ДенежныеСредстваКонтрагент.ОбъектРасчетов = РасчетыПоДокументам.ЗаказКлиента
        И ДенежныеСредстваКонтрагент.РасчетныйДокумент = РасчетыПоДокументам.РасчетныйДокумент
        И ДенежныеСредстваКонтрагент.СтатьяДвиженияДенежныхСредств = РасчетыПоДокументам.СтатьяДвиженияДенежныхСредств
        И ДенежныеСредстваКонтрагент.ВалютаВзаиморасчетов = РасчетыПоДокументам.Валюта
        И ДенежныеСредстваКонтрагент.ВалютаПлатежа <> РасчетыПоДокументам.Валюта


ГДЕ
    Операция.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента)
    И (ЕСТЬNULL(РасчетыПоДокументам.ДолгРегл, 0) - ЕСТЬNULL(РасчетыПоДокументам.ЗалогЗаТаруРегл, 0)) <> 0
    И Операция.ПроведеноБанком

на мой взгляд они по сути идентичны, но 1-й получает в итоге строку, а второй нет. Может кто-нибудь объяснить, почему так и в чем между ними существенная разница?
   Nyarlathotep
 
10 - 24.04.19 - 15:07
(9) Весь запрос целиком в (0). Там можно посмотреть, как заполняются ВТ из приведенных мной подзапросов.
   Xapac
 
11 - 24.04.19 - 15:21
(1)
1 КАК Поле1
   Очевидно
 
12 - 24.04.19 - 18:17
(9)
Ну видимо в блоке "Где"
у аванса - "И ЕСТЬNULL(РасчетыПредоплата.ПредоплатаРегл, Расчеты.СуммаРегл) <> 0"
а у оплаты - "И (ЕСТЬNULL(РасчетыПоДокументам.ДолгРегл, 0) - ЕСТЬNULL(РасчетыПоДокументам.ЗалогЗаТаруРегл, 0)) <> 0"
   mikeA
 
13 - 24.04.19 - 18:41
(9) Поставь ты уже себе Инструменты разработчика. Можно и без Инфостарта http://devtool1c.ucoz.ru
   TormozIT
 
14 - 02.05.19 - 00:00
Быстрый старт отладки запроса через ИР https://www.youtube.com/watch?v=qVGXWU8w1W0

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.