Шаблон кода для вывода данных в табличный документ Часто при разработке необходимо вывести данные в печатную форму, ниже шаблон вывода в табличный документ
Пример процедуры Вывода на печать
Код 1C v 8.х Процедура Печать(ТабДок) Экспорт
//создание нового табличного документа
ТабДок = Новый ТабличныйДокумент;
//получение макета для печати расходной накладной
Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Основной");
//получим область "Заголовок" как новый табличный документ (!)
Область = Макет.ПолучитьОбласть("Заголовок");
//укажем параметры области
Область.Параметры.НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;
//выведем заполненную область "Заголовок" в табличный документ
ТабДок.Вывести(Область);
//выведем область "Шапка" в табличный документ
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
//получение области "Строка"
//обратите внимание, что это можно сделать до цикла по строкам
Область = Макет.ПолучитьОбласть("Строка");
// вывод строк документа в печатную форму
Для Каждого СтрСостава Из Состав Цикл
//заполнение параметров области из строки табличной части
Область.Параметры.Заполнить(СтрСостава);
// вывод сформированной области в табличный документ
ТабДок.Вывести(Область);
КонецЦикла;
// вывод области "Подвал"
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");
ТабДок.Вывести(Область);
//установим параметры отображения табличного документа
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Истина;
ТабДок.ОтображатьСетку = Ложь;
//покажем табличный документ на экране
ТабДок.Показать();
КонецПроцедуры<br>
Пример функции формирующей печатную форму Счета по Ссылке на документ:
Код 1C v 8.х Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент. ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплату" ;
МакетОбработки = ПолучитьМакет( "Счет" ) ;
ОбластьШапка = МакетОбработки. ПолучитьОбласть( "Шапка" ) ;
ОбластьШапка. Параметры. НомерДокумента = СсылкаНаДокумент. Номер;
ОбластьШапка. Параметры. ДатаДокумента = СсылкаНаДокумент. Дата;
ОбластьШапка. Параметры. НазваниеОрганизации = СсылкаНаДокумент. Организация. Наименование;
ТабличныйДокумент. Вывести( ОбластьШапка) ;
ОбластьСтроки = МакетОбработки. ПолучитьОбласть( "СтрокаТЧ" ) ;
Для Каждого ТекущаяСтрока Из СсылкаНаДокумент. Товары Цикл
ЗаполнитьЗначенияСвойств( ОбластьСтроки. Параметры, ТекущаяСтрока) ;
ТабличныйДокумент. Вывести( ОбластьСтроки) ;
КонецЦикла ;
ОбластьПодвал = МакетОбработки. ПолучитьОбласть( "Подвал" ) ;
ОбластьПодвал. Параметры. КоличествоИтог = СсылкаНаДокумент. Товары. Итог( "Количество" ) ;
ОбластьПодвал. Параметры. СуммаИтог = СсылкаНаДокумент. Товары. Итог( "Сумма" ) ;
ОбластьПодвал. Параметры. ИмяОтветственного = СсылкаНаДокумент. Менеджер. Наименование;
ТабличныйДокумент. Вывести( ОбластьПодвал) ;
ТабличныйДокумент. АвтоМасштаб = Истина ;
Возврат ТабличныйДокумент;
КонецФункции
Категория:
Табличный документ Как добавить записи в независимый регистр сведений? Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект
РегистрСведенийМенеджерЗаписи.<имя>.
Например, для того, чтобы в независимый регистр сведений ЗначенияСвойствОбъектов с измерениями Объект, Свойство и ресурсом Значение добавить одну запись, содержащую значение некоторого свойства выбранной номенклатуры, можно использовать следующий код:
Код 1C v 8.х МенеджерЗаписи = РегистрыСведений. ЗначенияСвойствОбъектов. СоздатьМенеджерЗаписи( ) ;
МенеджерЗаписи. Объект = ПолеВводаНоменклатура;
МенеджерЗаписи. Свойство = ПолеВводаСвойствоНоменклатуры;
МенеджерЗаписи. Значение = ПолеВводаЗначениеСвойства;
МенеджерЗаписи. Записать( ) ;
В результате выполнения этого кода новая запись будет добавлена в регистр, или, если регистр уже содержит запись с выбранными значениями измерений Объект и Свойство, - существующая запись будет заменена новой.
Если требуется добавить несколько записей в регистр сведений, можно использовать объект
РегистрСведенийНаборЗаписей.<имя>.
Например, для того, чтобы в тот же самый регистр сведений ЗначенияСвойствОбъектов добавить несколько записей о значениях различных свойств выбранной номенклатуры, можно использовать следующий код (предполагается, что свойства и соответствующие им значения находятся в таблице значений ТаблицаСвойств,
сформированной заранее):
Код 1C v 8.х НаборЗаписей = РегистрыСведений. ЗначенияСвойствОбъектов. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Объект. Установить( ПолеВводаНоменклатура) ;
Для Каждого СтрокаТаблицы Из ТаблицаСвойств Цикл
НоваяЗапись = НаборЗаписей. Добавить( ) ;
НоваяЗапись. Объект = ПолеВводаНоменклатура;
НоваяЗапись. Свойство = СтрокаТаблицы. Свойство;
НоваяЗапись. Значение = СтрокаТаблицы. ЗначениеСвойства;
КонецЦикла ;
НаборЗаписей. Записать( ) ;
В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения Объект (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.
Категория:
Регистры сведений Автоматическая установка ширины колонки табличного документа. Процедура, которая "примерно" делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего:
Код 1C v 8.х Процедура РасчетШириныКолонок(ТабличныйДокумент)
Перем МаксимальноеКоличествоСтрок, МаксимальнаяШиринаКолонки;
Перем КонечнаяСтрока, НачальнаяСтрока, ТекущаяКолонка, ТекущаяСтрока, НачалоДанных;
Перем ОбластьШапки, ОбластьПодвала;
Перем ШиринаКолонки, ТекстЯчейки, НомерСтрокиТекста;
Перем КоличествоУровнейГруппировокСтрок, Отступ;
Перем ШириныКолонок;
МаксимальноеКоличествоСтрок = 50 ;
МаксимальнаяШиринаКолонки = 50 ;
ШириныКолонок = Новый Массив;
КоличествоУровнейГруппировокСтрок = ТабличныйДокумент. КоличествоУровнейГруппировокСтрок( ) ;
НачальнаяСтрока = 0 ;
НачалоДанных = 0 ;
ОбластьШапки = ТабличныйДокумент. Области. Найти( "ШапкаТаблицы" ) ;
Если ТипЗнч( ОбластьШапки) = Тип( "ОбластьЯчеекТабличногоДокумента" ) Тогда
НачальнаяСтрока = ОбластьШапки. Верх;
НачалоДанных = ОбластьШапки. Низ + 1 ;
Иначе
ОбластьШапки = ТабличныйДокумент. Области. Найти( "ШапкаСтрок" ) ;
Если ТипЗнч( ОбластьШапки) = Тип( "ОбластьЯчеекТабличногоДокумента" ) Тогда
НачальнаяСтрока = ОбластьШапки. Верх;
НачалоДанных = ОбластьШапки. Низ + 1 ;
КонецЕсли ;
КонецЕсли ;
ОбластьПодвала = ТабличныйДокумент. Области. Найти( "Подвал" ) ;
Если ТипЗнч( ОбластьПодвала) = Тип( "ОбластьЯчеекТабличногоДокумента" ) Тогда
КонечнаяСтрока = ОбластьПодвала. Верх - 1 ;
Если КонечнаяСтрока - НачальнаяСтрока > МаксимальноеКоличествоСтрок Тогда
КонечнаяСтрока = НачальнаяСтрока + МаксимальноеКоличествоСтрок;
КонецЕсли ;
Иначе
КонечнаяСтрока = НачальнаяСтрока + МаксимальноеКоличествоСтрок;
КонецЕсли ;
КонечнаяСтрока = Мин( КонечнаяСтрока, ТабличныйДокумент. ВысотаТаблицы) ;
Для ТекущаяКолонка = 1 По ТабличныйДокумент. ШиринаТаблицы Цикл
АвтоОтступ = 0 ;
Для ТекущаяСтрока = НачальнаяСтрока По КонечнаяСтрока Цикл
ШиринаКолонки = 0 ;
ОбластьЯчейки = ТабличныйДокумент. Область( ТекущаяСтрока, ТекущаяКолонка) ;
Если ОбластьЯчейки. Лево < > ТекущаяКолонка Или ОбластьЯчейки. Верх < > ТекущаяСтрока Тогда
Продолжить;
КонецЕсли ;
Если КоличествоУровнейГруппировокСтрок > 0 И ТекущаяСтрока = НачалоДанных Тогда
АвтоОтступ = ОбластьЯчейки. АвтоОтступ;
КонецЕсли ;
ТекстЯчейки = ОбластьЯчейки. Текст;
Для НомерСтрокиТекста = 1 По СтрЧислоСтрок( ТекстЯчейки) Цикл
ШиринаТекстаЯчейки = СтрДлина( СтрПолучитьСтроку( ТекстЯчейки, НомерСтрокиТекста) ) ;
Если АвтоОтступ < > Неопределено И АвтоОтступ > 0 Тогда
ШиринаТекстаЯчейки = ШиринаТекстаЯчейки + КоличествоУровнейГруппировокСтрок * АвтоОтступ;
КонецЕсли ;
ШиринаКолонки = Макс( ШиринаКолонки, ШиринаТекстаЯчейки) ;
КонецЦикла ;
Если ШиринаКолонки > МаксимальнаяШиринаКолонки Тогда
ШиринаКолонки = МаксимальнаяШиринаКолонки;
КонецЕсли ;
Если ШиринаКолонки < > 0 Тогда
КоличествоКолонок = ОбластьЯчейки. Право - ОбластьЯчейки. Лево;
Для НомерКолонки = 0 По КоличествоКолонок Цикл
Если ШириныКолонок. ВГраница( ) > ТекущаяКолонка - 1 + НомерКолонки Тогда
Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда
ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / ( КоличествоКолонок + 1 ) ;
Иначе
ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] =
Макс( ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / ( КоличествоКолонок + 1 ) ) ;
КонецЕсли ;
Иначе
ШириныКолонок. Вставить( ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / ( КоличествоКолонок + 1 ) ) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
Для ТекущаяКолонка = 0 По ШириныКолонок. ВГраница( ) Цикл
Если ШириныКолонок[ТекущаяКолонка] < > Неопределено Тогда
ТабличныйДокумент. Область( , ТекущаяКолонка + 1 , НачалоДанных, ТекущаяКолонка + 1 ) . ШиринаКолонки = ШириныКолонок[ТекущаяКолонка] + 1 ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Очень полезная штука при условии, что у Вас заранее невозможно определить размер итоговых колонок в печатной форме. А так, надо просто "натравить" процедуру с соответствующими параметрами на нужные ячейки таблицы, и они сами "выровняются" и приобретут необходимый размер (ширину).
Код 1C v 7.x //<!-- Патырило С.С. 22-04-2004 : Автоматическая установка ширины колонки
// Для изменения ширины колонки уже сформированной таблицы, требуется передать
// в качестве параметров переменную с объектом "Таблица", координаты ячейки (группы ячеек)
// для которых нужно установить ширину столбца и ширину столбца в символах.
// При этом не обязательно передавать координаты требуемой ячейки (итоговой),
// (т.е. когда нет возможности или сложно определить позицию итоговой строки)
// достаточно указать ячейку из данного столбца (например первую).
// Процедура установит ширину столбца выбрав максимальное из значений -
// текущего размера (установленного в конфигураторе, или программно перед вызовом
// функции) и переданного в качестве параметра.
Процедура глУстШиринуЯчейки(Таб, Строка1, Столбец1, Строка2, Столбец2, ДлТекста = 0) Экспорт
Если ДлТекста = 0 Тогда
врДлина = СтрДлина(СокрЛП(Таб.Область(Строка1, Столбец1, Строка2, Столбец2).Текст));
Иначе
врДлина = ДлТекста;
КонецЕсли;
Таб.Область(Строка1, Столбец1, Строка2, Столбец2).ШиринаСтолбца(Макс(Таб.Область(Строка1, Столбец1, Строка2, Столбец2).ШиринаСтолбца(), врДлина));
КонецПроцедуры
// --> Патырило С.С. 22-04-2004
Категория:
Табличный документ