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


&НаКлиенте
Процедура ВыполнитьАрхивацию(Команда)
    
    // Проверяем ввод
    Если Месяц = 0 Или Год = 0 Тогда
        Сообщить("Введите месяц и год для архивации!");
        Возврат;
    КонецЕсли;
    
    Если Месяц < 1 Или Месяц > 12 Тогда
        Сообщить("Месяц должен быть от 1 до 12!");
        Возврат;
    КонецЕсли;
    
    // Вызываем серверную процедуру
    АрхивацияНаСервере(Месяц, Год);
    
КонецПроцедуры

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

&НаКлиенте
Процедура ОбновитьОтображениеДанных()
    // Если на форме есть табличное поле с заказами - обновляем его
    ТекущиеДанные = ЭтотОбъект.ПолучитьДанные();
КонецПроцедуры