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

31.05.19

Разработка - Механизмы типовых конфигураций

Небольшие изменения на уровне модуля формы, для автоматического закрытия остатков произвольных регистров накопления с помощью документа "Корректировка записей регистров" в УПП 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).

Регистры накопления УПП Остатки

См. также

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    2719    31    15    

36

Тестирование и исправление ключей аналитики ERP, УТ11, КА

Корректировка данных Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    107458    637    173    

680

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    28146    83    146    

61

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22637    303    35    

75

Исправление ошибок по НДФЛ и взаиморасчетам с сотрудниками в 1С:Бухгалтерия 3.0

Корректировка данных Зарплата Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    790    4    4    

7

Заполнение документа "Корректировка регистров" произвольными данными

Закрытие периода Корректировка данных Платформа 1С v8.3 Система компоновки данных 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 руб.

13.07.2015    50383    171    29    

122
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Teut_Vlad 187 27.02.20 17:31 Сейчас в теме
//Только отрицательные
			            Если Метаданные.РегистрыНакопления[СтрокаТаблицыРегистров.Имя].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
				КоманднаяПанельРегистра.Кнопки.Добавить("РазделительПередЗаполнитьОтрицательные" + СтрокаТаблицыРегистров.Имя);
				КнопкаЗаполненияОстатками = КоманднаяПанельРегистра.Кнопки.Добавить("ЗаполнитьОтрицательные"+СтрокаТаблицыРегистров.Имя, ТипКнопкиКоманднойПанели.Действие, , Новый Действие("ЗакрытьОтрицательныеОстатки"));
				КнопкаЗаполненияОстатками.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
				КнопкаЗаполненияОстатками.Картинка    = БиблиотекаКартинок.Лупа;
				КнопкаЗаполненияОстатками.Подсказка   = "Заполнить отрицательные остатки (-)";
				КнопкаЗаполненияОстатками.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F3,Истина,Истина);
			КонецЕсли;	
//КВ теут+		


