Yermek T. Zhubatyrov

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Бухгалтерский учет (2.7)

Печать

 

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

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

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

Далее проверю настройку плана счетов. Так как у меня в проводках будет использоваться товар, то нужно будет знать не только его остаток в суммовом выражении, но и в количественном. Для того, что бы показать системе, что будет вестись количественный учет, добавлю новый признак учета "Количественный". Такой же признак учета создам и для субконто. Так же привяжу план счетов к плану видов характеристик "ВидыСубконто", и укажу, что максимальное количество субконто на этом этом плане счетов будет равно двум (субконто "Номенклатура" и "Места хранения" для счета "Товары", и субконто "Контрагент" для счетов "Поставщики" и "Покупатели". Больше для решения задачи нам не нужно. Три последних действия произвел на закладке "Субконто" окна редактирования плана видов счетов. Теперь переду на закладку "Прочие" и открою окно редактирования предопределенных счетов. Для счета "Товары" укажу признак количественного учета. Так же привяжу субконто "Номенклатура" и "Места хранения", установлю для них так же признак количественного учета. Для счетов "Поставщики" и "Покупатели" установлю субконто "Контрагенты". Признаки учета устанавливать не буду. На этом настройка плана счетов завершена.

Теперь займемся объектом конфигурации, который и будет обеспечивать собственно хранения данных. Кончено это регистр бухгалтерии. В отличие от двух предыдущих объектов, его в конфигурации нет, поэтому создадим его. Назову его, по аналогии с планом счетов, "Управленческий", свяжу с имеющимся планом счетов, и укажу, что движения по этому регистру будут поддерживать корреспонденцию, установив соответствующий флаг. Переду на закладку "Данные". Так как дополнительные разрезы мне не нужны, создам только два ресурса и один реквизит. Ресурсы следующие: Сумма, и Количество. Для суммы укажу, что точность равна двум знакам и будет балансовым ресурсом. Привязки к признакам учета делать не буду. В отличие от ресурса "Количество". Точность для него укажу 3 знака, флаг "Балансовый" сниму, и укажу в свойствах признаков учета соответствующие настройки из плана счетов. Реквизитом же будет иметь тип "Строка" длинною 50 символов, и содержать описание проводки. Так его и назову "Содержание проводки". На закладке "Движения" укажу регистраторами документы "Приходная накладная" и "Расходная накладная".

Пора приниматься за настройку документов.

Начну с приходной накладной, как самого простого документа в нашей системе. 
Так как мы решили вести учет по контрагентам на счетах поставщиков и покупателей, то добавлю новый реквизит "Контрагент". Так же добавлю реквизит "Склад" типа "СправочникСсылка.МестаХранения". Теперь можно приступать к настройке движений, для чего воспользуюсь конструктором движений. Укажем, что движения собираемся делать по регистру бухгалтерии "Управленческий". В конструкторе движений укажем счета дебета и кредита, а так же табличную часть документа. Нажмем кнопку "Заполнить выражения". В итоге вид конструктора должен быть следующим:

Конструктор движений

Нажмем ОК. Откроется сформированный текст модуля. 

Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Он нас устраивает. Можно переходить к редактированию документа "Расходная накладная"

Для него так же добавлю реквизиты "Склад" и "Контрагент". Можно перейти к настройке движений.

В модуле объекта создам процедуру обработки проведения. Текст будет следующим:

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

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

Поле прохождения цикла формируем движение фиксирующее задолженность покупателя. 

Первая половина задания завершена. Займусь теперь затратами на рекламу. 

Начну с создания нового документа. Так его и назову "Реклама". У него будет только одна табличная часть с двумя реквизитами. "НоменклатурнаяГруппа" (ссылка на соответствующий справочник) и "Сумма" (число). Документ будет регистратором для нашего регистра бухгалтерии. 

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

ВЫБРАТЬ
    РекламаГруппы.НоменклатурнаяГруппа,
    РекламаГруппы.Сумма
ПОМЕСТИТЬ тзДок
ИЗ
    Документ.Реклама.Группы КАК РекламаГруппы
ГДЕ
    РекламаГруппы.Ссылка = &Ссылка;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    тзДок.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    УправленческийОстатки.Субконто2 КАК Склад,
    УправленческийОстатки.Субконто1 КАК Номенклатура,
    тзДок.Сумма КАК Сумма,
    УправленческийОстатки.СуммаОстатокДт КАК СуммаОстаток
ИЗ
    РегистрБухгалтерии.Управленческий.Остатки(
            &МоментВремени,
            Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары),
            ,
            Субконто1.НоменклатурнаяГруппа В
                (ВЫБРАТЬ
                    Т.НоменклатурнаяГруппа
                ИЗ
                    тзДок КАК Т)) КАК УправленческийОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ тзДок КАК тзДок
        ПО (тзДок.НоменклатурнаяГруппа = УправленческийОстатки.Субконто1.НоменклатурнаяГруппа)
ИТОГИ
    МИНИМУМ(Сумма),
    СУММА(СуммаОстаток)
ПО
    НоменклатурнаяГруппа

Теперь вставлю его в обработку проведения документа.

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

На этом работа с документами завершена. Примусь за отчеты.

Необходимо сформировать отчет следующего вида:

Товар Документ Себестоимость за ед.
Товар1 Приходная накладная №1 853

Отчет буду получать через СКД. Добавлю в конфигурацию новый отчет, обзову его "ИсторияСебестоимости". Создам. Жму кнопку "Открыть схему компоновки данных". В ней добавлю новый набор данных запрос. Текст запроса следующий:

ВЫБРАТЬ
    УправленческийОстаткиИОбороты.Субконто1 КАК Товар,
    УправленческийОстаткиИОбороты.Регистратор КАК Документ,
    УВЫРАЗИТЬ(УправленческийОстаткиИОбороты.СуммаКонечныйОстатокДт 
                                            / ЕСТЬNULL(УправленческийОстаткиИОбороты.КоличествоКонечныйОстатокДт, 1) 
                                            КАК ЧИСЛО(15, 2)) КАК Себестоимость
ИЗ
    РегистрБухгалтерии.Управленческий.ОстаткиИОбороты(, 
                                                      , 
                                                      Регистратор, 
                                                      Движения, 
                                                      Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары)
                                                      , 
                                                      , ) КАК УправленческийОстаткиИОбороты

УПОРЯДОЧИТЬ ПО
    Регистратор

Далее иду на закладку "Параметры". Добавлю новый параметр с именем "Период" и типом "Стандартный период". Включу его в список доступных полей. Для параметров "НачалоПериода" и "КонецПериода" задам выражения &Период.ДатаНачала и &Период.ДатаОкончания соответственно. Так же исключу их из доступных полей, и включу ограничение доступности. 

Переду на закладку "Настройки" и там запущу конструктор настроек. Тип отчета "Список". Отображаемые поля -- "Документ" и "Себестоимость". Группировка будет производится по полю "Товар". Работа с конструктором завершена. На закладке "Параметры" настроек варианта включу период в пользовательские настройки с режимом редактирования "Быстрый доступ". Вот и все. Запускаем в режиме отладки, и проверяем работу.

 

Добавить комментарий


Защитный код
Обновить