Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 5, свеженьких 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



10 страниц V   1 2 3 > » 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 30.10.20, 12:41


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Получилось разобраться с запуском регл.задания.

В общем модуле бс_МоиФоновыеЗадания

Изменил процедуру
Процедура ВыполнитьРассылкуПрайсов() Экспорт
    Рассылка = Обработки._РассылкаПрайсовБизисофт.Создать();
    РежимОтладки = Константы._РассылкаПрайсов_РежимОтладки.Получить();
    Рассылка.СтартРассылки( РежимОтладки, Ложь);
КонецПроцедуры

В параметры добавил параметр СтруктураПараметров , только в него ничего не передаю
Процедура ВыполнитьРассылкуПрайсов(СтруктураПараметров) Экспорт
    Рассылка = Обработки._РассылкаПрайсовБизисофт.Создать();
    РежимОтладки = Константы._РассылкаПрайсов_РежимОтладки.Получить();
    Рассылка.СтартРассылки( РежимОтладки, Ложь);
КонецПроцедуры


обмен прайсами стартует и отрабатывает, но возникла непонятная ситуация.

В копии базы, где я провожу все эксперименты в таблице регламентных заданий на против моего задания заполняются столбцы Выполнялось и Состояние и в таблице фоновые задания отображается информация о состоянии, начале, конце и ошибки (если возникают).
А в рабочей базе информация ни в рег.заданиях ни в фоновых заданиях ни как не отображается, хоть прайсы приходят на почту.

Подскажите пожалуйста, что ни так, почему не отображается информация о работе регл.задания?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167814 · Ответов: 5 · Просмотров: 306
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 22.10.20, 16:28


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Попробовал провести эксперимент с обработкой для рассылки прайсов.
Перенес функции и процедуры, которые формируют прайсы и отправляют клиентам, в модуль объекта.
На форме кнопкой вызываю процедуру из модуля объекта, которая запускает процесс.
Все отрабатывает и на почту приходят файлы.

Теперь когда все работает, пробую запустить это через регламентные задания, но выдает ошибку "Слишком много фактических параметров для метода фонового задания".

Как понять данную ошибку? Подскажите пожалуйста из-за это и как можно обойти?
Перем ТемаПисьма, ТекстПисьма;
Перем ОшибкаОтправки;


Функция ОтправитьФайл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;


КонецФункции
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167572 · Ответов: 5 · Просмотров: 306
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 20.10.20, 13:11


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Попробовал следующиее:

В в модуле объекта обработки прописал экспортную процедуру Тест() для проверки возможности запуска

Процедура Тест() Экспорт    
    ТД = Новый ТекстовыйДокумент;
    ТД.ВставитьСтроку(1, "Тестовая строка");
    ТД.Записать("D:\1с\_DN\Тестовый_файл.txt");
КонецПроцедуры



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


Нажимаю выполнить РЗ немедленно - отрабатывает и в указанной директории создаются файлы.

Т.е. получается все работает и экспортная процедура выполняется.

А как можно вызвать процедуру(ы) находящиеся в модуле формы обработки или это невозможно и нужно обработку переписать т.о., чтобы все функции и процедуры находились в модуле объекта обработки?
Также не понятно как правильно поступить с функциями/процедурами, которые вызываются в теле экспортной процедуры, их нужно тоже делать экспортными?

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167490 · Ответов: 5 · Просмотров: 306
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 20.10.20, 10:51


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


nik389 @ Вчера, 20:07 * ,
Не уверен, что в Альфа-Авто используется БСП.

Рарус ответил касательно РЗ следующее:
Цитата
В конфигурации стандартный функционал работы Регламентных заданий: устанавливается расписание, пользователь и другие настройки запуска. Из специфики клиент-серверного варианта - должны быть разблокирована работа регламентных заданий для этой базы на сервере.


Я попробовал следующие действия:
- в общем модуле "фзФоновыеЗадания" добавил процедуру
Процедура ВыполнитьМоюОбработку(Параметр) Экспорт
    Сообщить(Параметр);
        Сообщить("Параметр");
КонецПроцедуры

- добавил метаданные РегламентныеЗадания бс_ОбменССайтом имя метода выбрал фзФоновыеЗадания.ВыполнитьМоюОбработку

В режиме предприятия добавляю регламентное задание, выбираю Вид задание бс_ОбменССайтом, выбираю пользователя, заполняю "Ключ" = 123 (с потолка), ставлю галочку Использование.
Нажимаю кнопку "Выполнить регламентное задание немедленно" и вот что получается:
Регламентные задания
Бс обмен с сайтом    Бс обмен с сайтом    Робот    19.10.2020 16:47:22    Задание выполнено

Воновые задания
<Самостоятельный запуск>    Бс обмен с сайтом    Задание выполнено    20.10.2020 10:36:00    20.10.2020 10:36:00


Я правильно понимаю, что задание выполнилось, судя по значению "Состояния", но при этом Сообщить("Параметр"); не выводит сообщение или при регламентных заданиях сообщения не выводятся?

Теперь можно в процедуре ВыполнитьМоюОбработку(Параметр) прописать запуск внешней обработки или обычной разработки?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167489 · Ответов: 5 · Просмотров: 306
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 16.10.20, 21:42


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.
1С (8.3.14.2095) / Альфа-Авто (4.1.23.01) / Файловый режим / обычные формы.

