Добрый день!

Подскажите, кто может знает, как можно решить:

Настроил рассылку отчета по почте, все "ок", отправляться
В настройках отчет не могу настроить что бы отчет формировался за определенный период каждый месяц, допустим
- сегодня 25.10 число отчет формируется за 26.09 по 25.10
- а если сегодня 27.10 число тогда отчет формируется за 26.10 по 25.11

Если нельзя настроить типовыми средствами, подскажите пожалуйста как можно программно настроить?
---
Решил таким способом:

т.к. отчет типовой и настроенный не стал торгать отчет только поставил нужные даты в настройках отчета и уже обработкой с буду менять даты каждый месяц, а обработка будет запускаться один раз в месяц регламентным заданием

вот код обработки:

```1c
    //Системные функции
    Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
    ПараметрыРегистрации.Вставить("Наименование", "Изменить период отчета"); //Наименование обработки, которым будет заполнено наименование элемента справочника
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Обработка каждый месяц изменяет период отчета на месяц вперед"); //Краткая информация по обработке, описание обработки
    ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4");

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
    "Изменить период отчета", //представление команды в пользовательском интерфейсе
    "ИзменитьПериодОтчета", //идентификатор команды; любая строка, уникальная в пределах данной обработки
    "ВызовСерверногоМетода");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
    КонецФункции

    Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
    КонецФункции

    Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = ")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
    КонецПроцедуры

    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт

    Если ИдентификаторКоманды = "ИзменитьПериодОтчета" Тогда

    ВыполнениеКомандуИзменитьПериодОтчета();

    КонецЕсли;

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

    //Нужная процедура
    Процедура ВыполнениеКомандуИзменитьПериодОтчета()

    //найти нужный отчет
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | док.Ссылка
    |ИЗ
    | Справочник.РассылкиОтчетов КАК док
    |ГДЕ
    | док.Наименование = "Продажи по контрагентам (по оплате) Тест"";
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

    //получить объект
    РассылкаОтчетаОбъект = РезультатЗапроса[0].Ссылка.ПолучитьОбъект();

    //найти параметры отчета и изменить их
    НастройкиОтчета = РассылкаОтчетаОбъект.Отчеты[0].Настройки.Получить();
    ЗначениеПараметраНастроек = НастройкиОтчета.Элементы.найти("0bc9f8cf-cf2c-4568-8f4a-2839bc6b7b3a");
    Период = ЗначениеПараметраНастроек.Значение;
    ТекущаяДата = НачалоДня(ТекущаяДата());

    Если Период.ДатаОкончания < ТекущаяДата() Тогда

    //прибавляем месяц пока текущая дата будет меньше
    Пока Период.ДатаОкончания < ТекущаяДата Цикл
    Период.ДатаНачала = ДобавитьМесяц(Период.ДатаНачала, 1);
    Период.ДатаОкончания = ДобавитьМесяц(Период.ДатаОкончания, 1);
    КонецЦикла;

    КонецЕсли;

    //переписать настройки в отчете и записать отчет
    РассылкаОтчетаОбъект.Отчеты[0].Настройки = Новый ХранилищеЗначения(НастройкиОтчета);
    РассылкаОтчетаОбъект.Записать();

    КонецПроцедуры
```
---
непонятно...
25 октября отчет должен сформироваться за прошлый месяц - с 26 сентября по 25 октября
27 октября отчет должен сформироваться за немного кривой будущий месяц - с 26 октября по 25 ноября?

Как сделать вторую настройку, мне в голову не приходит, вообще расписание рассылки может быть состоять из списка значений, а не строго одного варианта. Ну или можно сделать две рассылки с разными расписаниями.
---
Добавить параметр "Рассылка", а для параметра "Дата начала" установить выражение "выбор когда &Рассылка тогда ДобавитьКДате(&ДатаОтчета, Месяц, -1) иначе &ПериодОтчета.ДатаНачала конец"
---
У меня не измененная конфигурация
---
Решил таким способом:

т.к. отчет типовой и настроенный не стал торгать отчет только поставил нужные даты в настройках отчета и уже обработкой с буду менять даты каждый месяц, а обработка будет запускаться один раз в месяц регламентным заданием

вот код обработки:

```1c
    //Системные функции
    Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
    ПараметрыРегистрации.Вставить("Наименование", "Изменить период отчета"); //Наименование обработки, которым будет заполнено наименование элемента справочника
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Обработка каждый месяц изменяет период отчета на месяц вперед"); //Краткая информация по обработке, описание обработки
    ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4");

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
    "Изменить период отчета", //представление команды в пользовательском интерфейсе
    "ИзменитьПериодОтчета", //идентификатор команды; любая строка, уникальная в пределах данной обработки
    "ВызовСерверногоМетода");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
    КонецФункции

    Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
    КонецФункции

    Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = ")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
    КонецПроцедуры

    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт

    Если ИдентификаторКоманды = "ИзменитьПериодОтчета" Тогда

    ВыполнениеКомандуИзменитьПериодОтчета();

    КонецЕсли;

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

    //Нужная процедура
    Процедура ВыполнениеКомандуИзменитьПериодОтчета()

    //найти нужный отчет
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | док.Ссылка
    |ИЗ
    | Справочник.РассылкиОтчетов КАК док
    |ГДЕ
    | док.Наименование = "Продажи по контрагентам (по оплате) Тест"";
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

    //получить объект
    РассылкаОтчетаОбъект = РезультатЗапроса[0].Ссылка.ПолучитьОбъект();

    //найти параметры отчета и изменить их
    НастройкиОтчета = РассылкаОтчетаОбъект.Отчеты[0].Настройки.Получить();
    ЗначениеПараметраНастроек = НастройкиОтчета.Элементы.найти("0bc9f8cf-cf2c-4568-8f4a-2839bc6b7b3a");
    Период = ЗначениеПараметраНастроек.Значение;
    ТекущаяДата = НачалоДня(ТекущаяДата());

    Если Период.ДатаОкончания < ТекущаяДата() Тогда

    //прибавляем месяц пока текущая дата будет меньше
    Пока Период.ДатаОкончания < ТекущаяДата Цикл
    Период.ДатаНачала = ДобавитьМесяц(Период.ДатаНачала, 1);
    Период.ДатаОкончания = ДобавитьМесяц(Период.ДатаОкончания, 1);
    КонецЦикла;

    КонецЕсли;

    //переписать настройки в отчете и записать отчет
    РассылкаОтчетаОбъект.Отчеты[0].Настройки = Новый ХранилищеЗначения(НастройкиОтчета);
    РассылкаОтчетаОбъект.Записать();

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