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

В этой статье мы разберём 5 проверенных способов извлечения данных из текущей строки — от простых пользовательских приёмов до программных решений на встроенном языке. Вы узнаете, как получить значения полей без написания кода (через контекстное меню и стандартные функции), а также как автоматизировать процесс с помощью скриптов. Особое внимание уделим работе с табличными частями документов и динамическими списками, где ошибки при обращении к текущей строке ведут к самым распространённым сбоям.

Материал будет полезен:

  • 👨‍💻 Разработчикам 1С — для оптимизации кода и обработки событий;
  • 📊 Аналитикам — при создании отчётов с динамической фильтрацией;
  • 📝 Пользователям, работающим с большими объёмами данных в табличных документах.

📊 Какой клиент 1С вы используете чаще?
Толстый клиент
Тонкий клиент
Веб-клиент
Мобильное приложение

1. Получение данных текущей строки через контекстное меню (без кода)

Если вам нужно быстро скопировать значение из одной строки табличной части в другую — или просто посмотреть детальную информацию по текущей записи — не обязательно писать скрипты. В 1С:Предприятие 8.3 для этого предусмотрены встроенные инструменты.

Самый простой способ:

  1. Выделите строку в табличной части документа или справочника.
  2. Нажмите правую кнопку мыши и выберите Копировать (для переноса данных) или Показать данные (для просмотра деталей).
  3. Для таблиц с большим количеством колонок используйте Настроить списокОтображать только выбранные поля, чтобы упростить навигацию.

Этот метод работает в большинстве стандартных конфигураций (Бухгалтерия 3.0, Управление торговлей 11, Зарплата и управление персоналом 3.1), но имеет ограничения:

  • ❌ Не позволяет модифицировать данные программно;
  • ❌ Не работает с динамическими списками в управляемых формах;
  • ❌ Не подходит для массовой обработки строк.

⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) пункты контекстного меню могут быть переопределены. Если стандартные команды отсутствуют, проверьте настройки ролей пользователя или обратитесь к администратору.

2. Использование функции "Текущие данные" в управляемых формах

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

Пример кода для обработчика события ПриИзменении в табличной части документа:

&НаКлиенте

Процедура ТабличнаяЧастьТоварыПриИзменении(Элемент)

ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

Сообщить("Артикул: " + ТекущаяСтрока.Артикул);

Сообщить("Количество: " + ТекущаяСтрока.Количество);

КонецПроцедуры

Ключевые особенности метода:

  • ✅ Работает в тонком и веб-клиенте;
  • ✅ Не требует обращения к серверу (код выполняется на клиенте);
  • ✅ Поддерживает проверку изменений в реальном времени.

Однако есть нюансы:

  • 🔹 ТекущиеДанные возвращает значения до применения изменений (если строка ещё не сохранена);
  • 🔹 В динамических списках вместо ТекущиеДанные используется ВыбраннаяСтрока.

💡

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

3. Работа с текущей строкой в табличной части на сервере

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

Пример серверной процедуры для проверки остатков при изменении количества товара:

&НаСервере

Процедура ПриИзмененииКоличества(Объект, ТекущаяСтрока)

Если ТекущаяСтрока.Количество > ТекущаяСтрока.Доступно Тогда

ВызватьИсключение "Превышен остаток товара: " + ТекущаяСтрока.Номенклатура;

КонецЕсли;

// Автоматическое заполнение суммы

ТекущаяСтрока.Сумма = ТекущаяСтрока.Количество * ТекущаяСтрока.Цена;

КонецПроцедуры

Важные детали:

  • 📌 ТекущаяСтрока передаётся как параметр в обработчики событий (ПередЗаписью, ПриИзменении);
  • 📌 Для доступа к строке по индексу используйте Объект.ТабличнаяЧасть[НомерСтроки];
  • 📌 В 1С:Предприятие 8.2 синтаксис отличается — вместо ТекущаяСтрока может потребоваться ЭлементыФормы.ИмяТаблицы.ТекущаяСтрока.

