Главная » Статьи » "1С" Програмирование

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




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

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

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

статья с сайта: www.infostart.ru

 
Категория: "1С" Програмирование | Добавил: c1 (2009 Февраль 21)
Просмотров: 1156 | Теги: Вертикальная автофиксация для СКД | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar