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