Есть обработки для обмена с сайтом и рассылка прайсов.
Запуск этих обработок осуществляется через планировщик заданий windows (запускается база, в качестве параметра передается внешняя обработка и в ней в качестве своего параметра "режим" внешней обработки (т.е какие функции будут отрабатывать).

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

Думаю, что можно переделать это все на регламентные задания, но никак не могу врубится с чего начать.
Прочитал уже несколько статей на инфостарте и др. сайтах, но уловить ниточку действий никак не получается.
Понял, что возможно это провернуть через добавление регламентного задания в конфигурацию или без изменения конфигурации, но прописыванием в модуле объекта внешней обработки каких-то команд.

Люди добрые, направьте на путь истинный, растолкуйте, как лучше это сделать и в какой последовательности нужно действовать?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167412 · Ответов: 5 · Просмотров: 306
 

>  После обновления платформы и конфигурации перестал работать FTPСоединение
bizisoft
Отправлено: 07.10.20, 10:08


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Alegzander @ Сегодня, 8:17 * ,
Ну так до обновления все работало.

Решил проверить, изменил константу ФТППорт на Число.
Так работает.
Получается в предыдущей версии платформы это было не существенным, поэтому работало и ошибку не выдавало.
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167129 · Ответов: 3 · Просмотров: 189
 

>  После обновления платформы и конфигурации перестал работать FTPСоединение
bizisoft
Отправлено: 06.10.20, 20:17


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Вот так создавалось FTP соединение:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);


На старой платформе все работало, но на новой (причину я так и не понял) ни в какую.

Погрыз мануалы и выяснил, что в новой платформе они добавили поддержку SSL (защищенные) соединений, и добавили для этого несколько параметров:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси, Истина,0,ssl4,УровеньИспользованияЗащищенногоСоединенияFTP.Авто);


Но что я только не пробовал не помогало.

В итоге получилось так:
ФТП = Новый FTPСоединение(ФТПСервер, , ФТППользователь, ФТППароль);

т.е. убрал 2-й параметр ФТППорт, хотя не понятно почему так, где логика в этом, а если порт будет отличаться от "21" (по умолчанию) ?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167096 · Ответов: 3 · Просмотров: 189
 

>  После обновления платформы и конфигурации перестал работать FTPСоединение
bizisoft
Отправлено: 06.10.20, 15:59


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.

1С:Предприятие 8.3 (8.3.14.2095)
Альфа-Авто: 4.1.22.01

После обновления конфигурации 4.1.21.01 на 4.1.22.01 с соответствующим переходом с платформы 8.2 на 8.3.
После этого обновления самописная внешняя обработка для выгрузки данных (номенклатура, остатки, цены) на сайт перестала работать.
Выгрузка данных на сайт происходит посредством выгрузки данных в файлы csv, архивирование файлов и загрузки их в каталог сайта через FTP.

Насколько я понял затык происходит в момент соединения.
Код функции соединения и отправки файла:
Функция ОтправитьФайлНаFTPСервер() Экспорт
    ФТПСервер = Константы.ФТПСервер.Получить();
    ФТППорт = Константы.ФТППорт.Получить();
    ФТППользователь = Константы.ФТППользователь.Получить();
    ФТППароль = Константы.ФТППароль.Получить();
    Прокси = Неопределено;
    ФТПКаталог = Константы.ФТПКаталог.Получить();
    
    Попытка
        ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);        
        Логи("Установка соединения..............ОК");
    Исключение
        Логи("Установка соединения..............FALSE",СтатусСообщения.Важное);
    КонецПопытки;
    Попытка
        ФТП.УстановитьТекущийКаталог(ФТПКаталог);
        Логи("Установка текущего каталога..............ОК");
    Исключение
        Логи("Установка текущего каталога..............FALSE",СтатусСообщения.Важное);
        Попытка            
            ФТП.УстановитьТекущийКаталог(ФТПКаталог);
            Логи("Установка текущего каталога (повторно)...ОК");
        Исключение
            Попытка            
                ФТП.УстановитьТекущийКаталог(ФТПКаталог);
                Логи("Установка текущего каталога (повторно 2)...ОК");
            Исключение
                Логи("Установка текущего каталога (повторно 2)...FALSE",СтатусСообщения.Важное);
            КонецПопытки;  
        КонецПопытки;
    КонецПопытки;
    
    Для Каждого ИмяОтправляемогоФайла Из СпФайлы Цикл
        ТекФайл = Новый Файл(ИмяОтправляемогоФайла);
        Если ТекФайл.Существует() Тогда
            ИмяВыходногоФайла = ТекФАйл.Имя;
            ФТП.Записать(ИмяОтправляемогоФайла, ИмяВыходногоФайла);
            Логи(ИмяВыходногоФайла+" - файл успешно загружены на сервер");
        Иначе
            Логи("Файл "+ИмяВыходногоФайла+" не найден в каталоге");
        КонецЕсли;    
    КонецЦикла;
КонецФункции


Не понятно почему перестал работать метод FTPСоединение() после обновления, в 1С 8.2.19.130 АА 4.1.21.01.

Вроде в 8.3 есть какое-то отличие (не уверен точно) в параметрах FTPСоединение() чем у 8.2 (их стало больше).
Поэтому пробовал указать эти дополнительные параметры:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси, Истина,0,Неопределено,УровеньИспользованияЗащищенногоСоединенияFTP.Авто);

Но и это не дало результата.

Может кто-нибудь сталкивался с такой ситуацией и подскажет как решить данную проблему.

Для получения развернутой информации по ошибке убрал обвязку Попытка-Исключение, но скупая ошибка ясности не внесла.
{ВнешняяОбработка.ПроверкаИнтернетЗаказов.Форма.ПроверкаИнтернетЗаказов.Форма(5419)}: Ошибка при вызове конструктора (FTPСоединение)
        ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);
по причине:
Несоответствие типов (параметр номер '2')

Если ругается на 2-ой параметр, то это константа строкового типа
ФТПСервер = "xx.yy.ua";
ФТППорт = "21";
ФТППользователь = "user";
ФТППароль = "123";
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167095 · Ответов: 3 · Просмотров: 189
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 05.10.20, 23:31


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


bizisoft @ 19.09.20, 11:47 * ,
Все получилось.
При проведении документа, создаются записи в регистр, а при отмене проведение, удаляются.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #167064 · Ответов: 7 · Просмотров: 233
 

>  Обновление конфигурации с нюансами
bizisoft
Отправлено: 01.10.20, 9:56


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Petre @ Сегодня, 7:34 * ,
Не совсем понял что это такое:
Цитата(Petre @ 01.10.20, 7:34) *
Замену имен можно быстро произвести переименованием из функционала рефакторинга.

Это какой-то функционал конфигуратора?



Цитата(Petre @ 01.10.20, 7:34) *
А вообще правильнее было бы делать так. Создать базу для разработки, а потом из нее делать поставки для рабочей базы.

Я пришел к созданию копии для разработки где-то на 5-ом обновлении.
А что означает делать поставки для рабочей базы, это какой-то другой способ переноса изменений?
Я просто после изменений в "разработке" сохранял конфигурацию в файл и после сравнение-объединение - это можно назвать "поставка для базы"?.
  Форум: Администрирование и настройка 1С · Просмотр сообщения: #166920 · Ответов: 8 · Просмотров: 254
 

>  Обновление конфигурации с нюансами
bizisoft
Отправлено: 30.09.20, 20:33


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте
1С Предприятие 8.2.19.130

Собираюсь обновить конфигурацию Альфа-Авто: 4.1.21.01 на 4.1.22.01 из файла конфигурации посредством сравнение и объединения, т.к. конфигурация уже многократно модифицирована
До текущего момента уже неоднократно доводилось выполнять обновление данной базы начиная с 4.1.14.01, но тут походу особый случай, т.к. с новой конфигурацией будет осуществлен переход на другую версию платформы (8.3.10).

При сравнении конфигураций видно что изменениям подверглись большое количество модулей конфигурации причем основной объем изменений связан с заменой везде ЭтотОбъект на ЭтотОбъект82 (например в общем модуле дкДокументы заменили
ЭтотОбъект = ЭтаФорма.ДокументОбъект;
на
ЭтотОбъект82 = ЭтаФорма.ДокументОбъект;
и дальше по всему тексту ЭтотОбъект везде заменяется на ЭтотОбъект82.

Но не в этом суть, вопрос вот в чем:
Есть две разные не связанные базы, работающие на одинаковой конфигурации и их предстоит обновить.
Т.к. видимо это обновление займет у меня гораздо больше времени чем обычно, то не хотелось надолго останавливать работу этих баз и меня посетила идея, а можно-ли не спеша (чтобы не наломать в спешке дров) выполнить обновление конфигурации на копии базы, а после выгрузить уже обновленную конфигурацию в файл и уже через сравнение и объединение обновить рабочие базы за один вечер?
  Форум: Администрирование и настройка 1С · Просмотр сообщения: #166892 · Ответов: 8 · Просмотров: 254
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 19.09.20, 10:47


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


mut @ Сегодня, 11:24 * ,
Благодарю за подсказку - попробую изучить вопрос.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166583 · Ответов: 7 · Просмотров: 233
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 18.09.20, 20:30


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


mut @ Сегодня, 17:48 * ,

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

Вот такие объекты у меня получились:
Справочник.Квартиросъемщик

Реквизиты:
- Код
- Наименование (ФИО)
- Адрес
- КодЕРЦ
- Площадь
- Прописано

ТЧ (Услуги):
- Услуга (СправочникСсылка.Номенклатура)
- НомерСчета
- Тариф (СправочникСсылка.Тарифы)

ТЧ (счетчики):
- НомерСчетчика
- Назначение
- ДатаПроизводства
- ДатаУстановки
- ДатаПоверкиПоследняя
- ДатаПоверкиСледующая

////////////////////////////////

Справочник.Номенклатура

Реквизиты:
- Код
- Наименование (Услуга)
- Родитель
- Тариф (СправочникСсылка.Тарифы)
- ВидыРасчетов (По счетчику / По площади / По прописке)

////////////////////////////////

Справочник.Тарифы

Реквизиты:
- Код
- Наименование (Тариф)
- Услуга (СправочникСсылка.Услуги
- ЕдиницаИзмерения

Табличное поле
- Номер
- ОтсчетОт
- ОтсчетДо
- Стоимость

///////////////////////////////////

Документ.ОплатаУслуг

Реквизиты:
- Номер
- Дата
- Плательщик (СправочникСсылка.Квартиросъемщик)
- ПлатежныйПериодС
- ПлатежныйПериодДо

ТЧ (Услуги);
- Услуга (СправочникСсылка.Номенклатура)
- Сумма
- ПлатежныйПериодС
- ПлатежныйПериодДо
- ПоказаниеСчетчикаНачальн
- ПоказаниеСчетчикаКонечн
- ПоказаниеСчетчикаРазница
- ЛицевойСчет

//////////////////////////////////////

Документ.ИзменениеТарифов

Реквизиты:
- Услуга (СправочникСсылка.Номенклатура)
- Тариф (СправочникСсылка.Тарифы)

ТЧ (Тарифы)
- Номер
- ОтсчетОт
- ОтсчетДо
- Стоимость

//////////////////////////////////////

РегистрСведений.ТарифныйПлан (периодический)

Измерение:
- Услуга (СправочникСсылка.Номенклатура)
- Тариф (СправочникСсылка.Тарифы)
- ОтсчетОт
- ОтсчетДо

Ресурсы:
- Стоимость


Пока записи в регистр заношу через внесение всех записей пока ручками через Операции - РегистрыСведений - ТарифныйПлан
Думал, что вносить изменения тарифов через Документ.ИзменениеТарифов, но что-то уперся в стену, т.к. ранее не доводилось в документах создавать проводки.
Насколько я понимаю при проведении документа происходит заполнение регистров накопления и т.п.
Но как это все правильно описывать не понятно.
Подскажите пожалуйста по каким ключевым словам нужно искать, чтобы почитать нужную инфу?

Мне видится, что изменение тарифа будет удобнее через документ, когда в табличной части одна стоимость или пределы и стоимость по каждому пределу (для многотарифного тарифа) и при проводке делать или одну запись или сразу несколько записей (для многотарифного) в регистр
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166567 · Ответов: 7 · Просмотров: 233
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 18.09.20, 15:14


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


mut @ Сегодня, 10:42 * ,
Не совсем понял концепцию.

Т.е. в регистре например "ТарифныеПланы" сохраняется только ссылка на Тариф в качестве Измерения?
А в качестве второго Измерения добавить ссылку на Квартиросъемщика, чтобы можно было для каждого отдельный тариф применять?

А тариф, на который будет ссылаться этот регистр - это что за объект, справочник или документ?

А что будет, если тариф нужно будет изменить, например подорожало, будут ли сохраняться предыдущие тарифы, как например это организовано в курсах валют (там ссылка идет на Валюту, а ресурсы это Курс и Кратность?mut @ Сегодня, 10:42 * ,
mut @ Сегодня, 10:42 * ,
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166555 · Ответов: 7 · Просмотров: 233
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 17.09.20, 21:23


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.

1С Предприятие 1С8.3,

Решил облегчить себе с коммунальными платежами и написать простенькую конфигурацию, чтобы не рассчитывать и заполнять квитанции вручную.
Создал справочники:
- Квартиросъемщик (КодЕРЦ, Адрес, Прописано, ПлощадьЖилая)
- Номенклатура (ВидыРасчетов, Тариф)
- ЕдиницыИзмерений
- Тарифы (флМноготарифный, ЕдИзмерения, Стоимость) + Табличная часть Тарифы (Номер, ОтсчетОт, ОтсчетДо, Стоимость). ТЧ используется для указания многотарифных опций, например для электроэнергии.

Пока только сам заполняю, вроде работает, но чувствуется нет гибкости в настройках тарифов, если добавить еще квартиросъемщика.

Хотел организовать хранение тарифов в регистре сведений, но столкнулся с проблемой, как обыграть случай использования множественных тарифов:
Например в случае с эл.эн. (цифры с потолка)
до 150 кВт - 0,8999
150-800 кВт - 1,6999
> 800 кВт - 2,5999

Посоветуйте, как можно организовать хранение в регистре всех тарифов, как обычных, так и многотарифных, чтобы еще можно было учесть и различие у разных квартиросъемщиков (например если печка газовая, то тариф на эл.эн.

до 150 кВт - 0,8999
150-800 кВт - 1,6999
> 800 кВт - 2,5999

А если печка электрическая, то тариф:

до 250 кВт - 0,6355
250-800 кВт - 0,999
> 800 кВт - 1,800

Думал сделать несколько измерений:
- дата - дата установки тарифа
- плательщик - указывает к какому плательщику привязан этот тариф
- услуга - к какой услуге относится тариф
- номер - номер тарифа для многотарифного (0 - если тариф одинарный)
-
Реквизиты:
- флСчетчик Истина
- ИдИзмерений кВт
- Стоимость 0,8999
- ОтсчетОт 0
- ОтсчетДо 150

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

Например может быть два разных тарифа, каждый из которых может быть одинаковый для своих потребителей.
Как это правильно организовать.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166518 · Ответов: 7 · Просмотров: 233
 

>  Удаление колонок после заполнеения макета
bizisoft
Отправлено: 03.09.20, 21:16


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


pablo @ 01.09.20, 14:14 * ,
Благодарю.
Попробую накопать информации по работе с табличным документом.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166161 · Ответов: 2 · Просмотров: 199
 

>  Удаление колонок после заполнеения макета
bizisoft
Отправлено: 29.08.20, 20:21


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.
1С8 8.2.19.130 Альфа-Авто 4.1.21.01

Внешняя обработка.
Рассылка прайсов
На форме табличное поле в котором в строках указаны настройки для прайсов (одна строка для одного прайса) по колонкам (№прайса - тип цены - склады - валюта).

Например:
№прайса - тип цены - склады - валюта
1 ОПТ Скл1; Скл2 грн
2 РОЗН Скл1; Скл2 грн
3 ОПТ Скл1; Скл2 usd
4 ОПТ Скл1; Скл2 eur

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

По окончанию формирования всех прайсов выполняется рассылка ...

Метод работает, но хотелось бы его как-то оптимизировать/ускорить.
Есть идея, ускорить исключив лишние циклы по заполнению макетов.
Думаю если в одном составном запросе сразу получить все данные по всем параметрам (все склады, все типы цен в каждой из валют) и одним циклом вывести данные в макет.
Затем копировать заполненный макет и удалить ненужные столбцы и сохранить в xls файл. (это повторить столько раз сколько прайсов в таблице настроек).

Подскажите пожалуйста, возможно-ли выполнять операции копирования с заполненным макетом и удаление из него колонок или описанная концепция невозможна?
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166012 · Ответов: 2 · Просмотров: 199
 

>  При переходе на клиент-сервер - в рабочем коде появились ошибки
bizisoft
Отправлено: 10.06.20, 12:41


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Перенес функцию КурсЗапросомСервер(Валюта) из РегистрСведений ФормаСписка в общий модуль и ошибка с получением курса ушла.
Получается в клиент-серверном режиме нельзя прописывать в модуле формы функции с директивой &НаСервере ?


По построителю получилось запустить функцию из общего модуля добавив директиву &НаКлиенте.
После этого ошибка пропала.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163733 · Ответов: 4 · Просмотров: 281
 

>  При переходе на клиент-сервер - в рабочем коде появились ошибки
bizisoft
Отправлено: 10.06.20, 11:31


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


sava1 @ Сегодня, 10:39 * ,
У общего модуля установлены следующие свойства:
Глобальный = Истина
Клиент (упр.ф.) = Ложь
Сервер = Истина
Внешн.соед. = Истина
Клиент (об.ф.) = Истина
Вызов серв = Истина
Привелигер. = Ложь

Сделал Курс Экспорт

Но к сожалению ничего не изменилось.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163728 · Ответов: 4 · Просмотров: 281
 

>  При переходе на клиент-сервер - в рабочем коде появились ошибки
bizisoft
Отправлено: 10.06.20, 9:16


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.
1C 8.2.19.130
Альфа-Авто 4.1.21.01

Наладил SQL Server, создал пустую базу, загрузил базу из файла *.dt.
При запуске вылетают ошибки в процедурах/функциях, которые в файловом режиме работали без замечаний.

Процедура или функция с указанным именем не определена (ПолучитьМакетОформления)Построитель.МакетОформления = <<?>>ПолучитьМакетОформления(СтандартноеОформление.Классика);

Процедура на которую ругается вынесена в общий модуль и выглядит так:
Процедура бсПоказатьРезультатВТаблице(ТЗ) Экспорт
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
    Построитель.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика);
    Построитель.Выполнить();
    Для каждого Колонка Из Построитель.ВыбранныеПоля Цикл
        Колонка.Представление = ТЗ.Колонки[Колонка.Имя].Заголовок;        
    КонецЦикла;
    Построитель.Вывести();
КонецПроцедуры


или вот еще одна ошибка
{РегистрСведений.СравнениеПрайсов.Форма.ФормаСписка.Форма(22,12)}: Процедура или функция с указанным именем не определена (КурсЗапросомСервер)
    ТекКурс = <<?>>КурсЗапросомСервер(ВыбрВалюта);


Ругается на эту строку:
ТекКурс = КурсЗапросомСервер(ВыбрВалюта);


Функция выглядит так:
&НаСервере
Функция КурсЗапросомСервер(ВыбрВалюта)
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата",ТекущаяДата());
    Запрос.УстановитьПараметр("Валюта",ВыбрВалюта);
    Запрос.Текст = "Выбрать        
            |КурсыВалют.Период,        
            |КурсыВалют.Курс,        
            |КурсыВалют.Кратность        
            |ИЗ        
            |РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта =&Валюта) КАК КурсыВалют";
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда      
        Рез = Выборка.Курс; //Строка(Выборка.Курс)+":"+Строка(Выборка.Кратность);
    КонецЕсли;
    Возврат Рез;
КонецФункции


Это особенность клиент-серверного режима и эти функции/процедуры нужно как-то по особенному переписать?
Подскажите пожалуйста, с чем связано такое поведение и как этого можно избежать?
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163724 · Ответов: 4 · Просмотров: 281
 

>  Пересчет по курсу в валютах
bizisoft
Отправлено: 29.05.20, 15:54


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


TohaMonster @ Сегодня, 16:30 * ,

Попробовал осмыслить ваш ответ, и вот что получилось:

ВЫБРАТЬ
    ПартииТоваровКомпанииОстатки.Номенклатура,
    ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * (КурсУпр.Курс / КурсУпр.Кратность) / (КурсВал.Курс / КурсВал.Кратность) / ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК СуммаРасч,
    ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсУпр
        ПО (КурсУпр.Валюта = &ВалютаУпр)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсРег
        ПО (КурсРег.Валюта = &ВалютаРег)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсВал
        ПО (КурсВал.Валюта = &Валюта)
ГДЕ
    ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура


КурсУпр - ПолеВвода в которой выбираю валюту соответствующую валюте управленческого учета (USD)
КурсРег - ПолеВвода в которой выбираю валюту соответствующую валюте регламентированного учета (Грн)
КурсВал - ПолеВвода в которой выбираю валюту для которой нужно выполнить расчет

Теперь результаты, которые были получены посредством данного запроса:
Товар        ВалУпр    ВалРегл    ВалРасч    СуммаРасч.    
26300-35505    USD        Грн        USD        2,72            
26300-35505    USD        Грн        Грн        76,17        
26300-35505    USD        Грн        Руб        181,37        
26300-35505    USD        Грн        Евро        2,54


Вот курсы валют согласно справочника
Вал    Курс/Кратность
USD        28/1
Грн        1/1
Руб        42/100
Евро        30/1

Теперь получилось добиться адекватного расчета для трех валют USD / UAH / RUB
А вот ЕВРО теперь выбивается из всех.
Попробую с ЕВРО поиграться с Кратностью.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163449 · Ответов: 2 · Просмотров: 368
 

>  Пересчет по курсу в валютах
bizisoft
Отправлено: 27.05.20, 16:16


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Добрый день.
1С8,2 Альфа-Авто 4.1

Валюта управл. = USD
Валюта регл. = ГРН

Справочник валюты
USD
ГРН
ЕВРО
РУБ

Сейчас пересчет производится в цикле через вызов штатной функции.
Подскажите пожалуйста, как правильно выполнить пересчет значений по курсу в указанной(ых) валюте(ах) непосредственно в запросе.

Замечена такая закономерность, что пересчет между USD и ГРН производится "напрямую", а вот остальные валюты рассчитываются через ГРН.
Например чтобы получить цену в РУБ, цена в USD умножается на курс ГРН и делится на курс РУБ (2,55*28/0,5 = 142.8)

Делаю таким образом (в данном случае пересчитывается себестоимость)

ВЫБРАТЬ
    ПартииТоваровКомпанииОстатки.Номенклатура,
    ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК СуммаДол,
    0 КАК СуммаГрн,
    0 КАК СуммаЕвр,
    0 КАК СуммаРуб,
    ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
        ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаДол)
ГДЕ
    ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПартииТоваровКомпанииОстатки.Номенклатура,
    0,
    ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток,
    0,
    0,
    ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
        ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаГрн)
ГДЕ
    ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПартииТоваровКомпанииОстатки.Номенклатура,
    0,
    0,
    ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток,
    0,
    ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
        ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаЕвро)
ГДЕ
    ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПартииТоваровКомпанииОстатки.Номенклатура,
    0,
    0,
    0,
    ПартииТоваровКомпанииОстатки.СуммаУпрОстаток * КурсыВалютСрезПоследних.Курс/ПартииТоваровКомпанииОстатки.КоличествоОстаток,
    ПартииТоваровКомпанииОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
        ПО (КурсыВалютСрезПоследних.Валюта = &ВалютаРуб)
ГДЕ
    ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура


Номенклатура                    СуммаДол        СуммаГрн        СуммаЕвр        СуммаРуб
Фильтр маслянный ( 26300-35505 )    76,174723            
Фильтр маслянный ( 26300-35505 )                2,720526        
Фильтр маслянный ( 26300-35505 )                            81,615775    
Фильтр маслянный ( 26300-35505 )                                        1,142621


При этом значения СуммаДол должна соответствовать 2,720526, а СуммаГрн - 76,174723 - ну тут наверное можно переподставить валюты в этих запросах.
СуммаЕвр - вроде нормально.

Но вот СуммаРуб - тут неверно считает, т.к. должно быть 181,368375.
В валютах у Руб курс выставлен 0,42 - это видимо связано с тем, что УпрВалюта = Доллар, а РеглВалюта = ГРН.
Думаю, что если бы Упр и Регл валюты были ГРН, то такой проблемы не возникло.

Подскажите пожалуйста, как можно этот момент обойти?

P.S. В данном примере все валюты я объединил в одном запросе, но на самом деле валюта будет одна. Она будет выбираться в ПолеВыбора и передаваться в запрос параметром.
Думаю с Евро и Грн не должно возникнуть проблем, но с Руб будут неверно считаться суммы.

  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163378 · Ответов: 2 · Просмотров: 368
 

>  Один запрос вместо нескольких с циклом
bizisoft
Отправлено: 26.05.20, 16:27


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


sava1 @ Сегодня, 13:48 * ,
Премного благодарен, получилось.


Можно-ли к этому запросу добавить в пакет запросов:
ВЫБРАТЬ
            ГруппыАналогов.Артикул
        ПОМЕСТИТЬ СписокАналоги
        ИЗ
            РегистрСведений.ГруппыАналогов КАК ГруппыАналогов
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыАналогов КАК ГруппыАналогов1
                ПО ГруппыАналогов.ИдентификаторГруппы = ГруппыАналогов1.ИдентификаторГруппы
        ГДЕ
            ГруппыАналогов1.тАртикул = &Артикул


а результат этого запроса (временная таблица СписокАналоги) передать в качестве параметра &СпЗнАртикул в основной запрос?
Принципиальная-ли разница где этот запрос нужно вставлять перед основным запросом или можно после?

Также не понятно, как временную таблицу СписокАналоги можно передать в качестве параметра &СпЗнАртикул в основном запросе, который в данном случае встречается аж 3 раза (в каждом из объединенных запросов)?
Я попробовал заменить В (&СпЗнАртикул) на В (СписокАналоги) , но походу эти два запроса не видят друг друга.
В случае же отдельного выполнения запроса, можно проверить на пустой результат и если Пусто, то в СписокЗначения добавить текущий Артикул в качестве единственного значения списка.

bizisoft @ Сегодня, 16:59 * ,
Тут подумал и наверное такое не прокатит, т.к. в случае отсутствия Аналогов у текущей позиции запрос вернет пустой результат и соответственно основной запрос также вернет пустой результат, что не есть верным.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163344 · Ответов: 2 · Просмотров: 323
 

>  Один запрос вместо нескольких с циклом
bizisoft
Отправлено: 26.05.20, 11:23


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


1С 8.2 Альфа-Авто 4.1.

Для выбранного товара первым запросом получаю список Аналогов, а потом для них получаю продажи (квартал, 6 мес, год), но знаний хватило только на получение продаж отдельным запросом для каждого периода.

//Получаем список значений с набором всех Аналогов по выбранному Артикулу

        Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ГруппыАналогов.Артикул,
        |    ГруппыАналогов.Производитель,
        |    ГруппыАналогов.тАртикул
        |ИЗ
        |    РегистрСведений.ГруппыАналогов КАК ГруппыАналогов
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыАналогов КАК ГруппыАналогов1
        |        ПО ГруппыАналогов.ИдентификаторГруппы = ГруппыАналогов1.ИдентификаторГруппы
        |ГДЕ
        |    ГруппыАналогов1.Артикул = &Артикул";

    Запрос.УстановитьПараметр("Артикул", Товар);
    Результат = Запрос.Выполнить();
    Выб = Результат.Выбрать();
    СпЗн = Новый СписокЗначений;
    СпЗн.Очистить();    
    Пока Выб.Следующий() Цикл
        СпЗн.Добавить(Выб.Артикул,Выб.Артикул);
    КонецЦикла;

//Для полученного списка (Аналогов) получаем продажи (Квартал, 6 мес, Год)

        Для Счетчик = 1 По 3 Цикл
        Если       Счетчик = 1 Тогда    
             НачПериод = НачалоДня(ДобавитьМесяц(ТекущаяДата(),-3));    // квартал
        ИначеЕсли Счетчик = 2 Тогда    
            НачПериод = НачалоДня(ДобавитьМесяц(ТекущаяДата(),-6));    // пол года  
        ИначеЕсли Счетчик = 3 Тогда    
            НачПериод = НачалоДня(ДобавитьМесяц(ТекущаяДата(),-12));// год
        КонецЕсли;        
        КонПериод = КонецДня(ТекущаяДата());

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

        Результат = Запрос.Выполнить();  
        ТЗВыб = Результат.Выгрузить();
        Для Каждого стр Из ТЗВыб Цикл
            НСтр = ТЗРез.Добавить();        
            НСтр.Номенклатура = стр.Номенклатура;        
            НСтр.Артикул = стр.Артикул;
            НСтр.тАртикул = стр.тАртикул;
            НСтр.Производитель = стр.Производитель;
            Если       Счетчик = 1 Тогда    НСтр.ПродажаКвартал = стр.Количество;    
            ИначеЕсли Счетчик = 2 Тогда    НСтр.ПродажаПолгода = стр.Количество;
            ИначеЕсли Счетчик = 3 Тогда    НСтр.ПродажаГод = стр.Количество;
            КонецЕсли;                     
        КонецЦикла;  
    КонецЦикла;
    ТЗРез.Свернуть("тАртикул, Производитель","ПродажаКвартал, ПродажаПолгода, ПродажаГод");



Попробовал сделать так:
ВЫБРАТЬ
            |    Продажи.Номенклатура,
            |    Продажи.Номенклатура.Артикул КАК Артикул,
            |    Продажи.Номенклатура.тАртикул КАК тАртикул,
            |    Продажи.Номенклатура.Производитель КАК Производитель,
            |    Продажи.Количество КАК ПродажаКвартал,
            |    Продажи1.Количество КАК ПродажаПолгода,
            |    Продажи2.Количество КАК ПродажаГод
            |ИЗ
            |    РегистрНакопления.Продажи КАК Продажи1
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
            |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи2
            |            ПО Продажи2.Номенклатура = Продажи.Номенклатура
            |        ПО Продажи1.Номенклатура = Продажи.Номенклатура
            |ГДЕ
            |    Продажи.Период МЕЖДУ &НачПериодК И &КонПериод
            |    И Продажи.Номенклатура.Артикул В(&СпЗнАртикул)
            |    И Продажи1.Период МЕЖДУ &НачПериодПГ И &КонПериод
            |    И Продажи2.Период МЕЖДУ &НачПериодГ И &КонПериод


Но что-то мне подсказывает, что это не верно в корне.
Забил запрос в Запросник, но результата нет, да и запрос выполняется гораздо дольше чем если через цикл с запросами.


Подскажите пожалуйста, как правильно создать запрос, чтобы исключить цикл со вложенными запросами и как правильно обозначить параметры с разделением по периодам (квартал, 6 мес, год), чтобы вывести периоды были в столбцах
Номенклатура | Квартал | 6 мес | Год
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163339 · Ответов: 2 · Просмотров: 323
 

>  Задваивание строк в результирующих данных запроса
bizisoft
Отправлено: 25.05.20, 15:35


Завсегдатай
****

Группа: Пользователи
Сообщений: 230
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


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

