В чем разница функции и процедуры
Что проверяют
Базовое знание языка и заодно понимание, зачем разделение вообще существует. В 1С это ещё и вопрос про стиль кода в конфигурации.
Как отвечать
Процедура выполняет действие и ничего не возвращает. Функция вычисляет значение и обязана его вернуть.
Процедура ЗаписатьДокумент(Документ)
Документ.Записать();
КонецПроцедуры
Функция СуммаДокумента(Документ)
Возврат Документ.Товары.Итог("Сумма");
КонецФункцииТехнические следствия:
- вызов функции можно поставить в выражение, вызов процедуры нельзя;
- в функции
Возвратотдаёт значение, в процедуре он же просто прерывает выполнение; - функция без явного
ВозвратвернётНеопределено, и это частый источник неочевидных ошибок.
Смысловая часть, которую и хотят услышать: функция не должна менять состояние системы. Функция, которая внутри себя записывает документ, ломает ожидание вызывающего, потому что выражение в коде выглядит безобидным чтением. Разделение это не синтаксис, а контракт: одно про вопрос, другое про действие.
Где спотыкаются
Останавливаются на «функция возвращает значение» и не говорят про побочные эффекты.
Пишут функции, меняющие данные, и потом ищут, откуда взялась лишняя запись.
Забывают, что в 1С есть директивы компиляции (&НаКлиенте, &НаСервере), и разница между клиентским и серверным контекстом на практике важнее, чем между процедурой и функцией.
Не знают, что параметры по умолчанию передаются по ссылке, и изменение параметра внутри видно снаружи, если не указано Знач.