Код 1C v 8.х Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
| РеализацияТоваровУслугТовары.Ссылка.Номер,
| РеализацияТоваровУслугТовары.Ссылка.Дата,
| РеализацияТоваровУслугТовары.Ссылка.Контрагент,
| РеализацияТоваровУслугТовары.Ссылка.ТоннажДокумента КАК Тоннаж,
| РеализацияТоваровУслугТовары.Ссылка.СуммаДокумента КАК Сумма,
| 0 КАК ЕстьДопУслуги
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Доставка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| КомплектацияНоменклатурыКомплектующие.Ссылка.Ссылка,
| КомплектацияНоменклатурыКомплектующие.Ссылка.Номер,
| КомплектацияНоменклатурыКомплектующие.Ссылка.Дата,
| NULL,
| 0,
| 0,
| 0
|ИЗ
| Документ.КомплектацияНоменклатуры.Комплектующие КАК КомплектацияНоменклатурыКомплектующие
|ГДЕ
| КомплектацияНоменклатурыКомплектующие.Доставка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|АВТОУПОРЯДОЧИВАНИЕ" ) ;
Запрос. УстановитьПараметр( "Ссылка" , Ссылка) ;
ТабличноеПолеРеализаций = Запрос. Выполнить( ) . Выгрузить( ) ;
ЭлементыФормы. ТабличноеПолеРеализаций. СоздатьКолонки( ) ;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. ЕстьДопУслуги. Видимость = Ложь ;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Тоннаж. ОтображатьИтогиВПодвале = Истина ;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Сумма. ОтображатьИтогиВПодвале = Истина ;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Тоннаж. ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение. Право;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Сумма. ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение. Право;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Тоннаж. ТекстПодвала = "" + Формат( ТабличноеПолеРеализаций. Итог( "Тоннаж" ) , "ЧЦ=15; ЧДЦ=3" ) ;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Тоннаж. Ширина = 15 ;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Тоннаж. Формат = "ЧДЦ=3; ЧГ=3,0" ;
ЭлементыФормы. ТабличноеПолеРеализаций. Колонки. Сумма. Формат = "ЧДЦ=2; ЧГ=3,0" ;
Процедура, которая "примерно" делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего:
Код 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
Процедура глУстШиринуЯчейки(Таб, Строка1, Столбец1, Строка2, Столбец2, ДлТекста = 0) Экспорт
Если ДлТекста = 0 Тогда
врДлина = СтрДлина( СокрЛП( Таб. Область( Строка1 , Столбец1 , Строка2 , Столбец2 ) . Текст) ) ;
Иначе
врДлина = ДлТекста;
КонецЕсли ;
Таб. Область( Строка1 , Столбец1 , Строка2 , Столбец2 ) . ШиринаСтолбца( Макс( Таб. Область( Строка1 , Столбец1 , Строка2 , Столбец2 ) . ШиринаСтолбца( ) , врДлина) ) ;
КонецПроцедуры