Как программно изменить цвет фона для элемента справочника в 1С СКАТ-Профессиона

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

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

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

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

          Да, программно это сделать можно, но важный момент: цвет строки в списке, скорее всего, не является свойством самого элемента справочника. В «СКАТ-Профессионал» это обычно реализовано отдельным механизмом: обработка по F10 записывает для номенклатуры цвет в регистр сведений или в специальное хранилище, а форма списка при открытии читает эти данные и оформляет строку.

          Из внешней обработки нужно не пытаться напрямую изменить цвет открытого списка, а записать цвет тем же способом, которым это делает штатная команда F10.

          ## 1. Сначала найдите, куда записывается цвет

          В конфигураторе выполните глобальный поиск по конфигурации по словам:

          Ищите:

          — обработчики формы списка номенклатуры;
          — команды или процедуры, связанные с F10;
          — регистр сведений с названиями вроде:
          — ЦветаНоменклатуры;
          — ОформлениеНоменклатуры;
          — НастройкиНоменклатуры;
          — ДополнительныеНастройки;
          — общие модули с экспортными процедурами;
          — форму, которая открывается после нажатия F10.

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

          ## 2. Как понять, что делает F10

          Откройте конфигуратор:

          1. Найдите форму списка справочника Номенклатура.
          2. Откройте модуль формы.
          3. Посмотрите обработчики:
          — ОбработкаРасшифровки;
          — ОбработкаОжидания;
          — Нажатие;
          — НачалоВыбора;
          — ОбработкаНажатия;
          — обработчики команд формы.
          4. Найдите код, который открывает форму выбора цвета или выполняет запись.

          Обычно внутри будет что-то похожее на:

          или:

          или запись в регистр:

          Точное имя регистра и его измерений зависит от конфигурации «СКАТ-Профессионал».

          ## 3. Если цвет хранится в регистре сведений

          Допустим, в конфигурации найден регистр сведений ЦветаНоменклатуры, у которого есть измерение Номенклатура и ресурс Цвет.

          Тогда обработчик кнопки во внешней обработке может выглядеть так:

          Но этот пример заработает только если:

          — регистр действительно называется ЦветаНоменклатуры;
          — измерение называется Номенклатура;
          — ресурс называется Цвет;
          — тип поля цвета действительно Цвет.

          Внешняя обработка может обращаться к объектам конфигурации по именам, если у пользователя есть соответствующие права.

          ## 4. Если цвет хранится в регистре сведений с периодичностью

          Возможен вариант, когда регистр имеет периодичность и измерения, например:

          — Пользователь;
          — Номенклатура;

          а ресурс:

          — ЦветФона.

          Тогда запись будет примерно такой:

          Если цвет в СКАТ устанавливается отдельно для каждого пользователя, без измерения Пользователь записи быть не должно. Если цвет общий для всех пользователей, наоборот, пользователь в запись добавлять нельзя.

          ## 5. Если штатная функция находится в общем модуле

          Это лучший вариант. Например, в конфигурации может существовать экспортная процедура:

          Тогда внешняя обработка должна вызывать ее:

          Но вызвать можно только процедуру, объявленную с ключевым словом Экспорт:

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

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

          ## 6. Если в форме списка используется обработчик оформления строки

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

          Тогда сама внешняя обработка должна только записать цвет в нужное хранилище. После этого список нужно обновить.

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

          или:

          Но это выполняется в модуле самой формы списка. Из внешней обработки уже открытая форма списка обычно недоступна напрямую.

          ## 7. Важное ограничение обычных форм

          В обычной форме нельзя надежно изменить фон произвольной строки справочника из внешней обработки простым кодом вроде:

          Это изменит оформление элемента формы целиком либо вообще не сработает, но не установит цвет конкретной строки справочника.

          Для окраски именно одной строки должны выполняться два условия:

          1. форма списка должна поддерживать обработчик оформления строки;
          2. обработчик должен получать цвет из регистра, реквизита или другого хранилища.

          Поэтому нужно повторить штатный механизм F10, а не пытаться красить строку непосредственно из внешней обработки.

          ## 8. Как быстро проверить правильный способ

          Поставьте в отладчике точку останова и выполните штатную операцию:

          1. Откройте список номенклатуры.
          2. Выделите элемент.
          3. Нажмите F10.
          4. Установите цвет.
          5. Подтвердите.
          6. Посмотрите, какая процедура сработала.
          7. Найдите в ней:
          — имя регистра;
          — имя общего модуля;
          — процедуру записи;
          — параметры процедуры.

          Если после установки цвета в списке появляется новая запись, то почти наверняка используется регистр сведений. Если записей в регистрах нет, возможно, цвет хранится:

          — в настройках пользователя;
          — в хранилище настроек формы;
          — в таблице значений формы;
          — в дополнительном реквизите;
          — в отдельной таблице самой конфигурации.

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

          Если в конфигурации нет экспортной процедуры, переносите в обработку именно код записи из обработчика F10, заменив только источник номенклатуры на реквизит вашей обработки Номенклатура.

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