Но из позитивных замечаний получилось выделить несколько идей.
Подход 1. Исходя из определения Процедуры и Функции
Тут всё просто, читаешь документацию и, помня, что процедура отличается от функции только возвращаемым значением, решаешь - если возврат значения не нужен, то Процедура, если нужен, то Функция. Тем не менее, процедура может изменять значения параметров, переданных по Ссылке.
Процедура Подход1(Знач вхПарам1, выхПарам2) КонецПроцедуры
В контексте данного подхода, есть два разветвления на тему, как Фукнция должна возвращать параметры:
Подход 1.1 Функция возвращает один параметр через возврат, остальные через переменные, переданные по ссылке. На выходе процедуры мы включаем некую обработку ошибок, зависящую от возвращаемого значения.
Функция Подход11(Знач вхПарам1, выхПарам2) КонецФункции рез = Подход11(вхПарам1, выхПарам2); // рез - содержит либо нужное значение, либо значение, сигнализирующее об ошибке // выхПарам - может быть также изменено
Подход 1.2 Функция не может возвращать значения через свои параметры и должна это делать только через значение возврата. Если необходимо вернуть более одного значения, то эти значения необходимо упаковать в массив, список значений, прочее.
Если в ходе работы появилась ошибка, то будет возвращено значение Неопределено.
Функция Подход12(Знач вхПарам1) КонецФункции массив = Подход12(вхПарам1); Если массив = Неопределено Тогда // Ошибка Иначе выхПарам1 = массив[0]; выхПарам2 = массив[1]; КонецЕсли;
Подход 2. Процедуры - они как МАКРОСЫ
При этом подходе Процедура используется всего лишь для того, чтобы объединить несколько вызовов однотипных действий.
В этом подходе использование Процедуры носит локальный характер - просто для того, чтобы сократить код.
Подход 3. Всё на свете - Функции, но без идиотизма
1. Всегда используются функции, процедуры не используются.
2. Функция возвращает либо "", либо строковое описание ошибки, все изменения данных идут по ссылке через выходные параметры
3. Для исключения идиотизма в применении правила 2, для функций, возвращающих гарантировано одно значение, без ошибок внутри функции, используется передача значения через возврат функции. Например, ЭтоКорректнаяДата(вхДата)
Функция Подход3(Знач вхПарам1, Знач выхПарам2) КонецФункции Функция ЭтоИсключениеИзПодхода3() Возврат Истина; КонецФункции рез = Подход3(вхПарам1, выхПарам2); Если Не ПустаяСтрока(рез) Тогда СообщитьОбОшибке(рез); КонецЕсли; Если ЭтоИсключениеИзПодхода3() ... КонецЕсли;
Вот пока что получилось. А какие есть подходы у вас?