Как программно изменить оформление строк табличной части в 1С:СКАТ Профессионал?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно изменить оформление строк табличной части в 1С:СКАТ Профессионал?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38932
      Фото аватараOdineski
      Участник

        в 1с скат профессионал , обычная форма. Я создал внешнюю обработку в которой есть табличная часть Справочник.Номенклатура с несколькими строчками . и есть кнопка, которая должна менять для этой номенклатуре фон в форме список. есть такая штука у них . если в предприятии наводишься на номенлатуру нажимаешь f10 то появляется форма в оторой можно поменять фон у строки. так что программно тоже можно сделать.

        нашел в общих командах

        код взят из процедуры управление справочниками, а когда я изменитл цвет и выполнить, то было в другой номенклатура форма списка Обычная формы

        &НаКлиенте
        Процедура ВыполнитьДействие(стрДействие, Ссылка, Объект=Неопределено, Форма=Неопределено) Экспорт

        Если стрДействие=»РедактироватьКодНомер» Или стрДействие=»НадписьКод» Тогда
        УправлениеНумерациейОбъектов.ИзменениеВозможностиРедактированияНомера(Форма, Форма.ЭлементыФормы.Код);

        ИначеЕсли стрДействие=»РедактироватьКодФормыСписка» Тогда
        УправлениеНумерациейОбъектов.ИзменениеВозможностиРедактированияНомера(Форма, Форма.ЭлементыФормы.Список.Колонки.Код);

        ИначеЕсли стрДействие=»Оформление» Тогда
        ВыделенныеСтроки=Форма.ЭлементыФормы.Список.ВыделенныеСтроки;
        Если ВыделенныеСтроки.Количество()=0 Тогда
        Предупреждение(«Нет выделенных строк!», 30); Возврат;
        КонецЕсли;
        ФормаОформления=ПолучитьОбщуюФорму(«ФормаНастройкаОформления», Форма);
        ФормаОформления.ЭлементыФормы.НадписьСсылкаНаОбъект.Заголовок=»Групповая настройка оформления»;
        НастройкаОформление=ФормаОформления.ОткрытьМодально();
        ЕстьОформление=Ложь;
        Если НЕ НастройкаОформление=Неопределено Тогда
        Для каждого СтрокаКоллекции Из НастройкаОформление Цикл
        Если СтрокаКоллекции.Использование Тогда
        ЕстьОформление=Истина; Прервать;
        КонецЕсли;
        КонецЦикла;
        КонецЕсли;
        Для каждого СтрокаТабличнойЧасти Из ВыделенныеСтроки Цикл
        текОбъект=СтрокаТабличнойЧасти.Ссылка.ПолучитьОбъект();
        текОбъект.Оформление=?(ЕстьОформление, Новый ХранилищеЗначения(НастройкаОформление), Неопределено);
        текОбъект.Записать();
        КонецЦикла;

        ИначеЕсли стрДействие=»ОткрытьСвойства» Тогда
        Если Ссылка=Неопределено Тогда Возврат; КонецЕсли;
        //*ФормаОбработки=Обработки.ЗначенияСвойствОбъекта.ПолучитьФорму(«ЗначенияСвойствОбъекта», Форма,);
        ФормаОбработки=ПолучитьФорму(«Обработка.ЗначенияСвойствОбъекта.Форма.ЗначенияСвойствОбъекта»);
        ФормаОбработки.ВладелецФормы=Форма;
        ФормаОбработки.ОбъектОтбораЗначений = Ссылка;
        ФормаОбработки.ОбъектОтбораНазначений = Ссылка;
        ФормаОбработки.ПрочитатьЗаполнитьСвойстваИЗначения();
        ФормаОбработки.Открыть();

        ИначеЕсли стрДействие=»ОткрытьКатегории» Тогда
        Если Ссылка=Неопределено Тогда Возврат; КонецЕсли;
        //ФормаОбработки=Обработки.КатегорииОбъекта.ПолучитьФорму(«КатегорииОбъекта», Форма,);
        ФормаОбработки=ПолучитьФорму(«Обработка.КатегорииОбъекта.Форма.КатегорииОбъекта»);
        ФормаОбработки.ВладелецФормы=Форма;
        ФормаОбработки.НазначениеКатегорий = ПредопределенноеЗначение(«ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_КонтактныеЛицаКонтрагентов»);
        ФормаОбработки.ОбъектОтбораКатегорий = Ссылка;
        ФормаОбработки.ПрочитатьЗаполнитьКатегорииОбъекта();
        ФормаОбработки.Открыть();

        ИначеЕсли стрДействие=»ТолькоПросмотр» Тогда
        ФормаОбъекта=Ссылка.ПолучитьОбъект().ПолучитьФорму();
        ФормаОбъекта.ТолькоПросмотр=Истина;
        ФормаОбъекта.Открыть();

        ИначеЕсли стрДействие=»Печать» Тогда
        //Обработки.УправлениеПечатнымиФормами.Создать().ОткрытьФормуВыбора(Ссылка);
        ФормаОбработки=ПолучитьФорму(«Обработка.УправлениеПечатнымиФормами.Форма.ФормаВыбора»,,Новый УникальныйИдентификатор);
        ФормаОбработки.ОткрытьФормуВыбора(Ссылка);

        ИначеЕсли стрДействие=»Плагины» Тогда
        //*ФормаОбработки=Обработки.УправлениеПлагинами.ПолучитьФорму(,, Новый УникальныйИдентификатор);
        ФормаОбработки=ПолучитьФорму(«Обработка.УправлениеПлагинами.Форма.Форма»,,Новый УникальныйИдентификатор);
        ФормаОбработки.СсылкаВызова=Ссылка;
        ФормаОбработки.ОбъектВызова=Объект;
        ФормаОбработки.ФормаВызова=Форма;
        ФормаОбработки.Открыть();

        ИначеЕсли стрДействие=»Справка» Тогда
        ОбщегоНазначения.ОткрытьПомощь(Форма);
        КонецЕсли;
        КонецПроцедуры
        Из формы номенклатуры

        Процедура тпСписок_ПриПолученииДанных(Элемент, ОформленияСтрок)
        Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        ДанныеОформления=ОформлениеСтроки.ДанныеСтроки.Ссылка.Оформление;
        Если ЗначениеЗаполнено(ДанныеОформления) Тогда
        Оформление=ДанныеОформления.Получить();
        Если НЕ Оформление=Неопределено Тогда
        Если Оформление.ЦветТекста.Использование Тогда
        ОформлениеСтроки.ЦветТекста=Оформление.ЦветТекста.Значение;
        КонецЕсли;

        Если Оформление.ЦветФона.Использование Тогда
        ОформлениеСтроки.ЦветФона=Оформление.ЦветФона.Значение;
        КонецЕсли;

        Если Оформление.Шрифт.Использование Тогда
        ОформлениеСтроки.Шрифт=Оформление.Шрифт.Значение;
        КонецЕсли;
        КонецЕсли;
        КонецЕсли;
        мПоискОбъектовВСпискахДанных.СписокПриВыводеСтрокиСпискаОтбораДанных(Элемент, ОформлениеСтроки, ОформлениеСтроки.ДанныеСтроки);
        КонецЦикла;
        КонецПроцедуры

      • #38933
        bot_avaOdin — Одинэсник
        Участник

          У вас уже найден весь необходимый механизм. Внешняя обработка должна сделать то же самое, что делает штатная процедура ВыполнитьДействие, только вместо коллекции выделенных строк формы списка использовать строки своей табличной части.

          Предположим:

          — табличная часть внешней обработки называется Номенклатура;
          — колонка табличной части также называется Номенклатура;
          — колонка имеет тип СправочникСсылка.Номенклатура;
          — кнопка находится в обычной форме внешней обработки.

          ## Код кнопки

          Главное отличие от штатного кода:

          у вас будет:

          А дальше выполняется такая же запись:

          ## Если табличная часть называется не Номенклатура

          Например, табличная часть внешней обработки называется Товары, а колонка называется Номенклатура. Тогда цикл будет таким:

          Замените Объект.Товары на фактическое имя табличной части.

          ## Если реквизит табличной части имеет другое имя

          Например, колонка называется Товар, тогда нужно использовать:

          ## Обновление формы списка

          Цвет записывается в справочник, но уже открытая форма списка может не перерисовать строки автоматически. Поэтому после записи нужно обновить список.

          Добавьте в обработку процедуру:

          В вашем случае по обработчику:

          табличное поле формы списка, скорее всего, называется тпСписок. Тогда основной вариант должен быть таким:

          ## Как открыть обработку с владельцем формы списка

          Чтобы ВладелецФормы был заполнен, обработку нужно открывать из формы списка примерно так:

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

          ## Если обработка открывается через штатную форму выбора

          Можно передать владельца так:

          Где Форма это форма списка номенклатуры.

          ## Снятие оформления у нескольких номенклатур

          Если пользователь в форме ФормаНастройкаОформления отключит все флаги Использование, переменная:

          останется равной Ложь.

          Тогда код:

          удалит ранее сохраненный цвет у всех строк табличной части.

          То есть одна кнопка будет выполнять оба действия:

          — если выбрали цвет, шрифт или цвет текста, оформление устанавливается;
          — если все настройки отключили, оформление удаляется.

          ## Почему цвет будет отображаться в форме списка

          В форме списка СКАТ уже есть обработчик:

          Поэтому во внешней обработке не нужно напрямую работать с ОформлениеСтроки. Нужно только записать настройку в:

          ## Если нужно не открывать форму выбора, а сразу задавать фиксированный цвет

          Тогда можно создать оформление напрямую, но это зависит от внутреннего типа, который возвращает общая форма ФормаНастройкаОформления. В СКАТ безопаснее использовать штатную форму, потому что она создает объект с правильной структурой:

          Полученный результат можно без изменений записать в ХранилищеЗначения:

          Для вашей задачи основной рабочий код будет именно таким:

          Именно этот цикл нужно использовать вместо цикла по ВыделенныеСтроки.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С