Вертикальная автофиксация для СКД

28.08.10

Разработка - Работа с интерфейсом

В СКД очень не хватает возможности автофиксации строк. Обусловлено это невозможностью однозначно определить их количество в общем случае. Однако в большинстве случаев это можно сделать

Обращаю ваше внимание, что приведенная процедура работает не всегда корректно. Но в большинстве случаев она сделает свое дело.

// Выводит результат СКД с установкой вертикальной автофиксации.
// Параметры:
// Таб - ТабличныеДокумент, ПолеТабличногоДокумента - куда выводим отчет;
// ПроцессорКомпоновкиДанных - ПроцессорКомпоновкиДанных;
// ЭлементыРасшировки - ЭлементыРасшифровкиКомпоновкиДанных;
// МассивИгнорируемыхПолей - Массив, *Неопределено - массив имен игнорируемых полей;
// РазрешитьПрерывание - Булево, *Истина.
//
Процедура ЛксВывестиРезультатКомпоновкиСАвтофиксациейСтрок(Таб, ПроцессорКомпоновкиДанных, ЭлементыРасшировки,
 Знач МассивИгнорируемыхПолей = Неопределено, РазрешитьПрерывание = Истина) Экспорт 
 
 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 ПроцессорВывода.УстановитьДокумент(Таб);
 ПроцессорВывода.НачатьВывод();
 ФиксацияВыполнена = Ложь;
 Если МассивИгнорируемыхПолей = Неопределено Тогда
  МассивИгнорируемыхПолей = Новый Массив;
 КонецЕсли; 
 Пока Истина Цикл
  ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий();
  Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда
  Прервать;
  КонецЕсли;
  
  // Автофиксация
  Если Не ФиксацияВыполнена Тогда
  Для Каждого ЗначениеПараметра Из ЭлементРезультатаКомпоновкиДанных.ЗначенияПараметров Цикл
  Если ТипЗнч(ЗначениеПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
  ЗначенияПолейРасшифровки = ЭлементыРасшировки[ЗначениеПараметра.Значение].ПолучитьПоля();
  Для Каждого ЗначениеПоляРасшифровки Из ЗначенияПолейРасшифровки Цикл
  Если МассивИгнорируемыхПолей.Найти(ЗначениеПоляРасшифровки.Поле) = Неопределено Тогда
  Таб.ФиксацияСверху = Таб.ВысотаТаблицы;
  ФиксацияВыполнена = Истина;
  Прервать;
  КонецЕсли;
  КонецЦикла;
  Если ФиксацияВыполнена Тогда
  Прервать;
  КонецЕсли;
  КонецЕсли;
  КонецЦикла;
  КонецЕсли;
  
  ПроцессорВывода.ВывестиЭлемент(ЭлементРезультатаКомпоновкиДанных);
  Если РазрешитьПрерывание Тогда
  ОбработкаПрерыванияПользователя();
  КонецЕсли; 
 КонецЦикла;
 ПроцессорВывода.ЗакончитьВывод();
 
КонецПроцедуры // ЛксВывестиРезультатКомпоновкиСАвтофиксациейСтрок

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62998    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18870    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10241    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    16911    mrXoxot    43    

121

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7445    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    14834    919    elcoan    47    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    11926    162    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 20.12.08 14:14
Сообщение было скрыто модератором.
...
2. tormozit 7230 25.12.08 22:22 Сейчас в теме
Вот параметры вывода, которые влияют на корректность работы:
Выводить заголовок
Выводить параметры данных
Выводить отбор

Для каждого надо делать "смещение". Попробую решить эту проблему
3. tormozit 7230 25.12.08 22:49 Сейчас в теме
Сделал намного более интеллектуальный анализ. Теперь (2) не влияет на корректность определения.
12. Fargoth 03.09.09 20:13 Сейчас в теме
(3) А как бы листинг намного более интеллектуального анализа получить?
13. tormozit 7230 04.09.09 09:47 Сейчас в теме
(12) Он здесь (синим цветом).
14. Fargoth 04.09.09 16:53 Сейчас в теме
(13) А чего то оно мне при использовании вывода параметров не корректно высоту шапки определяет...
4. alexeys81@ukr.net 64 15.01.09 17:34 Сейчас в теме
Я чо-то туплю. А как получить ПроцессорКомпоновкиДанных, чтобы передать его в процелуру ЛксВывестиРезультатКомпоновкиСАвтофиксациейСтрок()?
5. alexeys81@ukr.net 64 15.01.09 18:18 Сейчас в теме
Сорри, уже вдуплил. Отлично всё работает!
6. alexeys81@ukr.net 64 16.01.09 10:52 Сейчас в теме
Ещё вопросик. Отчёт выводится, строки фиксируются, но пропала расшифровка. Когда кликаю по какой-либо ячейке, чтобы расшифровать, никакое меню не выпадает. Выскакивает окно с кодом элемента. Что делаю не так? Вызываю указанную процедуру из отчёта след образом:

Перем ДанныеРасшифровки;
ЭлементыФормы.Результат.Очистить();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,, ДанныеРасшифровки);
ЛксВывестиРезультатКомпоновкиСАвтофиксациейСтрок(ЭлементыФормы.Результат, ПроцессорКомпоновкиДанных, ДанныеРасшифровки.Элементы);
7. therva 55 31.05.09 21:37 Сейчас в теме
(6) Переменную "ДанныеРасшифровки" нужно создавать конструктором:

Процедура ДействияФормыДействиеСформировать(Кнопка)
// Вставить содержимое обработчика.

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;


ЭлементыФормы.Результат.Очистить();


МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,,ДанныеРасшифровки);

ВывестиРезультатКомпоновкиСАвтофиксациейСтрок(ЭлементыФормы.Результат, ПроцессорКомпоновкиДанных, ДанныеРасшифровки.Элементы);

КонецПроцедуры
8. anig99 2852 03.06.09 09:39 Сейчас в теме
Ещё бы сделать автофиксацию первой колонки
9. Defor 108 08.08.09 16:10 Сейчас в теме
Предлагаю фиксацию устанавливать при анализе ячеек результата:

// Автофиксация таблицы
//
// Параметры
// Результат - <Тип.ТабличныйДокумент> - Табличный документ формы
Процедура Автофиксация(Результат)

Для индСтр=1 По Результат.ВысотаТаблицы Цикл
Для индКол=1 По Результат.ШиринаТаблицы Цикл
Ячейка = Результат.Область("R"+индСтр+"C"+индКол);
Если не Ячейка.Расшифровка = Неопределено Тогда
Результат.ФиксацияСверху = индСтр - 1;
возврат;
КонецЕсли;
КонецЦикла;
КонецЦикла;

КонецПроцедуры
10. tormozit 7230 11.08.09 12:48 Сейчас в теме
(9) Можно, но зачем 2 раза вместо одного обходить возможно огромный табличный документ?
11. Defor 108 17.08.09 12:25 Сейчас в теме
Обход происходит только до первой ячейки, в которой имеется расшифровка.

В принципе можно оставить перебор только строк.

До конца цикла выполнение произойдет только в том случае когда отчет пустой.
15. mevgenym 87 14.09.09 10:38 Сейчас в теме
вариант из типовых

Если Не ТаблицаЗафиксирована
И ЭлементРезультата.ЗначенияПараметров.Количество() > 0
И ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда

ТаблицаЗафиксирована = Истина;

ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы;

КонецЕсли;
16. 1СПрограммер 17.09.09 10:33 Сейчас в теме
у меня постоянно пишет, что не может найти макет ;(((

{Отчет.БДДС.Форма.ФормаОтчета(301)}: Ошибка при вызове метода контекста (Вывести): Ошибка вывода результата
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
по причине:
Ошибка вывода результата
по причине:
Макет не найден "Макет1"
17. tormozit 7230 17.09.09 11:01 Сейчас в теме
Теперь будем вообще все ошибки по СКД писать сюда?) Лучше их писать в форуме.
18. n949eo 09.11.11 12:07 Сейчас в теме
Оставьте свое сообщение