Динамически добавить колонки в табличную часть 1с
Особенности работы табличного поля с колонками динамических списков
Динамическими списками называются списки , использующие при обращении к базе данных механизм динамической выборки . Особенностью механизма динамической выборки является то , что данные считываются не полностью , а блоками , уменьшая время загрузки всего списка и размер отводимой для него памяти . Примерами динамических списков являются списки справочников , документов , регистров .
При считывании блока данных динамический список выполняет обращение к базе данных . Табличное поле для уменьшения объема выбираемых данных управляет набором полей , считываемых из базы данных . Считываются только те поля таблицы , которые связаны с соответствующими видимыми колонками табличного поля , поля, по которым выполняется упорядочивание, и поля , используемые табличным полем для отображения картинки и контроля удаления ( поля ЭтоГруппа , ПометкаУдаления ).
Отметим следующие особенности работы табличного поля с колонками динамических списков :
- При создании табличное поле инициализирует связанный с ним динамический список набором видимых колонок . Всем колонкам , добавляемым табличным полем, устанавливается свойство колонки списка АвтоУдаление = Истина .
- Специальная форма " Настройка списка ", открываемая через контекстное меню или через меню командной панели , позволяет управлять набором видимых колонок . После установки видимости колонок табличное поле установит новый набор колонок в связанный с ним динамический список , при этом колонки динамического списка, не видимые в табличном поле и у которых свойство АвтоУдаление = Истина, будут удалены из списка .
Следовательно , связанный с табличным полем динамический список содержит в себе только те поля базы данных , которые связаны с видимыми колонками табличного поля , а также поля, необходимые для отображения картинки и других служебных целей .
Иногда может потребоваться обратиться к колонкам динамического списка , не связанными с видидимыми только колонки Номенклатура и Сумма ( будет заполняться при обработке события табличного поля ПриВыводеСтроки ). Так как по умолчанию табличное поле устанавливает в динамический список только видимые колонки , то динамический список не будет содержать колонки Количество и Цена . Следовательно , при обработке события ПриВыводеСтроки возникнет ошибка времени выполнения . Для решения этой проблемы предлагаются следующие способы :
в нем прописал
Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "itilprofИнциденты.КодЗавершения,", "itilprofИнциденты.КодЗавершения, itilprofИнциденты.ЧисловойПриоритет, itilprofИнциденты.КрайнийСрок, ");
НоваяКолонка = Элементы.Вставить("ЧисловойПриоритет", Тип("ПолеФормы"), Элементы.Список, Элементы.ТекущийИсполнитель);
НоваяКолонка.ПутьКДанным = "Список.ЧисловойПриоритет";
НоваяКолонка.Заголовок = "Приоритет(Ч)";
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка = Элементы.Вставить("КрайнийСрок", Тип("ПолеФормы"), Элементы.Список, Элементы.ТекущийИсполнитель);
НоваяКолонка.ПутьКДанным = "Список.КрайнийСрок";
НоваяКолонка.Заголовок = "Крайний срок";
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
Колонки появились. Но в них не отображаются значения! Отбор меж тем работает. Добавил реквизиты в расширение - не помогло. Что я делаю не так?!
(0) запрос измени в расширении - в данных динамического списка нет твоих реквизитовА что смотреть? Строки в СписокПриПолученииДанныхНаСервереПосле посмотрел, там нет этих данных :(
(4) Не, ошибся - есть там.
Строки[45].Значение.Данные.ЧисловойПриоритет 77 Число
3 варианта. А в статьях что в инете нашел все было просто, так как я и написал изначально :( Буду пробовать сейчас
(14) какие три варианта?
(10)+(12)+(14) это один код по кусочкам - просто получилось так
(0) это из БСП если не хочешь так то попробуй вызвать код из БСП
Ну и "ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СтруктураПараметров);" конечно жеМожет с компоновщиком что то сделать надо?
Коллеги! неужели никто такого не делал? Не поверю никак!
(23) похоже это не поле ввода, а что-то другое. Почему влруг поле ввода?
(28) ну а почему отбор работает если не поменял текст запроса?
может с компоновщиком динамического запроса что нибудь надо сделать?
(31) Пробовал - не помогло. И потом я подозреваю что это ограничит возможность сортировки списка.
(32) Не парь мозг СтрЗаменить. Ты все равно затащил форму в расширение, сделай все по-человечески.
Во-первых добавление (заимствование) формы в расширение может привести к некоторым нежелательным эффектам, которые могут возникнуть после обновления конфигурации. Приведем немного теории.
Платформа использует сразу три формы:
Данные формы взаимодействуют между собой и в результате такого взаимодействия получается Результирующая форма, которую видит пользователь. В ходе взаимодействия указанных форм может возникнуть нежелательная ситуация, например, мы доработали форму в расширении, потом в новом релизе добавились реквизиты и они на форме не отображаются! Более подробно тут.
Во-вторых добавление формы в расширение привело бы к автоматическому добавлению всех реквизитов этого объекта и объектов метаданных (соответствующих ссылочным типам реквизитов объекта) в данное расширение, что загромождало бы само расширение и также не желательно.
Поэтому возникла задача программного создания элемента формы для добавленного реквизита в самом расширении, этому и посвящена данная публикация."
вот поэтому я должен (ТЗ такое) добавить в расширении в форму программно.
Я уже писал об общем принципе программного добавления элементов на управляемую форму, теперь напишу конкретно о том, как добавить колонку табличной части или таблицы значений.
Выглядит это приблизительно так:
нРеквизиты.Добавить(Новый РеквизитФормы("Тест3", Новый ОписаниеТипов("Строка"), "Объект.Тест", "Тест3", Истина)); нЭлемент = Элементы.Добавить("Тест3", Тип("ПолеФормы"), Элементы.Тест);Следующие три строки добавляют саму колонку на форму.
На этом все, надеюсь данная статья Вам помогла.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
(оценок: 13, средняя оценка: 4,46 из 5)Спасибо, за подсказку!
А как сделать эту колонку в табличной части второй по порядку?
Переместить(, , )
вот как-то так..
Элементы.Переместить(нЭлемент,Элементы.Тест,Элементы.)
помогите пожалуйста я в 1с чайник это много сказано) 1С 7.7 бух. учет (7.70.307) в реестр документов нужно добавить колонку ИНН контрагента. Что нужно написать в таблице и в модуле?
Предлагаю добавить обработчик событий ПриИзменении
1С8 динамическое обновление базы на Sql
Раньше, когда юзал файловую версию - изменю че-нить мелкое в конфигураторе и не выгоняя юзверей.
Динамическое добавление колонок в отчет
Добрый день. Никак не могу сообразить, как собрать программно отчет, в котором динамически будут.
Динамическое добавление колонок
Помогите пожалуйста разобраться. Первая таблица добавляет колонку второй таблице, но колона не.
Конечно, можно сделать всё только строками (типа сложный ключ (P.S. теорию я нормально знаю)), но это будет не очень наглядно, заказчику не понравится, придётся переделывать, сроки жмут. Всё как обычно.
Друг мой, почему ты решил, что не реально? В модуле формы документа выполни следующий код:
Где: позиция - номер колонки, после которой будет добавлена нужнаяНаименование - Как колонка назовется
ТабличнаяЧасть1 - название твоей табличной части.
и посмотри, что произойдет.
Но я бы, всетки, на твоем месте, заставил заказчика пересмотреть ТЗ. А не пытался ему "понравиться" Ты профи в своем деле и к твоему мнению должны прислушиваться. А то на голову сядут ( В таком случае возникает 2 вопроса:
1) не могу вставить данные в добавленную колонку;
2) колонка при записи документа не сохраняется, а это критично в моём случае.
1) после добавления колонки установи ей элемент управления, например:
НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
проверь свойства к0лонки ТолькоПросмотр и Доступность
поковыряйся с0 свойствами самого поля ввода НоваяКолонка.ЭлементУправления
2) и не сохраницц0. иб0 состав реквизитов меняецц0 только в режиме Конфигуратора.
вариантЪ : добавь реквизит ХранилищеЗначения и загоняй в нег0 при записи ТЗ, являющуюся ист0чником данных для Таб. поля формы.
Контейнер = Новый ХранилищеЗначения(ТЗданныеФормы);
с00твеЦтвенно, ПриОткрытии вытаскивай обратн0.
ТекТаб = Контейнер.Получить();
ТЗданныеФормы = ТекТаб.Скопировать();
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
ЭлементыФормы.ТабличноеПоле.ОбновитьСтроки();
Как добавить произвольные колонки в динамический список?
В 1С Предприятии 8.2 формы списка объектов конфигурации построены с помощью динамического списка. Например, форма списка справочника Номенклатура содержит основной реквизит типа Динамический список , отображающий основную таблицу Справочник.Номенклатура и динамический список формируется путем запроса к этой таблице.
Однако бывает необходимо добавить произвольные колонки в динамический список. Рассмотрим эту ситуацию на примере отображения актуальной цены в списке справочника Номенклатура .
Эти данные мы можем получить из таблицы регистра сведений Цены.СрезПоследних . Следовательно поле Цена из этой таблицы нам нужно добавить в динамический список Список , который является основным реквизитом формы списка номенклатуры и служит источником данных для таблицы списка.
Создадим форму списка справочника Номенклатура и откроем палитру свойств основного реквизита формы Список . Установим флаг ПроизвольныйЗапрос и в строке Настройка списка нажмем Открыть .
В поле Запрос введем следующий текст запроса:
ВЫБРАТЬ
СправочникНоменклатура.Код,
СправочникНоменклатура.Наименование,
ЦеныСрезПоследних.Цена
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
ПО ЦеныСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка
Теперь перетащим поле Цена из окна реквизитов в окно элементов формы.
В результате мы получим список номенклатуры, выводящийся вместе с ее актуальной ценой.
Демонстрационный пример находится в каталоге 1CITS/EXE/FAQ/ПроизвольнаяКолонкаВДинамическомСписке.dt. Пример выполнен на версии платформы 8.2.9.356.
Читайте также: