❓ Рубрика: Вопросы на собеседовании #вопросынасобесах №119

На позицию: Программист 1С

Вопрос:

Вопрос был задан одному из подписчиков, кстати присылайте свои вопросы с реальных собесов, можно сюда @GSKBusiness. Будем пробовать все вместе отвечать.

В модуле управляемой формы написан такой код: &НаКлиенте Процедура ЗаполнитьЦенуНаКлиенте(Команда)

НоменклатураИзменено = Новый Структура; НоменклатураИзменено.Вставить("Цена", 0);

ЗаполнитьЦенуНаСервере(Объект.Номенклатура, НоменклатураИзменено);

Сообщить("Цена = " + НоменклатураИзменено.Цена);

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

&НаСервереБезКонтекста Процедура ЗаполнитьЦенуНаСервере(СсылкаНаНоменклатуру, Знач Структура)

Структура.Цена = СсылкаНаНоменклатуру.Цена;

КонецПроцедуры Предположим, что у выбранной номенклатуры цена равна 1000, и обращение СсылкаНаНоменклатуру.Цена на сервере выполняется корректно. Что увидит пользователь в окне сообщений после нажатия кнопки и почему?

Ответ: Пользователь увидит: Цена = 0 Хотя на сервере выполняется строка: Структура.Цена = СсылкаНаНоменклатуру.Цена; и значение цены у номенклатуры равно 1000, клиентская структура НоменклатураИзменено не изменится.

Причина в том, что параметр Структура в серверной процедуре объявлен с модификатором Знач: Процедура ЗаполнитьЦенуНаСервере(СсылкаНаНоменклатуру, Знач Структура)

При клиент-серверном вызове параметр с Знач передаётся на сервер, но его изменённое значение не передаётся обратно на клиент. Поэтому изменение свойства Цена происходит только в серверной копии структуры, а на клиенте значение остаётся прежним 0.

❗️ Есть что добавить, пиши в комментариях. Всем ОЧЕНЬ интересно 😉.

Подпишись на канал | Подпишись в max


В этом посте были ссылки, но мы их удалили по правилам Сетки

❓ Рубрика: Вопросы на собеседовании #вопросынасобесах
№119
На позицию: Программист 1С
Вопрос:
Вопрос был задан одному из подписчиков, кстати присылайте свои вопросы с реальных собесов, можно сюда @GSK... | Сетка — социальная сеть от hh.ru