Если мне не врет протез, то метод ОбратныйПорядок() работает следующим образом:
Открыли выборку.
Сделали сколько-то шагов по выборке.
Сделали ОбратныйПорядок(1).
Сделали сколько-то шагов в обратном направлении.
Сделали ОбратныйПорядок(0)
Снова идем в прямом направлении.
Вызов метода ОбратныйПорядок() до открытия выборки указывает, будем ли мы спозиционированны перед первой или после последней записи в выборке.
По поводу функции Сам() и Я()
Не знаю, может, конечно, сейчас допилили 1С++ и сделали функцию Я() прямо в движке 1С++, но раньше функции вида Сам() писали из-за той фичи 7.7, что Контекст можно передать только как параметр в какую-либо функцию/процедуру/метод.
Просто обратиться к контексту (например Контекст.Форма) - нельзя.
Для этого и писали
Функция Сам(Конт) Возврат Конт КонецФункции.
Где ее писать - абсолютно без разницы.
У меня она написана в глобале.
По поводу Я().НайтиДокумент() и Я.ПолучитьБазовыйКласс().НайтиДокумент() - эти 2 вызова решают абсолютно разные задачи.
Во втором случае - ты принудительно передаешь управление классу-родителю
В первом - ты принудительно передаешь управление созданному объекту.
А текущее исполнение кода может находиться где-то посередине.
На примере, чтоб было понятно:
Есть Класс ТДокумент, наследующий от Документ
Есть Класс ТДокумент.РасходнаяНакладная, наследующий от ТДокумент.
В классе ТДокумент есть такой метод:
Функция Записать() Экспорт
Сам = Сам(Контекст);
Если Сам.ПроверитьПередЗаписью() <> 1 Тогда
возврат 0;
КонецЕсли
АвторПоследнегоИзменения = глПользователь;
Сам.ПолучитьБазовыйКласс().Записать();
КонецФункции
теперь ты создаешь объект ТДокумент.РасходнаяНакладная, и после каких-то действий вызываешь Объект.Записать();
Если в классе ТДокумент.РасходнаяНакладная метод Записать() переопределен - выполнится он.
Если нет - то выполнится метод Записать() у ТДокумент. Этот метод вызовет функцию проверки у ТДокумент.РасходнаяНакланая (а если его нет - то у его родителя, т.е. у себя - будем считать, что у ТДокумент он существует. Причем, в ТДокумент.РасходнаяНакладная метод ПроверитьпередЗаписью() может сам принудительно вызывать этот же метод у базового класса).
И если проверка прошла успешно - вызовется метод Записать базового класса Документ (т.е. непосредственно документа 1С), который зафиксирует изменения в базе.
Таким образом, мы можем разделить проверки и действия при записи по уровням наследования.
Если же ты в ТДокумент напишешь просто
Если ПроверитьПередЗаписью() <> 1 Тогда
возврат 0;
КонецЕсли
то вызовется только метод класса ТДокумент и если он пройдет успешно - документ запишется в базу.