В начало

Переоценка валюты

           

Есть регистр бухгалтерии «Управленческий» и регистр сведений «КурсыВалют». Нужно создать документ по переоценке валюты.

            Запускаем «1С: Предприятие 8.2». Открываем дерево объектов, создаем новый документ, называем «ПереоценкаВалюты».

            На закладке «Движения» запрещаем оперативное проведение документа и указываем что он будет регистратором для регистра бухгалтерии «Управленческий».

            Далее переходим на закладку «Прочее» и в модуле объекта формируем процедуру «Обработка проведения». Формируем запрос при помощи конструктора.  В запросе выбираем таблицы: «Управленческий.Остатки» и «КурсыВалют.СрезПоследних». Устанавливаем параметр «&МоментВремени» для обоих регистров и условие по счету «Счет.Валютный» только для регистра бухгалтерии.

            Затем из таблиц выбираем поля:

– из регистра «Управленческий»: Счет, Валюта, Субконто1, Субконто2;

– из регистра «КурсыВалют»: Курс.

            На закладке «Связи» связываем таблицы по измерению «Валюта».

            Далее возвращаемся в модуль объекта и редактируем процедуру «ОбработкаПроведения».

 

Листинг 1. Обработка проведения

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

                // Вставить содержимое обработчика.

Движения.Управленческий.Записывать = Истина;

 

                Запрос = Новый Запрос;

                Запрос = "ВЫБРАТЬ

                         |      УправленческийОстатки.Счет,

                         |      УправленческийОстатки.Валюта,

                         |      УправленческийОстатки.Субконто1,

                         |      УправленческийОстатки.Субконто2,

                         |      УправленческийОстатки.СуммаОстаток - УправленческийОстатки.ВалСуммаОстаток * ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) КАК Отклонение

                         |ИЗ

                         |      РегистрБухгалтерии.Управленческий.Остатки(&МоментВремени, Счет.Валютный, , ) КАК УправленческийОстатки

                         |                      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&МоментВремени, ) КАК КурсыВалютСрезПоследних

                         |                      ПО УправленческийОстатки.Валюта = КурсыВалютСрезПоследних.Валюта

                         |ГДЕ

                         |      УправленческийОстатки.СуммаОстаток - УправленческийОстатки.ВалСуммаОстаток * ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) <> 0";

                Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

                РезультатЗапроса = Запрос.Выполнить();

               

                Выборка = РезультатЗапроса.Выбрать();

                Пока Выборка.Следующий Цикл

                               Проводка = Движения.Управленческий.Добавить();

                               Проводка.Период = Дата;

                               Проводка.Сумма = Макс(Выборка.Отклонение, -Выборка.Отклонение);

               

                               Если (Выборка.Отклонение < 0 И Выборка.Счет.Вид = ВидСчета.Активный) ИЛИ

                                                (Выборка.Отклонение > 0 И Выборка.Счет.Вид = ВидСчета.Пассивный)Тогда

                                                //ПРОФИТ

                                                Проводка.СчетДт = Выборка.Счет;

                                                Проводка.СчетКт = ПланыСчетов.Управленческий.Прибыль;

                                                Проводка.ВалютаДт = Выборка.Валюта;

                                                ТЧСубконто = Проводка.СубконтоДт;

                               Иначе

                                                //УБЫТОК

                                                Проводка.СчетКт = Выборка.Счет;

                                                Проводка.СчетДт = ПланыСчетов.Управленческий.Прибыль;

                                                Проводка.ВалютаКт = Выборка.Валюта;

                                                ТЧСубконто = Проводка.СубконтоКт;

                                КонецЕсли;        

                                

                                Для Каждого Стр Из Выборка.Счет.ВидыСубконто Цикл

                                               ТЧСубконто[Стр.ВидСубконто] = Выборка["Субконто" + Стр.НомерСтроки];

                                КонецЦикла;

                КонецЦикла;

КонецПроцедуры