Какие виды операций можно выполнять с таблицами в 1С
Что проверяют
Понимаете ли вы, что «таблица» в 1С означает разные вещи: объекты базы данных, коллекцию ТаблицаЗначений в памяти, табличные части и временные таблицы запроса. Следом обычно дают практическую задачу: свернуть таблицу по номенклатуре или найти строки по условию без перебора.
Как отвечать
Сразу разведите понятия.
С физическими таблицами СУБД через SQL в 1С не работают. Структуру задают объекты метаданных в конфигураторе: справочники, документы, регистры. Читают данные языком запросов (ВЫБРАТЬ ... ИЗ Справочник.Номенклатура), а пишут через объектную модель: Справочники.Номенклатура.СоздатьЭлемент(), Ссылка.ПолучитьОбъект(), Записать(), для регистров через набор записей. В запросе доступны соединения, СГРУППИРОВАТЬ ПО, ОБЪЕДИНИТЬ ВСЕ, ИТОГИ и временные таблицы через ПОМЕСТИТЬ.
С ТаблицаЗначений операции такие:
- структура:
Колонки.Добавить()сОписаниеТипов; - строки:
Добавить(),Вставить(),Удалить(),Очистить(),Количество(); - поиск:
Найти()возвращает первую строку по значению,НайтиСтроки()принимает структуру отбора и возвращает массив. Для ускорения добавляют индекс черезИндексы.Добавить(); - обработка:
Сортировать("Сумма Убыв"),Свернуть("Номенклатура", "Количество, Сумма")группирует и суммирует,Скопировать()с отбором и списком колонок,Итог()по колонке; - колонки целиком:
ВыгрузитьКолонку()в массив иЗагрузитьКолонку()обратно.
Упомяните связку с запросами: Выгрузить() у результата запроса отдаёт ТаблицаЗначений, а таблицу можно передать в запрос параметром и поместить во временную таблицу. У колонок при этом должны быть заданы типы.
Где спотыкаются
Пишут запрос внутри цикла по строкам. Вместо одного запроса с соединением база получает тысячу мелких, и обработка тормозит на порядки.
Удаляют строки в цикле Для Каждого по той же коллекции. Строки пропускаются, правильно идти по индексу от конца к началу.
Забывают, где живёт ТаблицаЗначений. На тонком клиенте она недоступна, на форме это ДанныеФормыКоллекция, и преобразовывать её нужно на сервере через РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы().