Индексированная таблица 1с. Класс "поставщикданных". Влияние индексов на блокировки

или

Зачем разработчику 1С «индексировать» измерения регистров и реквизиты?

— Ну у вас и запросы! — сказала база данных и повисла…

Краткий ответ на вопрос заголовка заключается в том, что это позволит выполнять запросы быстро и уменьшать негативное влияние блокировок на .

Что такое индекс?

Оптимизация размещения индексов

При объеме таблиц не позволяющем им «разместиться» в оперативной памяти сервера, на первое место выходит скорость дисковой подсистемы (I/O). И здесь можно обратить внимание возможность размещать индексы в отдельных файлах расположенных на разных жестких дисках .

Подробное описание действий http ://technet .microsoft .com /ru -ru /library /ms 175905.aspx
Использование индекса из другой файловой группы повышает производительность некластерных индексов в связи с параллельностью выполнения процессов ввода/вывода и работы с самим индексом.
Для определения размеров можно использовать выше упомянутую обработку.

Влияние индексов на блокировки

Отсутствие необходимого индекса для запроса означает перебор всех записей таблицы, что в свою очередь приводит к избыточным блокировкам, т.е. блокируются лишние записи. Кроме того, чем дольше выполняется запрос из-за отсутствующих индексов, тем больше время удержания блокировок.
Другая причина блокировок — малое количество записей в таблицах. В связи с этим SQL Server, при выборе плана выполнения запроса, не использует индексы, а обходит всю таблицу(Table Scan), блокируя целиком. Для того, чтобы избежать подобных блокировок, необходимо увеличить количество записей в таблицах до 1500-2000. В этом случае сканирование таблицы становится долее дорогостоящей операцией и SQL Server начинает использовать индексы. Конечно это можно сделать не всегда, ряд справочников как «Организации», «Склады», «Подразделения» и т.п. обычно имеют мало записей. В этих случаях индексирование не будет улучшать работу.

Эффективность индексов

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

  • Запросы, которые указывают «узкие» критерии поиска. Такие запросы должны считывать лишь небольшое число строк, отвечающих определенным критериям.
  • Запросы, которые указывают диапазон значений. Эти запросы также должны считывать небольшое количество строк.
  • Поиск, который используется в операциях связывания. Колонки, которые часто используются как ключи связывания, прекрасно подходят для индексов.
  • Поиск, при котором данные считываются в определенном порядке. Если результирующий набор данных должен быть отсортирован в порядке кластеризованного индекса, то сортировка не нужна, поскольку результирующий набор данных уже заранее отсортирован. Например, если кластеризованный индекс создан по колонкам lastname (фамилия), firstname (имя), а для приложения требуется сортировка по фамилии и затем по имени, то здесь нет необходимости добавлять инструкцию ORDER BY.

Правда при всей полезности индексов, есть одно очень важное НО – индекс должен быть «эффективно используемым» и должен позволять находить данные с использованием меньшего числа операций ввода-вывода и объема системных ресурсов. И наоборот, неиспользуемые (редко используемые) индексы скорее ухудшают скорость записи данных (поскольку каждая операция, изменяющая данные, должна также обновлять страницы индексов) и создают избыточный объем базы.

Покрывающим (для данного запроса), называется индекс в котором есть все необходимые поля для этого запроса. Например, если индекс создан по колонкам a, b и c, а оператор SELECT запрашивает данные только из этих колонок, то требуется доступ только к индексу.

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

Vandalsvq 1114 08.11.14 17:00 Сейчас в теме

() CheBurator, группировка условий есть, в версии 5+. Но она только на 1С++ - http://www.1cpp.ru/forum/YaBB.pl?num=1273512019 .
Были планы сделать условное оформление, а также группировку, но увы. Причина тому одна - я не занимаюсь 7-кой на коммерческой основе и поэтому не дорабатываю эти инструменты. Тестировать даже элементарно не на чем. Раньше и sql-ные базы были и файловые и разных конфигураций навалом. Сейчас вроде как только одна на которой была разработка и ту открывал очень давно.

А вообще вот последние изменения:
5.0.1 от 15.04.12 г.
- Изменена система отборов в динамических расширениях (Справочник, Документ, Журнал, Регистр, Операции, Проводки). Добавлена возможность произвольного построения условий с иерархией.
- В связи с изменением системы отборов внесены изменения в объекты-расширения «ПоставщикДанных.Журнал», «ПоставщикДанных.Проводки» «ПоставщикДанных.Документы», «ПоставщикДанных.Справочник», «ПоставщикДанных.Операции», «ПоставщикДанных.Регистр».
- Исправлено поведение кнопки «Отбор по текущей колонке». При нажатии не отключаются остальные отборы. Также если отбор включен, то он выключается.
- При активизации колонки изменяется отображение кнопки «Отбор по текущей колонке».
- Оптимизировано построение условия отборов по реквизитам.
- Исправлена ошибка потери текущей строки при изменении иерархического просмотра у объекта-расширения «ПоставщикДанных.Справочник».
- Отключено использование параметра «ВыводитьПиктограммуОтбора». Параметр оставлен для обратной совместимости.
- Объект «ПоставщикДанных.ОписаниеТипов» и «ПоставщикДанных.ВидыСравнения» выведены из состава поставщика данных. Вместо них используются общие объекты «ОписаниеТипов» и «ВидыСравнения» соответственно. Подробнее см. документацию по классам «Объекты_v8».
- Исправлено падение 1С при изменении типа значения объекта «ПоставщикДанных».

5.0.2 от 24.04.12 г.
- Исправлена ошибка при укладке списков со строковыми значениями для отбора.
- Исправлена ошибка формирования запроса для объекта-расширения «ПоставщикДанных.Регистр» если у регистра стоит признак «Быстрая обработка движений»
- Исправлены выявленные ошибки.

5.0.3 от 22.05.13 г.
- Объект «ПоставщикДанных.ПрямойЗапрос» обновлен до версии 1.8.6 от 22.05.13 г.
- все классы собраны вместе в один архив + примеры

5.0.4 от 25.10.13 г.
- Исправлены выявленные ошибки

5.0.5 от 23.05.14 г.
- Исправлены выявленные ошибки при добавлении колонок данных
- Добавлена возможность построения древовидных структуры в доступных полях при добавлении колонок данных (фактически теперь можно объект "Отбор" использовать для построения отборов вроде СКД в 8-ке, но напильник must have)

НоваяКолонка / NewColumn

Синтаксис: НоваяКолонка(стрИмяКолонки)

Параметры:
  • стрИмяКолонки - тип: Строка. Идентификатор создаваемой колонки. В идентификаторе колонки можно использовать любые символы, но следует помнить, что символы "-", "*", "#", "^" и "&" используются как модификаторы при построении индексных выражений, и по колонкам с такими символами построить индекс будет невозможно.

Возвращает: тип: Число. Номер созданной колонки.

Описание: Создаёт колонку в таблице.

ПереименоватьКолонку / RenameColumn

Синтаксис: ПереименоватьКолонку(Колонка, стрНовоеИмяКолонки)

Параметры:
  • Колонка
  • стрНовоеИмяКолонки - тип: Строка. Новый идентификатор колонки.

Описание: Переименовывает колонку таблицы.

КоличествоКолонок / ColumnCount

Синтаксис: КоличествоКолонок()

Возвращает: тип: Число. Количество колонок в таблице.

Описание: Возвращает количество колонок в таблице.

ИмяКолонки / ColumnName

Синтаксис: ИмяКолонки(Колонка)

Параметры:
  • Колонка - тип: Строка, Число. Идентификатор или номер колонки.

Возвращает: тип: Строка. Идентификатор колонки. Если такой колонки нет, то возникает исключение.

Описание: Возвращает идентификатор указанной колонки, как он был задан в методе НоваяКолонка().

НомерКолонки / ColumnNumber

Синтаксис: НомерКолонки(Колонка)

Параметры:
  • Колонка - тип: Строка, Число. Идентификатор или номер колонки.

Возвращает: тип: Число. Номер колонки.

Описание: Возвращает номер указанной колонки.

НоваяСтрока / NewRow

Синтаксис: НоваяСтрока()

Возвращает: тип: Число. Номер созданной строки.

Описание: Cоздаёт новую строку в конце таблицы.

УдалитьСтроки / RemoveRows

Синтаксис: УдалитьСтроки([Индекс])

Параметры:
  • Индекс Если параметр указан, и по данному индексу установлен фильтр, то удалятся строки, удовлетворяющие условиям фильтра.

Описание: Удаляет строки из таблицы. Если указан индекс, то при удалении учитывается наложенный фильтр.

КоличествоСтрок / RowCount

Синтаксис: КоличествоСтрок([Индекс = ""], [флТолькоУникальные = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. Если параметр указан, и по данному индексу установлен фильтр, то считаются только строки, удовлетворяющие условиям фильтра.
  • флТолькоУникальные - тип: Число. Флаг учета только уникальных значений индекса.

Возвращает: тип: Число. количество строк в таблице.

Описание: Возвращает количество строк в таблице.

НомерСтроки / RowNumber

Синтаксис: НомерСтроки(Индекс)

Параметры:
  • Индекс - тип: Строка, Число. идентификатор или номер индекса.

Возвращает: тип: Число. Номер текущей строки в указанном индексе. Если строка не выбрана, то 0.

Описание: Возвращает текущий номер строки в выборке для указанного индекса.

Очистить / Cleanup

Синтаксис: Очистить()

Описание: Полная очистка таблицы. Удаляются все индексы, строки и колонки.

ДобавитьИндекс / AddIndex

Синтаксис: ДобавитьИндекс(стрИдентификатор, стрВыражение, [чТолькоУникальныеЗначения = 0])

Параметры:
  • стрИдентификатор - тип: Строка. Идентификатор создаваемого индекса;
  • стрВыражение - тип: Строка. Индексное выражение. Индексное выражение состоит из списка идентификаторов колонок, разделённого запятыми. Если перед именем колонки стоит символ "-", то сортировка осуществляется в обратном порядке. Если перед именем колонки стоит символ "*", то сортировка осуществляется по внутреннему представлению объекта. Если перед именем колонки стоит символ "#", то перед сравнением строк обрезаются пробелы слева и справа. Если перед именем колонки стоит символ "^", то строки сравниваются без учёта регистра. Модификаторы сортировки ("-", "*", "#", "^") можно использовать в любых сочетаниях. Индексное выражение может быть пустой строкой - это эквивалентно сортировке по номеру строки, или отсутствию сортировки (фильтр на такой индекс установить нельзя).
  • чТолькоУникальныеЗначения - тип: Число. Если 1, то в индекс попадут только строки, содержащие уникальные значения индекса. Строки с повторяющимися индексами будут проигнорированы, и в операции перебора строк, суммирования, свёртки, выгрузки, загрузки не попадут.

Возвращает: тип: Число. Номер созданного индекса.

Описание: Добавляет индекс к таблице.

КоличествоИндексов / IndexCount

Синтаксис: КоличествоИндексов()

Возвращает: тип: Число. Количество индексов в таблице.

Описание: Возвращает количество индексов в таблице.

ИмяИндекса / IndexName

Синтаксис: ИмяИндекса(Индекс)

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.
Возвращает: тип: Строка. Имя индекса. Если индекс отсутствует в таблице, генерируется исключение.

Описание: Возвращает имя индекса.

ВыражениеИндекса / IndexExpr

Синтаксис: ВыражениеИндекса(Индекс)

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.
Возвращает: тип: Строка. Индексное выражение. Если индекс отсутствует в таблице, генерируется исключение.

Описание: Возвращает индексное выражение для заданного индекса.

НомерИндекса / IndexNumber

Синтаксис: НомерИндекса(Индекс)

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.
Возвращает: тип: Число. Номер индекса. Если индекс отсутствует в таблице, функция возвращает 0.

Описание: Возвращает номер индекса.

Сортировать / Sort

Синтаксис: Сортировать(стрВыражение)

Параметры:
  • стрВыражение - тип: Строка. Индексное выражение. Индексное выражение состоит из списка идентификаторов колонок, разделённого запятыми. Если перед именем колонки стоит символ "-", то сортировка осуществляется в обратном порядке. Если перед именем колонки стоит символ "*", то сортировка осуществляется по внутреннему представлению объекта. Если индексное выражение - пустая строка, то сортировка выключается (фильтр на такой индекс установить нельзя).

Описание: Изменение сортировки в основном индексе.

ИндексУникален / IndexIsUnique

Синтаксис: ИндексУникален([Индекс = ""])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.

Возвращает: тип: Число. 1 - в таблице нет строк, с повторяющимися значениями ключа; 0 - таблица содержит строки с одинаковыми значениями ключа.

Описание: проверяет, уникален ли индекс.

КоличествоУникальныхКлючей / UniqueKeyCount

Синтаксис: КоличествоУникальныхКлючей([Индекс = ""])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.

Возвращает: тип: Число. Количество уникальных ключей.

Описание: возвращает количество уникальных ключей по указанному индексу.

КоличествоЗначенийКлюча / KeyValueCount

Синтаксис: КоличествоЗначенийКлюча([Индекс = ""], Ключ)

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.
  • Ключ

Возвращает: тип: Число. Количество строк с указанным ключом.

Описание: возвращает количество строк, для которых значение ключа равно параметру Ключ.

НайтиСтроку / FindRow

Синтаксис: НайтиСтроку(Индекс, Ключ, [чНайтиПоследнюю = 0], [чСпозиционироваться = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.
  • Ключ - тип: любой. Если индекс построен по одной колонке - то значение поиска. Если же индекс по нескольким колонкам, то это должен быть СписокЗначений, содержащий значения ключевых колонок, заданных в методе ДобавитьИндекс().
  • чНайтиПоследнюю - тип: Число. Если 1, то будет найдена последняя строк с совпадающим значением ключа.
  • чСпозиционироваться

Возвращает:

Описание: Найти строку, точно соответствующую ключу.

НайтиБлижайшуюБольше / FindNearestGE

Синтаксис: НайтиБлижайшуюБольше(Ключ, [Индекс = ""], [чСпозиционироваться = 0])

Параметры:
  • Ключ - тип: любой. Если индекс построен по одной колонке - то значение поиска. Если же индекс по нескольким колонкам, то это должен быть СписокЗначений, содержащий значения ключевых колонок, заданных в методе ДобавитьИндекс().
  • Индекс
  • чСпозиционироваться - тип: Число. Если 1, то при успешном поиске индекс будет спозиционирован на найденной строке. Если перед выполнением метода была открыта выборка (методом ВыбратьСтроки), то она перепозиционируется на найденное значение. Если выборка не была открыта, то она открывается, и после успешного поиска могут быть использованы методы ПолучитьСтроку(), СледующаяСтрока() и ПредыдущаяСтрока(). Основной индекс также перепозиционируется.

Возвращает: тип: Число. Номер найденной строки. Если ничего не найдено, то 0.

Описание: Найти строку, которая равна или больше ключа.

НайтиБлижайшуюМеньше / FindNearestLE

Синтаксис: НайтиБлижайшуюМеньше(Ключ, [Индекс = ""], [чСпозиционироваться = 0])

Параметры:
  • Ключ - тип: любой. Если индекс построен по одной колонке - то значение поиска. Если же индекс по нескольким колонкам, то это должен быть СписокЗначений, содержащий значения ключевых колонок, заданных в методе ДобавитьИндекс().
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чСпозиционироваться - тип: Число. Если 1, то при успешном поиске индекс будет спозиционирован на найденной строке. Если перед выполнением метода была открыта выборка (методм ВыбратьСтроки), то она перепозиционируется на найденное значение. Если выборка не была открыта, то она открывается, и после успешного поиска могут быть использованы методы ПолучитьСтроку(), СледующаяСтрока() и ПредыдущаяСтрока(). Основной индекс также перепозиционируется.

Возвращает: тип: Число. Номер найденной строки. Если ничего не найдено, то 0.

Описание: Найти строку, которая равна или меньше ключа.

УстановитьФильтр / SetFilter

Синтаксис: УстановитьФильтр(КлючМин, КлючМакс, [Индекс = ""], [чТолькоУникальные = 0], [чИнверсия = 0])

Параметры:
  • КлючМин - тип: любой. Нижняя граница фильтра. Задаётся так же, как в методе НайтиСтроку().
  • КлючМакс - тип: любой. Верхняя границы фильтра. Задаётся так же, как в методе НайтиСтроку().
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чТолькоУникальные - тип: Число. Если 1 - то в выборку попадут только строки с уникальным значением ключа.
  • чИнверсия - тип: Число. 0 - обычный фильтр, 1 - инверсный фильтр.

Если индекс построен по одной колонке, то в качестве ключей можно использовать значение колонки. Если же индекс по нескольким колонкам, то ключ должен быть СписокЗначений, содержащий значения ключевых колонок, заданных в методе ДобавитьИндекс().

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

Описание: устанавливает динамический фильтр на таблицу по указанному индексу. Фильтр влияет на работу методов: ВНачало(), ВыбратьСтроки(), ВКонец(), ПолучитьСтроку(), СледующаяСтрока(), ПредыдущаяСтрока(),Свернуть(),Итог(), ЗаполнитьКолонку(), Выгрузить(), Загрузить(), Объединить().

Подмножество / Subset

Синтаксис: Подмножество(сзКлюч, чКоличествоФиксКолонок, [Индекс = ""])

Параметры:
  • сзКлюч - тип: СписокЗначений. Список, содержащий значения фиксируемых колонок индекса.
  • чКоличествоФиксКолонок - тип: Число. Количество фиксируемых колонок индекса
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.

Описание: устанавливает фильтр, фиксируя значения первых колонок индекса.

ТЗ.ДобавитьИндекс("и1", "к1, к2"); сзКлюч = СоздатьОбъект("СписокЗначений"); сзКлюч.ДобавитьЗначение(5); ТЗ.Подмножество(сзКлюч, 1, "и1");

в результате в выборке будут только те строки, у которых колонка к1 = 5.

ВыключитьФильтр / DropFilter

Синтаксис: ВыключитьФильтр([Индекс = ""])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса.

Описание: выключает фильтр у указанного индекса.

ВНачало / FirstRow

Синтаксис: ВНачало([Индекс = ""], [флТолькоУникальные = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чТолькоУникальные

Возвращает

Описание: позиционируется перед первой строкой указанного индекса, так что метод СледующаяСтрока() спозиционируется на первой строке.

ВыбратьСтроки / SelectRows

Синтаксис: ВыбратьСтроки([Индекс = ""], [флТолькоУникальные = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чТолькоУникальные - тип: Число. Флаг выборки по уникальным значениям. Флаг влияет на результат всех последующих вызовов методов ПолучитьСтроку(), СледующаяСтрока(), ПредыдущаяСтрока() по данной выборке.

Возвращает тип: Число. 1 - операция завершилась успешно, 0 - выборка пуста.

Описание: позиционируется перед первой строкой указанного индекса, так что метод ПолучитьСтроку() спозиционируется на первой строке.

ВКонец / LastRow

Синтаксис: ВКонец([Индекс = ""], [флТолькоУникальные = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чТолькоУникальные - тип: Число. Флаг выборки по уникальным значениям. Флаг влияет на результат всех последующих вызовов методов ПолучитьСтроку(), СледующаяСтрока(), ПредыдущаяСтрока() по данной выборке.

Возвращает тип: Число. 1 - операция завершилась успешно, 0 - выборка пуста.

Описание: позиционируется после последней строки указанного индекса, так что метод ПредыдущаяСтрока() спозиционируется на последней строке.

СледующаяСтрока / Next

Синтаксис: СледующаяСтрока([Индекс = ""], [чТолькоУникальные = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чТолькоУникальные

Возвращает

Описание:

Примечание: флаг уникальной выборки, установленный в 1 в методах ВНачало() и ВКонец() имеет приоритет над флагом данного метода.

ПолучитьСтроку / GetRow

Синтаксис: ПолучитьСтроку([Индекс = ""], [чТолькоУникальные = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чТолькоУникальные - тип: Число. 1 - будет получена следующая строка с отличающимся значением ключа, все повторяющиеся строки будут пропущены.

Возвращает тип: Число. 1 - операция завершилась успешно, 0 - больше нет строк.

Описание: переход к следующей строке индекса.

Примечание:

ПредыдущаяСтрока / Previous

Синтаксис: ПредыдущаяСтрока([Индекс = ""], [чТолькоУникальные = 0])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • чТолькоУникальные - тип: Число. 1 - будет получена следующая строка с отличающимся значением ключа, все повторяющиеся строки будут пропущены.

Возвращает тип: Число. 1 - операция завершилась успешно, 0 - больше нет строк.

Описание: переход к предыдущей строке индекса.

Примечание: флаг уникальной выборки, установленный в 1 в методах ВНачало() и ВКонец(), имеет приоритет над флагом данного метода.

ПолучитьЗначение / GetValue

Синтаксис: ПолучитьЗначение([чСтрока = ПустоеЗначение], Колонка)

Параметры:
  • чСтрока - тип: Число. Номер строки. Если номер строки не указан, то берётся текущая строка.
  • Колонка - тип: Строка, Число. Идентификатор или номер колонки.

Возвращает тип: любой. Значение ячейки таблицы.

Описание: возвращает значение в указанной ячейке таблицы.

УстановитьЗначение / SetValue

Синтаксис: УстановитьЗначение([чСтрока = ПустоеЗначение], Колонка, Значение)

Параметры:
  • чСтрока - тип: Число. Номер строки. Если номер строки не указан, то устанавливается значение в текущей строке.
  • Колонка - тип: Строка, Число. Идентификатор или номер колонки.
  • Значение - тип: любой. Новое значение ячейки.

Описание: устанавливает значение указанной ячейки.

Установить / Set

Синтаксис: Установить(чСтрока, Колонка, Значение)

Описание: синоним метода УстановитьЗначение().

Свернуть / GroupBy

Синтаксис: Свернуть(стрКолонкиСвёртки, стрКолонкиСумм [, ИмяСуществующегоИндекса = ""])

Параметры:
  • стрКолонкиСвёртки - тип: Строка. Список колонок, по которым будет осуществляться свёртка. Эта строка полностью аналогична индексному выражению в методе ДобавитьИндекс(). Для свёртки таблица сначала индексируется по этому выражению, а затем строки с одинаковым индексом суммируются. Результат всегда помещается в первую по номеру строку, все остальные строки удаляются.
  • стрКолонкиСумм - тип: Строка. Список колонок, которые нужно просуммировать. Разделитель - символ ",". Пробелы игнорируются.
  • ИмяСуществующегоИндекса - тип: Стрка, Число. Если указано имя индекса, то КолонкиСвёртки игнорируются, а свёртка осуществляется по указанному индексу. В свёртке учавствуют только те строки, которые входят в фильтр.

Описание: сворачивает таблицу по колонкам <КолонкиСвёртки>, суммируя значения в колонках <КолонкиСумм>. Колонки, не вошедшие в <КолонкиСвёртки> и <КолонкиСумм> из таблицы не удаляются. Свёртка возможна и по существующему индексу - при этом не теряется время на построение временного индекса, и возможна выборочная свёртка по текущему фильтру индекса.

Итог / Sum

Синтаксис: Итог(КолонкаСуммы, [Индекс = ""])

Параметры:
  • КолонкаСуммы
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.

Возвращает

Описание: считает сумму по указанной колонке, при этом учитывается фильтр индекса.

ИтогПоДиапазону / SumByRange

Синтаксис: ИтогПоДиапазону(КолонкаСуммы, [Индекс = ""], КлючМин, КлючМакс)

Параметры:
  • КолонкаСуммы - тип: Строка, Число. Колонка, по которой нужно получить сумму.
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • КлючМин - тип: любой. Нижняя граница диапазона. Задаётся так же, как в методе НайтиСтроку().
  • КлючМакс - тип: любой. Верхняя границы диапазона. Задаётся так же, как в методе НайтиСтроку().

Возвращает тип: Число. Сумма по указанной колонке.

Описание: считает сумму по указанной колонке, с заданием диапазона суммирования. Функция не учитывает установленные фильтры и сама перманентных фильтров не устанавливает.

ИтогПоУзлу / NodeSum

Синтаксис: ИтогПоУзлу(КолонкаСуммы [, Индекс])

Параметры:
  • КолонкаСуммы - тип: Строка, Число. Колонка, по которой нужно получить сумму.
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.

Возвращает: тип: Число. Сумма по указанной колонке. Если выборка не активна (нет текущего узла), то возвращает 0.

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

ТЗ.ДобавитьИндекс("Фамилия", "Фамилия", 0); ТЗ.НайтиСтроку("Фамилия", "Иванов", 0, 1); //позиционируемся на узел, в котором собраны все строки с фамилией Иванов Сум = ТЗ.ИтогПоУзлу("Сумма", "Фамилия"); //вернёт 420 (100 + 120 + 200) ТЗ.НайтиСтроку("Фамилия", "Петров", 0, 1); //позиционируемся на узел, в котором собраны все строки с фамилией Петров Сум = ТЗ.ИтогПоУзлу("Сумма", "Фамилия"); //вернёт 1100 (500 + 600)

Группировать / Group

Синтаксис: Группировать(стрГруппировки, стрКолонкиСумм, [чРасшифровкаПоследнегоУровня = 0])

Параметры:
  • стрГруппировки - тип: Строка. Строка, описывающая требуемую структуру группировки. Задаётся в виде <ИмяИндекса1>: <ИндексноеВыражение1> [; <ИмяИндекса2>: <ИндексноеВыражение2> ... ]. ИндексноеВыражение - строка в том же формате, что и для метода ДобавитьИндекс(), с одним дополнением: если в списке модификаторов колонки присутствует символ "&", то по этой колонке будут посчитаны итоги по группам справочника. Колонка с таким модификатором может быть только одна на каждом уровне группировки.
  • стрКолонкиСумм - тип: Строка. Строка с колонками, по которым нужно считать суммы.
  • чРасшифровкаПоследнегоУровня - тип: Число. 1 - в каждой строке последнего уровня группировки будет таблица с расшифровкой, содержащая строки исходной таблицы в нетронутом виде. 0 - последний уровень будет свёрнут.

Описание: формирует таблицу с древовидной структурой в соответствии с группировками. На каждом уровне группировки остаются только уникальные значения по соответствующему индексу. В колонки сумм записываются суммы по всем строкам с совпадающим значением ключа. Строки с совпадающими значениями ключа записываются в таблицу, которая помещается в колонку тзПотомки - эта колонка создаётся в процессе группировки.

Пример: на входе имеем таблицу

группируем её:

ТЗ.Группировать("Фамилия: Фамилия; Имя: Имя", "Сумма");

и получаем таблицу такого вида (в колонке тзПотомки показано содержимое таблицы тзПотомки):

При группировке возможно также подсчитывать суммы по группам справочников - для этого в списке модификаторов индекса нужно указать "&". Если в таблице есть колонка с именем "<ИмяКолонкиСправочника>_Родитель", то родитель для элемента будет браться из этой колонки - это уменьшает количество обращений к базе, и заметно увеличивает производительность. Итоговая таблица будет организована в виде дерева, в точности повторяющего структуру справочника. Следующий уровень группировки располагается в листьях этого дерева (т.е. в строках, не являющихся группами). Для удобства работы с полученным деревом в таблицу добавляется колонка "__ЭтоГруппа__", в которую записывается 1 для всех групп, и ПустоеЗначение для элементов. Также добавляется колонка "__Уровень__", которая заполняется значением уровня групп справочника (нумерация начинается с 1). Для элементов в колонку "__Уровень__" записывается ПустоеЗначение.

ЗаполнитьСтроку / FillRow

Синтаксис: ЗаполнитьСтроку([чНомерСтроки = 0], Источник, [чНомерСтрокиИсточника = 0], [чПоИменамКолонок = 0])

Параметры:
  • чНомерСтроки - тип: Число. Номер строки, которую нужно заполнить. Если <= 0, то заполняется текущая строка.
  • Источник - тип: ИндексированнаяТаблица, ТаблицаЗначений, Список значений. Источник данных для заполнения строки.
  • чНомерСтрокиИсточника - тип: Число. Номер строки в таблице-источнике. По умолчанию берётся текущая строка в предопределённом индексе. Если Источник - СписокЗначений, то этот параметр игнорируется.
  • чПоИменамКолонок - тип: Число. 0 - значения из источника копируются по номерам колонок; 1 - значения копируются по именам колонок. Если в приёмнике нет колонки с таким именем, то значение не копируется. Если Источник - СписокЗначений, то именами колонок считаются символьные представления значений.

Описание: заполняет строку таблицы из строки другой таблицы, или из списка значений.

ЗаполнитьКолонку / FillColumn (вариант 1)

Синтаксис: ЗаполнитьКолонку([Индекс = ""], Колонка, Источник, [ИндексИсточника = ""], [КолонкаИсточника = ""])

Параметры:
  • Индекс
  • Колонка
  • Источник - тип: ИндексированнаяТаблица. Источник данных для заполнения колонки.
  • ИндексИсточника - тип: Строка, Число. Идентификатор или номер индекса, по которому упорядочиваются и фильтруются строки таблицы-источника. По умолчанию используется основной индекс.
  • КолонкаИсточника - тип: Строка, Число. Идентификатор или номер колонки, из которой будут браться значения. Если параметр не указан, то колонка-источник определяется параметром Колонка .

Описание: заполняет колонку таблицы из колонки другой индексированной таблицы.

ЗаполнитьКолонку / FillColumn (вариант 2)

Синтаксис: ЗаполнитьКолонку([Индекс = ""], Колонка, Источник, [КолонкаИсточника = ""])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса, по которому упорядочиваются и фильтруются строки заполняемой таблицы. По умолчанию используется основной индекс.
  • Колонка - тип: Строка, Число. Идентификатор или номер заполняемой колонки.
  • Источник - тип: ТаблицаЗначений, СписокЗначений. Источник данных для заполнения колонки.
  • КолонкаИсточника - номер или идентификатор колонки, из которой будут браться значения. Если параметр не указан, то колонка-источник определяется параметром Колонка . Для списка значений параметр игнорируется.

Описание: заполняет колонку таблицы из колонки другой таблицы (ТаблицаЗначений) или списка значений.

ЗаполнитьКолонку / FillColumn (вариант 3)

Синтаксис: ЗаполнитьКолонку([Индекс = ""], Колонка, Значение)

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса, по которому упорядочиваются и фильтруются строки заполняемой таблицы. По умолчанию используется основной индекс.
  • Колонка - тип: Строка, Число. Идентификатор или номер заполняемой колонки.
  • Значение - тип: любой, кроме ИндексированнаяТаблица, ТаблицаЗначений, СписокЗначений. Значение, которым будет заполнена колонка.

Описание: заполняет колонку таблицы одним и тем же значением.

Выгрузить / Unload

Синтаксис: Выгрузить(Приемник [, Индекс = ""] [, Колонки = ""] [, чТолькоУникальные = 0])

Параметры:
  • Приемник - тип: ИндексированнаяТаблица, ТаблицаЗначений, Документ, СписокЗначений, Неопределенный. Переменная, в которую будет выгружена таблица. Если это документ, то заполняется его табличная часть. Если тип Неопределенный, то создаётся таблица типа ИндексированнаяТаблица.
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс.
  • Колонки - тип: Строка, Число. Список колонок через запятую или номер колонки для выгрузки. Если значение не задано или задана пустая строка, параметр игнорируется.
  • чТолькоУникальные - тип: Число. Флаг выгрузки только уникальных значений.

Описание: выгружает текущую таблицу в другую таблицу, или в новую. Если таблица-приёмник существует, то она полностью очищается. Индексы при выгрузке не копируются. Выгрузка осуществляется с учётом индекса и фильтра.

Загрузить / Load

Синтаксис: Загрузить(Источник, [Индекс = ""], [Колонки = ""])

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

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

ЗагрузитьЗапрос / LoadQuery

Синтаксис: ЗагрузитьЗапрос(Запрос, [чФлаг = 0], [чИтоги = 1])

Параметры:
  • Запрос - тип: Запрос. Запрос, из которого будут загружены данные.
  • чФлаг - тип: Число, Строка. 0 - значения групп и функций (по умолчанию); 1 - значения групп и функций, дополнительных переменных; 2 - значения упорядочиваний групп и функций; 3 - значения упорядочиваний групп и функций, дополнительных переменных; Строка - "Товар(1), Товар(2), Товар, Склад, Приход, Расход", где Товар(1) - значение первого упорядочивания группировки "Товар".
  • чИтоги - тип: Число. 0 - итоги по группировкам не выводить; 1 - итоги по группировкам выводить сверху (по умолчанию); 2 - итоги по группировкам выводить снизу; 3 - итоги по группировкам выводить сверху и снизу.

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

ВнутреннееСоединение / InnerJoin

Синтаксис: ВнутреннееСоединение(стрКолонкиЛевойИТ, ПраваяИТ, ИндексПравойИТ, стрКолонкиПравойИТ)

Параметры:
  • стрКолонкиЛевойИТ
  • ПраваяИТ
  • ИндексПравойИТ стрКолонкиЛевойИТ ).
  • стрКолонкиПравойИТ <ИмяКолИст>|<ИмяКолИст:ИмяКолНазн> [,...]". <ИмяКолИст> <ИмяКолНазн> <ИмяКолИст> <ИмяКолНазн>.

Описание: Inner Join стрКолонкиЛевойИТ стрКолонкиПравойИТ . Если строка левой таблицы не найдена в правой, то строка в левой таблице удаляется.

ЛевоеСоединение / LeftJoin

Синтаксис: ЛевоеСоединение(стрКолонкиЛевойИТ, ПраваяИТ, ИндексПравойИТ, стрКолонкиПравойИТ)

Параметры:
  • стрКолонкиЛевойИТ - тип: Строка. Колонки, значения которых будут использованы для поиска строки в правой таблице.
  • ПраваяИТ - тип: ИндексированнаяТаблица. Присоединяемая таблица.
  • ИндексПравойИТ - тип: Строка, Число. Имя или номер индекса, по которому будут искаться строки в правой таблице. Количество колонок индекса должно быть равно количеству колонок поиска (см. параметр стрКолонкиЛевойИТ ).
  • стрКолонкиПравойИТ - тип: Строка. Список колонок, которые будут копироваться из правой таблицы в левую. Список задаётся в формате "<ИмяКолИст>|<ИмяКолИст:ИмяКолНазн> [,...]". <ИмяКолИст> - имя колонки в правой таблице; если такой колонки нет в левой таблице, то она будет создана. <ИмяКолНазн> - если указана, то значение из колонки правой таблицы с названием <ИмяКолИст> будет скопировано в колонку левой таблицы <ИмяКолНазн>.

Описание: Выполняет операцию, аналогичную команде SQL Left Join . Для каждой строки из левой таблицы (левой таблицей является текущий объект) добавляются все строки из правой таблицы, соответствующие ключевому выражению. Ключевое выражение определяется параметром стрКолонкиЛевойИТ . Из правой таблицы в левую переносятся значения колонок, указанных в параметре стрКолонкиПравойИТ остаются неизменными .

ПравоеСоединение / RightJoin

Синтаксис: ПравоеСоединение(стрКолонкиЛевойИТ, ПраваяИТ, ИндексПравойИТ, стрКолонкиПравойИТ)

Параметры:
  • стрКолонкиЛевойИТ - тип: Строка. Колонки, значения которых будут использованы для поиска строки в правой таблице.
  • ПраваяИТ - тип: ИндексированнаяТаблица. Присоединяемая таблица.
  • ИндексПравойИТ - тип: Строка, Число. Имя или номер индекса, по которому будут искаться строки в правой таблице. Количество колонок индекса должно быть равно количеству колонок поиска (см. параметр стрКолонкиЛевойИТ ).
  • стрКолонкиПравойИТ - тип: Строка. Список колонок, которые будут копироваться из правой таблицы в левую. Список задаётся в формате "<ИмяКолИст>|<ИмяКолИст:ИмяКолНазн> [,...]". <ИмяКолИст> - имя колонки в правой таблице; если такой колонки нет в левой таблице, то она будет создана. <ИмяКолНазн> - если указана, то значение из колонки правой таблицы с названием <ИмяКолИст> будет скопировано в колонку левой таблицы <ИмяКолНазн>.

Описание: Выполняет операцию, аналогичную команде SQL Right Join . Для каждой строки из левой таблицы (левой таблицей является текущий объект) добавляются все строки из правой таблицы, соответствующие ключевому выражению. Ключевое выражение определяется параметром стрКолонкиЛевойИТ . Из правой таблицы в левую переносятся значения колонок, указанных в параметре стрКолонкиПравойИТ . Если строка левой таблицы не найдена в правой, то она удаляется. Если строка правой таблицы отсутствует в левой, то она добавляется, при этом все колонки кроме указанных в параметре стрКолонкиПравойИТ

ПолноеСоединение / FullJoin

Синтаксис: ПолноеСоединение(стрКолонкиЛевойИТ, ПраваяИТ, ИндексПравойИТ, стрКолонкиПравойИТ)

Параметры:
  • стрКолонкиЛевойИТ - тип: Строка. Колонки, значения которых будут использованы для поиска строки в правой таблице.
  • ПраваяИТ - тип: ИндексированнаяТаблица. Присоединяемая таблица.
  • ИндексПравойИТ - тип: Строка, Число. Имя или номер индекса, по которому будут искаться строки в правой таблице. Количество колонок индекса должно быть равно количеству колонок поиска (см. параметр стрКолонкиЛевойИТ ).
  • стрКолонкиПравойИТ - тип: Строка. Список колонок, которые будут копироваться из правой таблицы в левую. Список задаётся в формате "<ИмяКолИст>|<ИмяКолИст:ИмяКолНазн> [,...]". <ИмяКолИст> - имя колонки в правой таблице; если такой колонки нет в левой таблице, то она будет создана. <ИмяКолНазн> - если указана, то значение из колонки правой таблицы с названием <ИмяКолИст> будет скопировано в колонку левой таблицы <ИмяКолНазн>.

Описание: Выполняет операцию, аналогичную команде SQL Full Join . Для каждой строки из левой таблицы (левой таблицей является текущий объект) добавляются все строки из правой таблицы, соответствующие ключевому выражению. Ключевое выражение определяется параметром стрКолонкиЛевойИТ . Из правой таблицы в левую переносятся значения колонок, указанных в параметре стрКолонкиПравойИТ . Если строка левой таблицы не найдена в правой, то значения колонок левой таблицы остаются неизменными . Если строка правой таблицы отсутствует в левой, то она добавляется, при этом все колонки кроме указанных в параметре стрКолонкиПравойИТ заполняются пустыми значениями.

Объединить / Merge

Синтаксис: Объединить(ТЗ [, Индекс = ""] [, Колонки = ""])

Параметры:
  • ТЗ - тип: ИндексированнаяТаблица, ТаблицаЗначений. Таблица, из которой будут загружены данные.
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса в таблице - источнике. По умолчанию используется основной индекс. Если ТЗ имеет тип ТаблицаЗначений, то этот параметр игнорируется.
  • Колонки - тип: Строка, Число. Список колонок через запятую или номер колонки в таблице - источнике. Определяет список колонкок, которые будут участвовать в процессе объединения. Если значение не задано или задана пустая строка, параметр игнорируется.

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

Пересечение / Conjunction

Параметры:
  • ТЗ2 - тип: ИндексированннаяТаблица. Таблица, с которой строится пересечение.
  • ИндексТекущейТЗ
  • ИндексВторойТЗ
  • флДобавлятьСтрокиТЗ2

Описание: пересечение двух таблиц по ключевым полям. Результатом пересечения является таблица, в которой присутствуют строки текущей ТЗ, которые есть в ТЗ2, и строки ТЗ2, которые есть в текущей ТЗ (с учетом флДобавлятьСтрокиТЗ2). Совпадение строк определяется по индексам ИндексТекущейТЗ и ИндексТЗ2. Количество колонок в индексах должно быть одинаковым.

Разность / Difference

Параметры:
  • ТЗ2 - тип: ИндексированннаяТаблица. Таблица, с которой строится разность.
  • ИндексТекущейТЗ - тип: Строка, Число. Имя или номер индекса в текущей таблицы.
  • ИндексВторойТЗ - тип: Строка, Число. Имя или номер индекса в ТЗ2.
  • флДобавлятьСтрокиТЗ2 - тип: Число. Флаг добавления строк ТЗ2 в результат.

Описание: разность двух таблиц по ключевым полям. Результатом является таблица, в которой присутствуют строки текущей ТЗ, которых нет в ТЗ2, и строки ТЗ2, которых нет в текущей ТЗ (с учетом флДобавлятьСтрокиТЗ2). Совпадение строк определяется по индексам ИндексТекущейТЗ и ИндексТЗ2. Количество колонок в индексах должно быть одинаковым.

Копия / Copy

Синтаксис: Копия([чКопироватьИндексы = 0], [чКопироватьДанные = 1])

Параметры:
  • чКопироватьИндексы - тип: Число. Если 1, то индексы и фильтры тоже будут скопированы.
  • чКопироватьДанные - тип: Число. Если 1, то данные будут скопированы; если 0 - то копируется только структура.

Возвращает: тип: ИндексированнаяТаблица. Переменная, являющаяся копией объекта.

Описание: создаёт копию таблицы.

ВФайл / SaveToFile

Синтаксис: ВФайл(стрИмяФайла, [чФормат = 1], [Индекс = ""], [чСИменамиКолонок = 1])

Параметры:
  • стрИмяФайла - тип: Строка. Имя файла, в который нужно записать таблицу. Если файл уже существует, то он перезаписывается.
  • чФормат
  • Индекс
  • чСИменамиКолонок - тип: Число. 1 - в первую строку файла будут записаны имена колонок. Имеет смысл только для csv-файлов.

Описание: записывает таблицу в файл.

ИзФайла / LoadFromFile

Синтаксис: ИзФайла(стрИмяФайла, [чФормат = 1], [чСИменамиКолонок = 1])

Параметры:
  • стрИмяФайла - тип: Строка. Имя файла, из которого нужно считать таблицу.
  • чФормат - тип: Число. Формат файла. Может принимать следующие значения: 1 - запись значений во внутреннем формате; 2 - запись значений во внешнем формате; 3 - csv файл со значениями во внутреннем формате; 4 - csv файл со значениями во внешнем формате.
  • чСИменамиКолонок - тип: Число. 1 - в первой строке файла хранятся имена колонок. Имеет смысл только для csv-файлов. Если параметр = 0, то имена колонок образуются как __col__<НомерКолонки>.

Возвращает: тип: Число. 1 - таблица считана успешно; 0 - ошибка при чтении.

Описание: считывает таблицу из файла.

ВСтроку / SaveToString

Синтаксис: ВСтроку([чФормат = 1], [Индекс = ""])

Параметры:
  • чФормат - тип: Число. 1 - запись значений во внутреннем формате; 0 - запись значений во внешнем формате.
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс. Выгрузка в файл производится с учётом сортировки и фильтра (если есть) по указанному индексу.

Возвращает: тип: Строка. Строковое представление таблицы.

Описание: Преобразует таблицу в строковое представление для сериализации. Полученная строка впоследствии может использоваться в методе ИзСтроки().

ИзСтроки / LoadFromString

Синтаксис: ИзСтроки(стрПредставление)

Параметры:
  • стрПредставление - тип: Строка. Строковое представление таблицы.

Описание: загружает таблицу из строкового представления.

ВыбратьСтроку / ChooseLine

Синтаксис: ВыбратьСтроку([Строка = 0], [стрЗаголовокОкна = ""], [чТаймаут = 0], [Индекс = ""])

Параметры:
  • Строка - тип: любой. Переменная, куда помещается значение - номер выбранной строки. При вызове метода здесь можно передавать значение начального номера строки.
  • стрЗаголовокОкна - тип: Строка. Заголовок окна выбора.
  • чТаймаут - тип: Число. Время ожидания системы (в секундах) на отклик пользователя. Если не задано, то время ожидания бесконечно.
  • Индекс

Возвращает:

Описание:

Показать / Show

Синтаксис: Показать([Индекс = ""])

Параметры:
  • Индекс - тип: Строка, Число. Идентификатор или номер индекса. По умолчанию используется основной индекс. В окне выбора строки появятся с учётом сортировки и фильтра (если есть) по указанному индексу.

Возвращает: тип: Число. 1 - если выбор произведен (нажата кнопка "ОК"); 0 - если выбор не произведен (нажата кнопка "ОТМЕНА").

Описание: Открывает окно для интерактивного выбора строки в таблице значений. Метод предназначен в основном для отладки.

Вопрос: Индексированная Таблица значений


Вопрос такой, можно ли сделать Таблицу Значений на форме диалога индексированной и далее работать с ней, как с индексированной таблицей?
Или лучше работать отдельно с ИТЗ а потом итоги выгружать в видимую на форме Таблицу значений?
И второй вопрос, как сделать так, чтобы при выгрузке ИТЗ в Таблицу значений, не слетал формат колонок?
ПыСы -компонента 1с ++ стоит, если чо.

Ответ: () после кулдауна натахауза пряника нигде не достать, если это конечно не просто сабж из анекдота

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


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

1. В форму диалога поместите таблицу значений.
2. В модуле формы опишите колонки таблицы: Товар, Количество, Цена, Сумма.
3. Поместите на форму диалога реквизиты диалога "Товар", "Цена", "Коли¬чество" и кнопку Добавить строку, которая добавляет новую строку в таблицу значений и заполняет ее значениями соответствующих реквизи¬тов. Сумма должна вычисляться как произведение цены на количество.
4. Добавьте кнопку Удалить строку, которая удаляет текущую строку таб¬лицы значений. Предусмотрите ситуацию пустой таблицы значений.
5. Добавьте кнопку Свернуть, которая должна суммировать по товарам сумму и количество, в колонке Цена должна вычисляться средняя цена товара.
6. Добавьте кнопку Развернуть, которая восстанавливает состояние табли¬цы значений до свертки.
7. Добавьте кнопку Сортировка для упорядочивания строк по товарам.

Заранее спасибо!

Ответ: платформа? Управляемый или обычный режим?
В синт.поме "Таблица значений"

Вопрос: 8.2 - Получить данные из вычисляемого поля таблицы значений


Не знаю как толком объяснить.
На форме есть табличное поле. В процедуре ПриПолученииДанных(Элемент, ОформленияСтрок) в отдельную
колонку вычисляю значение:

Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл.... ОформлениеСтроки.Ячейки.Отгружено.Значение = Тут формула.... КонецЦикла

Так вот как мне пройти по строкам в таблице значений и получить данные из этой ячейки?

Ответ:

ты путаешь понятия. табличное поле и есть табличное поле -ТЗ тут не пахнет. так же как и рассчитываешь та же и обходи

Вопрос: СКД: Иерархию из таблицы значений


Здравствуйте!
Подскажите как создать иерархию из таблицы значений типа такой

ПолеСтрока | ПолеСтрокаРодитель
________________________________
Основной каталог | Основной каталог
Васильев И.А. | Основной каталог
Аренда имущества | Васильев
Разные документы | Васильев
Иванов | Основной каталог
Аренда имущества | Иванов
Разные документы | Иванов

Нужно как-то получить дерево из этого. Пока работает программно, но думаю, что такое дерево можно вполне в скд построить.

Ответ: Ну программно ты создаешь объект ДеревоЗначений и тулишь туда ручками владельца (узлы) и подчиненные элементы (строки).

А эти данные только в виде таблицы значений, а ен элементы иерархического справочника? Если это иерархический справочник, то это проще простого.

А если надо именно из таблицы значений, создавая ее как угодно, то делать так:

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

Вопрос: Вынос Таблицы значений в общий модуль


Добрый день!
Новичок в 1С. Изучаю версию 3.0 Тонкий клиент. Есть внешняя управляемая форма. Хочу вынести таблицу значений в общие модули. Застопорилась, помогите пожалуйста:
1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 & НаСервере Процедура Выполнить ЗапросНаСервере() З= Новый запрос; З. Текст = "ВЫБРАТЬ | РасходныйКассовыйОрдерРасшифровкаПлатежа.ДоговорКонтрагента, | РасходныйКассовыйОрдерРасшифровкаПлатежа.СуммаПлатежа |ИЗ | Документ.РасходныйКассовыйОрдер.РасшифровкаПлатежа КАК РасходныйКассовыйОрдерРасшифровкаПлатежа" ; Тз= З. Выполнить () . Выгрузить() ; //Вывод результата запроса в таблицу формы ТФ(Тз) ; КонецПроцедуры & НаСервере Процедура ТФ(Тз) ОбщиеФункции. ЗаполнитьТаблицуФормы(Тз) КонецПроцедуры

Общий модуль:

Ошибка:{Форма.Форма.Форма(23)}: Ошибка при вызове метода контекста (ЗаполнитьТаблицуФормы)
ОбщиеФункции.ЗаполнитьТаблицуФормы(Тз)
по причине:
Несоответствие типов (параметр номер "1") (Неверный тип параметра. Допустимы только примитивные типы, ссылки, Структура)
Как передать ТЗ для дальнейшей обработки?

Ответ:

Сообщение от Prsvet

Почему тип число передает, а при передачи ТЗ нужно ставить повторное использование возвращаемых значений не использовать?

Потому что,

Сообщение от Prsvet

повторное использование возвращаемых значений

Кэшируется на клиенте, а таблица значений не сериализуется на клиенте

Добавлено через 32 секунды
с этим параметром нужно работать аккуратно!

Добавлено через 35 секунд
Prsvet , если ты не знаешь как работает этот параметр, то лучше не используй его!

Вопрос: Таблица значений с циклическим заполнением колонок


Всем доброго.
Задача - вывести таблицу прихода/расхода товаров за выбранный период с понедельной разбивкой. Решил реализовать как ТаблицуЗначений (сначала думал сделать отчетом, но не нашел, как). Поскольку количество столбцов заранее неизвестно, таблица генерируется программно:

//*** описание ТЗ как реквизита формы массивТипаВыбора = новый массив; массивТипаВыбора.Добавить(тип("таблицаЗначений")); описаниеТипаВыбора = новый описаниеТипов(массивТипаВыбора); массивРеквизитов = новый массив; массивРеквизитов.Добавить(новый реквизитФормы("ТЗФорма", описаниеТипаВыбора, "", "ТЗформа")); //*** описание типов КЧ = новый КвалификаторыЧисла(10,2); КС = новый КвалификаторыСтроки(100); мас = новый массив; мас.Добавить(тип("Строка")); ТипСтрока = новый ОписаниеТипов(мас, КС); мас.Очистить(); мас = новый массив; мас.Добавить(тип("Число")); ТипЧисло = новый ОписаниеТипов(мас, КЧ); мас.Очистить(); // *** //создаем временную таблицу значений ТЗ = новый ТаблицаЗначений; ТЗ.Колонки.Добавить("товар", ТипСтрока, "товар"); для н=1 по КолвоНедель цикл ТЗ.Колонки.Добавить("приход" + н, ТипЧисло, "приход" + н); ТЗ.Колонки.Добавить("расход" + н, ТипЧисло, "расход" + н); КонецЦикла; для каждого колонка из тз.Колонки цикл массивРеквизитов.Добавить(новый РеквизитФормы(колонка.Имя, колонка.ТипЗначения, "ТЗФорма")); КонецЦикла; изменитьРеквизиты(массивРеквизитов); таблицаПолейВыбора = Элементы.Добавить("ТЗФорма", тип("ТаблицаФормы")); таблицаПолейВыбора.ПутьКДанным = "ТЗФорма"; таблицаПолейВыбора.Отображение = отображениеТаблицы.Список; для каждого колонка из ТЗ.колонки цикл новыйЭлемент = элементы.Добавить(колонка.Имя, тип("ПолеФормы"), таблицаПолейВыбора); новыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; новыйЭлемент.ПутьКДанным = "ТЗФорма." + Колонка.Имя; новыйЭлемент.Ширина = 10; КонецЦикла;

Потом заполняется колонка наименований:

ЗапрНом = новый запрос; запрНом.Текст = "выбрать ТоварыНаСкладахОбороты.Номенклатура КАК номенклатура | из РегистрНакопления.ТоварыНаСкладах.Обороты() КАК ТоварыНаСкладахОбороты"; ТЗНом = запрНом.Выполнить().Выгрузить(); для каждого стрНом из ТЗНом цикл стрНом = стрНом.номенклатура; //добавить данную номенклатуру во временную ТЗ СтрТЗ = ТЗ.Добавить(); СтрТЗ.товар = стрНом; КонецЦикла;

Наконец, выгружаем товар из временной ТЗ в ТЗ формы:

ЗначениеВРеквизитФормы(ТЗ, "ТЗФорма");

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

Но в данном случае требуется по две колонки на каждую неделю. Пусть имена этих колонок будут отличаться номером недели, то есть приход1, расход1, приход2, расход2 и тд. Понятно, что при этом организуется цикл, в котором в запросе на приход и расход вместо конца периода передается дата, бывшая на начало итерации + неделя.

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

ТЗПрихРасхОбор = ЗапрПрихРасхОбор.Выполнить().выгрузить(); для каждого стрПрихРасхОбор из ТЗПрихРасхОбор цикл стрТЗ.приход = стрПрихоРасхОбор.приход; стрТЗ.расход = стрПрихоРасхОбор.расход; стрТЗ.оборот = стрПрихоРасхОбор.оборот; КонецЦикла;

Ответ:

наконец добрался до кода. спасибо, помогло. получилось так:

ТЗ = ЗапросНоменклатуры(); для н=1 по колвоНедель цикл ТЗ.колонки.добавить("приход" + н, типЧисло, "приход" + н); ТЗ.колонки.добавить("расход" + н, типЧисло, "расход" + н); КонецЦикла; для н = 1 по колвоНедель цикл КолонкаПрих = ТЗ.колонки.найти("приход" + н); КолонкаРасх = ТЗ.колонки.найти("расход" + н); КонецПериода = началоПериода + неделя; ТЗПР = ЗапросОборотов(НачалоПериода, КонецПериода); МПрих = ТЗПР.выгрузитьКолонку(0); МРасх = ТЗПР.выгрузитьКолонку(1); ТЗ.загрузитьКолонку(МПрих, КолонкаПрих); ТЗ.загрузитьКолонку(Мрасх, КолонкаРасх); НачалоПериода = КонецПериода; КонецЦикла;

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

Вопрос: Как не зная структуры таблицы значений обработать ее в Запросе


Здравствуйте. Есть таблица значений. Точные имена колонок не известны. Необходимо обработать таблицу значений и добавить к ней одну колонку и заполнить ее. Заполнение осуществляется на основании одной колонки у которой известно имя.
Самый простой вариант - добавить колонку и обработать таблицу в цикле. Но это не совсем хорошо.
Возможно ли это сделать в запросе?
Спасибо.

Ответ:

В первом приближении:

Выбрать * ПОМЕСТИТЬ ВТ_ВнешниеДанные ИЗ &Таблица КАК ВнешниеДанные

Выбрать ВнешниеДанные.*, Таблица.ПОЛЕ1 ИЗ ВТ_ВнешниеДанные КАК ВнешниеДанные ЛЕВОЕ СОЕДИНЕНИЕ <Таблица> КАК Таблица ПО ВнешниеДанные.Поле1 = Таблица.Поле1

Вопрос: Как при выборе значения ячейки таблицы значений на УФ делать отбор по владельцу?


Уважаемые коллеги! Не так давно жизнь вынудила меня столкнуться с управляемыми формами, потому я в них еще не сильно понимаю. Не сочтите вопрос дурацким и помогите кто чем может:) Вопрос следующий. Формирую свою таблицу значений и вывожу ее на форму. Первая колонка - ссылка на справочник номенклатуры, остальные колонки - ссылки на справочник для которого Номенклатура является Владельцем. Как мне сделать так, что бы при начале выбора значения в такой колонке в списке значений уже стоял отбор по владельцу. Пока сделал через событие НачалоВыбора, там открываю список с нужным отбором. Но проблема не понимаю куда полученное значение пихать в обработке подбора? И есть подозрение, что отбор по владельцу можно установить через свойство колонки ПараметрыВыбора. Как быть? Подскажите!

Ответ: и вот у меня есть

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если ИсточникВыбора.ИмяФормы = "Справочник.ЗначенияСвойствОбъектов.Форма.ФормаСписка" Тогда И вот ту я не заню что написать
, что бы поместить ВыбранноеЗначение в редактируемую ячейку таблицы!!!

КонецЕсли;
КонецПроцедуры

Вопрос: Группировки и Свернуть() по таблице значений


внимательно, это 7 .7 :)
Итак сабж: выгружаю ТЧ документа в таблицу значений.
ТЧ документа имеет вид
Расх.накл. | Клиент | адрес доставки.

Обрабатываю таблицу значений:
выбратьСтроки();
пока получитьСтроку() = 1 Цикл тбл.НоваяСтрока(); тбл.Клиент = Клиент; тбл.АдресДоставки = АдресДоставки; тбл.НомерДок = Накладная.НомерДок; КонецЦикла ;
Суть в следующем. В макете при печать должно в одной ячейке выходить Клиент, АдресДоставки и номера всех расходных накладных по клиенту, а так же может быть один клиент, но разные адреса доставки. То есть, в случае совпадения Клиента и Адреса, выводить список накладных по этим параметрам.

Ответ: () Используй черный запрос про документам. Группировки: Клиент, Адрес доставки, Реализация (Упорядочивание по номеру). Циклы используешь с учетом группировок. В исходную таблицу выводи строки во второй группировке (Адрес доставки), но после цикла по третьей группировке (Реализация), потому что во второй группировке будешь формировать строку с номерами накладных.
НомераНакладных = "";
Пока Запрос.Группировка(3 ) = 1 Цикл НомераНакладных = НомераНакладных + ?(ПустаяСтрока (НомераНакладных) = 1 , "", ", ") + Запрос.ЗначениеУпорядочивания((СтрокаТаблицы.Данные,ДлинаСтроки)=ЧтоИщем Тогда МассивНайденныхСтрок.Добавить(СтрокаТаблицы); КонецЕсли ; КонецЦикла ;