При разработке и отладке конфигураций на платформе 1С:Предприятие часто возникает необходимость быстро взглянуть на данные, которые формирует та или иная виртуальная таблица (например, остатки на определенную дату или обороты за период). Традиционный путь — написание запроса в консоли или программно — не всегда является самым быстрым. Разберем, как можно увидеть эти данные более простыми способами, используя возможности встроенного языка и инструменты разработчика.
Прежде чем мы перейдем к практическим методам просмотра, давайте проанализируем, что именно мы пытаемся увидеть. В системе 1С виртуальные таблицы физически не существуют в базе данных SQL. Это абстракция, которую предоставляет платформа. Когда мы обращаемся к виртуальной таблице, платформа «на лету» генерирует сложный SQL-запрос к реальным физическим таблицам (таблицам итогов или таблицам движений).
Именно поэтому «просто открыть» виртуальную таблицу как справочник или документ невозможно — она формируется динамически в зависимости от переданных параметров: периода, условий и измерений. Тем не менее, у нас есть несколько способов перехватить результат этого динамического формирования.
Рассмотрим наиболее доступный метод, который не требует сторонних инструментов. Платформа 1С предоставляет программную «обертку» над виртуальными таблицами в виде методов менеджеров регистров накопления и сведений. Вместо того чтобы описывать текст запроса, мы можем вызвать готовую функцию.
Для регистров накопления это могут быть методы Остатки(), Обороты() или ОстаткиИОбороты(). Для регистров сведений — СрезПоследних() или СрезПервых(). Разберем по шагам, как это реализовать в коде для целей отладки:
// Пример получения остатков по регистру накопления "ТоварыНаСкладах"
ПараметрыОтбора = Новый Структура("Номенклатура", ВыбранныйТовар);
РезультатТаблица = РегистрыНакопления.ТоварыНаСкладах.Остатки(КонецДня(ТекущаяДата()), ПараметрыОтбора);
В данном примере мы вызываем метод Остатки(), который внутри себя выполняет запрос к виртуальной таблице. Результат возвращается в виде объекта ТаблицаЗначений. Чтобы увидеть эти данные, нам достаточно выполнить следующие действия:
РезультатТаблица и нажать Shift+F9 (Вычислить выражение).Этот метод очень удобен тем, что позволяет быстро проверить корректность наложения фильтров и получения итогов без создания объекта Запрос.
Если нам нужно более глубокое исследование данных, воспользуемся профессиональным инструментарием. В сообществе 1С широко известны «Инструменты разработчика» (авторства Сергея Старых). Эти инструменты позволяют визуализировать данные, которые обычно скрыты от глаз программиста.
Проанализируем возможности консоли запросов из состава ИР. В отличие от стандартных консолей, она обладает следующими преимуществами:
&Период), что критически важно для понимания результата.Выясним причину, почему это эффективно: инструмент автоматически выполняет «выгрузку» виртуальной таблицы в промежуточную структуру, которую можно просматривать в интерфейсе 1С, имитируя прямой доступ к данным.
Часто вопрос «как посмотреть результат» возникает в контексте сложного запроса. Если вы используете пакетные запросы, вы можете временно изменить код, чтобы «выбросить» результат виртуальной таблицы в переменную.
Разберем пример:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
// Вместо того чтобы просто выполнять запрос, выгрузим результат в таблицу
ТаблицаДляПросмотра = Запрос.Выполнить().Выгрузить();
Теперь, как и в первом способе, через механизм Shift+F9 мы можем изучить содержимое ТаблицаДляПросмотра. Это дает нам полное представление о том, что вернула виртуальная таблица на данном этапе.
Проанализируем ситуацию с производительностью. Важно помнить, что виртуальные таблицы — это высоконагруженный механизм. При просмотре данных без отборов (пустые параметры метода Остатки()) на больших базах данных система может «зависнуть» или вызвать переполнение памяти, так как платформа попытается рассчитать итоги по всем измерениям регистра за всю историю.
Основные правила при просмотре:
ГДЕ в запросах), чтобы ограничить объем данных одной номенклатурой, складом или организацией.Остатки(), СрезПоследних()) всегда возвращают данные в виде ТаблицыЗначений, что удобно для отладки, но может быть менее эффективно в промышленном коде по сравнению с прямой выборкой из запроса.Мы рассмотрели несколько эффективных способов «увидеть» результат виртуальных таблиц. Если вам нужно быстро проверить остатки в коде — используйте методы менеджера и Shift+F9. Если вы работаете над сложным алгоритмом и вам нужно видеть промежуточные данные — используйте Консоль запросов ИР или временную выгрузку результата запроса в ТаблицуЗначений. Эти навыки позволяют значительно ускорить поиск ошибок в логике получения данных из регистров.