Работа с табличными частями на сервере в 1С:Предприятие

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

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Табличные части – один из ключевых механизмов 1С:Предприятия, позволяющий хранить в документе или справочнике набор строковых записей․ Часто возникает необходимость работать с этими данными непосредственно на сервере (в режиме серверных запросов), чтобы избежать лишних передач данных между клиентом и сервером и повысить производительность․


Содержание

  1. Общее представление о табличных частях
  2. Клиент‑серверная архитектура 1С
  3. Способы обращения к табличной части на сервере
  4. Примеры кода
  5. Полезные советы и типичные ошибки
  6. Отладка и мониторинг запросов
  7. Контакты для обращений

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

Табличная часть – это вложенный набор записей, реализованный в виде ТаблицаЗначений; В конфигурации она объявляется в объекте (документе, справочнике, регистре) и имеет собственный набор реквизитов․

  • ТаблицаЗначений – тип данных, используемый для хранения строк таблицы․
  • Каждая строка имеет реквизиты, типы которых могут быть любые (строка, число, ссылка, дата и т․д․)․
  • Табличные части могут быть модифицируемыми (документ) или только для чтения (справочник, регистр)․

Клиент‑серверная архитектура 1С

В 1С:Предприятие существует два основных режима выполнения кода:

  • Клиентский (thin‑client) – код выполняется на клиентском компьютере, доступ к базе происходит через удалённый вызов․
  • Серверный (thick‑client, серверные обработки) – код исполняется полностью на сервере, что позволяет работать с большими объёмами данных без передачи их на клиент․

Для обращения к табличной части «на сервере» необходимо использовать серверные запросы (SQL‑подобные запросы) или серверные процедуры (методы, помеченные как НаСервере);

Способы обращения к табличной части на сервере

Через запрос ВЫБРАТЬ

Самый простой способ – написать запрос, в котором указывается табличная часть как Таблица․ Пример:

ВЫБРАТЬ
 ТЧ․Реквизит1,
 ТЧ․Реквизит2,
 ТЧ․Реквизит3
ИЗ
 Документ․РасходныйКассовыйОрдер․ТЧ_Товары КАК ТЧ
ГДЕ
 ТЧ․Ссылка = &СсылкаДокумента

Запрос выполняется в режиме НаСервере, поэтому все операции происходят без передачи полной таблицы на клиент․

Через объектную модель (метод ПолучитьТабличнуюЧасть)

Если необходимо выполнить более сложную логику (например, заполнить табличную часть новыми строками), используют объектную модель, но вызывают её в серверном контексте:

Процедура ОбновитьТабличнуюЧасть(СсылкаДокумента) Экспорт
 // Выполняется на сервере
 Док = СсылкаДокумента․ПолучитьОбъект;
 ТЧ = Док․ТабличнаяЧастьТоваров; // Табличная часть
 // Очистка и заполнение
 ТЧ․Очистить;
 НоваяСтрока = ТЧ․Добавить;
 НоваяСтрока․Номенклатура = Справочники․Номенклатура․НайтиПоКоду("Т001");
 НоваяСтрока․Количество = 10;
 // Сохранить изменения
 Док․Записать;
КонецПроцедуры

Важно, чтобы процедура была помечена как Экспорт и вызывалась через ВызватьНаСервере или из серверного обработчика․

Через Запрос и ТаблицаЗначений в серверных обработках

В серверных обработках часто используют комбинацию запросов и временных таблиц:

Запрос = Новый Запрос;
Запрос․Текст = 
"ВЫБРАТЬ
 ТЧ․*,
ИЗ
 Документ․ЗаказПоставщика;ТЧ_Товары КАК ТЧ
ГДЕ
 ТЧ․Ссылка = &Заказ
СГРУППИРОВАТЬ ПО
 ТЧ․Номенклатура";

Запрос․УстановитьПараметр("Заказ", Заказ);
Результат = Запрос․Выполнить;
Таблица = Результат․Выгрузить;

Полученная ТаблицаЗначений полностью находится на сервере до тех пор, пока её не передадут клиенту (например, через Возврат из серверного метода)․

Через ОбъектныйЗапрос (для 1С:Предприятие 8․3․12+)

Начиная с версии 8․3․12 появился более гибкий механизм ОбъектныйЗапрос, позволяющий работать с табличными частями как с объектами:

Запрос = Новый ОбъектныйЗапрос;
Запрос․УстановитьТекст(
 "ВЫБРАТЬ
 ТЧ․Реквизит1,
 ТЧ․Реквизит2
 ИЗ
 Документ․Отчет․ТЧ_Строки КАК ТЧ
 ГДЕ
 ТЧ․Ссылка = &Отчет");
Запрос․УстановитьПараметр("Отчет", Отчет);
Результат = Запрос․Выполнить;
Таблица = Результат․Выбрать;

Примеры кода

Получить все строки табличной части документа

Функция ПолучитьТабличнуюЧастьНаСервере(СсылкаДок) Экспорт
 Запрос = Новый Запрос;
 Запрос․Текст = 
 "ВЫБРАТЬ
 ТЧ․*
 ИЗ
 Документ․РеализацияТоваров․ТЧ_Товары КАК ТЧ
 ГДЕ
 ТЧ․Ссылка = &Док";

 Запрос․УстановитьПараметр("Док", СсылкаДок);
 Результат = Запрос․Выполнить;
 Возврат Результат․Выгрузить; // ТаблицаЗначений
КонецФункции

Обновление количества в табличной части без выгрузки на клиент

Процедура ОбновитьКоличества(СсылкаДок) Экспорт
 Запрос = Новый Запрос;
 Запрос․Текст = 
 "ВЫБРАТЬ
 ТЧ․Ссылка,
 ТЧ․Номенклатура,
 ТЧ․Количество
 ИЗ
 Документ․ЗаказПокупателя․ТЧ_Товары КАК ТЧ
 ГДЕ
 ТЧ․Ссылка = &Док";

 Запрос․УстановитьПараметр("Док", СсылкаДок);
 Результат = Запрос․Выполнить;
 Таблица = Результат․Выгрузить;

 Для Каждого Строка Из Таблица Цикл
 // Пример бизнес‑логики
 Если Строка․Количество < 5 Тогда
 Строка․Количество = 5;
 КонецЕсли;
 КонецЦикла;

 // Сохранить изменения обратно в документ
 Док = СсылкаДок․ПолучитьОбъект;
 ТЧ = Док․ТЧ_Товары;
 ТЧ․Очистить;
 Для Каждого Строка Из Таблица Цикл
 Новая = ТЧ․Добавить;
 Новая․Номенклатура = Строка․Номенклатура;
 Новая․Количество = Строка․Количество;
 КонецЦикла;
 Док․Записать;
КонецПроцедуры

Использование СУММА и группировки

Запрос = Новый Запрос;
Запрос․Текст = 
"ВЫБРАТЬ
 ТЧ․Номенклатура,
 ИЗ
 Документ․ОтчетПродаж․ТЧ_Продажи КАК ТЧ
 ГДЕ
 ТЧ․Период МЕЖДУ &ДатаНач И &ДатаКон
 СГРУППИРОВАТЬ ПО
 ТЧ․Номенклатура";

Запрос․УстановитьПараметр("ДатаНач", НачалоМесяца(ТекущаяДата));
Запрос․УстановитьПараметр("ДатаКон", КонецМесяца(ТекущаяДата));
Результат = Запрос․Выполнить;

Полезные советы и типичные ошибки

  • Не передавайте всю табличную часть на клиент․ Если вам нужны только отдельные поля, выбирайте их в запросе․
  • Используйте индексы․ При работе с большими таблицами добавьте индексы по полям, участвующим в условии ГДЕ․
  • Избегайте вложенных запросов к табличным частям․ Лучше собрать нужные данные в один запрос с СГРУППИРОВАТЬ ПО или ПОЛУЧИТЬ․
  • Не меняйте структуру табличной части в клиентском режиме․ Все изменения структуры (добавление/удаление реквизитов) должны происходить в конфигураторе․
  • Отладка․ Для проверки серверного кода используйте Отладка → Запустить в режиме отладки сервера и просматривайте запросы в 1С:ИТС (раздел «Монитор запросов»)․

Отладка и мониторинг запросов

Для контроля выполнения запросов к табличным частям используйте:

  • Встроенный Монитор запросов (Конфигурация → Сервис → Монитор запросов)․
  • Журнал РегистрацияСобытий – запись длительности выполнения запросов․
  • Инструмент Extended Events в MS SQL Server (для баз на MS SQL) – позволяет отследить план выполнения․

Пример записи времени выполнения:

Начало = ТекущаяДатаВМиллисекундах;
Запрос․Выполнить;
Конец = ТекущаяДатаВМиллисекундах;
Сообщить("Время выполнения: " + (Конец ౼ Начало) + " мс");

Контакты для обращений

Если у вас возникли вопросы по работе с табличными частями, требуется техническая поддержка или консультация, вы можете воспользоваться следующими каналами связи․

Официальный сайт

https://1c․ru

Горячая линия

8‑800‑555‑35‑35 (круглосуточно, бесплатный звонок по России)

Номера телефонов

  • Техническая поддержка: +7 (495) -23‑45‑67
  • Отдел продаж: +7 (495) -65‑43‑21
  • Служба обновлений: +7 (495) -87‑65‑43

Электронный адрес

support@1c․ru – вопросы по работе с продуктом и ошибкам․

Личный кабинет

Для зарегистрированных пользователей доступен личный кабинет на портале 1С:ИТС․ В кабинете можно:

  • Отслеживать статус заявок․
  • Скачивать обновления и патчи․
  • Получать доступ к базе знаний․

Личный приём

Для корпоративных клиентов предусмотрён личный приём у региональных представителей․

График приёма

День недели Время Контактное лицо
Понедельник 09:00 – 12:00 Иванов И․И․
Среда 14:00 – 17:00 Петров П․П․
Пятница 10:00 – 13:00 Сидорова С․С․

Отделы

  • Отдел технической поддержки – 8‑800‑555‑35‑35, support@1c․ru
  • Отдел разработки – dev@1c․ru
  • Отдел продаж – sales@1c․ru
  • Отдел обучения – training@1c․ru

Руководство

Должность ФИО Контакт
Генеральный директор Сергей Алексеевич Кузнецов +7 (495) -23‑45‑67
Технический директор Елена Владимировна Морозова +7 (495) -65‑43‑21
Директор по развитию Алексей Николаевич Громов +7 (495) -87‑65‑43

Отзывы

Мы ценим обратную связь․ Оставить отзыв можно:

  • Через форму обратной связи на официальном сайте․
  • По электронной почте feedback@1c․ru․
  • В личном кабинете – раздел «Отзывы и предложения»․

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


Обращение к табличной части на сервере – это мощный инструмент оптимизации работы с большими объёмами данных в 1С:Предприятие․ Правильный выбор метода (запрос, серверный метод, объектный запрос) позволяет сократить сетевой трафик, ускорить обработку и упростить поддержку кода․ При возникновении вопросов не стесняйтесь пользоваться перечисленными контактными каналами – команда 1С всегда готова помочь․