1с чем отличается список значений от таблицы значений

Обновлено: 02.07.2024

Для оптимизации производительности, механизм управляемых форм [УФ] использует порционное чтение данных с сервера на Клиент.

Таблицы формы

Для отображения несовместимых с клиентом типов (таблицы значений) используются реквизиты с типом значения Данные формы коллекция.

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

Например, если в таблице содержится 1000 строк, то при прокрутке таблицы, мы будем порционально получать каждые 35. А если мы обрабатываем сразу всю таблицу, например, добавляем «!» для значения колонки, то все строки будут прочитаны порциями по 35.

Динамический список

Динамический список получает данные порциями по 25.

Можем посмотреть запрос в СУБД:

  1. Получаем данные последней строки;
  2. Получаем 25, у которых колонка сортировки = последней колонке, но ссылка > текущей ссылки.
  3. Получаем 25, у которых колонка сортировки > (или < в зависимости от направления) текущего значения.
  4. Получаем значения колонок для вывода для выбранных из п.п. 2-3 данных (ничего лишнего).
Признак «динамическое считывание данных» выполняет получение 1000 строк, а далее порционный вывод по 22.
Динамический список без признака динамическое считывание данных Динамический список без признака динамическое считывание данных

Процедура «При получении данных на Сервере»

Для динамического списка доступна процедура (&НаСервереБезКонтекста): «При получении данных на сервере». В этой процедуре мы можем заполнять произвольные значения колонок только для тех строк, которые были получены.

Динамический список При получении данных на сервере Динамический список При получении данных на сервере

Например, мы можем полные обороты закупок для контрагента. Для начала мы добавляем колонки в динамический список: «0 КАК СуммаЗакупок, 0 КАК СуммаПродаж». Выводим колонки в элемент формы списка и далее в процедуре При получении данных, заполняем значения:

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)

// 01. Инициализация запроса.
Запрос = Новый Запрос;

Запрос.Текст =
"ВЫБРАТЬ
| вл_Обороты.Контрагент КАК Контрагент,
| СУММА(вл_Обороты.СуммаЗакупок) КАК СуммаЗакупок,
| СУММА(вл_Обороты.СуммаПродаж) КАК СуммаПродаж
|ИЗ
| (ВЫБРАТЬ
| Контрагент КАК Контрагент,
| СуммаОборот КАК СуммаЗакупок,
| 0 КАК СуммаПродаж
| ИЗ
| РегистрНакопления.Закупки.Обороты(, , , Контрагент В (&Ключи))
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Контрагент,
| 0,
| СуммаОборот
| ИЗ
| РегистрНакопления.Продажи.Обороты(, , , Контрагент В (&Ключи))) КАК вл_Обороты
|
|СГРУППИРОВАТЬ ПО
| вл_Обороты.Контрагент";

// 02. Получение результата и анализ.
ЗапросРезультат = Запрос.Выполнить();

Если ЗапросРезультат.Пустой() Тогда
Возврат;
КонецЕсли;

// 03. Обработка данных заполнения динамического списка.
ЗапросВыборка = ЗапросРезультат.Выбрать();

Пока Выборка.Следующий() Цикл
ДанныеСтроки = Строки[ЗапросВыборка.Контрагент];
ДанныеСтроки.Данные["СуммаЗакупок"] = ЗапросВыборка.СуммаЗакупок;
ДанныеСтроки.Данные["СуммаПродаж"] = ЗапросВыборка.СуммаПродаж;
КонецЦикла;

Единственный нюанс - если в запросе нужно сделать условие, например РекизитЗапроса = ТЗ.Представление, то представление следует ограничить в длине. Здесь поможет из типовых конфигураций функция ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(ДлинаСтроки), т.е. код будет

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(1) peterxx, не претендую на роль мессии, однако поиск примера кода ничего не дал. А новичкам может пригодиться. если в запросе нужно сделать условие, например РекизитЗапроса = ТЗ.Представление, то представление следует ограничить в длине - колонка таблицы значений должны быть типизирована, т.е. иметь тип (3) 3.14159, я изначально поставил Новый ОписаниеТипов("Строка") - и запрос ругался (4) потому-что в запросах 1С8 нельзя сравнивать поля неограниченной длины или поля несовместимых типов :) (5) 3.14159, ну да, однако же "Строка неограниченной длины" удовлетворяет условию "колонка таблицы значений должны быть типизирована" упомянутому выше (3) А я-то извращаюсь, СписокЗначений в ТаблицуЗначений через xml-сериализацию делаю, через СтрЗаменить. )) А тут вот оно, откровение-то! )))
Насчёт обязательной типизации при скармливании запросу - да, это б в самой публикации прописать жирным шрифтом. Кстати, с передачей таблиц в СКД та же фигня иногда.

Просмотры 12976

Загрузки 0

Рейтинг 8

Создание 27.09.13 15:46

Обновление 27.09.13 15:46

№ Публикации 202267

Тип файла Нет файла

Конфигурация Не имеет значения

Операционная система Windows

Вид учета Не имеет значения

Доступ к файлу Бесплатно (free)

Код открыт Не указано

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020 4563 Eugen-S 23

СКД: 5 советов, как сделать лучше

Несколько примеров решения задач с использованием разных подходов

27.10.2021 4485 Neti 19

Что за ? в коде, или Секретный оператор в 1С

Инкремент, модуль и прочая магия, которая скрыта под символом "?"

21.10.2021 8379 SeiOkami 41

Полезные примеры СКД, ч.2

Еще несколько примеров решения задач в СКД.

06.04.2021 10877 Neti 8

27.01.2016 85840 Serginio 116

Обзор полезных методов БСП 3.1.4

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

25.03.2021 41444 rayastar 51

Звуковое управление в 1С 8.3

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021 7230 velemir 33

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020 8964 comol 31

Использование программных перечислений, ч.1: строковые константы Промо

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016 41158 unichkin 74

Базовые вещи БСП, которые облегчат жизнь программисту 1С

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

30.08.2020 20394 quazare 34

[Общий модуль] Динамическое формирование интерфейса

Версия 2.0.0.1 + добавил GitHub

28.08.2020 13077 rpgshnik 74

Форма выбора (подбор) в управляемых формах

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020 79520 user5300 19

Вспомогательные инструкции в коде 1С Промо

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018 36205 tormozit 106

Программная работа с настройками СКД

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020 66242 ids79 26

[СКД] Программное создание схемы компоновки данных

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020 43933 John_d 22

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

30.12.2019 35646 kuzyara 38

Оформление и рефакторинг сложных логических выражений Промо

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012 82911 tormozit 131

Сходство Джаро - Винклера. Нечеткое сравнение строк

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

25.12.2019 8467 brooho 19

22.11.2019 12435 Sibars 19

Полезные процедуры и функции для программиста

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

07.10.2019 39865 HostHost 41

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007 54515 tormozit 51

Таблица значений. Нюансы

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019 53349 Yashazz 56

[Шпаргалка] Программное создание элементов формы

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

06.09.2019 103376 rpgshnik 75

Агрегатные функции СКД, о которых мало кто знает

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019 78185 ids79 56

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017 51288 tormozit 74

Регистры бухгалтерии. Общая информация

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019 46884 YPermitin 25

Три костыля. Сказ про фокусы в коде

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019 30255 YPermitin 81

Иерархия без "В ИЕРАРХИИ"

22.08.2019 15106 ildarovich 24

Выгрузка документа по условию Промо

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий. А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019 18048 m-rv 3

Отслеживание выполнения фонового задания

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019 45374 ids79 22

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019 153420 ids79 75

Фоновое выполнение кода в 1С - это просто

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019 61153 avalakh 27

Как прикрутить ГУИД к регистру сведений Промо

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

16.04.2019 23373 m-rv 18

Разбираемся с параметрами редактирования СКД

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019 42118 json 17

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019 106346 ids79 17

Обработчики событий при записи объектов. Зачем и что за чем?

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

Ну ок. Табличная часть хранится в базе.
А в обработке как? Без разницы?

(1) Ну вот допустим вы передали выполнение кода из модуля формы в модуль обработки: ТаблицаЗначений, которая у вас определена в форме, вам необходимо передавать в качестве параметра, а если вы заполняли табличную часть обработки, то она у вас будет доступна в модуле обработки по умолчанию, так как она является частью контекста собственно обработки.

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

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

а если вы заполняли табличную часть обработки, то она у вас будет доступна в модуле обработки по умолчанию Это при условии, что объект обработки получен через РеквизитФормыВЗначение. В общем, такое себе преимущество, если речь про управляемые формы. табличная часть - часть объекта, таблица значений может быть только реквизитом формы с последующими ограничениями на работу с ней со стороны сервера (2)А то есть таблица значений, сформированная программно в любом модуле, допустим, объекта или в общем модуле, не считается за таблицу значений?)
Те же результаты запросов получающиеся выгрузкой - таблица значений с последующими ограничениями на работу с ней со стороны сервера

- Вот кажется как раз на сервере ни каких ограничений по работе с ТЗ и нет.

(3)
имею ввиду ограничения не работы с тз, а с тз(реквизит формы), представьте, нужно вызвать выполнение обработки с регламентного задания, каким образом вы будете использовать тз с формы

(1) Таблица значений - универсальная коллекция значений, перекочевала еще из 7.7. Существует сама по себе, а со времени появления тонкого клиента - только на сервере.

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

Ну и табличная часть может конвертироваться в таблицу значений и обратно.

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

В материале освещены сразу два вопроса собеседования программиста 1С:

  1. Чем отличается структура от соответствия?
  2. Можно ли сделать запрос по таблице значений?

Разработчику во встроенном языке доступны следующие объекты, описывающие коллекции:

Массив

Объект описывает коллекцию значений массива. У каждого элемента есть индекс. В 1С можно создавать многомерные массивы, например так:

В массиве можно искать элементы методом Найти(), но поскольку у массива нет индексов данный поиск выполняется не быстро. Метода сортировки массива разработчики 1С не добавили. Возможно, это сделано не просто так, т.к. сортировать можно другие коллекции

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

Фиксированный массив

Тот же массив, но его элементы нельзя изменить, т.е. у него есть только методы Получить(), Найти(), ВГраница() и Количество(). Создается на основе обычного массива.

Данный объект как правило используется в свойствах интерфейсных объектов (элементов управления)

Список значений

Список значений можно представить в качестве следующей таблицы значений:

Как видно из структуры объекта, в поле “Значение” может быть любой объект.

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

Списки используются для передачи параметров в запрос, в качестве объекта сравнения в СКД и построителе, а также в отборах в интерфейсе.

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

Структура

Структура представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка, т.е. ключом не может выступать строка “123ключ”. К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.

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

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

Соответствие

Соответствие как и структура представляет собой коллекцию пар КлючИЗначение. При этом, у соответствия в качестве ключа может выступать любое значение! Рекомендуется, чтобы в качестве ключа выступало значение примитивного типа или другого типа, значение которого может только присваиваться, но не может менять свое содержимое. Еще одной особенность соответствия является то, что это индексированная коллекция, т.е. поиск значения по ключу осуществляется очень быстро.

Пары Ключ-значение можно обойти циклом Для каждого … Из … Цикл.

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

Таблица значений

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

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

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

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

Читайте также: