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

Разработка бухгалтерской подсистемы

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

В окне настройки группировки отчета в поле Строки добавим поле Счет. В качестве типа группировки выберем Иерархия – нам хотелось бы, чтобы данные по счетам выводились с учетом иерархии счетов.

В качестве поля для упорядочения таблицы выберем поле Счет.Порядок, которое можно найти среди подчиненных полей у поля Счет ( рис. 2.9), направление сортировки – по возрастанию.

 Настройка упорядочивания отчета

Рис. 2.9. Настройка упорядочивания отчета

Теперь откроем отчет в 1С:Предприятие и посмотрим, как он будет выглядеть, рис. 2.10.

 Готовый отчет

увеличить изображение
Рис. 2.10. Готовый отчет

Как видите, наш отчет выводит все необходимые данные, счета отсортированы в соответствии с их порядком, итоги по показателям подсчитаны и выведены, счета представлены в соответствии с их иерархией.

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

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

  1. Номенклатура;
  2. Сотрудник;
  3. Группа спецодежды.

В соответствии с особенностями работы, в организации выделяется три группы спецодежды.

Запустим систему в режиме 1С:Предприятие, откроем План счетов. Создадим новый счет, заполним его параметры следующим образом:

Код: 10.3
Наименование: "Спецодежда"
Порядок: 10. 3
Вид: Активный
Родитель: Материалы
Признак Количественный: Установлен

Добавим в его список субконто два предопределенных субконтоНоменклатура и Сотрудники. Для того чтобы создать третий, новый вид субконто, нужно, добавить его в план видов характеристик Виды субконто, рис. 2.11.

 Разработка нового счета

увеличить изображение
Рис. 2.11. Разработка нового счета

Как производить записи по этому счету? У пользователя, без использования конфигуратора, есть лишь одна возможность – применить документ Бухгалтерская операция. При заполнении проводки в этом документе, в частности, при выборе третьего субконто, мы должны будем выбрать его из справочника Субконто. Так как в этом справочнике нет предопределенных элементов, значения субконто мы создадим самостоятельно. Сделать это можно при заполнении документа, рис. 2.12.

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

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

Сформируем бухгалтерскую запись, показывающую поступление спецодежды со следующими параметрами

Счет Дт: Спецодежда
Субконто1 Дт: Одежда для парикмахера
Субконто2 Дт: Иванов И.И. (Парикмахерская)
Субконто3 Дт: Первая группа
Количество Дт: 5 
Счет Кт: Расчеты с поставщиками в валюте
Субконто1 Кт: ООО "Полет"
Валюта Кт: USD
Валютная сумма Кт: 500
Сумма: 15000
Содержание: Поступила спецодежда, оплата в валюте

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

 Результаты построения отчета Оборотно-сальдовая ведомость после ввода новой операции

увеличить изображение
Рис. 2.13. Результаты построения отчета Оборотно-сальдовая ведомость после ввода новой операции

Проведение документа Поступление

Займемся документом ПоступлениеМатериалов, подготовим его к проведению по бухгалтерскому учету.

Добавим к документу новый реквизит, назовем его Валюта, тип – СправочникСсылка.Валюта. В этом реквизите мы будем указывать валюту документа.

Кроме того, создадим реквизит СчетУчета, тип – ПланСчетовСсылка.Хозрасчетный. Используя этот реквизит, мы будем задавать счет, на который следует принять материалы, перечисленные в документе. Документ можно будет проводить либо по счету Материалы для производства, либо – по счету Прочие материалы. Выбор другого счета в данном поле будет восприниматься системой как ошибочный.

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

Добавим документ в состав подсистемы БухгалтерскийУчет.

Откроем форму документа и разместим в форме новые реквизиты Валюта и Счет учета, рис. 2.14.

Обновленная форма документа ПоступлениеМатериалов

увеличить изображение
Рис. 2.14. Обновленная форма документа ПоступлениеМатериалов

Теперь мы можем заняться процедурой проведения документа.

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

Сейчас процедура проведения нашего документа, который до этого выполнял движения лишь по регистру накопления ОстаткиМатериалов, выглядит следующим образом:

Процедура ОбработкаПроведения(Отказ, Режим)
  Движения.ОстаткиМатериалов.Записывать = Истина;
  Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
    Движение = Движения.ОстаткиМатериалов.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Номенклатура = ТекСтрокаМатериалы.Номенклатура;
    Движение.ОтветственныйСотрудник = ОтветственныйСотрудник;
    Движение.Количество = ТекСтрокаМатериалы.Количество;
    Движение.Сумма = ТекСтрокаМатериалы.Сумма;
  КонецЦикла;
КонецПроцедуры

Нам придется полностью переработать эту процедуру, так как, во-первых, нас теперь интересует не только проведение по регистру накопления ОстаткиМатериалов, но и по регистру бухгалтерии Хозрасчетный, а во-вторых – в том случае, если в документе указана валюта взаиморасчетов, нам, прежде чем формировать движения по регистрам, придется конвертировать суммовые данные, введенные в документе, из валюты документа в рубли.

В итоге мы пришли к такому коду процедуры проведения документа ПоступлениеМатериалов:

Процедура ОбработкаПроведения(Отказ, Режим)
  //Переменная для хранения курса валюты
  Перем КурсВалюты;
  //Проверим, указан ли один из необходимых счетов
  //Для учета номенклатуры
  Если СчетУчета<>ПланыСчетов.Хозрасчетный.ПрочиеМатериалы И 
    СчетУчета<>ПланыСчетов.Хозрасчетный.МатериалыДляПроизводства Тогда
    Сообщить("Нужно указать либо счет Прочие материалы, либо счет Материалы для производства");
    Отказ=Истина;
    Возврат;
  КонецЕсли;
  //Проверим, указана ли в документе валюта
  Если Валюта = Справочники.Валюты.ПустаяСсылка() Тогда
  //Формирование движений по документу, данные в котором
  //заданы в рублях
  //Получаем табличную часть текущего документа, сгруппированную по полю Номенклатура
  Запрос = Новый Запрос;
  Запрос.Текст = 
    "ВЫБРАТЬ
    |  ПоступлениеМатериаловМатериалы.Номенклатура,
    |  СУММА(ПоступлениеМатериаловМатериалы.Количество) КАК Количество,
    |  СУММА(ПоступлениеМатериаловМатериалы.Сумма) КАК Сумма
    |ИЗ
    |  Документ.ПоступлениеМатериалов.Материалы КАК ПоступлениеМатериаловМатериалы
    |ГДЕ
    |  ПоступлениеМатериаловМатериалы.Ссылка.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |  ПоступлениеМатериаловМатериалы.Номенклатура";
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Результат = Запрос.Выполнить();
     ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Движения.ОстаткиМатериалов.Записывать = Истина;
  Движения.Хозрасчетный.Записывать=Истина;
  Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  //Формируем движения по регистру накопления ОстаткиМатериалов  
    Движение = Движения.ОстаткиМатериалов.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    Движение.ОтветственныйСотрудник = ОтветственныйСотрудник;
    Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
    Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;
  //Формируем движения по регистру бухгалтерии Хозрасчетный
    Движение=Движения.Хозрасчетный.Добавить();
    Движение.Период=Дата;
    Движение.СчетДт=СчетУчета;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]=
           ВыборкаДетальныеЗаписи.Номенклатура;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Сотрудники]=
           ОтветственныйСотрудник;
    Движение.КоличествоДт=ВыборкаДетальныеЗаписи.Количество;
    Движение.СчетКт=ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиВРублях;
    Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты]=
           Контрагент;
    Движение.Сумма=ВыборкаДетальныеЗаписи.Сумма;
  КонецЦикла;
    Иначе
  //Формирование движений по документу, данные в котором
  //заданы в валюте
  //Получаем курс валюты, заданной в документе
  Запрос = Новый Запрос;
  Запрос.Текст = 
    "ВЫБРАТЬ
    |  КурсыВалютСрезПоследних.Курс
    |ИЗ
    |  РегистрСведений.КурсыВалют.СрезПоследних(&МоментВремени, Валюта = &Валюта) КАК КурсыВалютСрезПоследних";

  Запрос.УстановитьПараметр("Валюта", Валюта);
  Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
     Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    КурсВалюты=ВыборкаДетальныеЗаписи.Курс;
  Иначе
    Сообщить("Не найден курс валюты!");
    Отказ=Истина;
    Возврат;
  КонецЕсли;
  //Получаем табличную часть текущего документа, сгруппированную по полю Номенклатура
  Запрос = Новый Запрос;
  Запрос.Текст = 
    "ВЫБРАТЬ
    |  ПоступлениеМатериаловМатериалы.Номенклатура,
    |  СУММА(ПоступлениеМатериаловМатериалы.Количество) КАК Количество,
    |  СУММА(ПоступлениеМатериаловМатериалы.Сумма) КАК Сумма
    |ИЗ
    |  Документ.ПоступлениеМатериалов.Материалы КАК ПоступлениеМатериаловМатериалы
    |ГДЕ
    |  ПоступлениеМатериаловМатериалы.Ссылка.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |  ПоступлениеМатериаловМатериалы.Номенклатура";

  Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Результат = Запрос.Выполнить();
     ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Движения.ОстаткиМатериалов.Записывать = Истина;
  Движения.Хозрасчетный.Записывать=Истина;
  Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  //Формируем движения по регистру накопления ОстаткиМатериалов  
    Движение = Движения.ОстаткиМатериалов.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    Движение.ОтветственныйСотрудник = ОтветственныйСотрудник;
    Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
    Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма*КурсВалюты;
  //Формируем движения по регистру бухгалтерии Хозрасчетный
    Движение=Движения.Хозрасчетный.Добавить();
    Движение.Период=Дата;
    Движение.СчетДт=СчетУчета;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]=
           ВыборкаДетальныеЗаписи.Номенклатура;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Сотрудники]=
           ОтветственныйСотрудник;
    Движение.КоличествоДт=ВыборкаДетальныеЗаписи.Количество;
    Движение.СчетКт=ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиВВалюте;
    Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты]=
           Контрагент;
    Движение.ВалютаКт=Валюта;
    Движение.ВалютнаяСуммаКт=ВыборкаДетальныеЗаписи.Сумма;
    Движение.Сумма=ВыборкаДетальныеЗаписи.Сумма*КурсВалюты;
  КонецЦикла;
   КонецЕсли;
КонецПроцедуры

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

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

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

В первой ветви мы получаем из табличной части документа данные о номенклатурных позициях, их количестве и общей стоимости, сгруппированные по полю Номенклатура, после чего формируем движения по регистру ОстаткиМатериалов (если вас интересуют подробности о проведении документов по регистрам накопления, обратитесь к нашему курсу, который посвящен основам разработки и модификации прикладных решений для платформы 1С:Предприятие 8.2.) и по регистру бухгалтерии Хозрасчетный.

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

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

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

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

Далее во второй ветви мы получаем данные из табличной части документа, сгруппировав их по полю Номенклатура, после чего формируем движения – сначала по регистру накопления ОстаткиМатериалов, конвертируя (Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма*КурсВалюты;) значение суммовой стоимости поступившей номенклатурной позиции в рубли путем умножения валютной суммы на найденный курс валюты.

При формировании движений по регистру бухгалтерии Хозрасчетный, мы проводим документ по счету РасчетыСПоставщикамиВВалюте, что требует от нас указания валюты, расчета суммы движения с учетом курса и указания валютной суммы:

    Движение.ВалютаКт=Валюта;
    Движение.ВалютнаяСуммаКт=ВыборкаДетальныеЗаписи.Сумма;
    Движение.Сумма=ВыборкаДетальныеЗаписи.Сумма*КурсВалюты;

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

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

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

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