ВЫБРАТЬ
                  |    Номенклатура1.Производитель.Наименование КАК Производитель,
                  |    Номенклатура1.Артикул КАК Артикул,
                  |    Номенклатура1.тАртикул КАК тАртикул,
                  |    Номенклатура1.Наименование,
                  |    ОстаткиТоваровКомпанииОстатки.КоличествоОстаток - ОстаткиТоваровКомпанииОстатки.РезервОстаток КАК Количество,
                  |    ЦеныСрезПоследних.Цена,
                  |    NULL КАК Характеристика,
                  |    Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
                  |    ЦеныСрезПоследних.Цена КАК ЦенаУпр,
                  |    ВЫБОР
                  |        КОГДА ЕСТЬNULL(ВложенныйЗапрос.Остаток, 0) > 0
                  |            ТОГДА ВложенныйЗапрос.Сумма / ВложенныйЗапрос.Остаток
                  |        ИНАЧЕ 0
                  |    КОНЕЦ КАК Себест,
                  |    ВЫБОР
                  |        КОГДА ЕСТЬNULL(ВложенныйЗапрос.Остаток, 0) > 0
                  |            ТОГДА ВложенныйЗапрос.Сумма / ВложенныйЗапрос.Остаток
                  |        ИНАЧЕ 0
                  |    КОНЕЦ КАК СебестУпр,
                  |    ВложенныйЗапрос.СрокХранения
                  |ИЗ
                  |    РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Дата, СкладКомпании В (&Склад)) КАК ОстаткиТоваровКомпанииОстатки
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1
                  |        ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = Номенклатура1.Ссылка
                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(
                  |                &Дата,
                  |                ТипЦен = &Цена
                  |                    И ПодразделениеКомпании = &Подразделение) КАК ЦеныСрезПоследних
                  |        ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ЦеныСрезПоследних.Номенклатура
                  |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                  |            МАКСИМУМ(РАЗНОСТЬДАТ(ПартииТоваровКомпанииОстатки.Партия.Дата, &Дата, ДЕНЬ)) КАК СрокХранения,
                  |            ПартииТоваровКомпанииОстатки.Номенклатура КАК Номенклатура,
                  |            СУММА(ПартииТоваровКомпанииОстатки.КоличествоОстаток) КАК Остаток,
                  |            СУММА(ПартииТоваровКомпанииОстатки.СуммаУпрОстаток) КАК Сумма,
                  |            СУММА(ПартииТоваровКомпанииОстатки.СуммаУпрОстаток) КАК СуммаУпр
                  |        ИЗ
                  |            РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
                  |        
                  |        СГРУППИРОВАТЬ ПО
                  |            ПартииТоваровКомпанииОстатки.Номенклатура) КАК ВложенныйЗапрос
                  |        ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
                  |ГДЕ
                  |    Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик = 3
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    Номенклатура1.Производитель.Наименование,
                  |    Номенклатура1.Артикул,
                  |    Номенклатура1.тАртикул,
                  |    Номенклатура1.Наименование,
                  |    ОстаткиТоваровКомпанииОстатки.КоличествоОстаток - ОстаткиТоваровКомпанииОстатки.РезервОстаток,
                  |    ЦеныСрезПоследних.Цена,
                  |    Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик,
                  |    ВложенныйЗапрос.СрокХранения,
                  |    ЦеныСрезПоследних.Цена,
                  |    ВЫБОР
                  |        КОГДА ЕСТЬNULL(ВложенныйЗапрос.Остаток, 0) > 0
                  |            ТОГДА ВложенныйЗапрос.Сумма / ВложенныйЗапрос.Остаток
                  |        ИНАЧЕ 0
                  |    КОНЕЦ,
                  |    ВЫБОР
                  |        КОГДА ЕСТЬNULL(ВложенныйЗапрос.Остаток, 0) > 0
                  |            ТОГДА ВложенныйЗапрос.Сумма / ВложенныйЗапрос.Остаток
                  |        ИНАЧЕ 0
                  |    КОНЕЦ
                  |
                  |ОБЪЕДИНИТЬ ВСЕ
                  |
                  |ВЫБРАТЬ
                  |    Номенклатура1.Производитель.Наименование,
                  |    Номенклатура1.Артикул,
                  |    Номенклатура1.тАртикул,
                  |    Номенклатура1.Наименование,
                  |    ОстаткиТоваровКомпанииОстатки.КоличествоОстаток - ОстаткиТоваровКомпанииОстатки.РезервОстаток,
                  |    NULL,
                  |    ЦеныСрезПоследних.ХарактеристикаНоменклатуры.Наименование,
                  |    Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик,
                  |    ЦеныСрезПоследних.Цена,
                  |    NULL,
                  |    NULL,
                  |    NULL
                  |ИЗ
                  |    РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Дата, СкладКомпании В (&Склад)) КАК ОстаткиТоваровКомпанииОстатки
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1
                  |        ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = Номенклатура1.Ссылка
                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(
                  |                &Дата,
                  |                ТипЦен = &Цена
                  |                    И ПодразделениеКомпании = &Подразделение) КАК ЦеныСрезПоследних
                  |        ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ЦеныСрезПоследних.Номенклатура
                  |            И (ЦеныСрезПоследних.ХарактеристикаНоменклатуры.Наименование = ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры.Наименование)
                  |ГДЕ
                  |    (Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик = 1
                  |            ИЛИ Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик = 2)


Проверил несколько значений - вроде все теперь нормально.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #163310 · Ответов: 12 · Просмотров: 522
 

10 страниц V   1 2 3 > » 

Новые сообщения  Открытая тема (есть новые ответы)
Опрос  Опрос (есть новые голоса)
Нет новых сообщений  Открытая тема (нет новых ответов)
Нет новых голосов  Опрос (нет новых голосов)
Популярная тема  Горячая тема (есть новые ответы)
Закрыта  Закрытая тема
Нет новых  Горячая тема (нет новых ответов) Перемещена  Тема перемещена
 

RSS Текстовая версия Сейчас: 22.01.21, 9:20
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!