Каталог решений - 1С:Бухгалтерия 3.0. Как заглянуть в расчет себестоимости отладчиком

1С:Бухгалтерия 3.0. Как заглянуть в расчет себестоимости отладчиком

1С:Бухгалтерия 3.0. Как заглянуть в расчет себестоимости отладчиком

В наличии

Простой и эффективный метод ознакомления и изучения содержимого временных таблиц, которые мигрируют из функции в функцию через общий МенеджерВременныхТаблиц.

Категория:

Описание

Случилось страшное, и мне пришлось заглянуть в функцию РасчетСебестоимости.РассчитатьСебестоимость(Период, Организация, Ссылка, Режим = «Запасы») из выше означенной конфигурации.

В ней в свою очередь вызывается несколько однотипных процедур, в которые передается ссылка на МенеджерВременныхТаблиц,  и они в нем добавляют (удаляют, меняют) временные таблицы. Иногда хочется посмотреть эти промежуточные результаты во время отладки.

Выходом из ситуации стала функция:

 

Функция ВыполнитьЗапросДляОтладчика(ИсходныйЗапрос,МенеджерВременныхТаблиц) Экспорт
    
    МногоТЗ = Новый Массив;
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.Текст = ИсходныйЗапрос.Текст;
    
    Для Каждого Элемент Из ИсходныйЗапрос.Параметры Цикл
        Запрос.УстановитьПараметр(Элемент.Ключ,Элемент.Значение);
    КонецЦикла;
    
    Табл = Новый ТаблицаЗначений;
    Табл.Колонки.Добавить("ИмяВРТаблицы");
    Табл.Колонки.Добавить("Колво");
    
    regExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.Pattern = "(ПОМЕСТИТЬ [А-Яа-я0-9_]+)";
    RegExp.Global = Истина;
    RegExp.Multiline = Истина;
    Matches = RegExp.Execute(ИсходныйЗапрос.Текст);
    Для Счетчик = 0 По Matches.Count - 1 Цикл 
        Match = Matches.Item(Счетчик);
        Стр = Табл.Добавить();
        Стр.ИмяВРТаблицы = СокрЛП(СтрЗаменить(Match.Value,"ПОМЕСТИТЬ ",""));
        Стр.Колво = 1;
    КонецЦикла;    
    
    RegExp.Pattern = "(УНИЧТОЖИТЬ [А-Яа-я0-9_]+)";
    RegExp.Global = Истина;
    RegExp.Multiline = Истина;
    Matches = RegExp.Execute(ИсходныйЗапрос.Текст);
    Для Счетчик = 0 По Matches.Count - 1 Цикл 
        Match = Matches.Item(Счетчик);
        Стр = Табл.Добавить();
        Стр.ИмяВРТаблицы = СокрЛП(СтрЗаменить(Match.Value,"УНИЧТОЖИТЬ ",""));
        Стр.Колво = -1;
    КонецЦикла;    
    
    Попытка
        
        Запрос.Текст = ИсходныйЗапрос.Текст;
        
        Табл.Свернуть("ИмяВРТаблицы","КолВо");
        
        Для Каждого Стр Из Табл Цикл
            Если Стр.Колво = 1 Тогда
                Запрос.Текст = СтрЗаменить(Запрос.Текст," "+Стр.ИмяВРТаблицы," ТЕСТТЕСТ_" + Стр.ИмяВРТаблицы);
                Запрос.Текст = Запрос.Текст + Символ(10) + Символ(13) + "; ВЫБРАТЬ * ИЗ ТЕСТТЕСТ_" + Стр.ИмяВРТаблицы;
                Запрос.Текст = Запрос.Текст + Символ(10) + Символ(13) + "; УНИЧТОЖИТЬ ТЕСТТЕСТ_" + Стр.ИмяВРТаблицы;
            КонецЕсли;
		КонецЦикла;        
		       
		МногоТЗ = Запрос.ВыполнитьПакет();
		Для Индекс = 0 по МногоТЗ.ВГраница() Цикл
			Если ТипЗнч(МногоТЗ[Индекс]) = Тип("РезультатЗапроса") Тогда
        		МногоТЗ[Индекс] = МногоТЗ[Индекс].Выгрузить(ОбходРезультатаЗапроса.Прямой);
			КонецЕсли;
		КонецЦикла;
	
      
        
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Возврат МногоТЗ;
    
КонецФункции   
 

Как использовать ее, наверное, понятно. На всякий случай …

 

 

Вот, собственно, и все!

has been added to your cart:
Оформление заказа