alyuev писал(а) 22. Февраля 2019 :: 15:40:Атрибут.ЦветФона для реквизита агрегатного типа, например, на твой форме, как я понимаю, это "Регион" - раскрашивает в оригинале только окантовку, т.к. в центре реквизита прямоугольник в цвет формы. А в твоем случае реквизит раскрашен полностью. Вот я и спрашиваю, как у тебя так получилось?
Или в твоем случае "Регион" это текстовое поле с кнопкой выбора?
Реквизит диалога без кнопки выбора и рядом динамически сформированная картинка. Картинка формируется динамически.
//+++-recop---18.02.16------------------------------------ оComboBox, oComboChoice
function оCombo_Создать(Конт,оОбъекты,Атрибут,Слой)
var ОсновнойАтрибут,Система,Префикс,Атр,Индекс,Имя,Длина,i;
var X,Y,W,H;
Try // если нет основного атрибута ничего не делаем
ОсновнойАтрибут = Конт.РасшФормы.ПолучитьАтрибут(Сред(Атрибут.Идентификатор,6));
Except
EndTry;
Система = СоздатьОбъект("Система");
Префикс = Лев(Атрибут.Идентификатор,5);
// переустанавливаем размеры
Атрибут.ПолучитьКоординаты(X,Y,W,H);
Атрибут.УстановитьКоординаты(,,W-19,20);
Атрибут.РасширенныйСтиль=0;
// устанавливаем и инициализируем кнопку
Атр = Конт.РасшФормы.ДобавитьАтрибут(Атрибут.Идентификатор+"#",10);
Атр.Стиль = 1476558859;
Атр.Слой = Атрибут.Слой;
Индекс = ?(ПустоеЗначение(ОсновнойАтрибут)=1,1,ОсновнойАтрибут.Доступность);
Атр.Значение.РежимРисования(2);
Атр.УстановитьКоординаты(X+W-20,Y,20,20);
Атр.Видимость = Слой.НайтиЗначение(Атр.Слой);
РегистрацияОбъекта(Атр,оОбъекты,5);
// попытаемся присвоить атрибуту значение корневого атрибута (если существует)
if ПустоеЗначение(ОсновнойАтрибут) = 0 then
if ТипЗначения(Атрибут.Значение) = 0 then // неопределенный тип
Длина = 0;
if ТипЗначенияСтр(ОсновнойАтрибут.Значение) = "Справочник" then
ОсновноеПредставление = Метаданные.Справочник(ОсновнойАтрибут.Значение.Вид()).ОсновноеПредставление;
if ОсновноеПредставление = "ВВидеНаименования" then
Длина = Метаданные.Справочник(ОсновнойАтрибут.Значение.Вид()).ДлинаНаименования;
else
Длина = Метаданные.Справочник(ОсновнойАтрибут.Значение.Вид()).ДлинаКода;
endif;
Конт.Форма.ПолучитьАтрибут(Атрибут.Идентификатор).НазначитьТип("Строка",Длина);
Атрибут.Значение=Строка(ОсновнойАтрибут.Значение);
elsif ТипЗначенияСтр(ОсновнойАтрибут.Значение) = "Перечисление" then
for i = 1 to ) do
Длина = ).Представление),Длина);
enddo;
Конт.Форма.ПолучитьАтрибут(Атрибут.Идентификатор).НазначитьТип("Строка",Длина);
Атрибут.Значение=Строка(ОсновнойАтрибут.Значение);
elsif ТипЗначенияСтр(ОсновнойАтрибут.Значение) = "СписокЗначений" then
for i = 1 to ОсновнойАтрибут.Значение.РазмерСписка() do
Значение = ОсновнойАтрибут.Значение.ПолучитьЗначение(i,Имя);
Длина = Макс(СтрДлина(Строка(?(ПустоеЗначение(Имя)=0,Имя,Строка(Значение)))),Длина);
enddo;
Конт.Форма.ПолучитьАтрибут(Атрибут.Идентификатор).НазначитьТип("Строка",Длина);
elsif ТипЗначенияСтр(ОсновнойАтрибут.Значение) = "Строка" then
Длина = СтрДлина(ОсновнойАтрибут.Значение);
Конт.Форма.ПолучитьАтрибут(Атрибут.Идентификатор).НазначитьТип("Строка",Длина);
endif;
endif;
Конт.Форма.Обновить();
endif;
endfunction // оCombo_Создать()
Красим обязательные поля:
Атрибут = РасшФормы.ПолучитьАтрибут(Х);
if Атрибут.Тип = 2 then
Атрибут.РасширенныйСтиль=0;
Атрибут.ЦветФона = 16775149;
endif;