Код-ревью Middle Клиент, сервер и контекст обновлено
Ревью общего модуля
Вопрос
Общий модуль «РаботаСЦенами» с флагами Клиент, Сервер, Вызов сервера. Найдите проблемы.
Функция ЦенаТовара(Товар, Дата) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ц.Цена ИЗ РегистрСведений.Цены.СрезПоследних(&Дата, Номенклатура = &Товар) КАК Ц";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Товар", Товар);
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.Цена, 0);
КонецФункции
Процедура ПоказатьЦену(Товар) Экспорт
ПоказатьПредупреждение(, ЦенаТовара(Товар, ТекущаяДата()));
КонецПроцедуры
Коротко
По стандарту общие модули разделяют по контексту и называют с суффиксами: Клиент, Сервер, ВызовСервера, КлиентСервер, ПовтИсп. Тогда сразу видно, где выполняется код и что ему доступно.
Что должен найти ревьюер
- Ошибкастрока 1Флаг Вызов сервера несовместим с флагом Клиент (конфигуратор их не совместит), а модуль Клиент + Сервер компилируется и на клиенте, где Запрос недоступен. Серверную логику и клиентский интерфейс разносят по разным модулям (например, РаботаСЦенамиВызовСервера и РаботаСЦенамиКлиент).
- Ошибкастрока 11ТекущаяДата() на клиенте берёт часы компьютера пользователя; для цен нужна дата сеанса на сервере.
- Стильстрока 11Клиентская процедура в модуле с флагом Сервер: ПоказатьПредупреждение на сервере недоступно, интерфейс в серверных модулях не размещают.
Разбор
По стандарту общие модули разделяют по контексту и называют с суффиксами: Клиент, Сервер, ВызовСервера, КлиентСервер, ПовтИсп. Тогда сразу видно, где выполняется код и что ему доступно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.