1С 8.3 Передача параметров - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Передача параметров

Данные > Примеры кода 1С > 1С 8.3 Процедуры и Функции
Перейти в раздел примеры кода 1С 8.3:
Как правильно передавать параметры в процедуры и функции. Понимание этого механизма - ключ к написанию эффективного кода.

Что нужно знать о способах передачи параметров? В 1С существуют два основных способа передачи данных:
• По ссылке
• По значению (с использованием ключевого слова Знач)
Работа с простыми типами данных. Для базовых типов данных (числа, строки, даты) различия очевидны:
По ссылке:
Процедура ИзменитьПоСсылке(НашПараметр)
   НашПараметр = 7;
КонецПроцедуры

Число = 3;
ИзменитьПоСсылке(Число);
// Результат: Число = 7
По значению:
Процедура ИзменитьПоЗначению(Знач НашПараметр)
   НашПараметр = 7;
КонецПроцедуры

Число = 3;
ИзменитьПоЗначению(Число);
// Результат: Число = 3
Особенности работы с объектами. При работе со сложными объектами (массивы, таблицы значений) ситуация немного отличается:
По ссылке:
Таблица = Новый ТаблицаЗначений;
ОбработатьЗначение(Таблица);

Процедура ОбработатьЗначение(НашПараметр)
   НашПараметр = Новый Массив;
КонецПроцедуры

// Результат: ТипЗнч(Таблица) = Массив
По значению:
Процедура ОчиститьТаблицу(Знач НашПараметр)
   НашПараметр.Очистить();
КонецПроцедуры

// Объект не заменяется, но его содержимое изменяется!
Важный момент: клиент-серверное взаимодействие. Почему стоит использовать Знач при работе между клиентом и сервером?
Экономия трафика - без Знач платформа будет возвращать объект обратно
Безопасность - предотвращаются непредвиденные изменения данных
Производительность - снижается нагрузка на сеть
Пример:
&НаКлиенте
Процедура ТестироватьПередачуПараметров()

   // Создаем тестовые массивы с одинаковыми начальными данными
   массивДляСсылочнойПередачи = Новый Массив;
   массивДляСсылочнойПередачи.Добавить("Тест");

   массивДляПередачиПоЗначению = Новый Массив;
   массивДляПередачиПоЗначению.Добавить("Тест");

   массивДляКлиентскойПередачи = Новый Массив;
   массивДляКлиентскойПередачи.Добавить("Тест");

   // 1. Передача по ссылке на сервер (объект будет возвращен с сервера)
   ОчиститьМассивПоСсылке(массивДляСсылочнойПередачи);

   // 2. Передача по значению на сервер (объект не возвращается на клиент)
   ОчиститьМассивПоЗначению(массивДляПередачиПоЗначению);

   // 3. Передача по значению внутри клиента (работает как ссылка)
   ОчиститьМассивНаКлиенте(массивДляКлиентскойПередачи);

   // Выводим результаты
   Сообщить("Элементов после ссылочной передачи: " + массивДляСсылочнойПередачи.Количество()); // 0
   Сообщить("Элементов после передачи по значению: " + массивДляПередачиПоЗначению.Количество()); // 1
   Сообщить("Элементов после клиентской передачи: " + массивДляКлиентскойПередачи.Количество()); // 0

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

&НаСервере
// Очищает переданный массив (передача по ссылке)
// После выполнения измененный объект возвращается на клиент
Процедура ОчиститьМассивПоСсылке(Массив)
   Массив.Очистить();
КонецПроцедуры

&НаСервере
// Очищает переданный массив (передача по значению)
// Изменения не возвращаются на клиент
Процедура ОчиститьМассивПоЗначению(Знач Массив)
   Массив.Очистить();
КонецПроцедуры

&НаКлиенте
// Очищает переданный массив на клиенте (передача по значению)
// Работает как ссылка, так как нет клиент-серверного взаимодействия
Процедура ОчиститьМассивНаКлиенте(Знач Массив)
   Массив.Очистить();
КонецПроцедуры
Ключевые выводы:
🎯 Используйте Знач для защиты исходных данных
🎯 По ссылке позволяет полностью заменять объекты
🎯 При клиент-серверном взаимодействии Знач - обязательное требование
🎯 Для изменения содержимого объекта достаточно Знач
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 25.07.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Назад к содержимому