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