С помощью небольших изменений в модуле формы добавил удобства в документ "Корректировка записей регистров". Сама форма осталась не измененной.
Теперь на закладке (выбранный регистр = отдельная закладка), если вид регистра = Регистр накопления, в командной панели добавляется кнопка "Закрыть остатки".
При нажатии, проводится анализ измерений и в случае если есть измерение "Организация", "Контрагент" программа предлагает отобрать по конкретному значению.
В итоге по выбранному при необходимости отбору все остатки на дату документа заполняются в табличную часть с обратным движением ("Приход" в "Расход", "Расход" в "Приход").
Ниже код (в границах комментариев "//НВ" и "//КВ"):
1. Процедура "НастроитьЗакладкиПанелиРегистровНакопления"
в которой в случае если вид выбранного регистра = ВидРегистраНакопления.Остатки в командную панель добавляется кнопка "Закрыть остатки (-)"
//НВ
Если Метаданные.РегистрыНакопления[СтрокаТаблицыРегистров.Имя].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
КоманднаяПанельРегистра.Кнопки.Добавить("РазделительПередЗаполнить" + СтрокаТаблицыРегистров.Имя);
КнопкаЗаполненияОстатками = КоманднаяПанельРегистра.Кнопки.Добавить("Заполнить"+СтрокаТаблицыРегистров.Имя, ТипКнопкиКоманднойПанели.Действие, , Новый Действие("ЗакрытьОстатки"));
КнопкаЗаполненияОстатками.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
КнопкаЗаполненияОстатками.Картинка = БиблиотекаКартинок.Лупа;
КнопкаЗаполненияОстатками.Подсказка = "Заполнить остатки (-)";
КнопкаЗаполненияОстатками.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F3,Истина,Истина);
КонецЕсли;
//КВ
и расположение закладок меняется с "ОтображениеЗакладок.Сверху" на "ОтображениеЗакладок.СверхуМногострочный"
// Процедура создает и настраивает табличные поля на страницах панели ПанельРегистровНакопления
//
Процедура НастроитьЗакладкиПанелиРегистровНакопления(Отказ)
ПроверитьВозможностьЗаписи(ТаблицаРегистровНакопления, "РегистрНакопления");
Если ТаблицаРегистровНакопления.Количество() = 0 Тогда
ЭлементыФормы.ПанельРегистровНакопления.Страницы.Подсказка.Видимость = Истина;
Сч = 0;
Пока Сч < ЭлементыФормы.ПанельРегистровНакопления.Страницы.Количество() Цикл
Если ЭлементыФормы.ПанельРегистровНакопления.Страницы[Сч].Имя<>"Подсказка" Тогда
ЭлементыФормы.ПанельРегистровНакопления.Страницы.Удалить(Сч);
Иначе
Сч = Сч + 1;
КонецЕсли;
КонецЦикла;
ЭлементыФормы.ПанельРегистровНакопления.ОтображениеЗакладок = ОтображениеЗакладок.НеИспользовать;
Иначе
// Добавим новые страницы
Для каждого СтрокаТаблицыРегистров Из ТаблицаРегистровНакопления Цикл
Найдена = Ложь;
Для каждого СтраницаПанели Из ЭлементыФормы.ПанельРегистровНакопления.Страницы Цикл
Если СтраницаПанели.Имя = СтрокаТаблицыРегистров.Имя Тогда
Найдена = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Найдена Тогда
Продолжить;
КонецЕсли;
СтраницаПанели = ЭлементыФормы.ПанельРегистровНакопления.Страницы.Вставить(ТаблицаРегистровНакопления.Индекс(СтрокаТаблицыРегистров), СтрокаТаблицыРегистров.Имя, СтрокаТаблицыРегистров.Представление);
ЭлементыФормы.ПанельРегистровНакопления.ТекущаяСтраница = СтраницаПанели;
// Расположим на странице командную панель
КоманднаяПанельРегистра = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), ("КоманднаяПанель" + СтрокаТаблицыРегистров.Имя), Истина, ЭлементыФормы.ПанельРегистровНакопления);
КоманднаяПанельРегистра.Верх = 6;
КоманднаяПанельРегистра.Лево = 6;
КоманднаяПанельРегистра.Ширина = ЭлементыФормы.ПанельРегистровНакопления.Ширина - 12 - 2;
КоманднаяПанельРегистра.Высота = 24;
КоманднаяПанельРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементыФормы.ПанельРегистровНакопления,ГраницаЭлементаУправления.Верх);
КоманднаяПанельРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Низ,КоманднаяПанельРегистра,ГраницаЭлементаУправления.Верх);
КоманднаяПанельРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементыФормы.ПанельРегистровНакопления,ГраницаЭлементаУправления.Право);
КоманднаяПанельРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементыФормы.ПанельРегистровНакопления,ГраницаЭлементаУправления.Лево);
// Расположим на странице табличное поле
ПолеРегистра = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"), СтрокаТаблицыРегистров.Имя, Истина, ЭлементыФормы.ПанельРегистровНакопления);
ПолеРегистра.Данные = "ДокументОбъект.Движения." + СтрокаТаблицыРегистров.Имя;
Если НЕ ЭтоНовый() и НЕ Модифицированность() Тогда
Попытка
ПолеРегистра.Значение.Прочитать();
Исключение
Предупреждение("Нарушение прав доступа");
Отказ = Истина;
Возврат;
КонецПопытки;
КонецЕсли;
ПолеРегистра.Верх = 30;
ПолеРегистра.Лево = 6;
ПолеРегистра.Ширина = ЭлементыФормы.ПанельРегистровНакопления.Ширина - 12 - 2;
ПолеРегистра.Высота = ЭлементыФормы.ПанельРегистровНакопления.Высота - 24 - 12 - 20;
ПолеРегистра.ТолькоПросмотр = Ложь;
ПолеРегистра.ИзменятьПорядокСтрок = Истина;
ПолеРегистра.ИзменятьСоставСтрок = Истина;
ПолеРегистра.РежимВыделения = РежимВыделенияТабличногоПоля.Множественный;
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементыФормы.ПанельРегистровНакопления,ГраницаЭлементаУправления.Верх);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементыФормы.ПанельРегистровНакопления,ГраницаЭлементаУправления.Низ);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементыФормы.ПанельРегистровНакопления,ГраницаЭлементаУправления.Право);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементыФормы.ПанельРегистровНакопления,ГраницаЭлементаУправления.Лево);
ПолеРегистра.СоздатьКолонки();
Если Метаданные.РегистрыНакопления[СтрокаТаблицыРегистров.Имя].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
КолонкаВидДвижения = ПолеРегистра.Колонки.Вставить(1, "Вид движения");
КолонкаВидДвижения.Имя = "ВидДвиженияРегистраНакопления";
КолонкаВидДвижения.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаВидДвижения.Данные = "ВидДвижения";
КолонкаВидДвижения.ЭлементУправления.КнопкаВыбора = Истина;
КолонкаВидДвижения.ЭлементУправления.ВыбиратьТип = Ложь;
КонецЕсли;
ПолеРегистра.Колонки.Регистратор.Видимость = Ложь;
ПолеРегистра.Колонки.Период.Видимость = Ложь;
ПолеРегистра.Колонки.НомерСтроки.Видимость = Ложь;
КоманднаяПанельРегистра.ИсточникДействий = ПолеРегистра;
КоманднаяПанельРегистра.АвтоЗаполнение = Истина;
КоманднаяПанельРегистра.Кнопки.Добавить("Разделитель1" + СтрокаТаблицыРегистров.Имя);
Кнопка = КоманднаяПанельРегистра.Кнопки.Добавить(СтрокаТаблицыРегистров.Имя + "СортироватьПоВозрастанию", ТипКнопкиКоманднойПанели.Действие, "Сортировать по возрастанию", Новый Действие("СортироватьНаборЗаписейПоВозрастанию"));
Кнопка.Отображение = ОтображениеКнопкиКоманднойПанели.Картинка;
Кнопка.Картинка = БиблиотекаКартинок.СортироватьСписокПоВозрастанию;
Кнопка.Подсказка = "Упорядочить по возрастанию";
Кнопка = КоманднаяПанельРегистра.Кнопки.Добавить(СтрокаТаблицыРегистров.Имя + "СортироватьПоУбыванию", ТипКнопкиКоманднойПанели.Действие, "Сортировать по убыванию" , Новый Действие("СортироватьНаборЗаписейПоУбыванию"));
Кнопка.Отображение = ОтображениеКнопкиКоманднойПанели.Картинка;
Кнопка.Картинка = БиблиотекаКартинок.СортироватьСписокПоУбыванию;
Кнопка.Подсказка = "Упорядочить по убыванию";
КоманднаяПанельРегистра.Кнопки.Добавить("Разделитель" + СтрокаТаблицыРегистров.Имя);
Кнопка = КоманднаяПанельРегистра.Кнопки.Добавить(СтрокаТаблицыРегистров.Имя, ТипКнопкиКоманднойПанели.Действие, , Новый Действие("ПереключитьАктивность"));
Кнопка.Отображение = ОтображениеКнопкиКоманднойПанели.Картинка;
Кнопка.Картинка = БиблиотекаКартинок.ПереключитьАктивность;
Кнопка.Подсказка = "Переключить активность";
Если СтрокаТаблицыРегистров.Имя = "СвободныеОстатки" Тогда
ДобавитьКнопкуЗаполненияСвободныхОстатков(КоманднаяПанельРегистра);
КонецЕсли;
//НВ
Если Метаданные.РегистрыНакопления[СтрокаТаблицыРегистров.Имя].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
КоманднаяПанельРегистра.Кнопки.Добавить("РазделительПередЗаполнить" + СтрокаТаблицыРегистров.Имя);
КнопкаЗаполненияОстатками = КоманднаяПанельРегистра.Кнопки.Добавить("Заполнить"+СтрокаТаблицыРегистров.Имя, ТипКнопкиКоманднойПанели.Действие, , Новый Действие("ЗакрытьОстатки"));
КнопкаЗаполненияОстатками.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
КнопкаЗаполненияОстатками.Картинка = БиблиотекаКартинок.Лупа;
КнопкаЗаполненияОстатками.Подсказка = "Заполнить остатки (-)";
КнопкаЗаполненияОстатками.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F3,Истина,Истина);
КонецЕсли;
//КВ
КонецЦикла;
// Удалим лишние страницы
Индекс = 0;
Пока Индекс <= ЭлементыФормы.ПанельРегистровНакопления.Страницы.Количество() - 2 Цикл
СтраницаПанели = ЭлементыФормы.ПанельРегистровНакопления.Страницы[Индекс];
Если ТаблицаРегистровНакопления.Найти(СтраницаПанели.Имя, "Имя") = Неопределено Тогда
ЭлементыФормы.ПанельРегистровНакопления.Страницы.Удалить(Индекс);
Продолжить;
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
Если ЭлементыФормы.ПанельРегистровНакопления.Страницы.Количество() > 1 Тогда
КонецЕсли;
//НВ
// ЭлементыФормы.ПанельРегистровНакопления.ОтображениеЗакладок = ОтображениеЗакладок.Сверху;
ЭлементыФормы.ПанельРегистровНакопления.ОтображениеЗакладок = ОтображениеЗакладок.СверхуМногострочный;
//КВ
ЭлементыФормы.ПанельРегистровНакопления.Страницы.Подсказка.Видимость = Ложь;
ЭлементыФормы.ПанельРегистровНакопления.ТекущаяСтраница = ЭлементыФормы.ПанельРегистровНакопления.Страницы[0];
КонецЕсли;
КонецПроцедуры
2. Процедура "ЗакрытьОстатки"
//НВ
Процедура ЗакрытьОстатки(Кнопка)
ИмяРегистра = СокрЛП(СтрЗаменить(СокрЛП(Кнопка.Имя),"Заполнить",""));
Если ИмяРегистра = "" Тогда
Возврат;
КонецЕсли;
РегОстатки = РегистрыНакопления[ИмяРегистра].Остатки(КонецДня(Дата)+1,,,);
Если ТаблицаРегистровНакопления.Найти(ИмяРегистра, "Имя") = Неопределено Тогда
Возврат;
КонецЕсли;
НаборДвижений = Движения[ИмяРегистра];
Если НаборДвижений.Количество() <> 0 Тогда
Ответ = Вопрос("Существующие движения регистров будут очищены. Продолжить?",РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
КонецЕсли;
//....отбираем записи по выбранной организации
ОтборОрганизация = Неопределено;
Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Организация")<>Неопределено Тогда
ОтветПоОрганизации = Вопрос("Хотите установить отбор по организации?",РежимДиалогаВопрос.ДаНет);
Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
ФормаОрганизаций = Справочники.Организации.ПолучитьФормуВыбора();
ФормаОрганизаций.РежимВыбора = Истина;
ФормаОрганизаций.МножественныйВыбор = Ложь;
ФормаОрганизаций.ЗакрыватьПриВыборе = Истина;
ФормаОрганизаций.Заголовок = "В качестве отбора по организации можете выбрать необходимый элемент";
ФормаОрганизаций.ОткрытьМодально();
ОтборОрганизация = ФормаОрганизаций.ТекущийЭлемент.ТекущаяСтрока;
КонецЕсли;
КонецЕсли;
//....отбираем записи по выбранному контрагенту
ОтборКонтрагент = Неопределено;
Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Контрагент")<>Неопределено Тогда
ОтветПоОрганизации = Вопрос("Хотите установить отбор по контрагенту?",РежимДиалогаВопрос.ДаНет);
Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
ФормаКантрагента = Справочники.Контрагенты.ПолучитьФормуВыбора();
ФормаКантрагента.РежимВыбора = Истина;
ФормаКантрагента.МножественныйВыбор = Ложь;
ФормаКантрагента.ЗакрыватьПриВыборе = Истина;
ФормаКантрагента.Заголовок = "В качестве отбора по контрагенту можете выбрать необходимый элемент";
ФормаКантрагента.ОткрытьМодально();
ОтборКонтрагент = ФормаКантрагента.ТекущийЭлемент.ТекущаяСтрока;
КонецЕсли;
КонецЕсли;
ОтборПоставщик = Неопределено;
Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Поставщик")<>Неопределено Тогда
ОтветПоОрганизации = Вопрос("Хотите установить отбор по поставщику?",РежимДиалогаВопрос.ДаНет);
Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
ФормаКонтрагента = Справочники.Контрагенты.ПолучитьФормуВыбора();
ФормаКонтрагента.РежимВыбора = Истина;
ФормаКонтрагента.МножественныйВыбор = Ложь;
ФормаКонтрагента.ЗакрыватьПриВыборе = Истина;
ФормаКонтрагента.Заголовок = "В качестве отбора по поставщику можете выбрать необходимый элемент";
ФормаКонтрагента.ОткрытьМодально();
ОтборПоставщик = ФормаКонтрагента.ТекущийЭлемент.ТекущаяСтрока;
КонецЕсли;
КонецЕсли;
ОтборПокупатель = Неопределено;
Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Покупатель")<>Неопределено Тогда
ОтветПоОрганизации = Вопрос("Хотите установить отбор по покупателю?",РежимДиалогаВопрос.ДаНет);
Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
ФормаКонтрагента = Справочники.Контрагенты.ПолучитьФормуВыбора();
ФормаКонтрагента.РежимВыбора = Истина;
ФормаКонтрагента.МножественныйВыбор = Ложь;
ФормаКонтрагента.ЗакрыватьПриВыборе = Истина;
ФормаКонтрагента.Заголовок = "В качестве отбора по покупателю можете выбрать необходимый элемент";
ФормаКонтрагента.ОткрытьМодально();
Покупатель = ФормаКонтрагента.ТекущийЭлемент.ТекущаяСтрока;
КонецЕсли;
КонецЕсли;
НаборДвижений.Очистить();
Для Каждого ДвижениеСторнируемое Из РегОстатки Цикл
Если (ОтборОрганизация<>Неопределено)И(ОтборОрганизация<>ДвижениеСторнируемое.Организация) Тогда
Продолжить;
КонецЕсли;
Если (ОтборКонтрагент<>Неопределено)И(ОтборКонтрагент<>ДвижениеСторнируемое.Контрагент) Тогда
Продолжить;
КонецЕсли;
Если (ОтборПоставщик<>Неопределено)И(ОтборПоставщик<>ДвижениеСторнируемое.Поставщик) Тогда
Продолжить;
КонецЕсли;
Если (ОтборПокупатель<>Неопределено)И(ОтборПокупатель<>ДвижениеСторнируемое.Покупатель) Тогда
Продолжить;
КонецЕсли;
ДвижениеСторно = НаборДвижений.Добавить();
ЗаполнитьЗначенияСвойств(ДвижениеСторно, ДвижениеСторнируемое,,);
ДвижениеСторно.Период = Дата;
Если ДвижениеСторно.ВидДвижения = ВидДвиженияНакопления.Приход Тогда
ДвижениеСторно.ВидДвижения = ВидДвиженияНакопления.Расход;
Иначе
ДвижениеСторно.ВидДвижения = ВидДвиженияНакопления.Приход;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Тестировалось на конфигурации: Управление производственным предприятием, редакция 1.3 (1.3.122.1).