8.х Построитель отчета

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем admin1C, 15 сен 2008.

  1. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Помогите решить проблему. Делаю в 1С 8.1 отчет через конструктор отчета. В одну из колонок передаются значения типа строка и при выроде отчета ширина колонки оказывается очень очень большой. Подскажите как мне настроить ширину этой колонки? Искала какие нибудь стандартные процедуры или функции в общем модуле Управление отчетами и у самого построителя - не нашла ничего похожего. В табличной части на форме отчета задавала у ячеек свойство заполнения текстом "Забивать" и "Переносить". Никакой реакции. Что я нитак делаю?
  2. ЧКДзержинский
    Offline

    ЧКДзержинский Опытный в 1С

    Регистрация:
    7 дек 2006
    Сообщения:
    487
    Симпатии:
    3
    Баллы:
    29
    я вообще-то сам новичек на восьмерке, но попробую дать консультацию :unsure:
    Функция Подстрока, например:

    ВЫБРАТЬ ПОДСТРОКА(Сотрудник.Наименование,1,15) ИЗ
    РегистрРасчета.Начисления.ФактическийПериодДействия
  3. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    ЭлементыФормы.ПолеТабличногоДокумента.Область(<значение1>,<значение2>,<значение3>,<значение4>).ШиринаКолонки
  4. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Сделала. В построителе поставила галочку "Использовать фиксированный макет", создался макет отчета. Выяснилось, что ширина нужной колонки была 377, уменьшила до 50, теперь свойство "переносить" работает, все нормально. Правда вопрос так и остался нерешенным. Хотелось бы все таки узнать как выцепить из выборки нужную переменную. Реализовать то все можно фу нкцией СОКРЛП, точней СОКРП, только я вот не могу найти где ж ее поймать.
    Вот процедура вывода макета.
    Код:
    ЭлементыФормы.ПолеТабличногоДокумента.Очистить();
    
    ПостроительОтчетаОтчет.Параметры.Вставить("ДатаКон", ДатаКон);
    ПостроительОтчетаОтчет.Параметры.Вставить("ДатаНач", ДатаНач);
    
    ПостроительОтчетаОтчет.Выполнить();
    ПостроительОтчетаОтчет.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе;
    ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВСтроках = ТипРазмещенияРеквизитовИзмерений.Отдельно;
    ПостроительОтчетаОтчет.РазмещениеРеквизитовИзмеренийВКолонках = ТипРазмещенияРеквизитовИзмерений.Отдельно;
    ПостроительОтчетаОтчет.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика);
    ПостроительОтчетаОтчет.Макет = ВнешнийОтчетОбъект.ПолучитьМакет("Отчет");
    ПостроительОтчетаОтчет.ОформитьМакет();
    ПостроительОтчетаОтчет.Вывести(ЭлементыФормы.ПолеТабличногоДокумента);
    
    
    тут щас вопрос стоит не в том чтоб в макете задать ширину колонки, а чтоб к переменной типа "Строка неограниченной длины" которая является элементом выборки из запроса построителя отчета применить функцию СОКРП при выводе. Тогда все нормально будет и не придется создавать фиксированный макет, он динамически будет создаваться, и ширина колонки как и нужно будет подстраиваться под максимальный размер строки. Пока он у меня 377.
  5. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    ну тогда похоже тебе надо до функции "вывести" перелопачивать содержимое построителя, что имхо очень не гут!

    тебе же подсказали простые способы! либо прям в запросе ограничиваешь длину переменной так, чтобы сразу выходина нужной длины (но при этом есть шанс потерять несколько значимых символов числа "обрезав" его под шаблон).

    Либо можно после того как построитель выкинул содержимое в табличное поле на форме поймать углы таблицы и для всех колонок сделать одну ширину. можно конечно каждый раз искать по заголовку нужную колонку и только для нее ставить ширину, но это извращение, особенно если у тебя таких колонок фактически неоганичено :)

    Макет конечно здорово, но построитель с автомакетом еще лучше, т.к. на базе одного отчета можно еще несколько забабахать (да и смотрится солидней), иногда вообще не прилагая усилий, а иногда просто поправив запрос.

    Я принудительно ставлю всегда в отчетах ширину колонок на 20 и вывожу поле для пользователя, чтобы он мог, если надо, выставить ширину в ручную. В этом случае никогда не потеряются цифры, т.к. работа идет с колонками и в худшем случае их просто не будет видно.
    п.с. В свое время подсмотрел этот способ у ребят из БиТа, за что им респект.
  6. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Для частного случая, не спорю, это вполне подойдет. И в том числе для случая расчета ширины колонок автоматическое задания их ширины тоже вполне катит. Просто уже не раз натыкалась на тот момент что мне нужно получить переменную после формирования запроса построителя отчета, где он ее получает в одном виде, и в таблицу ее закинуть уже в преобразованном, изза этого мне и важно поймать переменную в промежутке между получением из запроса и выводом на экран.
  7. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    ну это промежуток между
    ПостроительОтчетаОтчет.Выполнить();
    и
    ПостроительОтчетаОтчет.Вывести(ЭлементыФормы.ПолеТабличногоДокумента);

    сам таким не баловался. Вообще подозреваю, что просто нужно слить содержимое построителя, то самое что он получил выполнив запрос, в переменную. Потом в переменной изменить и обратно закинуть в построитель. отладчиком надо потыкаться... по идее оно должно быть типа "РезультатЗапроса"

Поделиться этой страницей