Метод Клиент Сервер Пример использования
ТекущиеДанные Быстрое чтение значений в управляемых формах
ТекущаяСтрока (параметр) Обработка событий ПередЗаписью
ЭлементыФормы.Имя.ТекущаяСтрока ✅ (8.2) Устаревший синтаксис для обычных форм
ВыбраннаяСтрока Работа с динамическими списками
⚠️ Внимание: При работе с большими табличными частями (10 000+ строк) избегайте циклов по всем строкам на сервере. Используйте Запрос или Объект.Выгрузить() для оптимизации производительности.

4. Получение данных из динамического списка

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

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

&НаКлиенте

Процедура СписокНоменклатурыПриИзменении(Элемент)

Если Элемент.ВыбраннаяСтрока = Неопределено Тогда

Возврат;

КонецЕсли;

ВыбранныйТовар = Элемент.ВыбраннаяСтрока.Ссылка;

Сообщить("Выбран: " + ВыбранныйТовар.Наименование);

КонецПроцедуры

Частые ошибки при работе с динамическими списками:

  • 🚫 Попытка получить ВыбраннаяСтрока до того, как пользователь кликнет на строку (вернёт Неопределено);
  • 🚫 Использование ТекущиеДанные вместо ВыбраннаяСтрока;
  • 🚫 Забывают проверить, включён ли режим выбора (РежимВыбора).

Как включить режим выбора в динамическом списке?

Чтобы свойство ВыбраннаяСтрока работало, в настройках динамического списка (в конфигураторе) необходимо:

  1. Выбрать элемент формы с типом ДинамическийСписок;
  2. В палитре свойств найти параметр РежимВыбора и установить значение Истина;
  3. Указать ПолеВыбора (например, Ссылка для справочников).

После этого в коде станет доступна ВыбраннаяСтрока.

5. Альтернативные способы: через запрос и временные таблицы

Если вам нужно получить данные текущей строки в контексте сложной выборки (например, с учётом связей с другими справочниками), удобнее использовать запросы. Этот метод универсален и работает как в управляемых, так и в обычных формах.

Пример запроса для получения детальной информации по текущей строке заказа:

&НаСервере

Функция ПолучитьДанныеТекущейСтроки(СсылкаНаДокумент, ИндексСтроки)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ТоварыСписок.Номенклатура КАК Номенклатура,

| ТоварыСписок.Количество КАК Количество,

| Номенклатура.Артикул КАК Артикул

|ИЗ

| Документ.ЗаказПокупателя.Товары КАК ТоварыСписок

| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

| ПО ТоварыСписок.Номенклатура = Номенклатура.Ссылка

|ГДЕ

| ТоварыСписок.Ссылка = &Ссылка

| И ТоварыСписок.НомерСтроки = &Индекс";

Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);

Запрос.УстановитьПараметр("Индекс", ИндексСтроки);

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

Возврат Результат.Выгрузить();

КонецФункции

Преимущества метода:

  • 🔧 Гибкость: можно получить данные из связанных таблиц;
  • 📈 Производительность: оптимально для больших объёмов данных;
  • 🔄 Универсальность: работает в любых конфигурациях.

Недостатки:

  • ⚠️ Требует знания языка запросов ;
  • ⚠️ Медленнее, чем прямое обращение к ТекущаяСтрока, для простых задач.

Убедитесь, что выполнены условия:

|Проверьте, что у вас есть права на чтение данных

|Определите точный индекс строки (или используйте НомерСтроки)

|Укажите корректную ссылку на документ или справочник

|Настройте параметры запроса для защиты от SQL-инъекций-->

6. Обработка текущей строки в отчётах и обработках

В отчётах и внешних обработках доступ к текущей строке организован иначе, чем в документах. Здесь часто используется событие ПриАктивизацииСтроки или работа с ОбластьЯчеек в табличных документах.

Пример для обработки табличного документа (например, в отчёте Анализ продаж):

&НаКлиенте

