Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в выборке результата запроса сравнить значение(ВалютаДокумента)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
jojojoba2
Добрый день!

Помогите пожалуйста начинающему программисту. Как сравнить в результате запроса ВалютуДокумента и вывести параметр на макет :
необходимо зарегистрироваться для просмотра ссылки
Процедура КнопкаСформироватьНажатие(Кнопка)
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПлатежноеПоручениеВходящее.Ссылка,
        |    ПлатежноеПоручениеВходящее.Номер,
        |    ПлатежноеПоручениеВходящее.Дата,
        |    ПлатежноеПоручениеВходящее.Проведен,
        |    ПлатежноеПоручениеВходящее.ВалютаДокумента,
        |    ПлатежноеПоручениеВходящее.Оплачено,
        |    ПлатежноеПоручениеВходящее.Контрагент,
        |    ПлатежноеПоручениеВходящее.ДатаОплаты,
        |    ПлатежноеПоручениеВходящее.СуммаДокумента,
        |    ПлатежноеПоручениеВходящее.СтатьяДвиженияДенежныхСредств,
        //|    ПлатежноеПоручениеВходящее.Заказ,
        |    ПлатежноеПоручениеВходящее.РасшифровкаПлатежа.(
        |        СуммаНДС
        |    ) как   СуммаНДС
        |ИЗ
        |    Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
        |ГДЕ
        |    ПлатежноеПоручениеВходящее.ДатаОплаты = &Дата
        |    И ПлатежноеПоручениеВходящее.Проведен =истина
        |    И ПлатежноеПоручениеВходящее.СтатьяДвиженияДенежныхСредств = &СтатьяДвиженияДенежныхСредств
        |    И ПлатежноеПоручениеВходящее.Оплачено = &Оплачено";
          
    Запрос.УстановитьПараметр("Дата", ЗаДату);
    Запрос.УстановитьПараметр("Оплачено", Оплочено);
    //Запрос.УстановитьПараметр("Проведен", "истина");
    Запрос.УстановитьПараметр("СтатьяДвиженияДенежныхСредств", стДвиженияДС);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    Область = Макет.ПолучитьОбласть("Детали");
    РасшифровкаПлатежаОбластьПодвалТаблицы = Макет.ПолучитьОбласть("РасшифровкаПлатежаПодвалТаблицы");
    РасшифровкаПлатежаОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("РасшифровкаПлатежаДетали");
    ТабДок.Очистить();
    ОбластьЗаголовок.Параметры.ДатаОплаты=ЗаДату;
    Номер="ФСМ " +Лев(Строка(ЗаДату),2)+"_" +Сред(Строка(ЗаДату),4,2)+ "/"+Сред(Строка(ЗаДату),9,2);
    ОбластьЗаголовок.Параметры.Номер=Номер;
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    //ТабДок.НачатьАвтогруппировкуСтрок();
    Выборка = РезультатЗапроса.Выбрать();
    СуммаСОбщ=0; СуммаБезОбщ=0; СуммаВознОбщ=0;
    Пока Выборка.Следующий() Цикл
        Область.Параметры.Заполнить(Выборка);
        Область.Параметры.Заказ=Выборка.Ссылка.РасшифровкаПлатежа[0].Сделка;
        НДС =  Выборка.Ссылка.РасшифровкаПлатежа[0].СуммаНДС;
        
        
        
        Если  Область.Параметры.ВалютаДокумента = "дол" Тогда  
            СуммаС = Выборка.СуммаДокумента * 24;
         Иначе
        
        СуммаС = Выборка.СуммаДокумента+НДС;
        КонецЕсли;
        
        
        СуммаВозн= Выборка.СуммаДокумента*ПроцентВН/100;
        СуммаСОбщ=СуммаСОбщ+СуммаС;
        СуммаБезОбщ= СуммаБезОбщ+ Выборка.СуммаДокумента;
        СуммаВознОбщ=СуммаВознОбщ+СуммаВозн;
        Область.Параметры.СуммаВозн=СуммаВозн;
        Область.Параметры.СуммаС=СуммаС;
        //Область.Параметры.СуммаС=СуммаС;
        ТабДок.Вывести(Область, Выборка.Уровень());
        ТабДок.НачатьГруппуСтрок();
        ТабДок.ЗакончитьГруппуСтрок();
    КонецЦикла;
    ОбластьПодвал.Параметры.СуммаСОбщ=СуммаСОбщ;
    ОбластьПодвал.Параметры.СуммаБезОбщ=СуммаБезОбщ;
    ОбластьПодвал.Параметры.СуммаВознОбщ=СуммаВознОбщ;
    ТабДок.Вывести(ОбластьПодвал);
    ТабДок.Показать();
КонецПроцедуры


Это не заработало:
Если  Область.Параметры.ВалютаДокумента = "дол" Тогда  
    СуммаС = Выборка.СуммаДокумента * 24;
Иначе
    СуммаС = Выборка.СуммаДокумента+НДС;
КонецЕсли;


Спасибо.
sava1
Если Выборка.ВалютаДокумента = справочники.Валюты.НайтиПоКоду(КодДоллара) Тогда...
takefive
jojojoba2 @ Сегодня, 17:56 необходимо зарегистрироваться для просмотра ссылки ,
Если Выборка.ВалютаДокумента.Код = КодДоллара Тогда
jojojoba2
Всем спасибо!
TipsyKID
Что за число 24?

Я так понял, если у Вас в долларах указан платеж, то следует делать по аналогии как в документе проведения:

    Если ВидОперации = Перечисления.ВидыОперацийПоступлениеБезналичныхДенежныхСредств.ПрочиеРасчетыСКонтрагентами ИЛИ
        ВидОперации = Перечисления.ВидыОперацийПоступлениеБезналичныхДенежныхСредств.РасчетыПоКредитамИЗаймам Тогда
        
        КурсДокумента      = РасшифровкаПлатежа[0].КурсВзаиморасчетов;
        КратностьДокумента = РасшифровкаПлатежа[0].КратностьВзаиморасчетов;

    Иначе    
        СтруктураКурсаДокумента = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента,Дата);
        
        КурсДокумента      = СтруктураКурсаДокумента.Курс;
        КратностьДокумента = СтруктураКурсаДокумента.Кратность;
    КонецЕсли;


Получили курс и кратность относительно рег. валюты и рассчитали из валюты документа в рег.валюту. (проверки делать не надо на валюту, код будет работать и под другую валюту)

Если у Вас есть управленческий курс, то добавьте в РС "Курсы валют" ресурсы "КурсВалютУпр", "КратностьВалютУпр" (или добавюте аналогичный РС "Курсы валют (Упр.)").
Далее добавьте свою функцию алогичную
     МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента,Дата);


Опять же, необходимости в коде проверять на конкретную валюту нет и это говнокод плохой стиль.
sava1
Цитата(TipsyKID @ 28.10.19, 19:31) необходимо зарегистрироваться для просмотра ссылки
необходимости в коде проверять на конкретную валюту нет и это говнокод плохой стиль.


т.е. код типа
Если ВалютаДокумента = мВалютаРегламентированногоУчета ......

это гавнокод ?
тогда пишите в 1с и локализаторам, а не здеся
TipsyKID
sava1, Не перекручивайте, проверяется не с конкретной валютой а с константой (т.е. с параметром который определяется в инф. базе):

   мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");


где

    ИначеЕсли ВРег(ИмяПараметра) = ВРег("ВалютаРегламентированногоУчета") Тогда
        НайденноеЗначение = Константы.ВалютаРегламентированногоУчета.Получить();


То, что Вы посоветовали, начинающему программисту :
Если Выборка.ВалютаДокумента = справочники.Валюты.НайтиПоКоду(КодДоллара) Тогда


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

Цитата(sava1 @ 28.10.19, 21:47) необходимо зарегистрироваться для просмотра ссылки
тогда пишите в 1с и локализаторам, а не здеся


Я, если позволите, сам определюсь где писать.
Но разработчикам, тоже, писал об их ошибках.
Некоторые, они исправляют, на другие не хватает бюджета, но от этого ошибка не перестает быть ошибкой.
sava1
Цитата(TipsyKID @ 29.10.19, 16:59) необходимо зарегистрироваться для просмотра ссылки
Я, если позволите, сам определюсь где писать.

Алаверды - я сам определюсь как писАть.
Цитата(TipsyKID @ 29.10.19, 16:59) необходимо зарегистрироваться для просмотра ссылки
Но разработчикам, тоже, писал об их ошибках.

Если Вы такие умные - что ж до сих пор не ходите строем ?

Цитата(TipsyKID @ 29.10.19, 16:59) необходимо зарегистрироваться для просмотра ссылки
То, что Вы посоветовали, начинающему программисту

Я , в отличие от Вас, ничего не советую - был конкретный вопрос и конкретный ответ.

Цитата(TipsyKID @ 29.10.19, 16:59) необходимо зарегистрироваться для просмотра ссылки
Не перекручивайте, проверяется не с конкретной валютой а с константой (т.е. с параметром который определяется в инф. базе):


Не вижу особой разницы.

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


Vofka
sava1, TipsyKID, давайте без перехода на личности, пожалуйста. Тема с говнокодом интересная и интересен, в частности, случай с валютой. Давайте продолжим обсуждение необходимо зарегистрироваться для просмотра ссылки.
andr_andrey
Как быстрое решение - пойдёт, но это "технический долг", который в будущем придётся отдать.
Вообще следует избегать "магических констант" в тексте программы, так как в идеале - программы это универсальные механизмы обработки данных, и настраиваться механизмы должны в пользовательском режиме без участия программиста.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.