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

22.06.15

Разработка - Механизмы типовых конфигураций

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

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

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

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

 

Функция ВыполнитьЗапросДляОтладчика(ИсходныйЗапрос,МенеджерВременныхТаблиц) Экспорт
    
    МногоТЗ = Новый Массив;
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.Текст = ИсходныйЗапрос.Текст;
    
    Для Каждого Элемент Из ИсходныйЗапрос.Параметры Цикл
        Запрос.УстановитьПараметр(Элемент.Ключ,Элемент.Значение);
    КонецЦикла;
    
    Табл = Новый ТаблицаЗначений;
    Табл.Колонки.Добавить("ИмяВРТаблицы");
    Табл.Колонки.Добавить("Колво");
    
    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 по МногоТЗ.ВГраница() Цикл
			Если ТипЗнч(МногоТЗ[Индекс]) = Тип("РезультатЗапроса") Тогда
        		МногоТЗ[Индекс] = МногоТЗ[Индекс].Выгрузить(ОбходРезультатаЗапроса.Прямой);
			КонецЕсли;
		КонецЦикла;
	
      
        
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Возврат МногоТЗ;
    
КонецФункции   
 

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

 

 



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

См. также

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2355    YA_418728146    11    

40

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1026    6    2ncom    3    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4836    mrXoxot    11    

99

Ключи аналитик учета в ЕРП, КА, УТ

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    7072    ids79    25    

74

Распределение по базе среднего в ЗИКГУ 3.1

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 Россия Бюджетный учет Абонемент ($m)

Результат расчета начислений (отпуск, БЛ и т.д.) может распределятся по базе среднего заработка. У таких начислений на вкладке "Налоги, взносы, бухучет" стоит галка "По базе среднего заработка". Но бывают случаи, что данное распределение необходимо скорректировать.

1 стартмани

14.09.2023    445    2    Vlx    0    

1

Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление холдингом 1С:Франчайзи, автоматизация бизнеса Россия Бесплатно (free)

В статье приведен алгоритм доработок типового механизма настройки заполнения бухгалтерской отчетности на примере конфигурации 1С:ERP. Управление холдингом (3.1.8.15). Цель доработок - сделать процесс настроек более гибким и удобным для пользователей

11.09.2023    1931    ICL-Soft    3    

12

Разбор механизма "Настройки полей формы" в 1С:ERP. Управление холдингом

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

В данной статье я постараюсь разобрать механизм, который Вам может встретиться на просторах типовой конфигурации 1С:ERP. Управление холдингом. Я не могу гарантировать, что этот механизм не исключат из следующих версий конфигурации (как, собственно, и любой другой). К сожалению, мне не удалось найти его ни в одном модуле конфигурации "Библиотеки стандартных подсистем". Мне он показался интересным, и захотелось более детально во всем этом разобраться.

18.07.2023    2160    it_box    1    

7

Работа с контактной информацией. Часть 2

Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Во второй части статьи рассмотрим вопрос преобразования адреса из старого формата в новый. Рассмотрим реальные задачи, связанные с контактной информацией.

05.06.2023    6965    biimmap    4    

41
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sergpogo 2 04.06.15 09:51 Сейчас в теме
Добрый день.
Функция ПолучитьВТ(МенеджерВТ, ИмяВТ) Экспорт
 
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
	Запрос.Текст = "ВЫБРАТЬ * ИЗ " + ИмяВТ + " КАК ВТ";
	
	Попытка
		Возврат Запрос.Выполнить().Выгрузить();
	Исключение
		Возврат "Ошибка получения временной таблицы: " + ОписаниеОшибки(); 
	КонецПопытки;
 
КонецФункции
Показать

А так не проще?
Krio2; Восьмой; Bassgood; LsrGroup; +4 Ответить
2. pit201201 84 04.06.15 17:14 Сейчас в теме
(1) spogo,
Остается только посмотреть длинный запрос на несколько экранов и найти ИмяВТ. Потом подставить его в строчку отладчика и ... тот же самый результат.
Я оказался чуть ленивее и ИмяВТ у меня само находится.
JohnyDeath; +1 Ответить
3. sergpogo 2 05.06.15 12:32 Сейчас в теме
(2)
Остается только посмотреть длинный запрос на несколько экранов и найти ИмяВТ.
или нажать CTRL+F и найти "ПОМЕСТИТЬ"

пысы: ничего не имею против вашего способа.
4. pit201201 84 05.06.15 12:59 Сейчас в теме
(3) spogo,
... а потом проверить не удалилась ли она в середине текста. Обратно же просто - СTRL-F. На листочек выписываем временные таблицы которые есть, потом вычеркиваем - которые удалены. А потом нажимаем Shift-F9 и переписываем с листочка ПолучитьВТ(Менеджер, ИмяВТс Листочка).
Зачем все это делать, когда можно не делать, а дать поручение сделать это за тебя.
В общем, я допускаю когда на кнопках клавы WASD надписи стерты, а потертые кнопки Ctrl и F мне не нравятся. :)
5. RustIG 1382 14.06.15 20:31 Сейчас в теме
(0) вопросы: у вас только одна временная таблица выгружается в ТЗ? А если запрос содержит несколько временных таблиц? Какая из них выгрузится в таблицу значений? Как в отладчике выбирать как запрос анализировать? и почему бы при отладке не проверить временные таблицы, которые в дальнейшем - после использования - будут уничтожены?
предложение: консоль запросов позволяет обрабатывать только часть выделенного текста в запросе. Я использую эту возможность при просмотре результата временных и вложенных таблиц или при редактировании только части запроса, входя в конструктор выделенного текста запроса.
Для просмотра временных таблиц следует закомментировать выражение «Поместить», выделить часть текста запроса и нажать «Выполнить». После просмотра следует не забыть удалить комментарии в строке «Поместить»
6. pit201201 84 22.06.15 12:39 Сейчас в теме
(5) Rustig,
маленько подправил текст процедуры
МногоТЗ = Запрос.ВыполнитьПакет();
...

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

Уничтожаемые в запросе таблицы можно и оставлять для анализа, появится необходимость доработаю.

Остался небольшой косяк : слова ПОМЕСТИТЬ и УНИЧТОЖИТЬ должны быть написаны в исходном запросе БОЛЬШИМИ буквами.
7. pit201201 84 22.06.15 12:49 Сейчас в теме
(5) Rustig,
Против консоли запросов ничего не имею и сам активно использую ее. В предложенном Вами варианте затруднение (замедление процесса поиска багов) возникает при передаче параметров. Еще мне не совсем понятно как консолью отладить запрос в котором используется ВременнаяТаблица из другого запроса. Предложенная процедура это своего рода экспресс анализатор текущего состояния МененджераВременныхТаблиц.
8. bforce 481 25.06.15 07:38 Сейчас в теме
Для просматра временных таблиц написано много разных фунцкий, в том числе, в типовых попадаются. Но я ставлю плюс за использование регулярных выражений.
Оставьте свое сообщение