Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 22:53

Изменить параметры запроса при выполнении процедуры

Автор maxxi, 18 фев 2023, 06:46

0 Пользователей и 1 гость просматривают эту тему.

maxxi

Здравствуйте, есть внешняя обработка.
там параметры такие:

    Запрос.УстановитьПараметр("Склад",Склад);
    Запрос.УстановитьПараметр("Валюта",Валюта);
    Запрос.УстановитьПараметр("КонДата", (КонецМесяца(КонДата-(60*60*24*365))));
    Запрос.УстановитьПараметр("НачДата", (НачалоМесяца(НачДата-(60*60*24*365))));

Таким образом получаю продажи за ПРЕДЫДУ́ЩИЙ год за тот же период(Например, за февраль 2022 года).
В таблице значении есть Колонка "Остатки". В эту колонку надо получить актуальные остатки.

Не понимаю как реализовать эту идею.

Сделал так:


Если ВыборкаДетальныеЗаписи.Следующий()=ВыборкаДетальныеЗаписи.КонечныйОстаток
           
            И ВыборкаДетальныеЗаписи.КонечныйОстаток > 0 Тогда
           
            Запрос.Параметры=КонДата;
            Запрос.Параметры=НачДата;
            Товар.Остатки=ВыборкаДетальныеЗаписи.КонечныйОстаток;
           
        Иначе
           
            Продолжить;
           
        КонецЕсли;


Не работает((

Только эту колонку нужно заполнить актуальными данными, а остальные колонки надо заполнить прошлогодними данными.

Спасибо всем.

maxxi

maxxi,                 Запрос.УстановитьПараметр(НачДата);
            Запрос.УстановитьПараметр(КонДата);


Так тоже пробовал, пока результата нет, подскажите что и где править, спасибо.

alexandr_ll

maxxi, Приведите весь текст запроса или прикрепите ссылку на внешнюю обработку.

maxxi


&НаСервере
Процедура СформироватьНаСервере()
   
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиОстаткиИОбороты.Товар КАК Товар,
    | ОстаткиОстаткиИОбороты.Склад КАК Склад,
    | ОстаткиОстаткиИОбороты.Валюта КАК Валюта,
    | ОстаткиОстаткиИОбороты.СониКонечныйОстаток КАК СониКонечныйОстаток,
    | ОстаткиОстаткиИОбороты.СониОборот КАК СониОборот,
    | ОстаткиОстаткиИОбороты.СониПриход КАК СониПриход,
    | ОстаткиОстаткиИОбороты.СониРасход КАК СониРасход,
    | ОстаткиОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
    | ОстаткиОстаткиИОбороты.СуммаОборот КАК СуммаОборот,
    | ОстаткиОстаткиИОбороты.СуммаПриход КАК СуммаПриход,
    | ОстаткиОстаткиИОбороты.СуммаРасход КАК СуммаРасход,
    | ТоварНархлариСрезПоследних.Период КАК Период,
    | ТоварНархлариСрезПоследних.Регистратор КАК Регистратор,
    | ТоварНархлариСрезПоследних.НомерСтроки КАК НомерСтроки,
    | ТоварНархлариСрезПоследних.Товар КАК Товар1,
    | ТоварНархлариСрезПоследних.НархТури КАК НархТури,
    | ТоварНархлариСрезПоследних.Нарх КАК Нарх,
    | ТоварНархлариСрезПоследних.ПриходНархи КАК ПриходНархи,
    | ВалютаКурсиСрезПоследних.Период КАК Период1,
    | ВалютаКурсиСрезПоследних.Валюта КАК Валюта1,
    | ВалютаКурсиСрезПоследних.Курс КАК Курс,
    | ВалютаКурсиСрезПоследних.КурсСТР КАК КурсСТР
    |
    |ИЗ
    | РегистрНакопления.Остатки.ОстаткиИОбороты (&БошлангичСана,&ОхиргиСана) КАК ОстаткиОстаткиИОбороты
    | ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварНархлари.СрезПоследних КАК ТоварНархлариСрезПоследних
    | ПО ОстаткиОстаткиИОбороты.Товар.Ссылка = ТоварНархлариСрезПоследних.Товар.Ссылка
    | ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ВалютаКурси.СрезПоследних КАК ВалютаКурсиСрезПоследних
    | ПО ОстаткиОстаткиИОбороты.Товар.Ссылка = ВалютаКурсиСрезПоследних.Валюта.Ссылка
    |ГДЕ
    |    ОстаткиОстаткиИОбороты.Склад = &Склад
    |    И ОстаткиОстаткиИОбороты.Валюта = &Валюта
    |       И ОстаткиОстаткиИОбороты.СониКонечныйОстаток > 0
    |       И ТоварНархлариСрезПоследних.ПриходНархи > 0
    |       И ТоварНархлариСрезПоследних.Нарх > 30
    |       И ОстаткиОстаткиИОбороты.СониРасход>0
    |АВТОУПОРЯДОЧИВАНИЕ";
   
    Запрос.УстановитьПараметр("Склад",Склад);
    Запрос.УстановитьПараметр("Валюта",Валюта);
    Запрос.УстановитьПараметр("ОхиргиСана", (КонецМесяца(ОхиргиСана-(60*60*24*365))));
    Запрос.УстановитьПараметр("БошлангичСана", (НачалоМесяца(БошлангичСана-(60*60*24*365))));
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    //////////////////////////////////////////////////////////////////////////////////////////////
   
    Реквизит1.Очистить();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Товар=Реквизит1.Добавить();
        ОйКуни=(КонецМесяца(ОхиргиСана)-НачалоМесяца(БошлангичСана))/86400;
        Товар=Реквизит1.Добавить();
        Товар.Товарлар=ВыборкаДетальныеЗаписи.Товар;
        Товар.Колдик=ВыборкаДетальныеЗаписи.СониКонечныйОстаток;
       
        Если НЕ ПустаяСтрока(КурсДоллара) И Валюта.Наименование="$" Тогда
            Товар.КиримНархи=ВыборкаДетальныеЗаписи.ПриходНархи*КурсДоллара;
        Иначе
            Товар.КиримНархи=ВыборкаДетальныеЗаписи.ПриходНархи;
        КонецЕсли;

        Товар.УмумийКолдик=Товар.Колдик*Товар.КиримНархи;
        Товар.СотишНархи=ВыборкаДетальныеЗаписи.Нарх;
        Товар.УмумийКолдик=Товар.Колдик*Товар.КиримНархи;

        Если НЕ ПустаяСтрока(Усиш) Тогда
            Товар.УртачаСавдо=ВыборкаДетальныеЗаписи.СониРасход/ОйКуни;
            Товар.УртачаСавдо=Товар.УртачаСавдо+(Товар.УртачаСавдо*Усиш/100);
        Иначе
            Товар.УртачаСавдо=(ВыборкаДетальныеЗаписи.СониРасход/ОйКуни)
        КонецЕсли;

        Товар.КолдикКун=Товар.Колдик/Товар.УртачаСавдо;
        Товар.ЯлпиДаромад=(Товар.СотишНархи-Товар.КиримНархи)*Товар.УртачаСавдо;
        Товар.ЯлпиДаромадУлуш=Товар.ЯлпиДаромад/(Реквизит1.Итог("ЯлпиДаромад"));
        Товар.Маржа=(Товар.СотишНархи-Товар.КиримНархи)/Товар.СотишНархи;
        Товар.Устама=(Товар.СотишНархи-Товар.КиримНархи)/Товар.КиримНархи;
       
        Если (Товар.Колдик-Товар.НормативКун)*Товар.ЯлпиДаромад>0 Тогда
            Товар.ОСССабаблиЙукотиш=0;
        Иначе
            Товар.ОСССабаблиЙукотиш=(Товар.Колдик-Товар.НормативКун)*Товар.ЯлпиДаромад;
        КонецЕсли;
       
        Если (Товар.Колдик-Товар.НормативКун)*Товар.УртачаСавдо*Товар.КиримНархи<0 Тогда
            Товар.МузлатилганПул=0;
        Иначе
            Товар.МузлатилганПул=(Товар.Колдик-Товар.НормативКун)*(Товар.УртачаСавдо*Товар.КиримНархи);
        КонецЕсли;
       
        МузлатилганПул=Реквизит1.Итог("МузлатилганПул")/Реквизит1.Итог("УмумийКолдик");
        УртачаСавдо=Реквизит1.Итог("УртачаСавдо");
        УмумийКолдик=Реквизит1.Итог("УмумийКолдик");
        ЯлпиДаромад=Реквизит1.Итог("ЯлпиДаромад");
       
    КонецЦикла;
   
КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
   
    СформироватьНаСервере();
       
КонецПроцедуры


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


maxxi

не на русском, но надеюсь смысль понятен.

Максим75

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

maxxi

Максим75, 1.ОстаткиОстаткиИОбороты.СониКонечныйОстаток КАК СониКонечныйОстатокс этой строкой можно получить актуальные остатки.
2. Получение курсов валют не актуальные, просто забыл убрать.

Максим75

maxxi,

РегистрНакопления.Остатки.ОстаткиИОбороты (&БошлангичСана,&ОхиргиСана) -
вот здесь виртуальная таблица остатков и оборотов, за период с &БошлангичСана по &ОхиргиСана
не важно, актуальны на текущий год или предыдущий.
если необходимо получить остатки и обороты за разные периоды - то делаете два набора записей за разные периоды и потом соединяете.

maxxi

Цитата: Максим75 от 18 фев 2023, 10:10maxxi,
...то делаете два набора записей за разные периоды и потом соединяете.
Скажите, пожалуйста, это здесь все делается?

maxxi

Максим75,
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиОстаткиИОбороты.Товар КАК Товар,
    | ОстаткиОстаткиИОбороты.Склад КАК Склад,
    | ОстаткиОстаткиИОбороты.Валюта КАК Валюта,
    | ОстаткиОстаткиИОбороты.СониКонечныйОстаток КАК СониКонечныйОстаток,
    | ОстаткиОстаткиИОбороты.СониРасход КАК СониРасход,
    | ТоварНархлариСрезПоследних.Нарх КАК Нарх,
    | ТоварНархлариСрезПоследних.ПриходНархи КАК ПриходНархи
    |
    |ИЗ
    | РегистрНакопления.Остатки.ОстаткиИОбороты (&БошлангичСана,&ОхиргиСана) КАК ОстаткиОстаткиИОбороты
    | ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварНархлари.СрезПоследних КАК ТоварНархлариСрезПоследних
    | ПО ОстаткиОстаткиИОбороты.Товар.Ссылка = ТоварНархлариСрезПоследних.Товар.Ссылка
    |
    |ГДЕ
    |    ОстаткиОстаткиИОбороты.Склад = &Склад
    |    И ОстаткиОстаткиИОбороты.Валюта = &Валюта
    |       И ОстаткиОстаткиИОбороты.СониКонечныйОстаток > 0
    |       И ТоварНархлариСрезПоследних.ПриходНархи > 0
    |       И ТоварНархлариСрезПоследних.Нарх > 30
    |       И ОстаткиОстаткиИОбороты.СониРасход>0
///////////////////////////////////////////////////////////////////////////////////////////////////   
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | ОстаткиОстаткиИОбороты1.Товар КАК Товар1,
    | ОстаткиОстаткиИОбороты1.Склад КАК Склад1,
    | ОстаткиОстаткиИОбороты1.Валюта КАК Валюта1,
    | ОстаткиОстаткиИОбороты1.СониКонечныйОстаток КАК СониКонечныйОстаток1,
    | ОстаткиОстаткиИОбороты1.СониРасход КАК СониРасход1,
    | ТоварНархлариСрезПоследних1.Нарх КАК Нарх1,
    | ТоварНархлариСрезПоследних1.ПриходНархи КАК ПриходНархи1
    |
    |ИЗ
    | РегистрНакопления.Остатки.ОстаткиИОбороты КАК ОстаткиОстаткиИОбороты1
    | ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварНархлари.СрезПоследних КАК ТоварНархлариСрезПоследних1
    | ПО ОстаткиОстаткиИОбороты1.Товар.Ссылка = ТоварНархлариСрезПоследних1.Товар.Ссылка
    |
    |ГДЕ
    |    ОстаткиОстаткиИОбороты1.Склад = &Склад
    |    И ОстаткиОстаткиИОбороты1.Валюта = &Валюта
    |       И ОстаткиОстаткиИОбороты1.СониКонечныйОстаток > 0
    |       И ТоварНархлариСрезПоследних1.ПриходНархи > 0
    |       И ТоварНархлариСрезПоследних1.Нарх > 30
    |       И ОстаткиОстаткиИОбороты1.СониРасход>0";



Так Вы написали?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск