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

Хранилище

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

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



> Как в выборке результата запроса сравнить значение(ВалютаДокумента)          
jojojoba2 Подменю пользователя
сообщение 28.10.19, 16:56
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 56
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день!

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


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


Спасибо.

Сообщение отредактировал Vofka - 29.10.19, 7:59

sava1 Подменю пользователя
сообщение 28.10.19, 18:10
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

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

takefive Подменю пользователя
сообщение 28.10.19, 19:00
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 60
Из: Днепропетровск
Спасибо сказали: 22 раз
Рейтинг: 23.2

jojojoba2 @ Сегодня, 17:56 * ,
Если Выборка.ВалютаДокумента.Код = КодДоллара Тогда


Signature
без свинга нет музыки...

jojojoba2 Подменю пользователя
сообщение 28.10.19, 19:16
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 56
Спасибо сказали: 0 раз
Рейтинг: 0

Всем спасибо!

TipsyKID Подменю пользователя
сообщение 28.10.19, 19:31
Сообщение #5

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Что за число 24?

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

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

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


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

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


Опять же, необходимости в коде проверять на конкретную валюту нет и это говнокод плохой стиль.


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

sava1 Подменю пользователя
сообщение 28.10.19, 20:47
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

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


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

это гавнокод ?
тогда пишите в 1с и локализаторам, а не здеся

TipsyKID Подменю пользователя
сообщение 29.10.19, 16:59
Сообщение #7

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

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

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


где

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


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


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

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


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


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

sava1 Подменю пользователя
сообщение 30.10.19, 8:22
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Цитата(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 Подменю пользователя
сообщение 30.10.19, 9:42
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

sava1, TipsyKID, давайте без перехода на личности, пожалуйста. Тема с говнокодом интересная и интересен, в частности, случай с валютой. Давайте продолжим обсуждение здесь.

andr_andrey Подменю пользователя
сообщение 30.10.19, 13:34
Сообщение #10

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Спасибо сказали: 166 раз
Рейтинг: 130.8

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


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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