В начало

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

           

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

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

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

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

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

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

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

                         |ИЗ

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

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

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

                         |ГДЕ

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

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

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

               

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

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

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

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

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

               

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

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

                                                //ПРОФИТ

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

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

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

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

                               Иначе

                                                //УБЫТОК

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

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

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

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

                                КонецЕсли;        

                                

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

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

                                КонецЦикла;

                КонецЦикла;

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