1с не работает свойство список
Большинство тех, кто работал с СКД и созданием отчетов на СКД знает об условном оформлении не по наслышке. Изменить шрифт поля, цвет ячейки или представление в зависимости от значения в другом поле это уже вполне обыденная вещь.
Но вот с условным оформлением управляемых формы мы встречаемся реже. Хотя это не менее мощный, функциональный и нужный механизм.
Что же он из себя представляет. А все то же самое. По какому-либо условию мы можем настроить представления или свойства полей табличных элементов формы и они будут изменяться прямо налету.
Я говорю о полях динамических списков и табличных полей. Здесь из кода мы можем обратиться к отдельной колонке и установить свойства сразу для всей колонки, а вот установить свойства отдельного поля не можем.
Важно. Многие с этим сталкиваются и тратят впустую время. Условное оформление не работает для обычных полей формы (не табличных).
Где это может быть использовано помимо раскраски полей. Ну классический пример это представление видов в табличной части. Для бухгалтерии стандартно их может быть три. И обычно они выстраиваются в одном поле одно под другим. Поскольку в каждой строке может быть свой счет, то и состав аналитик может отличаться. И вообще если в каждой строке выводить по 3 аналитики, то это занимает очень много места. А зачем это делать если нам допустим где-то достаточно одного субконто, где-то двух.
Настройка свойствами формы
Рассмотрим на примере нами созданной табличной части в обработке.
Создадим обработку, куда добавим табличную часть с тремя реквизитами Субконто, а так же добавим реквизит КоличествоСубконто, которое будет указывать на количество субконто в строке.
Настройка условного оформления формы находится в свойствах формы на закладке Оформление.
Теперь наша задача указать программе, что при значении в строке поля КоличествоСубконто 1 должно отображаться только Субконто1, при значении 2: Субконото1 и Субконто2, при значении 3: Субконто1, Субконто2, Субконто3.
Для этого служит форма настройки условного оформления.
В колонке Оформляемые поля укажем поля Субконто1, Субконто2, Субконто3. Поскольку для каждого поля будет разное оформление, то заведем 3 строки.
Укажем, что оформлять будем свойство видимость.
А так же настроим условие при котором видимость будет выключаться.
Смотрим что получилось в предприятии. Добавим при этом строки в табличную часть и расставив значения количество субконто.
Как видно в разных строках отображается разное количество полей.
Настройка кодом
Помимо настройки с помощью свойств данную настройку можно произвести с помощью программного кода.
Если вы используете конфигурацию, построенную на , выглядеть это будет так (это относится ко всем типовым ):
ЭлементУО = УсловноеОформление.Элементы.Добавить();
КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ТабличнаяЧастьСубконто2");
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУО.Отбор,
"ТабличнаяЧастьКоличествоСубконто", ВидСравненияКомпоновкиДанных.Меньше, 2);
В случае, если БСП не используется код будет немного длиннее. Просто приведу типовые процедуры из того же БСП.
Функция ДобавитьОформляемоеПоле(КоллекцияОформляемыхПолей, ИмяПоля) Экспорт
ПолеЭлемента = КоллекцияОформляемыхПолей.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Функция ДобавитьЭлементКомпоновки(ОбластьДобавления,
Знач ИмяПоля,
Знач ВидСравнения,
Знач ПравоеЗначение = Неопределено,
Знач Представление = Неопределено,
Знач Использование = Неопределено,
знач РежимОтображения = Неопределено,
знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт
Элемент = ОбластьДобавления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
Элемент.ВидСравнения = ВидСравнения;
Если РежимОтображения = Неопределено Тогда
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
Иначе
Элемент.РежимОтображения = РежимОтображения;
КонецЕсли;
Если ПравоеЗначение <> Неопределено Тогда
Элемент.ПравоеЗначение = ПравоеЗначение;
КонецЕсли;
Если Представление <> Неопределено Тогда
Элемент.Представление = Представление;
КонецЕсли;
Если Использование <> Неопределено Тогда
Элемент.Использование = Использование;
КонецЕсли;
// Важно: установка идентификатора должна выполняться
// в конце настройки элемента, иначе он будет скопирован
// в пользовательские настройки частично заполненным.
Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;
ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля;
КонецЕсли;
В данной публикации рассмотрим пример раскрашивания строк просроченных документов в журнале документов (динамическом списке) от текущей даты и текущего времени.
Наша задача – раскрасить розовым цветом строку, если Контрольный срок меньше Текущей даты с учетом того, что текущая дата постоянно меняется. То есть текущую дату надо считывать динамически, а не определять при первом открытии.
Использовать обработчик ожидания;
Программно настроить условное оформление динамического списка
Допустим, у нас есть документ «Умный заказ» с реквизитом «КонтрольныйСрок» и типом «Дата» (состав даты «Дата и время»):
И журнал документов «УмныйЗаказ» с графой «КонтрольныйСрок», соответствующей этому реквизиту:
Наша задача – раскрасить розовым цветом строку, если Контрольный срок меньше Текущей даты с учетом того, что текущая дата постоянно изменяется.
Создадим управляемую форму:
Теперь при создании на сервере мы вызовем процедуру раскрашивания строк «ОбновленияОтображенияПросрочкиНаСервере». И будем вызывать эту процедуру с заданной периодичностью.
У нас есть некоторая форма списка, например, элементов плана вида характеристик "ПраваПользователей" в конфигурации "Управление производственным предприятием" версии 1.3.
Форма, как Вы видите, управляемая. нам нужно оформить список таким образом, чтобы все строки групп элементов выделялись зеленым цветом. Приступим!
Пример
Оформление элементов управляемых форм выполняется с помощью условного оформления формы:
Для решения нашей задачи добавим элемент условного оформления со следующими настройками:
При последующем открытии формы строки групп плана видов характеристик должны быть выделены зеленым цветом. Но. этого не происходит!
Дело в том, что список элементов и групп плана видов характеристик отображается на форме с помощью объекта формы с типом "Динамический список". Динамические списки использут возможности системы компоновки данных, включая отборы и условное оформление. Последнее как-раз и определяет конечное оформление списка, игнорируя настройки условного оформления самой формы. Добавим аналогичные настройки условного оформления для динамического списка.
Единственное отличие - в список оформляемых полей нужно добавить все видимые поля списка, на которые должно распостраняться условное оформление.
Вывод
Часто слышал, что условное оформление на управляемых формах не всегда работает. В итоге выяснялось, что просто настройки делалишь для формы, а не для динамического списка.
Надеюсь статья кому-нибудь да сэкономит время при решении проблем с условным оформлением.
Доброго времени суток! Подскажите, пожалуйста: как добавить стандартную команду "Вывести список. " в командную панель вновь созданных в расширении объектов (справочников и документов). В конфигураторе она присутствует в составе командной панели формы. В режиме Предприятия ее нет. Подозреваю, что это как-то связано с БСП. Но могу ошибаться. Конфигурация БП 3.0.66.60. Платформа 8.3.13.1513.
(12) Не помогло. А вообще, она у кого нибудь есть? Я еще раз повторюсь: речь идет о новых объектах расширений.
(13) У меня она есть в новых объектах расширений. Справочник с "рукописной" формой идет? Попробуйте справочник без форм сделать для проверки.
(13)Если есть форма, то посмотрите что в "Составе команд" у элемента "Таблица" в которую справочник выводится.
(1)Это у вас стоит?
(57) Ну даже не знаю. Попробуйте защиту от опасных действий и безопасный режим отключить у расширения. Больше ничего на ум не приходит. Меню Конфигурация - Расширение Конфигурации.
(1)
Как решилась проблема? Я добился того, чего хотел установив у кнопки нужной стандартной команды свойство "ТолькоВоВсехДействиях" значение "нет". Но я до сих пор не уверен, что я сделал правильно. Ибо рядом есть кнопка с этим свойством в значении "авто", но эта кнопка выводится на форму. И эта "старая" кнопка, у которой это свойство в значении "авто", конечно же, "пришла" со стандартным релизом. Непонятно, что и как делают создатели релиза.
УНФ 1.6.10.44
1С:Предприятие 8.3 (8.3.13.1690)
(77) Проблема решилась довольно оригинальным способом после вашего вопроса. У меня 2 базы с похожими расширениями: КА 2.2 и Бух 3.0. Принципиальное отличие в том, что в КА оно имеет тип "Дополнение" и там все ОК. А в БУХ 3.0 оно имеет тип "Адаптация" и там не ОК. Поменяла на "Дополнение" (программа разрешила) и все заработало. Потом снова вернула на "Адаптацию" и все работает ). Проверила, правда только на файловой базе. При возможности проверю на серверной.
В пользовательском режиме попробуйте зайти на форме в пункт Еще- Изменить форму и посмотрите, стоит ли галочка на "вывести список". Здесь кадровый перевод для примера, настраивается в остальных объектах похожим образом, просто раскройте все группы в поисках нужного поля.
(3) Я веду речь о стандартной команде. Прикол в том, что в пользовательском режиме ее нет, ни в "еще" и нигде. Она есть в конфигураторе, на всех формах списка созданных в расширении объектов. При переходе в пользовательский режим исчезает напрочь. Не может это быть глюком платформы?
(5) а на скриншоте "еще" от формы или от табличной части? "Вывести список" к командной панели ТЧ относится
(16) на скриншоте "еще" от формы. Там стоит "автозаполнение". В таблице в составе команд - тоже есть, но нет автозаполнения. А какая у вас платформа? 32 или 64-разрядная?
(18) А конфигурация на поддержке? У меня не дает запустить на 8.3.11. Режим совместимости 8.3.12 уже стоит.
(30) Так она такая же. Мне из формы списка надо в основном, чтоб списки справочников печатать и документов. Свою приделывать - так это к каждому новому объекту тогда придется.
(31) Кажется понял, наконец-то, о чем вы. Т.е. вывод в список в табличных частях у вас есть, надо "автоматом" его в команды формы?
(8) В составе команд она присутствует. На платформе 8.3.12 - все то же самое. Можно, конечно, прикрутить свою команду вывода списка, но ведь есть же стандартная.
(11) В расширении в форме списка справочника в свойствах динамического списка усказана основная таблица?
(45) Пробовала - не появляется. Где-то отрубается сама возможность печати списка. Перетаскивание из одного места в другое ничего не дают.
Сняла с поддержки, сделала тестовый справочник, интегрированный в конфу - там есть. В расширении по-прежнему нет. Чего-то в расширении не хватает! Если вообще оно там предусмотрено.
Я еще раз повторю вопрос: у кого-то печатается форма списка справочника или документа в расширении (своего, не заимствованного!) на платформе 8.3.12 или 8.3.13? Интересует стандартная команда "Вывести список. "
У меня режим совместимости 8.3.12. Но сдается мне, что когда-то все было нормально. Значит, я еще в твердой памяти. Пробовала на платформе 8.3.13.1513 и 8.3.13.1644 - не помогает. 8.3.13.1576 а такого нет в доступных. Где брали?
(54) Это тестовый релиз был, сейчас не доступен. Но у нас эта проблема исправилась еще на какой-то из 12х версий и больше не появлялась
(54) Вы пробовали только запускать данное расширение на старой платформе? Если да, попробуйте на старой платформе добавить в новое расширение справочник, возможно глюк еще на этапе добавления объекта в расширение
Если говорить об обычных формах, то можно прицепить командную панель табличной части, а там уже будет команда вывести список, и командную панель можно и скрыть
Добрый день!
Вопрос с командой "Вывести список" решили? Если да, то как?
У меня стоит платформа 8.3.13.1513, в своем справочнике список тоже не выводится
Тоже сломал голову и в итоге создал форму обработки с таблицей в конфигураторе, а дописывал и ломал ее в расширении т.к. в расширении жили реквизиты нужные для работы.
Выводится просто замечательно, с учетом отборов, оформления, иерархии и группировок, настроенных в списке. Лучше даже, чем было "Вывести список"
Также ошибка. При переходе на 3.12 перестал работать вывести список в элементах расширения. Есть решение кроме программной кнопки?
(79) В серверном варианте той же самой! базы не помогло. Может помогла бы загрузка-выгрузка, чего пока проверить не могу. Если не трудно, уточните, как вы попадаете в эти свойства кнопки? Посмотрю, что у меня стоит.
(81) Направление, видимо, верное, но не могу понять, какая конкретно последовательность действий. Обратите внимание на отображение роли Администратор и списка ее ролей на закладке "Прочие". Они разные. А ведь это база и ее копия.
Установить расширение, добавить роль из расширения пользователю.
В роли из расширения включить все права.
Вроде это все.
(84) Как раз в копии все работает. Но прикол еще и в том, что у всех пользователей, у которых есть права на расширение - все работает правильно. Я мучилась в общем-то зря. Осталось непонятным, как дать эти права админу.
(85)Напомню на всякий случай, если в расширении нет ролей, объекты расширения доступны всем.
Если роли есть, объекты доступны только тем, кому назначены роли.
(86)При переходе на 8.3.14 кнопка "Вывести список. " появляется сама собой. И в конфигурации появляется свойство "Основные роли". Если потом запустить на 8.3.13 то кнопка не исчезает. Так что можно интерпретировать это как исправленный глюк или добавленную возможность. Но в любом случае спасибо. Мысль была верная.
А говорят чудес не бывает )))
Сегодня боролся с командой "Вывести список" для таблицы значений на захваченной форме в расширении.
Новое расширение, захват формы, создаю таблицу значений, кидаю на форму, в ком. панели отключаю автозаполнение и оставляю только "Вывести список". В Конфигураторе - все ОК, захожу в 1С - пусто, ничегошеньки нет.
Ладно, делаю манипуляции с ролями из (81), захожу в 1С - пусто.
Удаляю старую тз, делаю все заново, захожу в 1С - пусто.
Выхожу из 1С, выхожу из конфигуратора . из кабинета . из офиса . гуляю 20 мин.
Захожу еще раз в конфигуратор, опять удаляю старую тз, еще раз все делаю заново, захожу в 1С . и . и . и все появилось!!
Сделал вывод, что когда себе назначил роль из расширения - надо перезайти в конфигуратор, чтобы эти права учитывались, и только потом создавать объекты.
Что-то тут разрабы начудили .
Всегда считал что в конфигураторе я "хозяин", а права - это для пользователей когда они заходят в 1С . а вот и нет теперь получается ))
Список значений — это программная коллекция (объект встроенного языка), содержащая пронумерованную последовательность элементов. Каждому элементу присваивается последовательный целочисленный номер — индекс, начинающийся с нуля. По индексу можно получить или установить элемент списка значений.
Элемент списка значений
Каждый элемент списка является программным объектом ЭлементСпискаЗначений встроенного языка и содержит следующие свойства:
- Значение (Произвольный тип) — хранимое значение произвольного типа
- Представление (Строка) — представление элемента списка для пользователя
- Пометка (Булево) — значение пометки элемента в списке
- Картинка (Картинка) — картинка элемента списка для пользователя
Создание списка значений
Создание пустого списка значений выполняется с помощью оператора Новый:
Для добавления элементов в список значений используется одноименный метод СписокЗначений.Добавить():
Каждый новый элемент помещается в конец списка. Для доступа к отдельным элементам списка значений применяется операция разыменования: указывается имя переменной, объявленной как список значений, а затем, в квадратных скобках, указывается индекс элемента. Свойства полученного элемента можно использовать как слева от оператора присваивания:
Так и справа: в выражениях и в качестве параметров процедур и функций:
Границы списка значений
Как было сказано выше, левая граница списка значений постоянна и всегда равно нулю (0). Верхняя граница напрямую связана с количеством элементов в списке значений. Получить ее можно с использованием метода СписокЗначений.Количество() с последующим вычитанием 1.
Давайте рассмотрим распространенные операции со списком значений.
Перебор элементов списка значений
Для перебора (обхода) всех элементов списка значений обычно используется оператор цикла Для :
Либо оператор цикла Для Каждого :
Второй способ больше подходит для ситуации, когда нужно только последовательно перебрать все значения списка. Его использование повышает «читабельность кода».
Поиск в списке значений
Для поиска значений в списке предназначен метод СписокЗначений.НайтиПоЗначению(). Он возвращает найденный элемент списка значений, либо Неопределено , если указанного значения в списке нет.
Сортировка списка значений
Сортировка элементов в списке значений может производиться двумя способами:
Проверить тип реквизита и тип значения, которое хотим присвоить.
2. Форма открывается с признаком изменения (со звездочкой *).
В процедуре перед открытием формы устанавливается значение реквизита объекта, содержащегося в форме – проверить необходимость этого. В обычных формах значит, что используется переменная, имя которой совпадает с именем реквизита объекта формы, имя переменной нужно изменить.
3. В конфигураторе в таблицу на форме была добавлена колонка, а в пользовательском режиме колонка не появилась.
Нужно очистить сохраненные настройки формы у пользователя: Администрирование – Настройки пользователей и прав – Персональные настройки пользователей – Настройки пользователей.
4. В форме списка объекта конфигурации используется Динамический список с установленным свойством Произвольный запрос, но на форме не появляются кнопки Добавить, Изменить, Редактировать и т.д.
В свойстве динамического списка Настройка списка не указана Основная таблица
Рис. 1. Настройка динамического списка
5. Не сохраняются данные после заполнения таблицы в форме.
Если заполнение происходит по команде (по кнопке), то у команды заполнения нужно проверить свойство Изменяет сохраняемые данные - должно быть установлено. Если свойство не установлено, то после заполнения таблицы у формы не появляется признак изменения (звездочка *) и при закрытии форма закрывается без сохранения данных.
6. При попытке открыть список документов/справочника через Все функции не появляется таблица со списком документов/элементов справочника и по кнопке Создать ничего не происходит (рис. 2).
Подписывайтесь на канал
«Полезный 1С»
В телеграм канале — наш практический опыт, бизнес-кейсы и способы повышения эффективности компании, которые мы опробовали внутри группы Neti.
Продолжаем наполнять рубрику ‘Джуниор 1с’ полезными заметками. Сегодня у нас так на рассмотрении такое простое свойства элемента формы как ‘Связи параметров выбора’ (ChoiceParameterLinks), которое облегчает жизнь пользователю при выборе значений реквизита формы.
По простому – это свойство отвечает за формирование списка элементов в форме выбора по установленном отбору. Рассмотрим простой пример.
У нас есть справочник [Футбольные клубы] и у него есть реквизит [Страна]:
Пользователь хочет, что бы при выборе футбольного клуба в обработке, появлялся только список из клубов, указанной ранее страны:
Делается это очень просто через свойство элемента формы ‘Клуб’ / ‘Связи параметров выбора’:
Программа нам уже сама подсказывает, через какие поля мы сможем сделать нужный нам отбор. В данном примере делаем отбор через реквизит формы ‘Страна’:
По-простому: указываем какой отбор мы будем применять в списке выбора и реквизит, откуда отбор возьмет необходимое значение. Параметр ‘Режим изменения связанного значения’ определяет, будет ли при изменении реквизита отбора ‘Страна’ очищаться значение в реквизите ‘Клуб’.
Так же стоит заметить что здесь мы можем задать одновременно несколько необходимых нам отборов!
Если конфигурация типовая и не хочется сильно напрягаться с обновлением форм, то эти связи параметров выбора можно сделать и программно:
а еще web-программист, разработчик android и просто толковый ИТшник 😉
Если на форме два поля, один из которых подчинён другому по структуре данных, то часто бывает необходимо ограничить ввод данных по владельцу. Например, есть поле Партнёр и Вид цены поставщика.
Для того, чтобы в поле Вид цены поставщика автоматически выбирались только данные выбранного Партнера, необходимо в свойстве СвязиПараметровВыбора поля Вид цены поставщика сделать настройку Отбор.Владелец(Объект.Партнер).
Проблема в том, что это не совсем очевидно. Ведь в дереве свойств конфигуратора в это поле нельзя ввести данные, это нужно делать через вспомогательную форму.
Связи параметров выбора
Теперь необходимо в колонке Имя вместо Партнер ввести текст Отбор.Владелец. Задача выполнена!
Подчиненные владельцу реквизиты — элементы справочников, которые должны выбираться пользователем в контексте элемента-владельца. В тестовом примере у нас будут справочники «Контрагенты», «Договора» и документ «ПриходнаяНакладная» с реквизитами «Контрагент» и «Договор».
Cправочник «Договора» подчинен справочнику «Контрагенты»:
Для документа «ПриходнаяНакладная» в свойствах реквизита «Договор» выставляем «Связи параметров выбора: Отбор.Владелец(Контрагент)»
Для этого по нажатию […] выбираем в списке «Связи параметров выбора» реквизит «Контрагент»:
В таблице Имя-Реквизит-Режим изменения должно стоять: Отбор.Владелец — Контрагент — Очищать
Если в поле «Имя» стоит что-то другое, нужный вариант можно выбрать из выпадающего списка:
Читайте также: