1: Обычно это делается для управления областью действия буферов.
Если у вас есть, например, процедура с несколькими внутренними процедурами, которые все обращаются к одной и той же таблице, то буфер по умолчанию для этой таблицы в конечном итоге будет ограничен блоком процедур верхнего уровня.Например, -
procedure p1:
find first customer no-lock.
end.
procedure p2:
find last customer no-lock.
end.
в конечном итоге приведет к ограничению буфера клиента для содержащей процедуры.Если вы пытаетесь держать свои внутренние процедуры свободно связанными и самодостаточными, то вам может не понадобиться такое поведение.Таким образом, вы должны определить буфер внутри каждой из внутренних процедур.
Obv, есть и другие причины для определения буферов, но когда вы видите код, который определяет буфер с тем же именем, что и таблица, обычно речь идет о области видимости..
2: всегда получает доступ к БД через буфер.Каждая таблица имеет буфер по умолчанию с тем же именем, что и таблица, поэтому
find first <buffername>.
будет искать буфер с именем buffername, который может быть явно заданным буфером или неявным буфером по умолчанию.Приоритет перейдет в явно определенный буфер, если он существует.