База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно изменить цвет фона для элемента справочника в 1С СКАТ-Профессиона
- В этой теме 1 ответ, 2 участника, последнее обновление 15 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
30 октября 2026 в 14:49 #38928
в 1с скат профессионал , обычная форма. Я создал внешнюю обработку в которой есть реквизит Справочник.Номенклатура . и есть кнопка, которая должна менять для этой номенклатуре фон в форме список. есть такая штука у них . если в предприятии наводишься на номенлатуру нажимаешь f10 то появляется форма в оторой можно поменять фон у строки. так что программно тоже можно сделать
-
30 октября 2026 в 14:49 #38929
Да, программно это сделать можно, но важный момент: цвет строки в списке, скорее всего, не является свойством самого элемента справочника. В «СКАТ-Профессионал» это обычно реализовано отдельным механизмом: обработка по F10 записывает для номенклатуры цвет в регистр сведений или в специальное хранилище, а форма списка при открытии читает эти данные и оформляет строку.
Из внешней обработки нужно не пытаться напрямую изменить цвет открытого списка, а записать цвет тем же способом, которым это делает штатная команда F10.
## 1. Сначала найдите, куда записывается цвет
В конфигураторе выполните глобальный поиск по конфигурации по словам:
1С (Код)1234567ЦветФонОформлениеЦветСтрокиЦветФонаНоменклатураF10Ищите:
— обработчики формы списка номенклатуры;
— команды или процедуры, связанные с F10;
— регистр сведений с названиями вроде:
—ЦветаНоменклатуры;
—ОформлениеНоменклатуры;
—НастройкиНоменклатуры;
—ДополнительныеНастройки;
— общие модули с экспортными процедурами;
— форму, которая открывается после нажатия F10.Если конфигурация на поддержке и исходный код закрыт, можно посмотреть форму через отладчик и поставить точку останова на обработчик команды F10.
## 2. Как понять, что делает F10
Откройте конфигуратор:
1. Найдите форму списка справочника
Номенклатура.
2. Откройте модуль формы.
3. Посмотрите обработчики:
—ОбработкаРасшифровки;
—ОбработкаОжидания;
—Нажатие;
—НачалоВыбора;
—ОбработкаНажатия;
— обработчики команд формы.
4. Найдите код, который открывает форму выбора цвета или выполняет запись.Обычно внутри будет что-то похожее на:
1С (Код)12ФормаЦвета = Обработки.ВыборЦвета.ПолучитьФорму();ФормаЦвета.ОткрытьМодально();или:
1С (Код)1ОбщегоНазначения.УстановитьЦветНоменклатуры(Номенклатура, Цвет);или запись в регистр:
1С (Код)123456789101112НаборЗаписей = РегистрыСведений.ЦветаНоменклатуры.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);НаборЗаписей.Прочитать();НаборЗаписей.Очистить();Запись = НаборЗаписей.Добавить();Запись.Номенклатура = Номенклатура;Запись.Цвет = Цвет;НаборЗаписей.Записать();Точное имя регистра и его измерений зависит от конфигурации «СКАТ-Профессионал».
## 3. Если цвет хранится в регистре сведений
Допустим, в конфигурации найден регистр сведений
ЦветаНоменклатуры, у которого есть измерениеНоменклатураи ресурсЦвет.Тогда обработчик кнопки во внешней обработке может выглядеть так:
1С (Код)123456789101112131415161718192021222324Процедура УстановитьЦвет(Элемент)Если Не ЗначениеЗаполнено(Номенклатура) ТогдаПредупреждение("Не выбрана номенклатура.");Возврат;КонецЕсли;Цвет = Новый Цвет(255, 255, 0);НаборЗаписей = РегистрыСведений.ЦветаНоменклатуры.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);НаборЗаписей.Прочитать();НаборЗаписей.Очистить();Запись = НаборЗаписей.Добавить();Запись.Номенклатура = Номенклатура;Запись.Цвет = Цвет;НаборЗаписей.Записать();Сообщить("Цвет установлен.");КонецПроцедурыНо этот пример заработает только если:
— регистр действительно называется
ЦветаНоменклатуры;
— измерение называетсяНоменклатура;
— ресурс называетсяЦвет;
— тип поля цвета действительноЦвет.Внешняя обработка может обращаться к объектам конфигурации по именам, если у пользователя есть соответствующие права.
## 4. Если цвет хранится в регистре сведений с периодичностью
Возможен вариант, когда регистр имеет периодичность и измерения, например:
—
Пользователь;
—Номенклатура;а ресурс:
—
ЦветФона.Тогда запись будет примерно такой:
1С (Код)123456789101112131415161718192021222324Процедура УстановитьЦвет(Элемент)Если Не ЗначениеЗаполнено(Номенклатура) ТогдаПредупреждение("Не выбрана номенклатура.");Возврат;КонецЕсли;НаборЗаписей = РегистрыСведений.ОформлениеНоменклатуры.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);НаборЗаписей.Отбор.Пользователь.Установить(ПользовательИнформационнойБазы);НаборЗаписей.Прочитать();НаборЗаписей.Очистить();Запись = НаборЗаписей.Добавить();Запись.Период = ТекущаяДата();Запись.Номенклатура = Номенклатура;Запись.Пользователь = ПользовательИнформационнойБазы;Запись.ЦветФона = Новый Цвет(255, 255, 0);НаборЗаписей.Записать();КонецПроцедурыЕсли цвет в СКАТ устанавливается отдельно для каждого пользователя, без измерения
Пользовательзаписи быть не должно. Если цвет общий для всех пользователей, наоборот, пользователь в запись добавлять нельзя.## 5. Если штатная функция находится в общем модуле
Это лучший вариант. Например, в конфигурации может существовать экспортная процедура:
1С (Код)1ОбщегоНазначения.УстановитьЦветНоменклатуры(Номенклатура, Цвет);Тогда внешняя обработка должна вызывать ее:
1С (Код)1234567891011121314Процедура УстановитьЦвет(Элемент)Если Не ЗначениеЗаполнено(Номенклатура) ТогдаПредупреждение("Не выбрана номенклатура.");Возврат;КонецЕсли;Цвет = Новый Цвет(255, 255, 0);ОбщегоНазначения.УстановитьЦветНоменклатуры(Номенклатура, Цвет);Сообщить("Цвет установлен.");КонецПроцедурыНо вызвать можно только процедуру, объявленную с ключевым словом
Экспорт:1С (Код)1Процедура УстановитьЦветНоменклатуры(Номенклатура, Цвет) ЭкспортПроцедуру модуля формы напрямую из внешней обработки вызвать нельзя. Например, такой код сработает только внутри самой формы списка:
1С (Код)1ФормаСписка.ИзменитьЦветСтроки();Внешняя обработка не имеет доступа к закрытым процедурам формы, если форма специально не передала их наружу.
## 6. Если в форме списка используется обработчик оформления строки
В обычных формах цвет обычно устанавливается кодом самой формы списка. Например, в обработчике оформления строки может быть логика вида:
1С (Код)12345678910111213Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) ТогдаЦветСтроки = ПолучитьЦветНоменклатуры(ДанныеСтроки.Номенклатура);Если ЗначениеЗаполнено(ЦветСтроки) ТогдаОформлениеСтроки.ЦветФона = ЦветСтроки;КонецЕсли;КонецЕсли;КонецПроцедурыТогда сама внешняя обработка должна только записать цвет в нужное хранилище. После этого список нужно обновить.
Если форма списка уже открыта, после записи можно попробовать обновить ее через команду обновления списка. В обычной форме это может быть:
1С (Код)1ЭлементыФормы.НоменклатураСписок.Обновить();или:
1С (Код)1ЭлементыФормы.Список.Обновить();Но это выполняется в модуле самой формы списка. Из внешней обработки уже открытая форма списка обычно недоступна напрямую.
## 7. Важное ограничение обычных форм
В обычной форме нельзя надежно изменить фон произвольной строки справочника из внешней обработки простым кодом вроде:
1С (Код)1ЭлементыФормы.Список.ЦветФона = Новый Цвет(255, 255, 0);Это изменит оформление элемента формы целиком либо вообще не сработает, но не установит цвет конкретной строки справочника.
Для окраски именно одной строки должны выполняться два условия:
1. форма списка должна поддерживать обработчик оформления строки;
2. обработчик должен получать цвет из регистра, реквизита или другого хранилища.Поэтому нужно повторить штатный механизм F10, а не пытаться красить строку непосредственно из внешней обработки.
## 8. Как быстро проверить правильный способ
Поставьте в отладчике точку останова и выполните штатную операцию:
1. Откройте список номенклатуры.
2. Выделите элемент.
3. НажмитеF10.
4. Установите цвет.
5. Подтвердите.
6. Посмотрите, какая процедура сработала.
7. Найдите в ней:
— имя регистра;
— имя общего модуля;
— процедуру записи;
— параметры процедуры.Если после установки цвета в списке появляется новая запись, то почти наверняка используется регистр сведений. Если записей в регистрах нет, возможно, цвет хранится:
— в настройках пользователя;
— в хранилище настроек формы;
— в таблице значений формы;
— в дополнительном реквизите;
— в отдельной таблице самой конфигурации.Для внешней обработки наиболее правильная схема будет такой:
1С (Код)12345678910111213141516Процедура КнопкаУстановитьЦвет(Элемент)Если Не ЗначениеЗаполнено(Номенклатура) ТогдаПредупреждение("Не выбрана номенклатура.");Возврат;КонецЕсли;// Здесь нужно вызвать штатную экспортную процедуру СКАТ// либо записать данные в найденный регистр сведений.Цвет = Новый Цвет(255, 255, 0);// Пример, имя процедуры нужно заменить на фактическое:// СКАТОбщиеМодули.УстановитьЦветНоменклатуры(Номенклатура, Цвет);КонецПроцедурыЕсли в конфигурации нет экспортной процедуры, переносите в обработку именно код записи из обработчика F10, заменив только источник номенклатуры на реквизит вашей обработки
Номенклатура.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.