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