1с установить пометки в табличной части
В отчете есть реквизит таблица значений, на форме табличное поле, как реализовать пометки (как список с пометками)?
спасибо я понял, только смущает одна мелочь, т.е. все равно работать будет так как выбор булевого значения, отображение только идет флажком, я правильно понял?
Ну в семерке разруливалось с помощью пиктограмки и просто тупо по двойному клику менялось значение, и не надо выбирать ложь истина, просто кликаешь и все.
Теперь другая проблема меняю значение в соотв. ячейке и во всех строках ставится флаг соотвтственно той ячейке которую я поменял.
что это?? здесь достаточно только ОформлениеСтроки.Ячейки[0].УстановитьФлажок(данныеСтроки.ТвояКолонка);
А зачем там вообще ПриВыводеСтроки? Удали колонку в ТП и создай заново. БЕЗ ЭлементаУправления. Данные - вытереть. ДанныеФлажка - заполнить. РежимРедактирования - Непосредственно. - очень познавательно.
Такая же проблема, помогите пож-та. Есть табличное поле, не связанное с табличной частью документа. Часть колонок формируется динамически. Колонка "Соответствует" занесена изначально, сделано все, как в , с той лишь разницей, что в списке свойств нет свойства "Режим редактирования". И не выходит, появляется только ложь/истина.Полдня уже мучаюсь((((
Стоит: Имя : Соответствует ДанныеФлажка: Соответствует Спасибо : режим поставила непосредственно Элемент управления удалила перед тем как записать данные флажка. Все равно идет истина/ложь Может стоит заполнить процедуру ПриВыводе строки?
Еще раз: Из ссылки : НЕА123 3. в свойствах данные убери; 4. в свойствах данные флажка укажи имя; 5. тыкни мышом куда-нибудь(на другую колонку) 6. тыкни мышом на созданную колонку, в свойствах не должно быть ЭУ и типа ЗЫ. В 15м релизе вроде уже не глючит. ЭлементУправления удаляется сам корректно. По крайней мере я добиться "истина/ложь" уже не смог.
У меня табличная часть и табличное поле названы даже по разному, потому что формируются не построчно, например, как в документе Установка цен.
Есть документ, в нем табличная часть: анализы и есть табличное поле на форме: испытания, которое представляет собой сводную таблицу. Т.е. одной строке в табличном поле, соответствует несколько строк в табличной части документа.
Тыкни на табличное поле - открой свойства и посмотри, что там написано в Данные: имя табличной части или имя чегой-тоТамеще(переменная, реквизитформы или что? и какой там тип) ?
три состояния полезны если у вас в табличной части документа . дерево. мне надоели громадные табличные части в типовом исполнении и я прикрутил деревянные табличные части в документы. Удобно когда в строках однородные данные по популярным полям, как то: контрагаент, номенклатура, физлица и пр. в узлах итоги с суммовых колонках, в разворотах данные. Итого документ с 1000 строк - при открытии может содержать очень малое число узлов, причем не факт, что каждый откроют. когда платформо-разработчики дойдут до мысли, что многострочная часть в виде плоской таблицы это не только неудобно, но и не экономно)
ну не получается вот так, уже раз 40 делала, колонка называется "Соответствует", я ее изначально создаю, по этой колонке нигде ничего не создается
СоздатьКолонки - метод табличного поля. Если вызовешь - перетрет что в конфигураторе настроила. Так что проверить бы надо. Попробуй создать новую колонку с другим(любым) именем и посмотри что получится.
да просто строковую колонку объяви с длиной 0 и пропиши в "данные" имя булевой колонки, которая реально будет инициализироваться Ложь/Истина, причем, саму булеву сделай невидимой. Ну и в эту строковую в свойства Колонка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
Это всего лишь небольшой пример, как можно реализовать дружелюбный интерфейс пометки.
На форме надо разместить:
- Команды: "Таблица_Отмена" и "Таблица_Пометить", соответственно командам надо назначить действие: "Таблица_Отмена" и "Таблица_Пометить".
- Разместить кнопки на форме.
*Описывать этот процесс не стал, это вы и сами должны уметь делать.
Код протестирован на версии платформы: 1С:Предприятие 8.3 (8.3.15.1830)
Специальные предложения
Всем привет! Давно слежу за этим талантливым программистом, все его разработки во истину уникальны, код оригинален и свеж, нахожу много нового, спасибо гуру 1с.
(1) Спасибо. Незнакомец, мне так лестно читать такой чудесный отзыв.
А так, код не оригинален, просто когда надо такое добавить в обработку, лениво вспоминать, хочется просто заглянуть на Инфорстарт и взять это.
.
Ну и для людей полезно, вдруг что углядят себе полезное. Люди, пользуйтесь.
(2) Написать комментарии в коде хотя бы для приличия. Получилось не особо оно дружественно к программисту.
Иногда еще бывает полезно привести более подробный пример использования.
Мне не понравилось.
Кстати, правила хорошего тона обычно подразумевают объединение флажка и "ведущей" колонки в группу с типом объединения "в ячейке", а не вывод разными колонками.
А если подобные азы "лениво вспоминать", то просто, видимо, практики маловато. Это пишется за пару минут на полном автоматизме.
Автор, вы б для разнообразия хоть чуток посложней задачку бы взяли. Например, отметку в дереве с включением и выключением флажков во вложенных ветках. Хотя б приличнее смотрелось бы, чем эта детская песочница.
Вообще, за одно только "ТаблОбъект.Выгрузить();" эту, простихосспади, "публикацию", уже надо люто заминусить.
(7) А вы, мил-человек, вообще представляете, какая будет нагрузка на сеть, кэш и сервер приложения, если ради такой ерунды неслабые объёмы гонять туда-сюда? Вы считаете нормальным такое выкладывать и рекомендовать к использованию? Ну-ну) На уровне автоматизации ларька оно прокатит, на промышленном - ни разу.
И, чисто так к вашему сведению, в таблице значений "ЗаполнитьЗначения" реализована по сути тем же самым циклом.
(9) Успокоиться не можешь.
Никакой нагрузки не будет.
Люди не работают с миллонном строк.
Вашему боту ненужны мои галочки.
П.с. и сударь поймите сперва для чего этот код размещен ..
О да, великий гуру, вам виднее за все случаи жизни)
. у меня больше нет вопросов. Мне же больше заработка, потом после всяких горе-разработчиков оптимизацию делать) Не впервые)
(11) да автор сей публикации видимо не в курсе как даже мелкие объемы данных могут сожрать производительноть системы, тем более если это будет типа универсальный алгоритм и будет он везде юзаться по всей конфигурации, а это значит это будут и 10 строк и тысячи, а еще это помножить на две сотни+ юзеров.
Помнится приходилось фирму 1С учить уму разуму, при расчете автоматических скидок в тех же заказах клиентов 1С ERP, где для того чтобы получить пустую таблицу значений с колонками 1С делали "Выгрузить" всей табличной части и потом делали вызов "СкопироватьКолонки", ну посоветовал им хотя бы так делать "Выгрузить(Новый Массив)" (то есть получить таблицу без строк, так как массив строк пуст), а уже потом "СкопироватьКолонки"))) деталей не помню, но суть была такова, что в документах реализации тоже идет расчет скидок, а заказов в одной реализации была туча, и просадка была по производительности ой как значительна)))
ну про косяк с теми же автоскидками, где в документе реализации получалось свыше 99999 строк в таблице скидок я помолчу))) там супер сложная зависимость была, тоже ловил причину ошибки, описывал её, отписывался в суппорт, исправили
Данный кусочек кода не для всех видов наборов данных, а для организации Дружественного интерфейса.
Не надо в нем видеть абсолютное, Абсолютное вы должны достигать не по средством копирования кода, а приходить к этому самостоятельно, улучшая свой код.
ТаблицаФормы (FormTable)
ПроверитьСтроку (CheckRow)
Синтаксис:
ПроверитьСтроку()
Параметры:
(обязательный)
Тип: Произвольный.
Строка таблицы. Тип параметра зависит от типа редактируемого значения.
Возвращаемое значение:
Тип: Булево.
Описание:
Проверяет, соответствует ли строка, установленному в таблице отбору.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).
Для условного оформления в списках и формах
в обычном приложении использовалось событие ПриПолученииДанных() или ПриВыводеСтроки(),
где через "ячейку" в зависимости от данных строки устанавливали нужное свойство.
С приходом нового режима работы платформы возможности условного оформления расширились.
В данной статье разберем основные аспекты.
1. Условное оформление в упр. формах настраивается как в режиме конфигуратора, так и в режиме пользовательском.
- в конфигураторе условное оформление существует на уровне самой формы (как в формах объекта, так и списка):
В формах списка условное оформление существует и на уровне самого динамического списка:
Добавлять элементы условного оформления можно не прибегая к программированию, но конечно есть возможность и программного добавления элементов, который мы рассмотрим чуть ниже.
- в пользовательском режиме настройки оформления доступны для динамических списков, все настройки оформления в форме документа необходимо выполнять в режиме конфигуратора. Для настройки переходим во все действия списка и выбираем настроить список:
2. Программная работа с условным оформлением (УО).
Начнем с того, что работа с УО доступна только:
Для Добавления элемента УО в списке нужно обратится к списку и добавить элемент УО:
ЭлементОформления = Список . УсловноеОформление . Элементы . Добавить ();
Для УО формы добавление происходит через прикладной объект УсловноеОформление:
ЭлементУсловногоОформления = УсловноеОформление . Элементы . Добавить ();
Далее алгоритмы будут похожими. Для УО нам нужно задать условие отбора, задать значение свойства УО и добавить оформляемые поля.
// Создаем условие отбора
ЭлементОтбора = ЭлементОформления . Отбор . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( ИмяПоля ); // имя поля
ЭлементОтбора . ВидСравнения = ВидСравненияКомпоновкиДанных . Равно ; // либо задаем свой
//**** Значение для отбора
ЭлементОтбора . ПравоеЗначение = ЗначениеДляОтбора ;
// следует заметить что правым значением может выступать ПолеКомпоновкиДанных формы или списка
ЭлементОтбора . ПравоеЗначение = Новый ПолеКомпоновкиДанных ( ИмяПоля );
//****
ЭлементОтбора . Использование = Истина;
Значение свойства УО:
// Установка значения элемента УО
// Возможно обращение как по индексу так и установка через метод
//1.
Элемент = ЭлементОформления . Оформление . Элементы [ 0 ];
Элемент . Значение = Цвет ;
//2.
ЭлементОформления . Оформление . УстановитьЗначениеПараметра ( "ЦветФона" , WebЦвета . СеребристоСерый );
Элемент . Использование = Истина;
Добавим поля оформления, если ничего не добавлять, то система применит оформления ко всей строке:
// Создаем поля оформления
ПолеОформления = ЭлементОформления . Поля . Элементы . Добавить ();
ПолеОформления . Поле = Новый ПолеКомпоновкиДанных ( ПолеДляОформления );
ПолеОформления . Использование = Истина;
В качестве ИменПолей нужно передавать строковое представление ИМЕНИ реквизита.
3. Все настройки УО хранятся для каждого пользователя отдельно.
4. Пример.
Очень часто сталкивался с проблемой настройки свойства АвтоОтметкаНезаполненного в ТЧ по условию . В обычных формах все решалось в процедурах упомянутых выше, а здесь таких событий нет. А решается это все конечно при помощи УО. Заходим в форме объекта в Условное оформление и видим свойство - Отметка незаполненного. Ну а дальше настроииваем как надо.
Выводы:
- Простое условное оформление пользователь может настроить и сам, если его научить :). Это будет сложно конечно, но возможно.
- УО в табличной части можно задать в конфигураторе через УО формы.
- Программная работа с УО требуется в случае сложного условия отбора, в таких случаях лучше создавать процедуру в общем модуле использования в различных документах и списках.
ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать).
Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.
Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.
Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.
Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений , либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.
Создание таблицы значений
Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый :
Колонки таблицы значений
Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:
- Имя — идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);
- Заголовок — представление колонки в диалогах (может содержать произвольные символы);
- ТипЗначения — тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;
- Ширина — ширина колонки в диалогах;
Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений . Для добавления новой колонки используется метод Добавить():
Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():
Перебор колонок выполняется следующим образом:
Для удаления колонки используется метод Удалить():
Свойства колонки таблицы значений
Имя | Тип | Описание |
---|---|---|
Имя | Строка | символьный идентификатор колонки, по которому к ней можно обращаться из кода |
Заголовок | Строка | строковое представление колонки на форме |
ТипЗначения | ОписаниеТипов | свойство органичивает пространство доступных значений, которые можно указать в данной колонке |
Ширина | Число | ширина колонки на форме (выражается в количестве символов) |
Методы коллекции колонок таблицы значений
Вставить() | Вставляет новую колонку в указанную позицию коллекции |
Добавить() | Добавляет новую колонку в конец коллекции |
Количество() | Возвращает количество колонок в коллекции |
Найти() | Ищет колонку в коллекции по имени |
Очистить() | Удаляет все колонки из коллекции |
Сдвинуть() | Сдвигает колонку влево или вправо |
Удалить() | Удаляет колонку из коллекции |
Строки таблицы значений
С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.
Добавление и удаление строк
Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений . Метод возвращает объект СтрокаТаблицыЗначений , с которым доступны дальнейшие манипуляции:
И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:
Обратите внимание, что каждая СтрокаТаблицыЗначений ссылается на таблицу значений с помощью метода Владелец():
Для удаления строки используется метод Удалить() объекта ТаблицаЗначений . Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:
Перебор строк таблицы значений
Для перебора строк удобнее всего использовать оператор цикла Для Каждого . В редких случаях оправдано применение цикла Для :
Поиск строк
Все методы таблицы значений:
Вставить() | Вставляет строку на указанное место |
ВыбратьСтроку() | Позволяет интерактивно выбрать строку в диалоговом окне |
ВыгрузитьКолонку() | Выгружает значения ячеек указанной колонки в массив значений |
Добавить() | Добавлет новую строку в таблицу значений |
ЗагрузитьКолонку() | Загружает значения в ячейки указанной колонки из массива |
ЗаполнитьЗначения() | Заполняет ячейки указанных колонок определенным значением |
Индекс() | Возвращает индекс строки таблицы значений |
Итог() | Возвращает просуммированный итог по колонке таблицы значений |
Количество() | Возвращает количество строк в таблице значений |
Найти() | Выполняет поиск строки по значению |
НайтиСтроки() | Выполняет поиск строк по указанным параметрам |
Очистить() | Очищает строки таблицы значений |
Получить() | Возвращает строку по ее индексу |
Свернуть() | Выполняет сжатие строк и колонок таблицы значений |
Сдвинуть() | Сдвигает строку вверх или вниз по таблице |
Скопировать() | Создает новую таблицу значений копированием текущей |
СкопироватьКолонки() | Создает новую пустую таблицу значений путем копирования колонок текущей таблицы |
Сортировать() | Выполняет сортировку строк таблицы значений по указанным колонкам |
Удалить() | Удаляет строку таблицы значений |
Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:
02 февраля 2017
1С галочки для табличного поля
Вы разрабатываете некую форму, на ней у вас есть табличное поле привязанное к списку какого-либо справочника. И вы хотите реализовать механизм отметки нужных строк галочками.
Делается очень просто! Для этого вы добавляете новую колонку, через контекстное меню.
Называете ее "Отметка". Выбираете элемент управления Флажок.
Затем создаете реквизит ОтмеченныеСтроки с типом СписокЗначений, в нем будем хранить какие строки отметили.
У табличного поля задействуем два события, первое ПриВыводеСтроки, сробатывает всякий раз, когда система выводит строку табличного поля и ПриИзмененииФлажка, когда пользователь изменяет состояние флажка в колонках табличного поля.
Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.Отметка.ОтображатьФлажок = Истина;
Если ОтмеченныеСтроки.НайтиПоЗначению(ДанныеСтроки.Ссылка) = Неопределено Тогда
ОформлениеСтроки.Ячейки.Отметка.Флажок = Ложь;
Иначе
ОформлениеСтроки.Ячейки.Отметка.Флажок = Истина;
КонецЕсли;
КонецПроцедуры
Процедура ТабличноеПоле2ПриИзмененииФлажка(Элемент, Колонка)
Если Колонка.Имя = "Отметка" Тогда
НайденныйЭлемент = ОтмеченныеСтроки .НайтиПоЗначению(Элемент.ТекущаяСтрока);
Если НайденныйЭлемент = Неопределено Тогда
ОтмеченныеПользователи.Добавить(Элемент.ТекущаяСтрока);
Иначе
ОтмеченныеПользователи.Удалить(НайденныйЭлемент);
КонецЕсли;
КонецЕсли; КонецПроцедуры
Обрабатываем только колонку Отметка. Если в списке значений уже есть строка, по которой кликнули, то ее удаляем, это означает снятие галочки. И наоборот, если текущей строки нет - добавляем.
В дополнение было бы весьма удобно реализовать механизмы отметить и снять все галочки! Располагаете на форме командную панель, на ней две кнопки. По нажатию на одной выполняете процедуру:
Процедура КоманднаяПанельДействиеОтметитьВсе(Кнопка)
Выборка = Справочники.Пользователи.Выбрать();
Пока Выборка.Следующий() цикл
ОтмеченныеСтроки.Добавить(Выборка.Ссылка);
КонецЦикла;
ЭтаФорма.Обновить();
КонецПроцедуры
Здесь в цикле перебираются все записи (в данном случае это справочник пользователи, поэтому перебираем выборку) и добавляются с список значений ОтмеченныеСтроки. После выполняется перерисовка формы.
Процедура КоманднаяПанельДействиеСнятьВсе(Кнопка)
ОтмеченныеПользователи.Очистить();
ЭтаФорма.Обновить();
КонецПроцедуры
В итоге у вас получится вот такая табличная часть с дополнительной колонкой Отметка, где выбираются нужные строки, они будут попадать в список значений ОтмеченныеСтроки. И в дальнейшем, перебирая ОтмеченныеСтроки сможете производить с ними какие либо действия! Над таблицей есть две кнопки, установить все галочки и снять!
Читайте также: