Опубликован: 06.12.2011 | Доступ: свободный | Студентов: 3557 / 746 | Оценка: 4.50 / 4.39 | Длительность: 03:42:00
Лекция 3:

Бухгалтерская подсистема: расходные документы и переоценка валютных остатков

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Разработка документа Переоценка

Для начала рассмотрим ситуации, которые могут возникнуть в случае изменения курса валюты при наличии валютных остатков на счетах.

Ситуация первая – на активном счете имеется остаток (дебетовое сальдо) размером в $10, который, на дату поступления на счет, оценен по курсу 30 рублей за 1$, то есть – в 300 рублей.

При падении курса валюты до 29 рублей мы получаем в остатках на счете те же $10, но теперь уже их стоимость равняется 290 рублей, то есть – получаем убыток размером 10 рублей, который нужно отнести на счет капитала. Если речь идет, например, о счете Касса, то здесь мы имеем такую запись:

Д Капитал К Касса 10 рублей

При росте курса до 31 рубля, мы получаем на счете остаток размером в 310 рублей, то есть должны отразить прибыль размером в 10 рублей. Имеем такую запись:

Д Касса К Капитал 10 рублей

Если мы имеем на пассивном счете остаток (кредитовое сальдо) в $10, оцененный в 300 рублей при курсе 30 рублей за доллар, то при падении курса до 29 рублей мы имеем прибыль размером 10 рублей, если речь идет о счете расчетов с поставщиками (назовем его Поставщики), получаем такую запись:

Д Поставщики К Капитал 10 рублей

Если в той же ситуации курс вырос до 31 рубля за доллар, мы получаем убыток в те же 10 рублей:

Д Капитал К Поставщики 10 рублей

Исходя из этих соображения мы и будем проектировать процедуру переоценки счетов.

Создадим новый документ, назовем его ПереоценкаВалютныхОстатков, добавим в подсистему БухгалтерскийУчет, укажем на закладке окна редактирования объекта Движения, что этот документ будет проводиться по регистру бухгалтерии Хозрасчетный. Запретим оперативное проведение документа. Документ не будет иметь реквизитов – мы планируем использовать в процедуре проведения лишь информацию о дате документа, эту информацию нам предоставит его стандартный реквизит Дата.

В основе процедуры проведения лежит запрос, который должен выполнить следующие действия:

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

Мы реализовали задачи, возлагаемые на документ, с помощью следующего кода:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
  Перем Прибыль;
  Запрос = Новый Запрос;
  Запрос.Текст = 
    "ВЫБРАТЬ
    |  ХозрасчетныйОстатки.Счет,
    |  ХозрасчетныйОстатки.Валюта,
    |  ХозрасчетныйОстатки.Субконто1,
    |  ХозрасчетныйОстатки.Субконто2,
    |  ХозрасчетныйОстатки.Субконто3,
    |  ХозрасчетныйОстатки.СуммаОстаток - ХозрасчетныйОстатки.ВалютнаяСуммаОстаток * ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) 
  КАК Дельта
    |ИЗ
    |  РегистрБухгалтерии.Хозрасчетный.Остатки(&КонецМесяца, Счет.Валютный, , ) КАК ХозрасчетныйОстатки
    |    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&КонецМесяца, ) КАК КурсыВалютСрезПоследних
    |    ПО ХозрасчетныйОстатки.Валюта = КурсыВалютСрезПоследних.Валюта
    |ГДЕ
    |  ХозрасчетныйОстатки.СуммаОстаток - ХозрасчетныйОстатки.ВалютнаяСуммаОстаток * 
        ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) <> 0";

  Запрос.УстановитьПараметр("КонецМесяца", КонецМесяца(Дата));
    Результат = Запрос.Выполнить();
    ВыборкаДЗ = Результат.Выбрать();
  Движения.Хозрасчетный.Записывать=Истина;
   Пока ВыборкаДЗ.Следующий() Цикл
    Движение=Движения.Хозрасчетный.Добавить();
    //Проверяем, прибыль или убыток будем отражать
    //Блок №1
    Если (ВыборкаДЗ.Дельта<0 И ВыборкаДЗ.Счет.Вид=ВидСчета.Активный) Тогда
      Прибыль=Истина;
    КонецЕсли;
    //Блок №2
    Если (ВыборкаДЗ.Дельта>0 И ВыборкаДЗ.Счет.Вид=ВидСчета.Активный) Тогда
      Прибыль=Ложь;
    КонецЕсли;
    //Блок №3
    Если (ВыборкаДЗ.Дельта<0 И ВыборкаДЗ.Счет.Вид=ВидСчета.Пассивный) Тогда
      Прибыль=Истина;
    КонецЕсли;
    //Блок №4
    Если (ВыборкаДЗ.Дельта>0 и ВыборкаДЗ.Счет.Вид=ВидСчета.Пассивный) Тогда
      Прибыль=Ложь;
    КонецЕсли;
    //Отражаем прибыль или убыток
    Если Прибыль Тогда 
      //Отражаем прибыль
      Движение.СчетДт=ВыборкаДЗ.Счет;
      Движение.СчетКт=ПланыСчетов.Хозрасчетный.Капитал;
      Движение.ВалютаДт=ВыборкаДЗ.Валюта;
      //Для правильного заполнения субконто перебираем полученные субконто
      //ориентируясь на количество видов субконто счета
      Для Каждого Запись Из ВыборкаДЗ.Счет.ВидыСубконто Цикл
        Движение.СубконтоДт[Запись.ВидСубконто]=ВыборкаДЗ["Субконто"
             +Запись.НомерСтроки];  
      КонецЦикла;
        Иначе
       //Отражаем убыток
      Движение.СчетДТ=ПланыСчетов.Хозрасчетный.Капитал;
      Движение.СчетКТ=ВыборкаДЗ.Счет;
      Движение.ВалютаКТ=ВыборкаДЗ.Валюта;
      Для Каждого Запись Из ВыборкаДЗ.Счет.ВидыСубконто Цикл
        Движение.СубконтоКт[Запись.ВидСубконто]=ВыборкаДЗ["Субконто"
             +Запись.НомерСтроки];  
      КонецЦикла;
        КонецЕсли;
    //Если Дельта больше нуля, отразим без изменений
    //Если Дельта меньше нуля, изменим знак
    Движение.Сумма=?(ВыборкаДЗ.Дельта>0,ВыборкаДЗ.Дельта,-ВыборкаДЗ.Дельта);
    Движение.Период=КонецМесяца(Дата);
  КонецЦикла;
 КонецПроцедуры

В начале процедуры мы объявляем переменную Прибыль. Эту переменную мы будем использовать как флаг для определения того, прибыль или убыток нужно отражать при переоценке.

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

Параметр &КонецМесяца мы устанавливаем, приводя к концу месяца дату документа.

Мы получаем не все данные, а лишь те (выражение ГДЕ), у которых различаются сумма, хранящаяся в регистре с рублевой оценкой валютной суммы, хранящейся в регистре.

Собственно в результаты запроса попадают следующие сведения:

Ссылка на счет, на валюту, три субконто (в нашей конфигурации их количество ограничено тремя, заранее мы не знаем, сколько субконто будет у найденных счетов, поэтому выбираем все три субконто), а так же показатель разницы в оценке, на котором мы остановимся подробнее. Его получение выглядит так:

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

То есть, здесь мы отнимаем от суммового остатка по счету (выраженного в рублях и рассчитанного по некоему курсу валюты в прошлом) результат произведения остатка в валюте на текущий курс валюты. В том случае, если курс валюты будет равняться NULL, мы приводим его к 1. Результат этого выражения мы называем Дельта. Самое главное в последующей интерпретации этого выражения – понимать внутреннюю структуру таблицы остатков регистра бухгалтерии. На рис. 3.7. изображена таблица, полученная запросом с использованием консоли запросов. Мы использовали такой запрос:

ВЫБРАТЬ
  Счет,
  Счет.Вид,
  Валюта,
  СуммаОстаток,
  ВалютнаяСуммаОстаток КАК ВалОст,
  ВалютнаяСуммаОстатокДт КАК ВалОстДт,
  ВалютнаяСуммаОстатокКт КАК ВалОстКт
ИЗ
  РегистрБухгалтерии.Хозрасчетный.Остатки(,Счет.Валютный)
Результаты запроса по таблице остатков регистра бухгалтерии

увеличить изображение
Рис. 3.7. Результаты запроса по таблице остатков регистра бухгалтерии

Здесь можно видеть, что интересующие нас показатели рублевого остатка (СуммаОстаток) и валютного остатка (ВалОст) выводятся со знаком минус для пассивных счетов. Если перейти к показателям остатков по дебету или кредиту – мы увидим там для пассивных счетов положительные кредитовые остатки, для активных – положительные дебетовые, а вот общий показатель отображается со знаком. Знание этой особенности влияет на принятие решения о том, прибыль или убыток отражать на счете. Мы, в цикле перебора выборки, полученной запросом, раскрыли, для наглядности, все четыре возможных варианта развития событий в отдельных блоках Если.

Зная особенности таблицы остатков, рассмотрим варианты возникновения прибыли или убытка. Предположим, на активном и пассивном счете имеется по $10, оцененные по курсу 30 рублей за доллар. На момент переоценки курс вырос, составив уже 31 рубль. В запросе мы вычисляем следующие данные:

Для активного счета: 300-31*10=-10. Показатель отрицательный, счет – активный – значит – мы имеем прибыль (первый блок Если)

Для пассивного счета -300-31*(-10)=-300+310=10. Показатель положительный, счет пассивный – имеем убыток (четвертый блок Если)

При падении курса валюты, например, до 29 рублей имеем:

Для активного счета: 300-29*10=10. Показатель положительный, счет активный – имеем убыток (второй блок Если)

Для пассивного счета: -300-29*(-10)=-300+290=-10. Показатель отрицательный, счет пассивный – имеем прибыль (третий блок Если)

После того, как стало понятно – что мы будем отражать – прибыль или убыток, мы формируем ту часть бухгалтерской записи, которая специфична для этих операций. А именно, при отражении прибыли делается запись по дебету активного или пассивного счета и кредиту счета учета капитала, при отражении убытка – наоборот. Если отражение прибыли для счетов разного вида, в сущности, одинаковыми проводками, может показаться непонятным – вспомните о том, что показатель активного счета увеличивается по дебету. Например, благодаря такой проводке окажется, что на счете кассы увеличилась рублевая оценка валюты. У пассивного счета показатель по дебету, наоборот, уменьшает остаток счета (кредитовое сальдо). То есть, например, уменьшится рублевая оценка нашего долга перед поставщиками.

Аналогичные рассуждения касаются отражения убытков – оценка активов падает, а оценка задолженностей – растет.

При формировании проводок мы используем конструкцию следующего вида:

Для Каждого Запись Из ВыборкаДЗ.Счет.ВидыСубконто Цикл
  Движение.СубконтоКт[Запись.ВидСубконто]=ВыборкаДЗ["Субконто"+Запись.НомерСтроки];  
КонецЦикла;

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

Завершается формирование проводки следующей операцией:

Движение.Сумма=?(ВыборкаДЗ.Дельта>0,ВыборкаДЗ.Дельта,-ВыборкаДЗ.Дельта);

Эту запись следует читать так: Если показатель Дельта больше 0, присвоить его Сумме, если меньше – тоже присвоить, но поменять знак. Свойство Сумма должно содержать положительные значения, а наш показатель может быть как положительным, так и отрицательным.

Выводы

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

В нашей же следующей лекции мы займемся решением задачи расчета заработной платы на основе расчетных механизмов 1С:Предприятие 8.2.

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
Константин Павлов
Константин Павлов

Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной.

Надежда Федулкина
Надежда Федулкина