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