Каталог решений - Закрытие остатков регистра накопления в документе "Корректировка записей регистров". УПП 1.3

Закрытие остатков регистра накопления в документе "Корректировка записей регистров". УПП 1.3

Закрытие остатков регистра накопления в документе "Корректировка записей регистров". УПП 1.3

В наличии

Небольшие изменения на уровне модуля формы, для автоматического закрытия остатков произвольных регистров накопления с помощью документа «Корректировка записей регистров» в УПП 1.3.

Категория:

Описание

С помощью небольших изменений в модуле формы добавил удобства в документ "Корректировка записей регистров". Сама форма осталась не измененной.

Теперь на закладке (выбранный регистр = отдельная закладка), если вид регистра = Регистр накопления, в командной панели добавляется кнопка "Закрыть остатки". 

При нажатии, проводится анализ измерений и в случае если есть измерение "Организация", "Контрагент" программа предлагает отобрать по конкретному значению.

В итоге по выбранному при необходимости отбору все остатки на дату документа заполняются в табличную часть с обратным движением ("Приход" в "Расход", "Расход" в "Приход").

Ниже код (в границах комментариев "//НВ" и "//КВ"):

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).

has been added to your cart:
Оформление заказа