Процедура ТабличныйДокументПриАктивизацииСтроки(Элемент, Строка, Колонка)

// Получаем значение из ячейки

Значение = Элемент.ОбластьЯчеек.ПолучитьОбласть(Строка, Колонка).Текст;

// Пример: выделяем строки с нулевым количеством

Если Колонка.Имя = "Количество" И Значение = 0 Тогда

Элемент.ОбластьЯчеек.ЦветФона(Строка, Колонка) = ВебЦвета.Красный;

КонецЕсли;

КонецПроцедуры

Особенности работы с отчётами:

  • 📌 Для динамических отчётов используйте ПолеВыбора и ВыбранныеСтроки;
  • 📌 В СКД (система компоновки данных) текущая строка доступна через ЭлементыФормы.ИмяОтчёта.ВыбраннаяСтрока;
  • 📌 Для экспорта данных в Excel используйте ЗаписатьТабличныйДокумент.

⚠️ Внимание: В отчётах на основе СКД (например, Универсальный отчёт) прямая работа с текущей строкой может быть ограничена. В таких случаях настройте ПараметрыВывода для передачи данных в обработчик.

7. Типичные ошибки и как их избежать

Даже опытные разработчики сталкиваются с проблемами при работе с текущими строками. Вот самые распространённые ошибки и способы их решения:

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

Дополнительные рекомендации:

  • 🔹 Всегда проверяйте, что строка существует, перед обращением к её полям;
  • 🔹 Для отладки используйте Сообщить(ТекущаяСтрока.Ссылка);
  • 🔹 В 1С:Предприятие 8.3.20+ для динамических списков доступен метод ПолучитьВыбранныеСтроки().

💡

Перед работой с текущей строкой всегда проверяйте её существование. Это предотвращает 90% ошибок, связанных с обращением к несуществующим данным.

FAQ: Ответы на частые вопросы

Как получить текущую строку в мобильном приложении 1С?

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

  • 📱 События ПриИзменении могут срабатывать реже из-за оптимизации;
  • 📱 Для табличных частей используйте Объект.ТабличнаяЧасть.ТекущаяСтрока на сервере;
  • 📱 Избегайте тяжёлых операций на клиенте — они тормозят интерфейс.
Можно ли получить текущую строку в фоновом задании?

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

  1. Передайте в задание Ссылку на объект и ИндексСтроки;
  2. Используйте запросы для извлечения данных;
  3. Обновите интерфейс после завершения задания через ОповеститьОжидающиеФормы().
Почему после изменения строки данные не сохраняются?

Это типичная проблема при работе с управляемыми формами. Причины и решения:

  • 🔸 Изменения на клиенте не передаются на сервер: используйте Объект.Записать();
  • 🔸 Событие срабатывает до валидации: перенесите код в ПередЗаписью;
  • 🔸 Поля не помечены как изменённые: вызовите Объект.УстановитьИзменение().
Как скопировать данные из текущей строки в буфер обмена?

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

&НаКлиенте

Процедура КопироватьТекущуюСтроку(Команда)

ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

ТекстДляКопирования = "Артикул: " + ТекущаяСтрока.Артикул + "; Количество: " + ТекущаяСтрока.Количество;

БуферОбмена.УстановитьТекст(ТекстДляКопирования);

Сообщить("Данные скопированы!");

КонецПроцедуры

Для работы с БуферОбмена требуется право ИнтерактивноеКопированиеДанных.

Где хранится информация о текущей строке в базе данных?

Текущая строка — это клиентское состояние, она не хранится в базе данных. В таблицах СУБД (например, PostgreSQL или MS SQL) сохраняются только:

  • 🗃️ Данные самой табличной части (в таблице документа или справочника);
  • 🗃️ Индексы строк (поле НомерСтроки);
  • 🗃️ Ссылки на связанные объекты (номенклатура, контрагенты и т.д.).

Для восстановления "текущей строки" после перезагрузки формы используйте ХранилищеНастроек.