1C v7.7: Вывод на печать произвольной переменной типа «Таблица значений»
Смотрю, "полку нашего прибыло" — стали публиковаться семерочные обработки по выводу таблицы значений на экран, когда поместить таблицу значений на форму или ВыбратьСтроку() по каким-то причинам не удовлетворяет.
Это — описание глобальной процедуры, которая выводит любую таблицу значений в табличный документ, с которым уже можно работать дальше.
Автор: Денис Горбунов, осень 2001 — осень 2003
Оригинал расположен на: http://faq1c.gorbunov.ru
- Описание
- Подробнее
Описание
Побаяню и я.
1C v7.7: Вывод на экран произвольной переменной типа «Таблица значений»
Описание
Процедура предназначена для облегчения отладки прикладных решений (конфигураций).
Выводит на экран в удобночитаемом виде содержимое произвольной переменной типа «ТаблицаЗначений».
Может быть использована с любой конфигурацией 1С: Предприятие V 7.7.
Автор: Денис Горбунов, осень 2001 — осень 2003
Оригинал расположен на: http://faq1c.gorbunov.ru/node/3
Как это использовать
Входные параметры:
1. Тип «ТаблицаЗначений», переменная, содержимое которой мы хотим посмотреть.
2. Тип «Строка», заголовок окна, которое будет выведено на экран, необязательный параметр.
Предусмотрена дуракозащищенность: корректно отрабатывает, даже если в качестве первого входного параметра подсунуть переменную другого типа — а, точнее, сруганется и выведет на экран наименование типа этого параметра.
Результат работы:
Формирование и вывод на экран печатной формы (объекта типа «Таблица»).
Выглядит как обычная таблица — с шапкой (заголовком), разной шириной колонок (ширина определяется автоматически по содержимому)
История создания
Отлаживая осенью 2001 года одну конфигурацию, я захотел посмотреть, а что такое собственно у меня находится в переменной. Переменная эта была типа «ТаблицаЗначений» и посмотреть ее с помощью встроенных в отладчик средств можно было лишь частями. Мало того, — еще и переход от просмотра одной части к просмотру другой был делом муторным.
Да и, вообще, просмотр сложных структур данных неудобен в большинстве отладчиков большинства систем программирования, а не только 1С: Предприятие V 7.7. Мне давненько это не нравилось.
И напала на меня мысль, что в языке программирования 1С: Предприятие V 7.7 есть все необходимые средства для реализации универсального алгоритма просмотра «ТаблицыЗначений».
Отбится от этой мысли не удалось. И первый (насколько я помню даже еще нерабочий) вариант был сделан в тот же день. И через небольшой промежуток времени алгоритм был доведен до ума.
В течение 2001, 2002, 2003 годов алгоритм совершенстовался по мелочам. Основная же идея созрела еще в самый первый день.
Оказалось, что отлаживать многие вещи, видя, что варится в мозгу прикладного решения (конфигурации), намного удобнее, потому уже с 2001 года я вставляю это процедуру во все глобальные модули прикладных решений (конфигураций) с которым работаю. Чтобы можно было воспользоваться ею в любой момент. Чего и вам желаю.
Исходный текст
Врезается в глобальный модуль прикладного решения (конфигурации) и вызывается откуда угодно. Если не хочется врезать в глобальный модуль, то слово «Экспорт» в объявлении процедуры смысла не имеет 😉
Процедура глВывестиТаблицуЗначений(ТаблицаЗначений, Заголовок = «») Экспорт
Перем Таб, ИИ, ЖЖ, НазваниеКолонки, ТипКолонки, Ширина, Значение, Сообщение;
Таб = СоздатьОбъект(«Таблица»);
Если ТипЗначенияСтр(ТаблицаЗначений) <> «ТаблицаЗначений» Тогда
Сообщение = «В процедуру «»глВывестиТаблицуЗначений()»» передана переменная не типа «»ТаблицаЗначений»», «+
«а типа «»»+СокрЛП(ТипЗначенияСтр(ТаблицаЗначений))+«»»»;
Таб.Область(1, 1, 1, 1).Текст = Сообщение;
Таб.Область(1, 1, 1, 1).ШиринаСтолбца(СтрДлина(Сообщение));
Таб.ТолькоПросмотр(1);
Таб.Показать(«Не таблица значений: «+Заголовок);
Возврат;
КонецЕсли;
Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл
ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ,,,, НазваниеКолонки);
Таб.Область(1, ЖЖ, 1, ЖЖ).Текст = СокрЛП(НазваниеКолонки);
Таб.Область(1, ЖЖ, 1, ЖЖ).РамкаОбвести(5, 5, 5, 5);
Таб.Область(1, ЖЖ, 1, ЖЖ).ВертикальноеПоложение(3);
Таб.Область(1, ЖЖ, 1, ЖЖ).ГоризонтальноеПоложение(3);
Таб.Область(1, ЖЖ, 1, ЖЖ).РазмерШрифта(7);
Таб.Область(1, ЖЖ, 1, ЖЖ).Полужирный(1);
Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца();
Ширина = Макс(Ширина, СтрДлина(СокрЛП(НазваниеКолонки)));
Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина);
КонецЦикла;
Для ИИ = 1 по ТаблицаЗначений.КоличествоСтрок() цикл
Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл
Значение = ТаблицаЗначений.ПолучитьЗначение(ИИ, ЖЖ);
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Текст = Значение;
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Расшифровка(Значение, 0);
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).РамкаОбвести(3, 0, 3, 0);
Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца();
Ширина = Макс(Ширина, СтрДлина(СокрЛП(Строка(Значение))));
Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина);
ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ, ТипКолонки); ;
Если ТипКолонки = «Число» тогда
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ГоризонтальноеПоложение(2);
КонецЕсли;
Если ИИ = ТаблицаЗначений.ТекущаяСтрока() тогда
Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ЦветФона(255, 0, 0);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать(«Таблица значений: «+Заголовок);
КонецПроцедуры
На приведенном скриншоте результат отладочной таблицы для обработки Движение ОС (//sale.itcity.ru/public/68881/)
