четверг, 28 мая 2015 г.

1c специалист. Задача 2.32

Решение:


Для решения задачи задействуем следующие объекты:
1) ПВХ "Виды субконто". 

  • Заполняем типы значений характеристик и дополнительные значения характеристик. 
  • Согласно условия задачи заводим  предопределенные  элементы "Номенклатура"  и "Комплекты" ( тип справочник "Номенклатура") и "Покупатели". Покупатели и  Комплекты потребуются для построения отчета.
2) Дорабатываем план счетов. 
  •  на закладке "субконто" заполняем тип субконто и устанавливаем значение субконто=3.
  • Редактируем предопределенные счета: "Товары"  и   добавляем счет "Долги по товарам" и добавляем все 3 субконто. 
3) Добавляем регистр бухгалтерии "Управленческий".
  • Связываем его с планом счетов
  • Добавляем признак учета "количественный".
  • Добавляем ресурсы ( сумма, количество). Количество - не балансовый, "Количественный"
  • Выбираем регистраторы.
4) Не забываем о том, что в задачах бухгалтерского учета необходимо добавить документ,  с помощью которого можно добавлять записи в регистр вручную. Назовем его "РучнаяОперация". Укажем что он является регистратором нашего регистра. 
добавим форму,на форму вытащим реквизит Объект-движения-управленческий.
Запретим проведение этого документа
 5) Потребуется регистр сведений "Состав комплекта".
Небольшая "защита от дурака"

&НаКлиенте
Процедура НоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение.ЭтоКомплект Тогда 
СтандартнаяОбработка = Ложь;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Комплект не может быть выбран";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры


 6) Переходим к Приходной накладной.

  • С помощью конструктора движений формируем обработку проведения.



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

7) Переходим к Расходной накладной.
Текст запроса практически идентичен запросу из задачи 2.31. 


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

8) Отчет 
Строим элементарный отчет по таблице остатков по счету "долги по товарам".


СКАЧАТЬ РЕШЕНИЕ ЗАДАЧИ 2.32

Комментариев нет:

Отправить комментарий