Получить курс валюты 1с упп
Знаю, что на хабре не очень-то жалуют многострадальную 1С. Хотя, с выходом платформы 8.3 (с клиентами под Linux), ее стали любить несколько больше. Кстати, так же, совсем недавно интерфейс одной из основных разработок 1С – конфигурация Управление производственным предприятием – был полностью переведен на английский язык. Много раз я встречал вопросы о том, почему здесь не пишут об 1С. Ответ на них довольно очевиден – существует множество специализированных ресурсов, где можно оперативно обсудить все вопросы и что-то почитать.
Есть все основания полагать, что эта статья здесь не выживет, но я все же рискну, потому что в 1С есть некоторые интересные вещи, о которых стоит рассказать.
С некоторых пор в 1С 8.х появилась возможность использования веб-сервисов: 1С может выступать как поставщиком, так и потребителем. В этой статье я покажу, как использовать 1С в качестве потребителя на примере получения курсов валют с сервера ЦБР.
Веб-сервис
Конфигурирование
Для разработки я взял 1С 8.2 (8.2.15.317 в моем случае) и создал пустую конфигурацию. Для использования внешних веб-сервисов предусмотрен объект WS-ссылки, но использовать его не обязательно, к сервису можно обращаться динамически из кода. Я буду использовать первый вариант, а затем покажу, как можно использовать второй. В конфигурации создал обработку и назвал ее «ЗагрузкаКурсовВалютЦБР». Добавил форму (управляемую) и сделал ее основной. На форме я создал реквизиты и разместил элементы управления так, как показано на рисунке.
1С на основании полученного описания автоматически создаст визуальную карту веб-сервиса. Можно увидеть название веб-сервиса, посмотреть какие у него доступны операции а так же используемые типы данных.
Конфигурирование на этом почти закончено, осталось сделать пару штрихов для того, чтобы наше приложение выглядело более эстетично. Кликнем правой кнопкой мыши по корню конфигурации и вызовем меню «Открыть командный интерфейс рабочего стола». В появившемся окне необходимо снять флаг «Видимость» напротив обработки «Загрузка курсов валют ЦБР». Нажмем кнопку Ок. Далее еще правый клик по корню конфигурации и вызовем меню «Открыть рабочую область рабочего стола», там сделаем настройку как на рисунке:
Эти настройки позволят нам отобразить форму обработки прямо на рабочем столе (имеется ввиду рабочий стол программы 1С) в режиме 1С Предприятие.
Программирование
Теперь осталось наполнить смыслом нашу обработку: заставить ее получать курсы валют и отображать в таблице на форме. В режиме редактирования формы необходимо добавить новую команду формы, назовем ее ЗагрузитьВалюты. Эту команду необходимо связать с кнопкой, расположенной на форме. Действие для команды заполним следующим кодом (прим. автора: ничего себе, на хабре есть подсветка кода 1С, правда она работает не корректно):
Здесь сначала проверяется, заполнена ли дата (если не заполнена, то сообщаем об этом пользователю и больше ничего не делаем). Затем очищается таблица, расположенная на форме и вызывается процедура ЗагрузитьКурсыВалют(), в которую передается дата.
Код процедуры ЗагрузитьКурсыВалют(), пояснения данны в комментариях к коду:
Теперь можно обновлять конфигурацию БД (F7) и запускать 1С Предприятие (F5). Если все сделали верно, то должны увидеть окно как на рисунке ниже:
Чтобы проверить результат, нам нужно ввести дату, на которую хотим получить курсы валют и нажать на кнопку «Загрузить валюты». В случае успешного запроса, таблица на форме заполнится значениями курсов:
Напоследок хочу показать, как можно обратиться динамически к внешнему веб-сервису, то есть без добавления объекта WS-ссылка. Таким образом, мы можем использовать такие веб-сервисы из внешних обработок без привязки к конфигурации.
В процедуре ЗагрузитьКурсыВалют() строку
необходимо заменить двумя следующими строками
Сначала мы создаем так называемые определения для веб-сервиса из его WSDL. Затем так же создаем прокси для обращения к нему.
Как видно, использовать внешние веб-сервисы из 1С в целом довольно просто (хотя и есть некоторая сложность в понимании определения типов, у меня в том числе).
Если данная публикация найдет здесь отклик, то есть еще несколько тем, о которых можно рассказать.
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).
среда, 12 марта 2014 г.
Типовая функция для пересчета из валюты в валюту
Для пересчета из валюты в валюту в типовых конфигурациях используется функция ПересчитатьИзВалютыВВалюту, расположенная в общем модуле - МодульВалютногоУчета.Текст функции такой:
// Эта функция пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач
// в валюту ВалютаКон по курсу ПоКурсуКон
//
// Параметры:
// Сумма - сумма, которую следует пересчитать;
// ВалютаНач - ссылка на элемент справочника Валют;
// определяет валюты из которой надо пересчитвать;
// ВалютаКон - ссылка на элемент справочника Валют;
// определяет валюты в которую надо пересчитвать;
// ПоКурсуНач - курс из которого надо пересчитать;
// ПоКурсуКон - курс в который надо пересчитать;
// ПоКратностьНач - кратность из которого надо пересчитать (по умолчанию = 1);
// ПоКратностьКон - кратность в который надо пересчитать (по умолчанию = 1);
//
// Возвращаемое значение:
// Сумма, пересчитанная в другую валюту
//
Функция ПересчитатьИзВалютыВВалюту ( Сумма , ВалютаНач , ВалютаКон , ПоКурсуНач , ПоКурсуКон ,
ПоКратностьНач = 1 , ПоКратностьКон = 1 , Погрешность = 0 ,
СоответствиеПогрешностей = Неопределено, Ключ = Неопределено) Экспорт
Если ( ВалютаНач = ВалютаКон ) Тогда
// Считаем, что пересчет не нужен.
Возврат Сумма ;
КонецЕсли;
Если ( ПоКурсуНач = ПоКурсуКон )
и ( ПоКратностьНач = ПоКратностьКон ) Тогда
// пересчет суммы не требуется
Возврат Сумма ;
КонецЕсли;
Если ПоКурсуНач = 0
или ПоКурсуКон = 0
или ПоКратностьНач = 0
или ПоКратностьКон = 0 Тогда
ОбщегоНазначения . СообщитьОбОшибке ( "При пересчете из валюты '" + ВалютаНач + "' в валюту '" + ВалютаКон + "' обнаружен нулевой курс. Пересчет не произведен!" );
Возврат 0 ;
КонецЕсли;
НоваяСумма = ( Сумма * ПоКурсуНач * ПоКратностьКон ) / ( ПоКурсуКон * ПоКратностьНач );
Возврат ОбщегоНазначения . ОкруглитьСУчетомПогрешности ( НоваяСумма , 2 , Погрешность , СоответствиеПогрешностей , Ключ );
В УПП также существует функция ПересчитатьВСуммуРегл, которая предназначена для пересчета суммы управленческого учета в сумму регламентированного учета.
// Функция производит пересчет суммы в валюте упр. учета в валюту регл. учета.
//
Функция ПересчитатьВСуммуРегл ( СуммаУпр , ВалютаРегламентированногоУчета , ВалютаУправленческогоУчета , Дата ) Экспорт
ВалютаРегл = ВалютаРегламентированногоУчета ;
ВалютаУпр = ВалютаУправленческогоУчета ;
КурсВал = ПолучитьКурсВалюты ( ВалютаРегл , Дата );
КурсРегл = КурсВал . Курс ;
КратРегл = КурсВал . Кратность ;
КурсВал = ПолучитьКурсВалюты ( ВалютаУпр , Дата );
КурсУпр = КурсВал . Курс ;
КратУпр = КурсВал . Кратность ;
СуммаРегл = ПересчитатьИзВалютыВВалюту ( СуммаУпр , ВалютаУпр , ВалютаРегл , КурсУпр , КурсРегл , КратУпр , КратРегл );
Сегодня редкого бухгалтера выйдет хоть немного испугать работой с валютой, ведь она присутствует в деятельности многих отечественных организаций. Связи за рубежом – это статус, показатель развития и солидная прибыль. Для бухгалтера же – это появление самостоятельного ответвления учета платежей, проходящих в валюте других государств. В этой публикации хотелось бы подробнее осветить такой вопрос как, покупка валюты в 1С и порядок ее учета в рамках данного программного обеспечения.
Первое, на чем хочется акцентировать внимание, это то, что легально приобрести валюту компания вправе лишь с участием банка имеющего определенные полномочия, а валютные операции выделены в отдельный счет 52. Также, для ведения каких-либо расчетов в валюте необходимо иметь два счета: валютный и в рублях.
Предварительная настройка 1С
Для нормальной работы данного раздела 1С, потребуется выполнить некоторые подстройки программы. Первым делом включим необходимые нам функции, для чего перейдем в раздел «Администрирование»:
Открывается вот такая форма:
Форма дает возможность настраивать различные функции, но нас сейчас интересует вкладка «Расчеты». Для того чтобы операции с валютой стали доступны, требуется установить несколько флажков:
Поскольку в регламентированной отчетности валютные операции должны попасть в форму №4, необходимо чтобы данная статистика присутствовала в учете. Для этого выполняем следующие настройки – заходим в «План счетов»:
Выполним переход по гиперссылке, для чего жмем «Настройка плана счетов»:
В появившейся форме активируем следующую ссылку:
Здесь нас интересует наличие флажка в одном из реквизитов, а именно «По статьям движения денежных средств»:
Если флажок отсутствует, его необходимо поставить. Включение этой функции разрешает ведение учета в аналитическом ключе: «Статьи движения денежных средств». После того, как флажок установлен, информация об этом (субконто) отобразится на всех счетах учета:
Следует отметить, что организациям, пользующимся счетом 57 «Переводы в пути», также необходимо включать данную опцию при отображении операций в своем бухгалтерском учете. В принципе, этот счет целесообразно использовать, только если существует вероятность несовпадения дат выдачи банку поручения и появления денег на валютном счете. Если же подобные операции проходят «одним днем», то необходимость в использовании счета 57 отпадает.
Настройка находится в параметрах раздела «Учетная политика»:
Для активации устанавливаем флажок на использование счета 57:
На этом, пожалуй, можно закончить с настройкой и приступить к отражению собственно валютных операций.
Покупка валюты в 1С
Первое обязательное действие – отправка распоряжения на приобретение валюты в уполномоченный на это банк. Разработка формы такого распоряжения прерогатива специалистов банка и включает в себя: обоснование необходимости покупки валюты, требуемую сумму средств и максимальный курс. Для перевода денег от организации потребуется сформировать платежное поручение. Реализовать это можно на вкладке «Банк и касса»:
В момент покупки валюты банк выполнит списание необходимой для этого суммы со счета организации-покупателя. Оформление этой операции в 1С:
В бланке «Списание с расчетного счета» выберем нужное нам действие, в данном примере «Прочие расчеты с контрагентами»:
Вносим информацию в договор с банком, при этом назначаем ему стандартный вид «Прочее»:
Следующий шаг – статья движения денежных средств. Присваиваем операции статус «Покупка иностранной валюты (списание)», в соответствующей графе. Если в учете присутствует счет 57, реквизит «Счет расчетов» снабжается индексом «57.02», если учет происходит без него – «76.09»:
Так как финансы уходят с рублевого счета, вставляем именно его номер в поле «Банковский счет». После программа 1С выдаст отражение транзакции:
По факту списания, банк выполнит наше поручение по закупке. Поскольку бухгалтерия обязана хранить валюту только в рублевом эквиваленте, бухгалтерская программа производит требуемые перерасчеты. Необходимые для этого данные импортируются из программного справочника «Курсы валют», информацию в котором требуется регулярно обновлять. Для этих целей предусмотрена возможность загрузки действующего в данный момент курса Центрального Банка из сети:
Факт покупки отображается в бланке «Поступление на расчетный счет»:
Который необходимо снабдить следующими данными:
- Вид операции – нам надо выбрать «Приобретение иностранной валюты».
- Прописываем сумму в надлежащем реквизите.
- Правильно оформляем реквизит «Банковский счет» – вносим номер валютного счета компании. Что важно, в договоре обязательно должно присутствовать название валюты (здесь USD).
В поле реквизита «Курс банка» указывается фактический курс, по которому совершалась покупка валюты, поле «Сумма в рублях» отображает расходы банка. Наличие подтверждающего флажка напротив «Отражать разницу в курсе в составе расходов» дает возможность учесть потери на разнице в курсах между нашим банком и Центробанком. Курс Центрального банка, действительный на момент совершения операции, отображен в реквизите «Курс ЦБ»:
Затем формируются следующие движения:
Во взятом нами примере, второй проводкой зачисляются валютные средства, а третья проводка определяет потери на разнице курсов и переводит их в категорию расходов.
Первую проводку стоит рассмотреть внимательнее. На скриншоте видно, что на балансе организации находилась определенная сумма в валюте, которая также прошла переоценку, с отображением получившейся разницы в курсах (в нашем случае курс несколько снизился, что повлекло убытки). Следует подчеркнуть, что переоценка валюты и обязательств по ней, всегда происходит в случае транзакций и, обязательно, в конце каждого месяца. Для ежемесячной переоценки в программе 1С предусмотрена процедура «Переоценка валютных средств». Ее выполнение происходит в составе пакета «Закрытие месяца»:
Поскольку перечисление для банка составляло 75 тыс. рублей, а покупка валюты обошлась в 73,75 тыс. рублей, образовавшуюся разницу необходимо возвратить на счет. Для этого нам опять понадобится документ, знакомый по предыдущим шагам, «Поступление на расчетный счет»:
Окончив работу с документом, получаем следующие проводки:
Теперь приобретение валюты в 1С можно считать завершенным. А проверить счета позволит отчетная выборка, для этого в меню потребуется открыть «Оборотно-сальдовая ведомость»:
Знаю, что на хабре не очень-то жалуют многострадальную 1С. Хотя, с выходом платформы 8.3 (с клиентами под Linux), ее стали любить несколько больше. Кстати, так же, совсем недавно интерфейс одной из основных разработок 1С – конфигурация Управление производственным предприятием – был полностью переведен на английский язык. Много раз я встречал вопросы о том, почему здесь не пишут об 1С. Ответ на них довольно очевиден – существует множество специализированных ресурсов, где можно оперативно обсудить все вопросы и что-то почитать.
Есть все основания полагать, что эта статья здесь не выживет, но я все же рискну, потому что в 1С есть некоторые интересные вещи, о которых стоит рассказать.
С некоторых пор в 1С 8.х появилась возможность использования веб-сервисов: 1С может выступать как поставщиком, так и потребителем. В этой статье я покажу, как использовать 1С в качестве потребителя на примере получения курсов валют с сервера ЦБР.
Веб-сервис
Конфигурирование
Для разработки я взял 1С 8.2 (8.2.15.317 в моем случае) и создал пустую конфигурацию. Для использования внешних веб-сервисов предусмотрен объект WS-ссылки, но использовать его не обязательно, к сервису можно обращаться динамически из кода. Я буду использовать первый вариант, а затем покажу, как можно использовать второй. В конфигурации создал обработку и назвал ее «ЗагрузкаКурсовВалютЦБР». Добавил форму (управляемую) и сделал ее основной. На форме я создал реквизиты и разместил элементы управления так, как показано на рисунке.
1С на основании полученного описания автоматически создаст визуальную карту веб-сервиса. Можно увидеть название веб-сервиса, посмотреть какие у него доступны операции а так же используемые типы данных.
Конфигурирование на этом почти закончено, осталось сделать пару штрихов для того, чтобы наше приложение выглядело более эстетично. Кликнем правой кнопкой мыши по корню конфигурации и вызовем меню «Открыть командный интерфейс рабочего стола». В появившемся окне необходимо снять флаг «Видимость» напротив обработки «Загрузка курсов валют ЦБР». Нажмем кнопку Ок. Далее еще правый клик по корню конфигурации и вызовем меню «Открыть рабочую область рабочего стола», там сделаем настройку как на рисунке:
Эти настройки позволят нам отобразить форму обработки прямо на рабочем столе (имеется ввиду рабочий стол программы 1С) в режиме 1С Предприятие.
Программирование
Теперь осталось наполнить смыслом нашу обработку: заставить ее получать курсы валют и отображать в таблице на форме. В режиме редактирования формы необходимо добавить новую команду формы, назовем ее ЗагрузитьВалюты. Эту команду необходимо связать с кнопкой, расположенной на форме. Действие для команды заполним следующим кодом (прим. автора: ничего себе, на хабре есть подсветка кода 1С, правда она работает не корректно):
Здесь сначала проверяется, заполнена ли дата (если не заполнена, то сообщаем об этом пользователю и больше ничего не делаем). Затем очищается таблица, расположенная на форме и вызывается процедура ЗагрузитьКурсыВалют(), в которую передается дата.
Код процедуры ЗагрузитьКурсыВалют(), пояснения данны в комментариях к коду:
Теперь можно обновлять конфигурацию БД (F7) и запускать 1С Предприятие (F5). Если все сделали верно, то должны увидеть окно как на рисунке ниже:
Чтобы проверить результат, нам нужно ввести дату, на которую хотим получить курсы валют и нажать на кнопку «Загрузить валюты». В случае успешного запроса, таблица на форме заполнится значениями курсов:
Напоследок хочу показать, как можно обратиться динамически к внешнему веб-сервису, то есть без добавления объекта WS-ссылка. Таким образом, мы можем использовать такие веб-сервисы из внешних обработок без привязки к конфигурации.
В процедуре ЗагрузитьКурсыВалют() строку
необходимо заменить двумя следующими строками
Сначала мы создаем так называемые определения для веб-сервиса из его WSDL. Затем так же создаем прокси для обращения к нему.
Как видно, использовать внешние веб-сервисы из 1С в целом довольно просто (хотя и есть некоторая сложность в понимании определения типов, у меня в том числе).
Если данная публикация найдет здесь отклик, то есть еще несколько тем, о которых можно рассказать.
Читайте также: