В ряде случаев просто необходимо видеть при тестировании реальный результат проведения документа по регистрам, а стандартная обработка показа движений документа может отсутствовать. Такое бывает при:
1. При добавлении в типовую (или нетиповую отраслевую) конфигурацию нового документа даже путем копирования существующего (по умолчанию нет поддержки обработке по показу движений документа) как включить данный функционал будет показано ниже.
2. Разработки с нуля собственной конфигурации;
3. Невозможности добавления обработки показа движений в конфигурацию (разработка в хранилище, некорректная работа базовой версии или недостаток функционала стандартной обработки показа движений...).
Данная обработка позволяет как раз быть подобным универсальным инструментом для подобных ситуаций. Тестировалась в тонком клиенте на релизах 8.2.16, 8.3.5.1383 в конфигуарциях УНФ 1.5, БИТ строительство, БП 3.0.38 К сожалению, пока режим исполнения толстый клиент недоступен.
Скажу сразу, где-то попалась на инфостарте данная обработка, но ее пришлось серьезно подкорректировать для универсальности, а также добавить форму для отладки.
Ниже по шагам постараюсь продемонстрировать как модифицировать типовую обработку движений (вернее как корректнее интегрировать в уже готовую конфигурацию).
Рисунок 1. В типовой конфигурации УНФ 1.4 движения документа.
Рисунок 2. Добавление нового типа в параметр команды.
Рисунок 3. Реквизиты отчета по движениям документа.
Далее, ниже приводятся фрагменты кода по обработке команды
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды = Неопределено Тогда
Возврат;
КонецЕсли;
ОткрытьФорму("Отчет.ДвиженияДокумента.Форма", Новый Структура("Документ", ПараметрКоманды), , Истина, ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
Код из обработки
Функция ОпределитьНаличиеДвиженийПоРегистратору()
ТекстЗапроса = "";
ДвиженияДокумента = Отчет.Документ.Метаданные().Движения;
Если ДвиженияДокумента.Количество() = 0 Тогда
Возврат Новый ТаблицаЗначений;
КонецЕсли;
Для Каждого Движение ИЗ ДвиженияДокумента Цикл
ТекстЗапроса = ТекстЗапроса + "
|" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + "
|ВЫБРАТЬ ПЕРВЫЕ 1 ВЫРАЗИТЬ(""" + Движение.ПолноеИмя()
+ """ КАК Строка(200)) КАК Имя ИЗ " + Движение.ПолноеИмя()
+ " ГДЕ Регистратор = &Регистратор";
КонецЦикла;
Запрос = Новый Запрос(ТекстЗапроса);
ЗАпрос.УстановитьПараметр("Регистратор", Отчет.Документ);
ТаблицаЗапроса = Запрос.Выполнить().Выгрузить();
ТаблицаЗапроса.Индексы.Добавить("Имя");
Для Каждого СтрокаТаблицыДвижений Из ТаблицаЗапроса Цикл
СтрокаТаблицыДвижений.Имя = Врег(СокрЛП(СтрокаТаблицыДвижений.Имя));
КонецЦикла;
Возврат ТаблицаЗапроса;
КонецФункции
&НаСервере
// Функция возвращает вид регистра.
//
Функция ОпределитьВидРегистра(МетаданныеРегистра)
Если Метаданные.РегистрыНакопления.Индекс(МетаданныеРегистра) >= 0 Тогда
Возврат "Накопления";
ИначеЕсли Метаданные.РегистрыСведений.Индекс(МетаданныеРегистра) >= 0 Тогда
Возврат "Сведений";
ИначеЕсли Метаданные.РегистрыБухгалтерии.Индекс(МетаданныеРегистра) >= 0 Тогда
Возврат "Бухгалтерии";
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Еще одним из существенных недостатков является то, что данная обработка не показывает только движения документа, сформированные "штатно", процедурой ОбработкаПровдения данного документа. А вот если движения по данному документу будут сформированы обработкой программно, где он будет участвовать в качестве регистратора уже увы. Стои ли усложнять задачу?
Возможно и в данной обработке будут ошибке. Пишите. Буду дорабатывать.