Код-ревью Middle Клиент, сервер и контекст обновлено

Ревью общего модуля

Вопрос

Общий модуль «РаботаСЦенами» с флагами Клиент, Сервер, Вызов сервера. Найдите проблемы.

Функция ЦенаТовара(Товар, Дата) Экспорт
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ Ц.Цена ИЗ РегистрСведений.Цены.СрезПоследних(&Дата, Номенклатура = &Товар) КАК Ц";
	Запрос.УстановитьПараметр("Дата", Дата);
	Запрос.УстановитьПараметр("Товар", Товар);
	Выборка = Запрос.Выполнить().Выбрать();
	Возврат ?(Выборка.Следующий(), Выборка.Цена, 0);
КонецФункции

Процедура ПоказатьЦену(Товар) Экспорт
	ПоказатьПредупреждение(, ЦенаТовара(Товар, ТекущаяДата()));
КонецПроцедуры

Коротко

По стандарту общие модули разделяют по контексту и называют с суффиксами: Клиент, Сервер, ВызовСервера, КлиентСервер, ПовтИсп. Тогда сразу видно, где выполняется код и что ему доступно.

Что должен найти ревьюер

  1. Ошибкастрока 1
    Флаг Вызов сервера несовместим с флагом Клиент (конфигуратор их не совместит), а модуль Клиент + Сервер компилируется и на клиенте, где Запрос недоступен. Серверную логику и клиентский интерфейс разносят по разным модулям (например, РаботаСЦенамиВызовСервера и РаботаСЦенамиКлиент).
  2. Ошибкастрока 11
    ТекущаяДата() на клиенте берёт часы компьютера пользователя; для цен нужна дата сеанса на сервере.
  3. Стильстрока 11
    Клиентская процедура в модуле с флагом Сервер: ПоказатьПредупреждение на сервере недоступно, интерфейс в серверных модулях не размещают.

Разбор

По стандарту общие модули разделяют по контексту и называют с суффиксами: Клиент, Сервер, ВызовСервера, КлиентСервер, ПовтИсп. Тогда сразу видно, где выполняется код и что ему доступно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.