Решение:
1) Для решения задачи задействуем следующие объекты:
- Добавляем перечисления "Варианты списания" "Сразу" и "Частично".
- В справочник "Номенклатура" добавляем реквизиты "Вариант списания" и "СрокПолезногоИспользования"
- Добавляем регистр сведений "Первоначальная стоимость" с реквизитами "номенклатура" и "партия" и ресурсом значение.
2) ПВХ "Виды субконто".
- Заполняем типы значений характеристик и дополнительные значения характеристик.
- Согласно условия задачи заводим 2 предопределенных элемента "Номенклатура" и "Партия".
3) Дорабатываем план счетов.
- Добавляем признак учета субконто "количественный",
- на закладке "субконто" заполняем тип субконто и устанавливаем значение субконто=2.
- Редактируем предопределенный счет "Товары" и "Материалы" (признак учета и 2 субконто).
4) Добавляем документе "КупляПродажа".
5) Добавляем регистр бухгалтерии "Управленческий".
- Связываем его с планом счетов
- Добавляем ресурсы (количество, сумма)
- Выбираем регистраторы.
6) Не забываем о том, что в задачах бухгалтерского учета необходимо добавить документ, с помощью которого можно добавлять записи в регистр вручную. Назовем его "Ручная операция". укажем что он является регистратором нашего регистра. добавим форму
на форму вытащим реквизит Объект-движения-управленческий.
7) Переходим к Приходной накладной.
- Добавляем реквизит ТЧ "ДляСобственныхНужд".
- Небольшой "тюнинг". Вешаем процедуру пересчета строки на событие "при изменении" количества и цены, записываем реквизит "сумма по документу" при записи документа.
- С помощью конструктора движений формируем обработку проведения, затем ее немного корректируем.
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.Управленческий.Записывать = Истина;
Движения.ПервоначальнаяСтоимость.Записывать = Истина;
Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
Движение = Движения.Управленческий.Добавить();
Если ТекСтрокаСписокНоменклатуры.ДляСобственныхНужд Тогда
Движение.СчетДт = ПланыСчетов.Управленческий.Материалы;
Иначе
Движение.СчетДт = ПланыСчетов.Управленческий.Товары;
КонецЕсли;
Движение.СчетКт = ПланыСчетов.Управленческий.Поставщики;
Движение.Период = Дата;
Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма;
Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ТекСтрокаСписокНоменклатуры.Номенклатура;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Ссылка;
Если ТекСтрокаСписокНоменклатуры.ДляСобственныхНужд Тогда
Запись = Движения.ПервоначальнаяСтоимость.Добавить();
Запись.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
Запись.Партия = Ссылка;
Запись.Значение =ТекСтрокаСписокНоменклатуры.Сумма;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
8) Переходим к "СобственнымНуждам".
- Пишем процедуру проведения.
Если Окр(Выборка.ОстатокСум,1,1) = Окр(СуммаСписания,1,1) Тогда
СуммаСписания =Выборка.ОстатокСум;
КонецЕсли;
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Очистить();
Движения.Управленческий.Записать();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
ЭлементБлокировки.УстановитьЗначение("Счет",ПланыСчетов.Управленческий.Материалы);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
Запрос = Новый("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| УправленческийОстатки.Субконто1 КАК Материал,
| УправленческийОстатки.Субконто2 КАК Партия,
| ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0) КАК ОстатокКол,
| ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК ОстатокСум,
| УправленческийОстатки.Субконто1.ВариантСписания КАК ВариантСписания,
| ПервоначальнаяСтоимость.Значение КАК ПервоначальнаяСтоимость,
| ЕСТЬNULL(ПервоначальнаяСтоимость.Номенклатура.СрокПолезногоИспользования, 1) КАК СрокПолезногоИспользования
|ИЗ
| РегистрБухгалтерии.Управленческий.Остатки(&ТочкаИтогов, Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Материалы), , КОНЕЦПЕРИОДА(Субконто2.Дата, МЕСЯЦ) < &ТочкаИтогов) КАК УправленческийОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальнаяСтоимость КАК ПервоначальнаяСтоимость
| ПО УправленческийОстатки.Субконто1 = ПервоначальнаяСтоимость.Номенклатура
| И УправленческийОстатки.Субконто2 = ПервоначальнаяСтоимость.Партия";
Запрос.УстановитьПараметр("ТочкаИтогов", КонецМесяца(Дата));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Движение =Движения.Управленческий.Добавить();
Движение.Период = КонецМесяца(Дата);
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетКт = ПланыСчетов.Управленческий.Материалы;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Материал;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Выборка.Партия;
Если Выборка.ВариантСписания = Перечисления.ВариантыСписания.Сразу Тогда
СуммаСписания = Выборка.ОстатокСум;
Иначе
СуммаСписания =Выборка.ПервоначальнаяСтоимость/ Выборка.СрокПолезногоИспользования;
КонецЕсли;
Если Окр(Выборка.ОстатокСум,1,1) = Окр(СуммаСписания,1,1) Тогда
СуммаСписания =Выборка.ОстатокСум;
Движение.Количество=Выборка.ОстатокКол;
КонецЕсли;
Движение.Сумма = СуммаСписания;
КонецЦикла;
КонецПроцедуры
9) Отчет простейший.
ВЫБРАТЬ
УправленческийОстатки.Субконто1 КАК Товар,
СУММА(УправленческийОстатки.КоличествоОстатокДт) КАК Количество,
СУММА(УправленческийОстатки.СуммаОстатокДт) КАК ОстаточнаяСтоимость,
УправленческийОстатки.Субконто2 КАК Партия
ИЗ
РегистрБухгалтерии.Управленческий.Остатки(&ДатаОтчета, Счет = &счет, , ) КАК УправленческийОстатки
СГРУППИРОВАТЬ ПО
УправленческийОстатки.Субконто1,
УправленческийОстатки.Субконто2
Но есть один непонятный вопрос: Выводить итоговые данные по номенклатуре или с учетом партии, Если решаем что правильный вариант 2 тогда в конструкторе настроек ставим упорядочивание по партиям.
Скачать решение задачи 2.19
Этот видеокурс поможет Вам:
- Избежать типичных и нетипичные ошибок в 1С:Бухгалтерия 8;
- Cэкономить Вам время и силы;
- Более уверенно работать с программой.