... я не вижу никакой реакции. Попытка через тот же код задать, например, цвет фона колонки приводит к непонятному результату: цвет меняется, однако результат выполнения СКД он не затрагивает никак (пример на приложенном скриншоте). При этом ширина раскрашенной области второй колонки уже, чем область выведенной второй колонки (это «Amount» на скриншоте).
Очевидно, я чего-то не знаю о принципах работы табличных документов 1С и / или формированию их в СКД. Возможно, кто-то подтолкнет в правильном направлении. Код (если это важно) пытаюсь выполнять в конце процедуры ПриКомпоновкеРезультата().
(3) Agapov_Stas, к сожалению, не срабатывает. Думаю, это из-за использования кастомного макета СКД.
(2) dj_serega, работает. Но этот метод влияет на весь документ, несмотря на то, что установить размер колонок я пытаюсь для отдельных ячеек (например, на скриншоте видно, как установка ширины колонки Aging в первой таблице сплюснула колонку Balance в таблице ниже). При настройке макета СКД есть возможность убедиться, что колонки строк имеют ширину, независимую друг от друга?
(5) bytecoded, Я знаю про только визуальный метод.
Стали на ячеку и выделили колонку. Выделится только то что входит в группу.
Если ячейка в группе колонок из нескольких строк, то выделяться только колонки этих строк. Как-то так. Надеюсь понял о чем я.
Программно не смотрел. Так что если найдешь, пиши ;)
(6) dj_serega, понял. А каким образом можно разгруппировать строки макета, чтобы можно было задавать колонкам независимую ширину?
Например, на прикрепленном скриншоте видно, что в группу входят все строки, кроме второй; я хочу получить возможность разбить каждую строку на отдельную группу и управлять шириной колонок каждой группы независимо от остальных.
(7) Boneman, понял, спасибо. Попробую, если с макетом не получится — пытаюсь понять, как разбить его на отдельные, независимые друг от друга группы строк.
(5) bytecoded, указывать надо конкретную группу строк, и колонок к ним. Тогда и ширина будет работать.
Решал уже такую задачу.
Сначала обходим табдок сверху вниз, по какой нибудь колонке, ищем различные ширины колонок, и запоминаем номера строк.
А потом уже крутим ширину нужных областей.
Итак, я создал для каждого фрагмента макета свой формат строк, проверил отсутствие привязки к другим фрагментам через выделение строк фрагмента + выделение колонки. Однако результирующий табличный документ все равно ведет себя так, как будто привязка существует: например, все колонки с цифрами в макете имеют ширину 14, но после генерации документа:
Колонки с цифрами имеют разную ширину, отличную от 14 (например, колонка Amount на скрине имеет ширину 18, хотя везде, где встречается в макете, выставлена в 14 и в отдельный формат);
Колонки выделяются так, как будто никакого формата строк не существует (т.е. выделяется полная вертикаль, хотя там чуть ли не каждая строка со своим форматом).
Соответственно, макет продолжает ехать по ширине. Куда имеет смысл посмотреть?
Можно программно с шириной работать. Когда макет компоновки скомпонован, можно в макетах еще что-то исправить до инициализации процессора компоновки.
Упрощенно вот так:
Кстати, эти макеты ничего знают про формат строк. То что ты вытворяешь с табличным документом на закладке "Макеты", в самой схеме сохраняется всего лишь в виде набора параметров, описанных в СП "ОформлениеМакетаОформленияКомпоновкиДанных".
Поигрался немного с шириной колонок. Действительно, компоновка по-особенному подбирает ширину.
Зато стал понимать зачем нужен ИдентификаторТаблицы у объекта СтрокаТаблицыОбластиКомпоновкиДанных. Обратил внимание, что если у ячеек макетов разная ширина, но одинаковые идентификаторы, то они будут выведены в одном формате строк. Ширина колонки при этом будет подобрана как максимальная ширина всех входящих в колонку ячеек.
Теперь выполнение вот этого кода (обрати внимание на МакетКомпоновки.Макеты.Макет2.Макет[0].ИдентификаторТаблицы = "";):
(17) Armando, спасибо. Через программное искажение идентификаторов удалось добиться нужного эффекта. Не подскажешь, где можно прочитать подробнее про эти идентификаторы и порядок их назначения в стандартной обработке? Попробовал поискать информацию, но не нашел. Опасаюсь какого-то негативного эффекта от такого грубого вторжения в макет :)
Procedure ClearCompositionTemplateTableIDs(CompositionTemplate) Export
Counter = 0;
For Each AreaTemplateDefinition In CompositionTemplate.Templates Do
For Each TemplateTableRow In AreaTemplateDefinition.Template Do
TemplateTableRow.TableID = String(Counter);
Counter = Counter + 1;
EndDo;
EndDo;
EndProcedure // ClearCompositionTemplateTableIDs()
(19) bytecoded, мне кажется в твоем коде увеличение счетчика лучше вынести за цикл, чтоб в рамках одного макета у всех строк был одинаковый идентификатор. Есть подозрение, что может что-то разъехаться.
Гениально!!! Теперь можно все отчеты можно переписать по-человечески, на сКД и с п о к о й н е н ь к о выгружать в Excel. А лучше пусть сами выгружают.
Если бы изначально не верила в мужское превосходство, обязательно прослезилась бы.
Потрясающе, как можно было до этого додуматься - хотя судя по никам вы 1с-ники условные :)
Чистые 1с-ники - те, для которых жизнь за пределами 1с не существует
Условные 1с-ники - это мастадонты программирования, для которых 1с - просто диалект
Это была ода тем, которые видят дальше чем разработчики 1с