Загрузка данных


Процедура ОбработкаПроведения(Отказ, Режим)
	
	// === ВАЛИДАЦИЯ (из прошлого шага) ===
	ПроверитьНаличиеГодовогоЛимита(Отказ);
	Если Отказ Тогда
		Возврат;
	КонецЕсли;

	// Подготавливаем оба регистра к записи
	Движения.БС_ЛимитКассыГодовой.Записывать = Истина;
	Движения.БС_ЛимитКассыНовый.Записывать = Истина;
	Движения.БС_ЛимитКассыГодовой.Очистить();
	Движения.БС_ЛимитКассыНовый.Очистить();
	
	День = 60*60*24;

	// ====================================================================
	// ВЕТВЬ 1: ДОКУМЕНТ УСТАНАВЛИВАЕТ ГОДОВОЙ ЛИМИТ
	// ====================================================================
	Если ЭтотОбъект.ГодовойЛимит Тогда
		
		Для Каждого ТекСтрока Из МагазиныЛимит Цикл
			Движение = Движения.БС_ЛимитКассыГодовой.Добавить();
			Движение.Склад 		  = ТекСтрока.Магазин;
			Движение.Лимит 		  = ТекСтрока.Лимит;
			Движение.ДатаПриказа  = ТекСтрока.ДатаПриказа;
			Движение.НомерПриказа = ТекСтрока.Приказ;
			
			// Заполняем период действия
			Движение.ДействуетС = НачалоДня(ТекСтрока.Дата);
			
			Если ЗначениеЗаполнено(ТекСтрока.ДатаКонецЛимита) Тогда
				Движение.ДействуетДо = КонецДня(ТекСтрока.ДатаКонецЛимита);
			Иначе
				// Если юзер не заполнил конец, по умолчанию ставим конец года
				Движение.ДействуетДо = КонецГода(ТекСтрока.Дата);
			КонецЕсли;
		КонецЦикла;
		
	// ====================================================================
	// ВЕТВЬ 2: ДОКУМЕНТ УСТАНАВЛИВАЕТ ВРЕМЕННЫЙ ЛИМИТ (ПРЕВЫШЕНИЕ)
	// ====================================================================
	Иначе 
		
		Для Каждого ТекСтрока Из МагазиныЛимит Цикл
			
			// 1. Записываем сам факт временного превышения (в старый регистр)
			Движение = Движения.БС_ЛимитКассыНовый.Добавить();
			Движение.Период 			= ТекСтрока.Дата;
			Движение.Склад 				= ТекСтрока.Магазин;
			Движение.Лимит 				= ТекСтрока.ЛимитКассы; // Или ТекСтрока.Лимит (смотри как у тебя в ТЧ называется)
			Движение.ДатаПриказа 		= ТекСтрока.ДатаПриказаЛимитКассы; // Аналогично
			Движение.НомерПриказа 		= ТекСтрока.ПриказЛимитКассы;
			Движение.ЛимитНаОдинДень 	= ТекСтрока.ЛимитНаОдинДень;
			
			// 2. Делаем ВОЗВРАТНУЮ запись (чтобы на следующий день лимит вернулся к годовому)
			Если не ЭтотОбъект.ОтключитьДопПроводки Тогда
				
				// Ищем идеальный, чистый годовой лимит в твоем НОВОМ регистре!
				ЗапросБаза = Новый Запрос;
				ЗапросБаза.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
				|	Годовой.Лимит КАК Лимит,
				|	Годовой.ДатаПриказа КАК ДатаПриказа,
				|	Годовой.НомерПриказа КАК НомерПриказа
				|ИЗ
				|	РегистрСведений.БС_ЛимитКассыГодовой КАК Годовой
				|ГДЕ
				|	Годовой.Склад = &Склад
				|	И &ДатаДокумента МЕЖДУ Годовой.ДействуетС И Годовой.ДействуетДо";
				
				ЗапросБаза.УстановитьПараметр("Склад", ТекСтрока.Магазин);
				ЗапросБаза.УстановитьПараметр("ДатаДокумента", ТекСтрока.Дата);
				
				РезБаза = ЗапросБаза.Выполнить().Выбрать();
				
				Если РезБаза.Следующий() Тогда
					
					ДвижениеВозврат = Движения.БС_ЛимитКассыНовый.Добавить();
					
					// Определяем дату возврата
					Если ТекСтрока.ЛимитНаОдинДень Тогда
						ДвижениеВозврат.Период = НачалоДня(ТекСтрока.Дата) + День;
					ИначеЕсли ЗначениеЗаполнено(ТекСтрока.ДатаКонецЛимита) Тогда
						ДвижениеВозврат.Период = НачалоДня(ТекСтрока.ДатаКонецЛимита) + День;
					Иначе
						ДвижениеВозврат.Период = НачалоДня(ТекСтрока.Дата) + День;
					КонецЕсли;
					
					ДвижениеВозврат.Склад 			= ТекСтрока.Магазин;
					ДвижениеВозврат.Лимит 			= РезБаза.Лимит; 		// Берем чистый лимит из Годового!
					ДвижениеВозврат.ДатаПриказа 	= РезБаза.ДатаПриказа; 	// Чистая дата!
					ДвижениеВозврат.НомерПриказа 	= РезБаза.НомерПриказа; // Чистый номер!
					ДвижениеВозврат.ЛимитНаОдинДень = Ложь; 				// Возвращаемся в обычный режим
					
				КонецЕсли;
				
			КонецЕсли; // Конец возвратной записи
			
		КонецЦикла;
		
		// Старый код с удалением движений чужих документов мы безжалостно ВЫКИДЫВАЕМ. 
		// Он был нужен только из-за кривой архитектуры, теперь он будет только вредить.
		
	КонецЕсли;

КонецПроцедуры