Попробовал провести эксперимент с обработкой для рассылки прайсов.
Перенес функции и процедуры, которые формируют прайсы и отправляют клиентам, в модуль объекта.
На форме кнопкой вызываю процедуру из модуля объекта, которая запускает процесс.
Все отрабатывает и на почту приходят файлы.
Теперь когда все работает, пробую запустить это через регламентные задания, но выдает ошибку "
Слишком много фактических параметров для метода фонового задания".
Как понять данную ошибку? Подскажите пожалуйста из-за это и как можно обойти?
Перем ТемаПисьма, ТекстПисьма;
Перем ОшибкаОтправки;
Функция ОтправитьФайлPOSTЗапросом(ФайлАрхив, ПараметрыПодключения) Экспорт
НТТРАдресСайта = ПараметрыПодключения[0];
НТТРПорт = ПараметрыПодключения[1];
НТТРЛогин = ПараметрыПодключения[2];
НТТРПароль = ПараметрыПодключения[3];
ИДСклада = ПараметрыПодключения[4];
//Подготовка переменных
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
//Определяем имя файла ответа от веб-сервера
ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp";
//Какой-то ранее созданный архив
ИмяФайлаДанных = ФайлАрхив; //"D:\42489.zip";
//Закодируем содержимое файла по Base64, то есть преобразуем его к URL-неактивному виду.
СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
//Проверим размер кодированного файла.
ДопустимыйРазмерФайлаВБайтах = 2500000;
Если СтрДлина(СодержимоеZIP) > ДопустимыйРазмерФайлаВБайтах Тогда
//Какие-то ваши действия, возможно
Возврат 0;
КонецЕсли;
ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";
ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ);
//Определяем раздел двоичных данных
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""data""; filename=""" + ИмяФайлаДанных + """");
//С таким же успехом в Content-Type можно указать application/x-octet-stream
ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
//Определяем раздел для каких либо других POST-данных, например содержимого полей виртуальной HTML-формы.
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
//Соответствует HTML-тэгу input type="submit" name="submit" value="Submit" /
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("1");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
//Соответствует HTML-тэгу
//input type="text" name="some_field" value="Some text" /
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""some_field""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("Some text");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.Закрыть();
ЗаголовокHTTP = Новый Соответствие();
//При необходимости зададим Referer, например таким образом
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref");
ЗаголовокHTTP.Вставить("Referer", СерверИсточник);
//Укажем формат данных Content-Type
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
//Укажем длину POST-запроса Content-Length
ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
//api.avto.pro:8080/api/v1/parts/fileupload/42489
//Сервер = "api.avto.pro"; //Естественно, следует указать свой адрес.
//Порт = "8080";
Сервер = НТТРАдресСайта; //"ga.dn.ua"; //Естественно, следует указать свой адрес.
Порт = НТТРПорт; //"80"; //Это общепринятый порт. Возможно, для вашего сервера применяется другой. Конкретное значение уточните у хостера.
//ИспользоватьПрокси - какая-то логическая переменная, может быть значение флажка на форме или переключатель
ИспользоватьПрокси = Ложь;
Если ИспользоватьПрокси Тогда
Прокси = Новый ИнтернетПрокси;
Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина;
Прокси.Пароль = "ПарольПрокси"; // укажите своё значение
Прокси.Пользователь = "ПользовательПрокси"; // укажите своё значение
НТТР = Новый HTTPСоединение(Сервер, Порт, , , Прокси);
Иначе
НТТР = Новый HTTPСоединение(Сервер, Порт);
КонецЕсли;
//АдресСкрипта = "/UpdateParts?warehouseId="+ИДСклада; // /api/v1/parts/fileupload/
//АдресСкрипта = "/api/v1/parts/fileupload/"+ИДСклада;
АдресСкрипта = "load_price_achiv.php"; //"ld.php"; //Естественно, следует указать имя своего скрипта.
Попытка
Сообщить("Пробуем отправить");
НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP);
Сообщить("Что-то отправили");
Исключение
#Если Клиент Тогда
Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
#Иначе
ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
#КонецЕсли
Возврат 0;
КонецПопытки;
//Удалим файл отправки POST-запроса. Больше он нам не нужен.
УдалитьФайлы(ИмяФайлаОтправки);
//Отправили данные, анализируем ответ сервера.
ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
Если ФайлОтвета.Существует() Тогда
ТекстОтвета = Новый ТекстовыйДокумент();
ТекстОтвета.Прочитать(ИмяФайлаОтвета);
Если ТекстОтвета.КоличествоСтрок() > 0 Тогда
ОтветСервера = ТекстОтвета.ПолучитьТекст();
#Если Клиент Тогда
Сообщить(ОтветСервера);
#КонецЕсли
Иначе
#Если Клиент Тогда
Сообщить("Отправка файла на сервер: Получен пустой ответ сервера.");
#Иначе
ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Получен пустой ответ сервера.");
#КонецЕсли
КонецЕсли;
УдалитьФайлы(ИмяФайлаОтвета);
Иначе
#Если Клиент Тогда
Сообщить("Отправка файла на сервер: Ответ сервера не получен.");
#Иначе
ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Ответ сервера не получен.");
#КонецЕсли
КонецЕсли;
Сообщить("Файл прайса скопирован на "+НТТРАдресСайта);
КонецФункции
Функция ОтправитьПочту(КвоПисем, имяФайлаОтправки, Получатели, НовоеТело = "")
Если Получатели.Количество() = 0 Тогда
Возврат Истина;
КонецЕсли;
УчетнаяЗапись = эпПолучитьУчетнуюЗаписьПоУмолчанию();
СтруктураРежимовОбмена = Новый Структура("Получить, Отправить", Ложь, Истина);
Профиль = эпПолучитьПочтовыйПрофиль(УчетнаяЗапись, СтруктураРежимовОбмена);
// эпОтправитьЭлектронныеПисьма(УчетнаяЗапись);
Попытка
ИнтернетПочта = Новый ИнтернетПочта;
Исключение
#Если Клиент Тогда
Сообщить("Неудачная попытка Отправки почты: " + ОписаниеОшибки());
#Иначе
ЗаписьЖурналаРегистрации("ОтправитьПочту", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка Отправки почты: " + ОписаниеОшибки());
#КонецЕсли
//Предупреждение("2а");
КонецПопытки;
Попытка
ИнтернетПочта.Подключиться(Профиль);
Исключение
Сообщить("Произошли ошибки при проверке настроек учетной записи. "+ОписаниеОшибки());
Возврат "Произошли ошибки при проверке настроек учетной записи. "+ОписаниеОшибки();
КонецПопытки;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Для каждого Стр Из Получатели Цикл
ПочтовыйАдрес=Сообщение.Получатели.Добавить(Стр.Email);
ПочтовыйАдрес.ОтображаемоеИмя=СокрЛП(Стр.Имя);
КонецЦикла;
ПочтовыйАдрес = Сообщение.ОбратныйАдрес.Добавить(Профиль.ПользовательSMTP);//ПользовательSMTP);
ПочтовыйАдрес.ОтображаемоеИмя = Профиль.Пользователь;
Сообщение.Отправитель.Адрес = Профиль.ПользовательSMTP;
Сообщение.Отправитель.ОтображаемоеИмя=Профиль.Пользователь;
Сообщение.ИмяОтправителя=Профиль.Пользователь;
Если НовоеТело = "" Тогда
Сообщение.Тема=ТемаПисьма;
Сообщение.Тексты.Добавить(ТекстПисьма);
Сообщение.Вложения.Добавить(имяФайлаОтправки);
Иначе
Сообщение.Тема="Отчет о рассылки "+Строка(ТекущаяДата());//РабочаяДата;
Сообщение.Тексты.Добавить(НовоеТело);
КонецЕСли;
Попытка
ИнтернетПочта.Послать(Сообщение);
//Сообщить("Сообщение отправлено. "+СокрЛП(имяФайлаОтправки));
Исключение
Сообщить("Не удалось отправить письмо, Ошибка: "+ОписаниеОшибки());
Возврат "Не удалось отправить письмо, Ошибка: "+ОписаниеОшибки();
КонецПопытки;
ИнтернетПочта.Отключиться();
Возврат Истина;
КонецФункции
&НаСервере
Функция КурсЗапросомСервер(ДатаДок, ВалютаДок)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Дата",ДатаДок);
Запрос.УстановитьПараметр("Валюта",ВалютаДок);
Запрос.Текст = "Выбрать
|КурсыВалют.Период,
|КурсыВалют.Курс,
|КурсыВалют.Кратность
|ИЗ
|РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта =&Валюта) КАК КурсыВалют";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Рез = Выборка.Курс; //Строка(Выборка.Курс)+":"+Строка(Выборка.Кратность);
КонецЕсли;
Возврат Рез;
КонецФункции
Процедура Тест() Экспорт
ТД = Новый ТекстовыйДокумент;
ТД.ВставитьСтроку(1, "Тестовая строка");
дт = Строка(ТекущаяДата());
дт = СтрЗаменить(дт, ".", "_");
дт = СтрЗаменить(дт, ":", "_");
ТД.Записать("D:\1с\_DN\Тестовый_файл_"+дт+".txt");
КонецПроцедуры
Процедура СтартРассылки(ЭтоАдмин, ГрупповаяРассылка=Ложь) Экспорт
//Формируем прайсы
НовыйПрайс();
//Получаем настройки из регистра сведений НастройкиРассылкиПрайсов
КвоПисем=0;
КаталогИБ = НСтр(СтрокаСоединенияИнформационнойБазы(), "File");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НастройкиРассылкиПрайсов.НомерПрайса КАК НомерПрайса,
| НастройкиРассылкиПрайсов.ТипЦены КАК ТипЦены,
| НастройкиРассылкиПрайсов.Склады КАК Склады,
| НастройкиРассылкиПрайсов.Валюта КАК Валюта,
| НастройкиРассылкиПрайсов.Доп КАК Доп,
| НастройкиРассылкиПрайсов.Активно КАК Активно
|ИЗ
| РегистрСведений.НастройкиРассылкиПрайсов КАК НастройкиРассылкиПрайсов
|ГДЕ
| НастройкиРассылкиПрайсов.Активно = ИСТИНА";
НастройкиРассылки = Запрос.Выполнить().Выгрузить();
//ТабличноеПоле1 = Запрос.Выполнить().Выгрузить();
//ЭлементыФормы.НадпТекОперация.Заголовок = "Этап (9/9): Отправка писем.";
Для каждого Стр из НастройкиРассылки Цикл
ИмяФайла = КаталогИБ+"\ExtForms\_MailPrices\price"+Строка(Стр.НомерПрайса)+".zip";
Тхт = Строка(Стр.НомерПрайса)+" "+Строка(Стр.ТипЦены)+" "+Строка(Стр.Склады)+" "+Строка(Стр.Валюта);
#Если Клиент Тогда
Сообщить(Тхт);
#Иначе
ЗаписьЖурналаРегистрации("Настройка прайсов", УровеньЖурналаРегистрации.Предупреждение, , , Тхт);
#КонецЕсли
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.ПометкаУдаления,
| Контрагенты.РассылатьПрайсы,
| Контрагенты.НомерПрайса,
| Контрагенты.Ссылка,
| Контрагенты.Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ПометкаУдаления = ЛОЖЬ
| И Контрагенты.РассылатьПрайсы = ИСТИНА
| И Контрагенты.НомерПрайса = &НомерПрайса";
Запрос.УстановитьПараметр("НомерПрайса",Стр.НомерПрайса);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если ЭтоАдмин Тогда //флТолькоАдмин Тогда
Получатели = Новый ТаблицаЗначений;
Получатели.Колонки.Добавить("Имя");
Получатели.Колонки.Добавить("Email");
ПолучателиНовСтр = Получатели.Добавить();
ПолучателиНовСтр.Имя = "bizisoft";
ПолучателиНовСтр.Email = "bizisoft@yandex.ru";
ТемаПисьма = "Остатки на " + СокрЛП(Формат(ТекущаяДата(),"ДЛФ=D"));
//Организация = Справочники.Организации.НайтиПоКоду("00001");
ТекстПисьма = "Это письмо отправлено автоматически, отвечать на него не нужно.";
ОтправитьПочту(1, ИмяФайла, Получатели);
Продолжить;
КонецЕсли;
//КвоПисем=КвоПисем+1;
Если ГрупповаяРассылка Тогда //флГрупповаяРассылка Тогда
Получатели = Новый ТаблицаЗначений;
Получатели.Колонки.Добавить("Имя");
Получатели.Колонки.Добавить("Email");
КвоПисем = 0;
Пока Выборка.Следующий() Цикл
ЭлектронныйАдрес = Неопределено;
ЭлектронныйАдрес = киПолучитьПредставлениеКИ(Выборка.Ссылка, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"]);
ПолучателиНовСтр = Получатели.Добавить();
ПолучателиНовСтр.Имя = Выборка.Наименование;
ПолучателиНовСтр.Email = ЭлектронныйАдрес;
КвоПисем=КвоПисем+1;
КонецЦикла;
ТемаПисьма = "Остатки на " + СокрЛП(Формат(ТекущаяДата(),"ДЛФ=D"));
Организация = Справочники.Организации.НайтиПоКоду("00001");
ТекстПисьма = "Это письмо отправлено автоматически, отвечать на него не нужно."+Символы.ПС+Символы.ПС+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЮридический"])+Символы.ПС+
"Магазин тел."+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонРабочий"])+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонСотовый"])+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонКонтактный"])+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонДомашний"])+Символы.ПС+
"E-mail: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"])+Символы.ПС+
"Интернет-Магазин: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ВебСтраницаОрганизации"])+Символы.ПС+
"С уважением Гранд-Авто";
ОтправитьПочту(КвоПисем, ИмяФайла, Получатели);
Иначе
Получатели = Новый ТаблицаЗначений;
Получатели.Колонки.Добавить("Имя");
Получатели.Колонки.Добавить("Email");
ТемаПисьма = "Остатки на " + СокрЛП(Формат(ТекущаяДата(),"ДЛФ=D"));
Организация = Справочники.Организации.НайтиПоКоду("00001");
ТекстПисьма = "Это письмо отправлено автоматически, отвечать на него не нужно."+Символы.ПС+Символы.ПС+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЮридический"])+Символы.ПС+
"Магазин тел."+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонРабочий"])+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонСотовый"])+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонКонтактный"])+Символы.ПС+
киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонДомашний"])+Символы.ПС+
"E-mail: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"])+Символы.ПС+
"Интернет-Магазин: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ВебСтраницаОрганизации"])+Символы.ПС+
"С уважением Гранд-Авто";
Пока Выборка.Следующий() Цикл
КвоПисем = 0;
Получатели.Очистить();
ЭлектронныйАдрес = Неопределено;
ЭлектронныйАдрес = киПолучитьПредставлениеКИ(Выборка.Ссылка, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"]);
ПолучателиНовСтр = Получатели.Добавить();
ПолучателиНовСтр.Имя = Выборка.Наименование;
ПолучателиНовСтр.Email = ЭлектронныйАдрес;
КвоПисем=КвоПисем+1;
ОтправитьПочту(КвоПисем, ИмяФайла, Получатели);
КонецЦикла;
КонецЕсли;
Если Стр.Доп = 1 Тогда
Сообщить("Вызов процедуры отправки файла ПОСТ запросом на сайт");
ФТПСервер = Константы.ФТПСервер.Получить();//"ga.dn.ua";
ПараметрыПодключения = Новый Массив();
ПараметрыПодключения.Добавить(ФТПСервер); //хост
ПараметрыПодключения.Добавить("80"); //порт
ПараметрыПодключения.Добавить("login"); //логин
ПараметрыПодключения.Добавить("password"); //пароль
ПараметрыПодключения.Добавить("ИДСклада"); //ид склада
Сообщить(ИмяФайла);
ОтправитьФайлPOSTЗапросом(ИмяФайла, ПараметрыПодключения);
//--- отчет на почту о загрузке архива на сайт
Пол = Новый ТаблицаЗначений;
Пол.Колонки.Добавить("Имя");
Пол.Колонки.Добавить("Email");
ПолНовСтр = Пол.Добавить();
ПолНовСтр.Имя = "bizisoft";
ПолНовСтр.Email = "bizisoft@yandex.ru";
ТемаПисьма = "Отчет загрузки файла";
ТекстПисьма = "Файл "+Строка(ИмяФайла)+" был загружен на сайт:"+ФТПСервер;
ОтправитьПочту(1, ИмяФайла, Пол);
//---
КонецЕсли;
КонецЦикла;
//ЭлементыФормы.НадпТекОперация.Заголовок = "Этап (-/-): Процесс завершен.";
КонецПроцедуры
Функция НовыйПрайс()
//дтНач = ТекущаяДата();
КаталогИБ = НСтр(СтрокаСоединенияИнформационнойБазы(), "File");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НастройкиРассылкиПрайсов.НомерПрайса КАК НомерПрайса,
| НастройкиРассылкиПрайсов.ТипЦены КАК ТипЦены,
| НастройкиРассылкиПрайсов.Склады КАК Склады,
| НастройкиРассылкиПрайсов.Валюта КАК Валюта,
| НастройкиРассылкиПрайсов.Доп КАК Доп,
| НастройкиРассылкиПрайсов.Активно КАК Активно
|ИЗ
| РегистрСведений.НастройкиРассылкиПрайсов КАК НастройкиРассылкиПрайсов
|ГДЕ
| НастройкиРассылкиПрайсов.Активно = ИСТИНА";
НастройкиРассылки = Запрос.Выполнить().Выгрузить();
Для каждого стрНастройки из НастройкиРассылки Цикл
//Сообщить(стрНастройки.НомерПрайса);
//Сообщить(стрНастройки.ТипЦены);
//Сообщить(стрНастройки.Склады);
//СТРОИМ ЗАПРОС ПО ВЫБРАННЫМ СКЛАДАМ
ТекстЗапросаИТОГ = "ВЫБРАТЬ
| ЦеныСрезПоследних.Номенклатура,
| ЦеныСрезПоследних.Цена * (КурсУпр.Курс / КурсУпр.Кратность) / (КурсВал.Курс / КурсВал.Кратность) КАК Цена";
Счетчик = 0;
Сообщить(стрНастройки.Склады);
//Преобразуем строку с разделителями (Склады: Д-МАГАЗИН; Д-ЦЕНТР) в массив
МассивИзСтроки = СтрРазделить(стрНастройки.Склады,";",Ложь);
врСЗСклады = Новый СписокЗначений;
//Помещаем массив во временный список значений
врСЗСклады.ЗагрузитьЗначения(МассивИзСтроки);
Сообщить(врСЗСклады);
//Пересобираем список складов, но уже ввиде ссылок
СЗСклады = Новый СписокЗначений;
СпрСклады = Справочники.СкладыКомпании;
Для Каждого Элемент Из врСЗСклады Цикл
НайденныйСклад = СпрСклады.НайтиПоНаименованию(Элемент.Значение);
Если НЕ НайденныйСклад.Пустая() Тогда
СЗСклады.Добавить(НайденныйСклад, НайденныйСклад);
КонецЕсли;
КонецЦикла;
//Собираем текст запроса
Для Каждого Элемент Из СЗСклады Цикл //стрНастройки.Склады Цикл
// Сообщить(Элемент.Представление+": "+Строка(Элемент.Значение)+" "+Строка(Элемент.Значение.Код) );
Счетчик=Счетчик+1;
ТекстЗапросаИТОГ = ТекстЗапросаИТОГ+","+Символы.ПС+
"Остатки"+Строка(Счетчик)+".КоличествоОстаток-Остатки"+Строка(Счетчик)+".РезервОстаток КАК "+Строка(Элемент.Значение.Код);
КонецЦикла;
ТекстЗапросаИТОГ = ТекстЗапросаИТОГ+Символы.ПС+Символы.ПС+
"ИЗ
| РегистрСведений.Цены.СрезПоследних(&Период, ТипЦен = &Цена И ПодразделениеКомпании = &Подразделение) КАК ЦеныСрезПоследних
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсУпр
| ПО (КурсУпр.Валюта = &ВалютаУпр)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсРег
| ПО (КурсРег.Валюта = &ВалютаРег)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсВал
| ПО (КурсВал.Валюта = &Валюта)";
Счетчик = 0;
Для Каждого Элемент Из СЗСклады Цикл //стрНастройки.Склады Цикл
// Сообщить(Элемент.Представление+": "+Строка(Элемент.Значение)+" "+Строка(Элемент.Значение.Код) );
Счетчик=Счетчик+1;
ТекстЗапросаИТОГ = ТекстЗапросаИТОГ+Символы.ПС+
" ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Период, СкладКомпании = &Склад"+Строка(Счетчик)+") КАК Остатки"+Строка(Счетчик)+"
| ПО ЦеныСрезПоследних.Номенклатура = Остатки"+Строка(Счетчик)+".Номенклатура";
КонецЦикла;
//Формируем запрос
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаИТОГ;
//Обработка параметров
Запрос.УстановитьПараметр("Подразделение", Справочники.ПодразделенияКомпании.ОсновноеПодразделение);
Запрос.УстановитьПараметр("Цена", стрНастройки.ТипЦены);
Запрос.УстановитьПараметр("Период", ТекущаяДата());
Счетчик = 0;
Для Каждого Элемент Из СЗСклады Цикл //стрНастройки.Склады Цикл
Счетчик=Счетчик+1;
Запрос.УстановитьПараметр("Склад"+Строка(Счетчик), Элемент.Значение);
КонецЦикла;
Запрос.УстановитьПараметр("ВалютаУпр", Константы.ВалютаУправленческогоУчетаКомпании.Получить());
Запрос.УстановитьПараметр("ВалютаРег", Константы.ВалютаРегламентированногоУчетаОрганизаций.Получить());
Запрос.УстановитьПараметр("Валюта", стрНастройки.Валюта);
// Сообщить(ТекстЗапросаИТОГ);
//Сообщить(стрНастройки.Валюта);
//Сообщить(стрНастройки.Доп);
Результат = Запрос.Выполнить();
ТЗ = Результат.Выгрузить();
//бсПоказатьРезультатВТаблице(ТЗ);
//ЭлементыФормы.Индикатор1.МинимальноеЗначение = 0;
//ЭлементыФормы.Индикатор1.МаксимальноеЗначение = ТЗ.Количество();
//ЭлементыФормы.Индикатор1.Значение = 0;
ИмяФайлаПрайса = КаталогИБ+"\ExtForms\_MailPrices\price"+Строка(стрНастройки.НомерПрайса);
ТабличныйДокумент=Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьЗаголовок.Параметры.ПечОрганизация = Справочники.Организации.ОсновнаяОрганизация;
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Основное");
ТабличныйДокумент.Вывести(ОбластьКопирования);
//Заполняем шипку складами из настроек
Для каждого ст из СЗСклады Цикл //стрНастройки.Склады Цикл
ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Склад");
ОбластьКопирования.Параметры.СкладКомпанииНаименование = ст;
ТабличныйДокумент.Присоединить(ОбластьКопирования);
КонецЦикла;
//Заполняем шапку типом цены из настроек
ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Цены");
ОбластьКопирования.Параметры.ТипЦен = стрНастройки.ТипЦены;//ст.ТипыЦен.Наименование;
ТабличныйДокумент.Присоединить(ОбластьКопирования);
//Получаем курсы основных валют
ТекКурс = КурсЗапросомСервер(ТекущаяДата(), Справочники.Валюты.НайтиПоКоду("840"));
ТекКурсР = КурсЗапросомСервер(ТекущаяДата(), Справочники.Валюты.НайтиПоКоду("643"));
ТекВалюта = стрНастройки.Валюта;
Пп = 0;
Для каждого стр из ТЗ Цикл
Пп=Пп+1;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
//Заполняем основную часть макета
ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Основное");
ОбластьКопирования.Параметры.пп = Пп;
ОбластьКопирования.Параметры.ПечНоменклатура = стр.Номенклатура;
ОбластьКопирования.Параметры.ПечАртикул = стр.Номенклатура.тАртикул;
ОбластьКопирования.Параметры.ПечПроизводитель = стр.Номенклатура.Производитель;
ОбластьКопирования.Параметры.ПечМодель = стр.Номенклатура.Модель;
ТабличныйДокумент.Вывести(ОбластьКопирования);
//Выводим остатки на складах в макет
Для каждого скл из СЗСклады Цикл //стрНастройки.Склады Цикл
// Сообщить(скл);
Склад = Справочники.СкладыКомпании.НайтиПоНаименованию(скл);
// Сообщить(Склад.Код);
ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Склад");
ТекКол=0;
Попытка
ТекКол = Число(стр[Склад.Код]);
Исключение
ТекКол = 0;
// Сообщить("Ошибка преобразования в число для: "+Строка(стр[Склад.Код]));
КонецПопытки;
Если ТекКол>5 Тогда
ОбластьКопирования.Параметры.ПечСклад = ">5";
Иначе
ОбластьКопирования.Параметры.ПечСклад = ТекКол; //стр[Склад.Код];
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьКопирования);
КонецЦикла;
ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Цены");
//Расчитываем цены по полученым курсам
ВалютаРегламентированногоУчета=Константы.ВалютаРегламентированногоУчетаОрганизаций.Получить();
ВалютаУправленческогоУчета = Константы.ВалютаУправленческогоУчетаКомпании.Получить();
ЦенаВВалюте = стр.Цена;
Состояние("Формирование прайса",Пп,,);
ОбластьКопирования.Параметры.ПечЦена = ЦенаВВалюте;//стр[НаимКолонки];
ТабличныйДокумент.Присоединить(ОбластьКопирования);
КонецЦикла;
ТабличныйДокумент.Записать(ИмяФайлаПрайса+".xls", ТипФайлаТабличногоДокумента.XLS97);
//Архивируем прайсы
Zip = Новый ЗаписьZipФайла(ИмяФайлаПрайса+".zip");
Zip.Добавить(ИмяФайлаПрайса+".xls");
Zip.Записать();
КонецЦикла;
Возврат 0;
КонецФункции