1С 8.3 Ключевое слово ЗНАЧ
Данные > Примеры кода 1С > 1С 8.3 Процедуры и Функции
Перейти в раздел примеры кода 1С 8.3:
![](images/kod_1c_1cnik.by.webp)
Рекомендации по использованию ключевого слова Знач:
При передаче управления с клиента на сервер (и обратно) всегда передаются копии параметров.
- При вызове серверной процедуры или функции с клиента происходит создание копии фактического параметра ипередача этой копии на сторону сервера.
- При возврате управления с сервера на клиента также происходит создание копии формального параметра (с которым происходила работа в вызванной процедуре или функции) для передачи обратно на клиента.
Если формальный параметр указан с модификатором Знач, то значение параметра будет передаваться только при вызове процедуры или функции и не будет передаваться обратно при возврате управления на клиента. В итоге отсутствие модификатора Знач при клиент-серверном взаимодействии может привести к ухудшению производительности и выполнению лишней\ненужной нагрузки как клиентом, так и сервером.
Работа ключевого слова ЗНАЧ с примитивными типами (строки, числа, даты и т.п.) в 1С 8.3:
&НаСервере
Процедура ТестПоЗначению(Знач ПараметрСтрока)
ПараметрСтрока = "Изменилась";
КонецПроцедуры
&НаСервере
Процедура ТестПоСсылке(ПараметрСтрока)
ПараметрСтрока = "Изменилась";
КонецПроцедуры
&НаКлиенте
Процедура КнопкаТестЗнач()
ТестСтрокаПоЗначению = "ТестЗнач";
ТестСтрокаПоСсылке = ТестСтрокаПоЗначению;
// Вот так это работает:
// Строка копируется полностью, передается на сервер. Назад не возвращается.
// Изменение строки НЕ ВИДНО в точке вызова
ТестПоЗначению(ТестСтрокаПоЗначению);
Сообщить(ТестСтрокаПоЗначению); // ТестЗнач
// Строка копируется полностью, передается на сервер,
// потом возвращается. Изменение строки видно в точке вызова.
ТестПоСсылке(ТестСтрокаПоСсылке);
Сообщить(ТестСтрокаПоСсылке); // Изменилась
КонецПроцедуры
Процедура ТестПоЗначению(Знач ПараметрСтрока)
ПараметрСтрока = "Изменилась";
КонецПроцедуры
&НаСервере
Процедура ТестПоСсылке(ПараметрСтрока)
ПараметрСтрока = "Изменилась";
КонецПроцедуры
&НаКлиенте
Процедура КнопкаТестЗнач()
ТестСтрокаПоЗначению = "ТестЗнач";
ТестСтрокаПоСсылке = ТестСтрокаПоЗначению;
// Вот так это работает:
// Строка копируется полностью, передается на сервер. Назад не возвращается.
// Изменение строки НЕ ВИДНО в точке вызова
ТестПоЗначению(ТестСтрокаПоЗначению);
Сообщить(ТестСтрокаПоЗначению); // ТестЗнач
// Строка копируется полностью, передается на сервер,
// потом возвращается. Изменение строки видно в точке вызова.
ТестПоСсылке(ТестСтрокаПоСсылке);
Сообщить(ТестСтрокаПоСсылке); // Изменилась
КонецПроцедуры
Работа ключевого слова ЗНАЧ с объектами (например: СписокЗначений) в 1С 8.3:
&НаСервере
Процедура ТестПоЗначению(Знач Параметр)
Параметр.Очистить();
КонецПроцедуры
&НаСервере
Процедура ТестПоСсылке(Параметр)
Параметр.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура ТестПоЗначениюКлиент(Знач Параметр)
Параметр.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура КнопкаТестЗнач()
СпЗнПоСсылке= Новый СписокЗначений;
СпЗнПоСсылке.Добавить("ТестЗнач");
СпЗнПоЗначению = СпЗнПоСсылке.Скопировать();
СпЗнПоЗначениюКлиент = СпЗнПоСсылке.Скопировать();
// Вот так это работает:
// Объект копируется полностью, передается на сервер. Назад не возвращается.
// Очистка списка НЕ ВИДНА в точке вызова
ТестПоЗначению(СпЗнПоЗначению);
Сообщить(СпЗнПоЗначению.Количество()); // 1
// Объект копируется полностью, передается на сервер,
// потом возвращается. Очистка списка видна в точке вызова
ТестПоСсылке(СпЗнПоСсылке);
Сообщить(СпЗнПоСсылке.Количество()); // 0
// Копируется только указатель объекта. Очистка списка видна в точке вызова
ТестПоЗначениюКлиент(СпЗнПоЗначениюКлиент);
Сообщить(СпЗнПоЗначениюКлиент.Количество()); // 0
КонецПроцедуры
Процедура ТестПоСсылке(Параметр)
Параметр.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура ТестПоЗначениюКлиент(Знач Параметр)
Параметр.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура КнопкаТестЗнач()
СпЗнПоСсылке= Новый СписокЗначений;
СпЗнПоСсылке.Добавить("ТестЗнач");
СпЗнПоЗначению = СпЗнПоСсылке.Скопировать();
СпЗнПоЗначениюКлиент = СпЗнПоСсылке.Скопировать();
// Вот так это работает:
// Объект копируется полностью, передается на сервер. Назад не возвращается.
// Очистка списка НЕ ВИДНА в точке вызова
ТестПоЗначению(СпЗнПоЗначению);
Сообщить(СпЗнПоЗначению.Количество()); // 1
// Объект копируется полностью, передается на сервер,
// потом возвращается. Очистка списка видна в точке вызова
ТестПоСсылке(СпЗнПоСсылке);
Сообщить(СпЗнПоСсылке.Количество()); // 0
// Копируется только указатель объекта. Очистка списка видна в точке вызова
ТестПоЗначениюКлиент(СпЗнПоЗначениюКлиент);
Сообщить(СпЗнПоЗначениюКлиент.Количество()); // 0
КонецПроцедуры
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник