Михаил, спасибо за обработку. Но фраза "Работает и в других конфигурациях на управляемых формах." лишняя в описании.
Для работы в ЕРП пришлось ее дорабатывать. Пару мыслей для вас (или тех, кто еще будет ее использовать "в других конфигурациях на управляемых формах").
1. Функцию
ЕстьДокумент() использовать в общем случае некорректно. Для примера, в ЕРП есть и "ПереносДанных" и "ОперацияБух", но для выбранного регистра регистратором может быть только "КорректировкаРегистров". По вашему алгоритму подбираются неправильные формы корректирующих документов и валятся ошибки.
Вариант решения может быть таким:
Если РегистрКорректируетсяПереносомДанных(РегистрОстатков) Тогда
.....
&НаСервере
Функция РегистрКорректируетсяПереносомДанных(ИмяРН)
ВозможныеТипыЗначений = Метаданные.РегистрыНакопления.Найти(ИмяРН).СтандартныеРеквизиты.Регистратор.Тип;
Попытка
Возврат ВозможныеТипыЗначений.СодержитТип(Тип("ДокументСсылка.ПереносДанных"));
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
Показать
2. ТаблицаДвижений формируется с помощью СКД. На состав данных, которые выводятся в СКД влияют функциональные опции. В итоге в некоторых случаях в таблице движений отсутствуют некоторые поля. Как результат, при выполнении этого кода появляются ошибки (см. комментарии 6, 8, 16):
Для каждого Измерение Из РегистрНакопления.Измерения Цикл
НоваяЗапись[Измерение.Имя] = СтрокаТаблицы[Измерение.Имя];
КонецЦикла;
Решить можно следующим образом:
Для каждого Измерение Из РегистрНакопления.Измерения Цикл
//Некоторых полей в таблице движений может не быть из-за особенности получения данных в СКД при отключенных ФО
//НоваяЗапись[Измерение.Имя] = СтрокаТаблицы[Измерение.Имя];
СтрокаКода = "НоваяЗапись."+Измерение.Имя+" = СтрокаТаблицы[Измерение.Имя];";
Попытка
Выполнить(СтрокаКода);
Исключение
КонецПопытки;
КонецЦикла;
Показать
Успехов