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