1с динамический список открыть значение колонки

Особенности работы табличного поля с колонками динамических списков

Динамическими списками называются списки , использующие при обращении к базе данных механизм динамической выборки . Особенностью механизма динамической выборки является то , что данные считываются не полностью , а блоками , уменьшая время загрузки всего списка и размер отводимой для него памяти . Примерами динамических списков являются списки справочников , документов , регистров .

При считывании блока данных динамический список выполняет обращение к базе данных . Табличное поле для уменьшения объема выбираемых данных управляет набором полей , считываемых из базы данных . Считываются только те поля таблицы , которые связаны с соответствующими видимыми колонками табличного поля , поля, по которым выполняется упорядочивание, и поля , используемые табличным полем для отображения картинки и контроля удаления ( поля ЭтоГруппа , ПометкаУдаления ).

Отметим следующие особенности работы табличного поля с колонками динамических списков :

  • При создании табличное поле инициализирует связанный с ним динамический список набором видимых колонок . Всем колонкам , добавляемым табличным полем, устанавливается свойство колонки списка АвтоУдаление = Истина .
  • Специальная форма » Настройка списка «, открываемая через контекстное меню или через меню командной панели , позволяет управлять набором видимых колонок . После установки видимости колонок табличное поле установит новый набор колонок в связанный с ним динамический список , при этом колонки динамического списка, не видимые в табличном поле и у которых свойство АвтоУдаление = Истина, будут удалены из списка .

Следовательно , связанный с табличным полем динамический список содержит в себе только те поля базы данных , которые связаны с видимыми колонками табличного поля , а также поля, необходимые для отображения картинки и других служебных целей .

Иногда может потребоваться обратиться к колонкам динамического списка , не связанными с видидимыми только колонки Номенклатура и Сумма ( будет заполняться при обработке события табличного поля ПриВыводеСтроки ). Так как по умолчанию табличное поле устанавливает в динамический список только видимые колонки , то динамический список не будет содержать колонки Количество и Цена . Следовательно , при обработке события ПриВыводеСтроки возникнет ошибка времени выполнения . Для решения этой проблемы предлагаются следующие способы :

  • Если колонки не являются видимыми или не существуют в динамическом списке , то при обработке события формы ПриОткрытии необходимо добавить их в динамический список и запретить им удаление :

Копировать в буфер обмена

  • Можно необходимые колонки сделать видимыми и запретить им изменять видимость . Для это необходимо соответствующим колонкам в палитре свойств установить свойство » Видимость » и сбросить свойство » Изменять видимость «.

Источник

Работа табличного поля с динамическими списками


Особенности работы полосы прокрутки

Табличное поле может отображать два типа данных : динамические списки и статические данные . Особенностью динамических списков является использование при обращении к базе данных механизма динамической выборки , при которой данные считываются не полностью , а блоками . Особенностью статических данных является хранение в памяти всех данных . Примерами динамических списков являются списки справочников , документов , регистров , а примерами статических данных — таблица значений , дерево значений , табличная часть , наборы записей .

При отображении динамических списков табличное поле особым образом отображает полосу прокрутки — в ней бегунок отображается только в трех положениях : вверху , в центре и внизу , и имеет постоянный размер . Такое поведение связано с тем , что табличное поле для уменьшения объема выбираемых данных загружает из базы данных только часть списка , причем, считывание может происходить начиная с любой записи, в том числе и из середины списка . Тем самым табличное поле содержит только видимую часть списка и , следовательно , не имеет информации об положении строки в списке и количестве строк в списке . Поэтому бегунок не отражает положение видимой части списка и используется только для перемещения в начало и конец списка , а также к текущей строке списка . Также положение бегунка указывает на достижение начала или конца списка , это происходит если пользователь попытался выйти за границы списка .

Множественное выделение строк

При выделении группы строк в табличном поле ( например , при нажатии Shift+Home или Shift+End) выделяются только первая и последняя строка списка . Такое поведение характерно для табличных полей , отображающих динамические списки . Как уже было сказано выше , табличное поле при работе с динамическими списками оперирует только видимой частью списка и не имеет информации о положении строки в списке . Следовательно , при выборе группы записей , невозможно однозначно определить, какая из выбранных строк является первой , а какая последней . Следовательно , невозможно определить направление выделения строк , что не позволяет быстро определить диапазон строк .

Поэтому при множественном выделении в динамических списках выполняется выделение только отдельных строк и выделение соседних строк при движении вверх и вниз, но не выполняется выделение диапазонов строк .

Особенности использования свойств ТекущиеДанные и ТекущаяСтрока

Табличное поле предоставляет свойства ТекущиеДанные и ТекущаяСтрока . Отличие между этими свойствами состоит в том , что свойство ТекущиеДанные содержит значения считанных данных текущей строки табличного поля , а свойство ТекущаяСтрока содержит значение , идентифицирующее строку . Следует отметить , что свойство ТекущиеДанные содержит коллекцию значений текущей строки , соответствующую коллекции колонок отображаемого динамического списка , при этом если нужного поля нет в текущих данных , то его можно добавить в коллекцию полей списка используя метод » Добавить » коллекции колонок списка .

Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки , а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.

Следует заметить, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.

Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока . В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля . Например , приведенный ниже фрагмент текста программы является неэффективным :

Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные.
Правильный фрагмент приведен ниже :

Особенности работы в режиме отображения дерева

В режиме отображения дерева табличное поле , отображающее динамические списки , особым образом отображает кнопки раскрытия узлов . Используется два цвета отображения кнопки : черный и серый . Если при попытке открытия узла дерева было обнаружено, что дочерних узлов нет , то кнопка рисуется серым цветом , иначе — черным . Такое поведение обусловлено тем , что определение наличия подчиненных узлов требует дополнительных ресурсов и при считывании данных не происходит . Поэтому для удобства пользователя узлы , у которых не было обнаружено дочерних узлов , запоминаются табличным полем . Также стоит отметить , что цвет кнопки никак не влияет на последующее раскрытие узлов дерева .

Источник

Работаем с таблицей значений программно

ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать).

Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.

Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.

Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.

Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений , либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.

Создание таблицы значений

Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый :

Колонки таблицы значений

Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:

  1. Имя — идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);
  2. Заголовок — представление колонки в диалогах (может содержать произвольные символы);
  3. ТипЗначения — тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;
  4. Ширина — ширина колонки в диалогах;

Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений . Для добавления новой колонки используется метод Добавить():

Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():

Перебор колонок выполняется следующим образом:

Для удаления колонки используется метод Удалить():

Свойства колонки таблицы значений

Имя Тип Описание
Имя Строка символьный идентификатор колонки, по которому к ней можно обращаться из кода
Заголовок Строка строковое представление колонки на форме
ТипЗначения ОписаниеТипов свойство органичивает пространство доступных значений, которые можно указать в данной колонке
Ширина Число ширина колонки на форме (выражается в количестве символов)

Методы коллекции колонок таблицы значений

Вставить() Вставляет новую колонку в указанную позицию коллекции
Добавить() Добавляет новую колонку в конец коллекции
Количество() Возвращает количество колонок в коллекции
Найти() Ищет колонку в коллекции по имени
Очистить() Удаляет все колонки из коллекции
Сдвинуть() Сдвигает колонку влево или вправо
Удалить() Удаляет колонку из коллекции

Строки таблицы значений

С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.

Добавление и удаление строк

Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений . Метод возвращает объект СтрокаТаблицыЗначений , с которым доступны дальнейшие манипуляции:

И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:

Обратите внимание, что каждая СтрокаТаблицыЗначений ссылается на таблицу значений с помощью метода Владелец():

Для удаления строки используется метод Удалить() объекта ТаблицаЗначений . Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:

Перебор строк таблицы значений

Для перебора строк удобнее всего использовать оператор цикла Для Каждого . В редких случаях оправдано применение цикла Для :

Поиск строк

В отличие от платформы 1С:Предприятие 7.7 в 8-ке расширен функционал работы с таблицей значений. Поиск можно выполнять не только по значению в колонке (в этом случае будет возвращена первая найденная строка), но и по набору свойств (в этом случае возвращается массив строк):

Все методы таблицы значений:

Вставить() Вставляет строку на указанное место
ВыбратьСтроку() Позволяет интерактивно выбрать строку в диалоговом окне
ВыгрузитьКолонку() Выгружает значения ячеек указанной колонки в массив значений
Добавить() Добавлет новую строку в таблицу значений
ЗагрузитьКолонку() Загружает значения в ячейки указанной колонки из массива
ЗаполнитьЗначения() Заполняет ячейки указанных колонок определенным значением
Индекс() Возвращает индекс строки таблицы значений
Итог() Возвращает просуммированный итог по колонке таблицы значений
Количество() Возвращает количество строк в таблице значений
Найти() Выполняет поиск строки по значению
НайтиСтроки() Выполняет поиск строк по указанным параметрам
Очистить() Очищает строки таблицы значений
Получить() Возвращает строку по ее индексу
Свернуть() Выполняет сжатие строк и колонок таблицы значений
Сдвинуть() Сдвигает строку вверх или вниз по таблице
Скопировать() Создает новую таблицу значений копированием текущей
СкопироватьКолонки() Создает новую пустую таблицу значений путем копирования колонок текущей таблицы
Сортировать() Выполняет сортировку строк таблицы значений по указанным колонкам
Удалить() Удаляет строку таблицы значений

Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:

Источник

Добавление колонки в Динамический список (ОсновнаяТаблица)

Пытаюсь решить казалось бы простую задачу.
Берем любую конфу на 8.3.
Требуется добавить колонку в форму списка и заполнять ее произвольным текстом.

Деталь состоит в том, что для Динамического списка задана ОсновнаяТаблица.
И вот в таком случае у меня проблема, не понимаю как обойти ограничение, колонка не добавляется, не появляется.

Задача легко решается для случая Произвольного запроса, но я не хочу изменять это свойство.
Неужели никак не обойти это ограничение?

(1) Так что за колонка? Если это не поле основной таблицы, не реквизит какого-либо поля, а также не значение характеристики, то действительно, добавить не меняя запрос не получится.

Можно разве что попробовать подменить одно значение другим. Вытянуть на форму любую возможную колонку, а в обработчике события «ПриПолученииДанныхНаСервере» динамического списка получить нужные значения и подставить их в новую колонку.

(2) Воооот. Все так, я пытался таким способом делать.
Но в событии СписокПриПолученииДанныхНаСервере не могу добраться до колонки.

пытаюсь добраться кодом

(6) Не понимаю, где именно возникла сложность с использованием обработчика события «ПриПолученииДанныхНаСервере». Приведу свой пример.

Основная таблица: регистр сведений «УчетнаяПолитика». Единственное измерение — организация. Требуется вывести ее префикс с использованием вышеобозначенного события.

Итак, при создании формы добавляем элемент для вывода своего значения. В качестве примера я взял колонку ссылочного типа (что только усложнило задачу):

Я понял.. подменяемая колонка, должна содержать значение еще не выведенного реквизита.
К примеру если в форме списка уже Номер выведен, то через него сделать колонку, а потом подменить не получится. Нужно чтобы был какой то другой еще не выведенный, но сидящей в основной таблице реквизит.

(17) Т.е. Запрос изменили в самой конфигурации, сняв с поддержки, а потом в расширении заполнили колонку своим значением?
Полностью в расширении не получилось?
Просто хочется всё реализовать в расширении, не трогая саму конфигурацию.

У меня наподобе задача, добавить колонку в список Счетов в ФормуСписка и заполнять её значениями из РС, который заполняется обработкой от СБИС.

Пояснение:
В Бухгалтерия 3.0 открывают обработку для 1С от СБИС и получают статусы документов ЭДО от СБИС (РС заполняется в 1С) — нужно было руководителю для визуального контроля документов, чтобы не открывать саму обработку от СБИС. (директор есть директор 🙂 ).

(18) В запросе динамического списка ФормыСписка документа ПоступлениеТоваровУслуг есть:
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ДокументПоступлениеТоваровУслуг
.
<ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЭД КАК СостоянияЭД
ПО ДокументПоступлениеТоваровУслуг.Ссылка = СостоянияЭД.СсылкаНаОбъект>
.
У вас данные из СБИС хранятся в каком-то регистре? Если нет, то откуда вы их хотите вытаскивать? Если да, то просто добавьте такое же соединение с тем регистром:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументооборота КАК СостоянияДокументооборота
ПО (СостоянияДокументооборота.ОбъектДокументооборота = ДокументРеализацияТоваровУслуг.Ссылка)