Процедура ЗакрытьОтрицательныеОстатки(Кнопка)
	ИмяРегистра = СокрЛП(СтрЗаменить(СокрЛП(Кнопка.Имя),"ЗаполнитьОтрицательные",""));
	Если ИмяРегистра = "" Тогда
		Возврат;
	КонецЕсли;
	
	РегОстатки = РегистрыНакопления[ИмяРегистра].Остатки(КонецДня(Дата)+1,,,);
	Если ТаблицаРегистровНакопления.Найти(ИмяРегистра, "Имя") = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	НаборДвижений = Движения[ИмяРегистра];
	Если НаборДвижений.Количество() <> 0 Тогда
		Ответ = Вопрос("Существующие движения регистров будут очищены. Продолжить?",РежимДиалогаВопрос.ДаНет);
		Если Ответ = КодВозвратаДиалога.Нет Тогда
			Возврат;
		КонецЕсли;
	КонецЕсли;
	//....отбираем записи по выбранной организации
	ОтборОрганизация = Неопределено;
	Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Организация")<>Неопределено Тогда
		ОтветПоОрганизации = Вопрос("Хотите установить отбор по организации?",РежимДиалогаВопрос.ДаНет);
		Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
			ФормаОрганизаций = Справочники.Организации.ПолучитьФормуВыбора();
			ФормаОрганизаций.РежимВыбора = Истина;
			ФормаОрганизаций.МножественныйВыбор = Ложь;
			ФормаОрганизаций.ЗакрыватьПриВыборе = Истина;
			ФормаОрганизаций.Заголовок = "В качестве отбора по организации можете выбрать необходимый элемент";
			ФормаОрганизаций.ОткрытьМодально();
			ОтборОрганизация = ФормаОрганизаций.ТекущийЭлемент.ТекущаяСтрока;
		КонецЕсли;
	КонецЕсли;	
	//....отбираем записи по выбранному контрагенту
	ОтборКонтрагент = Неопределено;
	Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Контрагент")<>Неопределено Тогда
		ОтветПоОрганизации = Вопрос("Хотите установить отбор по контрагенту?",РежимДиалогаВопрос.ДаНет);
		Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
			ФормаКантрагента = Справочники.Контрагенты.ПолучитьФормуВыбора();
			ФормаКантрагента.РежимВыбора = Истина;
			ФормаКантрагента.МножественныйВыбор = Ложь;
			ФормаКантрагента.ЗакрыватьПриВыборе = Истина;
			ФормаКантрагента.Заголовок = "В качестве отбора по контрагенту можете выбрать необходимый элемент";
			ФормаКантрагента.ОткрытьМодально();
			ОтборКонтрагент = ФормаКантрагента.ТекущийЭлемент.ТекущаяСтрока;
		КонецЕсли;
	КонецЕсли;	
	ОтборПоставщик = Неопределено;
	Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Поставщик")<>Неопределено Тогда
		ОтветПоОрганизации = Вопрос("Хотите установить отбор по поставщику?",РежимДиалогаВопрос.ДаНет);
		Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
			ФормаКонтрагента = Справочники.Контрагенты.ПолучитьФормуВыбора();
			ФормаКонтрагента.РежимВыбора = Истина;
			ФормаКонтрагента.МножественныйВыбор = Ложь;
			ФормаКонтрагента.ЗакрыватьПриВыборе = Истина;
			ФормаКонтрагента.Заголовок = "В качестве отбора по поставщику можете выбрать необходимый элемент";
			ФормаКонтрагента.ОткрытьМодально();
			ОтборПоставщик = ФормаКонтрагента.ТекущийЭлемент.ТекущаяСтрока;
		КонецЕсли;
	КонецЕсли;	
	ОтборПокупатель = Неопределено;
	Если Движения[ИмяРегистра].Метаданные().Измерения.Найти("Покупатель")<>Неопределено Тогда
		ОтветПоОрганизации = Вопрос("Хотите установить отбор по покупателю?",РежимДиалогаВопрос.ДаНет);
		Если ОтветПоОрганизации = КодВозвратаДиалога.Да Тогда
			ФормаКонтрагента = Справочники.Контрагенты.ПолучитьФормуВыбора();
			ФормаКонтрагента.РежимВыбора = Истина;
			ФормаКонтрагента.МножественныйВыбор = Ложь;
			ФормаКонтрагента.ЗакрыватьПриВыборе = Истина;
			ФормаКонтрагента.Заголовок = "В качестве отбора по покупателю можете выбрать необходимый элемент";
			ФормаКонтрагента.ОткрытьМодально();
			Покупатель = ФормаКонтрагента.ТекущийЭлемент.ТекущаяСтрока;
		КонецЕсли;
	КонецЕсли;	
	
	НаборДвижений.Очистить();
	Для Каждого ДвижениеСторнируемое Из РегОстатки Цикл
		Если (ОтборОрганизация<>Неопределено)И(ОтборОрганизация<>ДвижениеСторнируемое.Организация) Тогда
			Продолжить;
		КонецЕсли;	
		Если (ОтборКонтрагент<>Неопределено)И(ОтборКонтрагент<>ДвижениеСторнируемое.Контрагент) Тогда
			Продолжить;
		КонецЕсли;	
		Если (ОтборПоставщик<>Неопределено)И(ОтборПоставщик<>ДвижениеСторнируемое.Поставщик) Тогда
			Продолжить;
		КонецЕсли;	
		Если (ОтборПокупатель<>Неопределено)И(ОтборПокупатель<>ДвижениеСторнируемое.Покупатель) Тогда
			Продолжить;
		КонецЕсли;
		Если ДвижениеСторнируемое.Количество > 0 Тогда
			Продолжить;
		КонецЕсли;
		
		ДвижениеСторно = НаборДвижений.Добавить();
		ЗаполнитьЗначенияСвойств(ДвижениеСторно, ДвижениеСторнируемое,,);
		ДвижениеСторно.Период = Дата;
		Если ДвижениеСторно.ВидДвижения = ВидДвиженияНакопления.Приход Тогда
			ДвижениеСторно.ВидДвижения = ВидДвиженияНакопления.Расход;
		Иначе	
			ДвижениеСторно.ВидДвижения = ВидДвиженияНакопления.Приход;
		КонецЕсли;	
	КонецЦикла;	
КонецПроцедуры	
Показать
Оставьте свое сообщение