Меню

1с пересчитать из валюты в валюту



Заметки по 1С:Предприятие 8.2, 8.3

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).

Страницы

среда, 12 марта 2014 г.

Типовая функция для пересчета из валюты в валюту

// Эта функция пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач
// в валюту ВалютаКон по курсу ПоКурсуКон
//
// Параметры:
// Сумма — сумма, которую следует пересчитать;
// ВалютаНач — ссылка на элемент справочника Валют;
// определяет валюты из которой надо пересчитвать;
// ВалютаКон — ссылка на элемент справочника Валют;
// определяет валюты в которую надо пересчитвать;
// ПоКурсуНач — курс из которого надо пересчитать;
// ПоКурсуКон — курс в который надо пересчитать;
// ПоКратностьНач — кратность из которого надо пересчитать (по умолчанию = 1);
// ПоКратностьКон — кратность в который надо пересчитать (по умолчанию = 1);
//
// Возвращаемое значение:
// Сумма, пересчитанная в другую валюту
//
Функция ПересчитатьИзВалютыВВалюту ( Сумма , ВалютаНач , ВалютаКон , ПоКурсуНач , ПоКурсуКон ,
ПоКратностьНач = 1 , ПоКратностьКон = 1 , Погрешность = 0 ,
СоответствиеПогрешностей = Неопределено, Ключ = Неопределено) Экспорт

Если ( ВалютаНач = ВалютаКон ) Тогда

// Считаем, что пересчет не нужен.
Возврат Сумма ;
КонецЕсли;

Если ( ПоКурсуНач = ПоКурсуКон )
и ( ПоКратностьНач = ПоКратностьКон ) Тогда

// пересчет суммы не требуется
Возврат Сумма ;
КонецЕсли;

Если ПоКурсуНач = 0
или ПоКурсуКон = 0
или ПоКратностьНач = 0
или ПоКратностьКон = 0 Тогда
ОбщегоНазначения . СообщитьОбОшибке ( «При пересчете из валюты ‘» + ВалютаНач + «‘ в валюту ‘» + ВалютаКон + «‘ обнаружен нулевой курс. Пересчет не произведен!» );
Возврат 0 ;
КонецЕсли;

НоваяСумма = ( Сумма * ПоКурсуНач * ПоКратностьКон ) / ( ПоКурсуКон * ПоКратностьНач );
Возврат ОбщегоНазначения . ОкруглитьСУчетомПогрешности ( НоваяСумма , 2 , Погрешность , СоответствиеПогрешностей , Ключ );

В УПП также существует функция ПересчитатьВСуммуРегл, которая предназначена для пересчета суммы управленческого учета в сумму регламентированного учета.

// Функция производит пересчет суммы в валюте упр. учета в валюту регл. учета.
//
Функция ПересчитатьВСуммуРегл ( СуммаУпр , ВалютаРегламентированногоУчета , ВалютаУправленческогоУчета , Дата ) Экспорт

ВалютаРегл = ВалютаРегламентированногоУчета ;
ВалютаУпр = ВалютаУправленческогоУчета ;

КурсВал = ПолучитьКурсВалюты ( ВалютаРегл , Дата );
КурсРегл = КурсВал . Курс ;
КратРегл = КурсВал . Кратность ;

КурсВал = ПолучитьКурсВалюты ( ВалютаУпр , Дата );
КурсУпр = КурсВал . Курс ;
КратУпр = КурсВал . Кратность ;

Если КурсРегл = 0 Тогда
ОбщегоНазначения . Сообщение ( «Не задан курс валюты «»» + ВалютаУправленческогоУчета + «»» регламентированного учета!» , СтатусСообщения . Внимание );
Возврат 0 ;
КонецЕсли;

Если КурсУпр = 0 Тогда
ОбщегоНазначения . Сообщение ( «Не задан курс валюты «»» + ВалютаУправленческогоУчета + «»» управленческого учета!» , СтатусСообщения . Внимание );
Возврат 0 ;
КонецЕсли;

СуммаРегл = ПересчитатьИзВалютыВВалюту ( СуммаУпр , ВалютаУпр , ВалютаРегл , КурсУпр , КурсРегл , КратУпр , КратРегл );

Источник

Заметки по 1С:Предприятие 8.2, 8.3

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).

Страницы

вторник, 18 марта 2014 г.

Пересчет из валюты в валюту в запросе

ВЫБРАТЬ РАЗРЕШЕННЫЕ
КурсыВалют.Период КАК Период ,
КурсыВалют.Валюта КАК Валюта ,
КурсыВалют.Курс КАК Курс ,
КурсыВалют.Кратность
ПОМЕСТИТЬ КурсыВалют
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют

ИНДЕКСИРОВАТЬ ПО
Период ,
Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
КурсыВалют.Период КАК НачалоПериода ,
МИНИМУМ ( ЕСТЬNULL ( КурсыВалютКопия.Период , ДАТАВРЕМЯ ( 3999 , 1 , 1 ))) КАК КонецПериода ,
КурсыВалют.Валюта КАК Валюта ,
КурсыВалют.Курс ,
КурсыВалют.Кратность
ПОМЕСТИТЬ ТаблицаКурсов
ИЗ
КурсыВалют КАК КурсыВалют
ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсыВалютКопия
ПО ( КурсыВалютКопия.Период > КурсыВалют.Период )
И ( КурсыВалютКопия.Валюта = КурсыВалют.Валюта )

СГРУППИРОВАТЬ ПО
КурсыВалют.Период ,
КурсыВалют.Курс ,
КурсыВалют.Валюта ,
КурсыВалют.Кратность

ИНДЕКСИРОВАТЬ ПО
НачалоПериода ,
КонецПериода ,
Валюта
;

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

Читайте также:  1с оплата валютой поставщику услуг

ИНДЕКСИРОВАТЬ ПО
Период ,
Контрагент ,
РасходнаяНакладная ,
Номенклатура
;

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

ИНДЕКСИРОВАТЬ ПО
Контрагент ,
РасходнаяНакладная ,
Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПродажиПересчитано.Контрагент ,
ПродажиПересчитано.РасходнаяНакладная ,
ПродажиПересчитано.Номенклатура ,
ПродажиПересчитано.Количество ,
ПродажиПересчитано.СтоимостьУпр ,
ВЫРАЗИТЬ ( ПродажиПересчитано.СтоимостьВалютаПересчета КАК ЧИСЛО( 15 , 2 )) КАК СтоимостьВалютаПересчета ,
ВЫРАЗИТЬ ( ПродажиПересчитано.СтоимостьУпр / ПродажиПересчитано. Количество КАК ЧИСЛО( 15 , 2 )) КАК ЦенаУпр ,
ВЫРАЗИТЬ ( ПродажиПересчитано.СтоимостьВалютаПересчета / ПродажиПересчитано. Количество КАК ЧИСЛО( 15 , 2 )) КАК ЦенаВалютаПересчета
ИЗ
ПродажиПересчитано КАК ПродажиПересчитано

В первом запросе мы получаем таблицу всех курсов и кратности. Таблица «Курсы валют» необходима для правильного построения нарастающих итогов. В следующем запросе как раз и строится нарастающий итог. Мы получаем поля «НачалоПериода» и » КонецПериода» для получения интервала, в который будет входить наш документ. В третьем запросе мы проверяем: входит ли документ в наш интервал. Если входит, то получаем курс и кратность валюты управленческого учета на дату документа. — Почему управленческого? — спросите вы. — Да потому, что стоимость проданного товара хранится в регистре «Продажи» именно в валюте управленческого учета.
Далее получаем курс и кратность валюты пересчета — той, в которую нужно пересчитать. Это тоже делаем на дату документа. После того, как курсы и кратности валют мы получили принимаемся за расчет.Для пересчета из валюты в валюту сначала нужно рассчитать коэффициент пересчета.
Рассчитываем его так:

Источник

при пересчете валюты » » в валюту RUB обнаружен нулевой курс. Пересчет не произведен

Добрый день, выдаю аванс через РКО, система не даёт провести документ по бухгалтерскому учету.Пишет «при пересчете валюты » » в валюту RUB обнаружен нулевой курс. Пересчет не произведен»

Пока не ответили, удалите две «пустышки»! Неужели не видите? Не надо засорять ветку.

Какое именно слово непонятно?

«рубли» в кассе не указала?

опять деревянный в валюту превратили?

В справочнике касса валюта стоит рубль

тогда у этой «валюты» курс =1, а не 0!

Да все верно курс стоит 1, только в РКО реквизиты «Валюта», «Сумма» «отражать в бух.учете» не редактируются. А проводишь документ выдает опять это же сообщение.

покажите уже РКО

Читают тему:

Мероприятия

  • Где купить СОФТ
  • Вакансии фирм-партнеров «1С»
  • Центры Сертифицированного Обучения
  • Интернет курсы обучения «1С»
  • Самоучители
  • Учебный центр № 1
  • Учебный центр № 3
  • Сертификация по «1С:Профессионал»
  • Организация обучения под заказ
  • Книги по 1С:Предприятию
  • WWW.1С.ru
  • 1С:Предприятие 8
  • 1С Отраслевые решения
  • Образовательные программы
  • 1С:Линк
  • 1С:Консалтинг
  • 1С:Дистрибьюция
  • 1С для торговли
  • 1С-Онлайн
  • 1С Интерес
  • 1С:Образование
  • 1С:Торговая площадка
  • 1C:Игры
  • 1Софт
  • ИТС.1C.ru

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

Редакция БУХ.1С не несет ответственности за мнения и информацию, опубликованную в комментариях к материалам.

Читайте также:  I калькулятор валют рбк

Редакция уважает мнение авторов, но не всегда разделяет его.

Мы используем файлы cookie, чтобы анализировать трафик, подбирать для вас подходящий контент и рекламу, а также дать вам возможность делиться информацией в социальных сетях. Если вы продолжите использовать сайт, мы будем считать, что вас это устраивает.

Источник

1С УТ 11. Доработка типовых отчетов – пересчет показателей в произвольную валюту. Задачи 2.1 – 2.2 сборника «1С: Специалист»

Дано: Один из типовых отчетов «1С: УТ», связанный с выводом цен или стоимостей в одном из видов цен.

Требуется: дополнить(изменить) вывод выбранных цен(стоимостей в выбранном виде цен) выводом цен (стоимостей) в выбранной пользователем валюте.

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

Таким образом, необходимо рассмотреть 5 вариантов:

Способ вычисления цены в выбранной валюте

Помножить на курс валюты цены и поделить на кратность валюты цены

Разделить на курс выбранной валюты и помножить на кратность выбранной валюты

Не рубли (совпадает с валютой цены)

Не рубли (не совпадает с валютой цены)

Рассчитать по кросс-курсу:

Получить цену в рублях:

Помножить на курс валюты цены и поделить на кратность валюты цены

Пересчитать цену в выбранную валюту:

Разделить на курс выбранной валюты и помножить на кратность выбранной валюты

Последний вариант является наиболее обобщенным случаем. Под этот алгоритм расчета подходят все предыдущие варианты.

Сборник задач «1С: Специалист» УТ содержит как минимум 2 задачи по доработке типовых отчетов, в которых необходимо производить пересчет показателей в выбранную пользователем валюту. В задаче 2.1 – необходимо заменить существующие данные в колонке. В задаче 2.2 – требуется добавить новую колонку для вывода. Как на портале Инфостарт, так и на других многочисленных ресурсах опубликованы решения типовых задач из Сборника. Отдельно хочется отметить публикацию //infostart.ru/public/573102/, где приведены наиболее обстоятельные законченные варианты решений.

Что же касается описанных выше заданий, то по ним предлагается наиболее очевидный способ решения. Отчет СКД дополняется пересчетом имеющихся данных в выбранную валюту.

Технически это выглядит следующим образом:

  1. В отчет добавляется виртуальная таблица – Регистр сведений – Валюты — СрезПоследних. В параметрах виртуальной таблицы указывается Период = &ВыбДата и Валюта = <Цена>.Валюта. Задается имя таблицы – ВалютаЦены.
  2. В отчет добавляется вторая виртуальная таблица – Регистр сведений – Валюты — СрезПоследних. В параметрах виртуальной таблицы указывается Период = &ВыбДата и Валюта = &ВыбВалюта. Задается имя таблицы – ВалютаОтчета.
  3. Добавляются новые (или заменяются старые) поля расчета показателей по принципу.

= <Показатель>* ВалютаЦены.Курс*ВалютаОтчета.Кратность/ ВалютаЦены.Кратность/ ВалютаОтчета.Курс.

  1. Параметры отчета ВыбВалюта и ВыбДата добавляются в изменяемые параметры. Для гарантии заполнения следует включить требование обязательностьи заполнения.

В одной из задач про дату пересчета ничего не сказано. Можно спросить об этом экзаменатора. А можно понимать под датой пересчета – текущую дату. Для этого запретить изменение этого параметра пользователем, а в поле выражение задать формулу ТекущаяДата().

Решение очевидное и несложное, если не считать необходимость задания громоздких формул курсов и кратностей.

Однако на текущем релизе УТ 11 данное решение, увы, не заработало. Причина в том, что текст запроса, введенный в ЭХД в отчетах (по крайне мере тех, которые требуется доработать в данных задачах) в процессе формирования отчетов, подвергается программной доработке. Таким образом, если «родной» текст запроса изменен, то отчет «спотыкается» в связи с невозможностью его программно изменить.

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

Я же нашел иной вариант решения, избавляющий от необходимости изменения текста запроса и громоздких формул.

Сначала я задался вопросом. Неужели в типовой конфигурации нет функции пересчета сумм из валюты в валюту, чтобы ей можно было воспользоваться, не «изобретая велосипед»?

Конечно же, такая функция обнаружилась:

Общий модуль – РаботаСКурсамиВалютУТ

Функция ПересчитатьСуммуДокументаВВалюту(СуммаДокумента, ТекущаяВалюта, НоваяВалюта, Дата) Экспорт

Рассмотрим ее описание в комментариях.

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

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

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

Но вполне допустим следующий вариант – создать дополнительный общий модуль, запускающий нужную функцию из варианта исполнения Клиент с использованием Вызова сервера.

Добавим новый общий модуль (предварительно включив режим редактирования конфигурации). В материалах по подготовке к экзаменам добавляемые общие модули рекомендуют называть «Экзамен». В свойствах укажем галочки: Клиент, Сервер и Вызов сервера. В документации по стандартам 1С рекомендуется имя общего модуля дополнять вариантом исполнения. Для нашего варианта – Вызов сервера.

Таким образом, настройки модуля:

Созданный модуль будет содержать одну экспортируемую функцию, которую для ясности можно назвать ПересчитатьСуммуДокументаВВалюту. Назначение данной функции – вызвать одноименную функцию общего модуля РаботаСКурсамиВалютУТ и возвратить результат. Функцию необходимо снабдить инструкцией препроцессора НаСервере

Рассмотрим доработку СКД для типового отчета «Прайс-лист».

В СКД находим необходимые данные для пересчета – это поля Цена и Валюта:

Создадим параметр Валюта отчета. Параметр дата формирования уже имеется «Дата отчета».

Далее на закладке Вычисляемые поля добавляем вызов новой функции.

После этого добавляем новый ресурс. Заметим, что выражение агрегирования для Цены не является элементарным, поэтому следует его полностью скопировать и заменить аргумент Цена на ЦенаВВалюте.

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

Для задачи, в которой требуется не добавить новое поле с выводом суммы в валюте отчета, а изменить значение существующего поля (сумма в валюте цены), вызов функции можно осуществить не путем создания нового поля на закладке Вычисляемые поля, а непосредственно для изменяемого поля на закладке «Наборы данных» (колонка – Выражение представления).

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

Источник