и выше в запросе, например:
ВЫБОР
КОГДА (НЕ ДокументРеализацияТоваровУслуг.Проведен)
ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеДокументооборота.ПустаяСсылка)
ИНАЧЕ
ЕСТЬNULL(СостоянияДокументооборота.СостояниеДокументооборота, ЗНАЧЕНИЕ(Перечисление.СостояниеДокументооборота.ПустаяСсылка))
КОНЕЦ КАК СостояниеДокументооборота,

В этом примере у нас есть независимый регистр состояний внутреннего документооборота, в который пишутся состояния, перечисленные в Перечисления.СостоянияДокументооборота. Регистр и Перечисление добавлены в расширении

(20) Значение я выцепил (нашёл в самой обработке от СБИС, куда они сохраняют данные), попробовал в существующую колонку записывать СостояниеЭД — всё удачно, но потом менеджеры не могут исправлять документ — выдаёт ошибку. Поэтому я и хотел создать в Расширении программно колонку с типом Строка и записывать туда значения от СБИС.

(Конфигурация Бухгалтерия 3.0.86.16, платформа 8.3.15.2107, документ СчетНаОплатуПокупателю, Форма Списка.)

Как получилось:
Создал отдельную Функцию:

Вот пока не получается создать колонку программно в Расширении с типом Строка.
Есть мысли?

Далее, в форме списка в расширении добавляете этот реквизит на форму (предварительно в расширение нужно добавить все реквизиты, которые будете использовать в запросе). В форме у вас будет две процедуры:

(25) Тогда все просто, делаете по описанному мной (23) и берете свою функцию ПрочитатьПараметрыДокументаСБИС:

(26)
1. По Запросу:
Конфигурация полностью на поддержке без редактирования — не хотелось бы снисать её в режим редактирования, хотелось бы полностью в расширении всё сделать. Обошёлся пока существующей колонкой Состояние ЭДО.
Попробую на копиях конечно, ради спортивного интереса.

2. Возникла другая проблема:
Когда у пользователя в списке документов не включена колонка состояние ЭДО, тогда выдаётся ошибка и в список вообще нельзя войти:
Ошибка в этой строке: ОформлениеЯчейки = Элемент.Значение.Оформление[«СостояниеВерсииЭД»];

По разному искал, как программно включить колонку пользователю — пока безрезультатно.

Еще раз, по порядку. Вся. доработка происходит в расширении. В основной конфе делать ничего не надо.
1. В расширение добавляете документ СчетНаОплатуПокупателю, Форма Списка.
2. В расширение добавляете:
— реквизиты Организация, Контрагент, Комментарий, ВалютаДокумента, СуммаДокумента документа СчетНаОплатуПокупателю;
— перечисления СостоянияВерсийЭД, СтатусОплатыСчета, СтатусыОтгрузки;
— измерение СсылкаНаОбъект и ресурс СостояниеВерсииЭД регистра сведений СостоянияЭД;
— измерения Организация, Документ и ресурсы Статус, ДополнительныйСтатус регистра сведений СтатусыДокументов;
— измерение Документ регистра сведений ДокументыСОшибкамиПроверкиКонтрагентов;
— измерение ОбъектСФайлами и ресурс ЕстьФайлы регистра сведений НаличиеФайлов;
3. В форме списка в расширении меняете запрос динамического списка (Список-Объект-Настройка списка-Открыть) на следующий:

2. Возникла другая проблема:
Когда у пользователя в списке документов не включена колонка состояние ЭДО, тогда выдаётся ошибка и в список вообще нельзя войти:
Ошибка в этой строке: ОформлениеЯчейки = Элемент.Значение.Оформление[«СостояниеВерсииЭД»];

По разному искал, как программно включить колонку пользователю — пока безрезультатно.

Источник

Читайте также:  Акустика все для свадьбы
Оцените статью