Воспитывать себя надо, что бы такие неоптимальные алгоритмы не писать автоматически, на инстинктах. Не касательно алгоритма как такового:
за вот такое:
Пока док.Получитьдокумент() = 1 Цикл
//Сообщить(глПредставлениеДокумента(док.ТекущийДокумент()));
Для ёё = 1 по Метаданные.Документ(док.Вид()).РеквизитШапки() Цикл
имяРекв = Метаданные.Документ(док.Вид()).РеквизитШапки(ёё);
нужно бить канделябром по морде и линейкой по пальцам. Посмотри замером производительности, сколько времени тратится на бесполезные вызовы док.Вид() и Метаданные.Документ(док.Вид()), которые нужно было вынести вне цикла по реквизитам документа. А еще лучше подготовить и запомнить в таблице значений до перебора документов. И при количестве документов больше полусотни за месяц это уже принесет выигрыш в быстродействии. А уж аналогичная конструкция в переборе всех реквизитов всех строк всех документов....
Я уж помолчу про то, что после того, как ты обратился для каждого реквизита документа к его виду, к метаданным документа, получил значение реквизита, проверил его на заполненность и только после всего этого проверяешь тип реквизита на то, что он документ/справочник и его вообще стоило проверять.