среда, 11 февраля 2015 г.

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



Решение:
Данная задача является своеобразным гибридом задач 2.10 и 2.12. К решению задачи 2.10 добавляем реализацию документа "Списание" из задачи 2.12.
Немножко другое условие списания. Для реализации нам потребуется.

  • Добавить справочник "Номенклатурные группы".
  • В справочник номенклатура добавить новый реквизит этого типа.(Номенклатурная группа)
  • Добавить новый РС "Данные организации"  с периодичностью год и измерением "Номенклатурная группа" и ресурсом "Процент распределения".
  • Обработка проведения примет вид:


Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Очистить();
Движения.Управленческий.Записать();

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();


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

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

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.Управленческий.Добавить();
Движение.Период =Дата;

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


Если Выборка.Процент <> 100 Тогда
Движение = Движения.Управленческий.Добавить();
Движение.Период =Дата;
СуммаСписания = Выборка.ОстатокСум - СуммаСписания;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.СрокГодности;
Движение.Сумма = СуммаСписания;

КонецЕсли;
КонецЦикла;
Движения.Управленческий.Записать();


Необходимо добавить отчет. 
Для того чтобы в отчет не попадали движения из документа "расходная накладная", то добавим условие
ГДЕ ТИПЗНАЧЕНИЯ(УправленческийОборотыДтКт.Регистратор) <> ТИП(Документ.РасходнаяНакладная)
ниже весь текст запроса:

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

СГРУППИРОВАТЬ ПО
УправленческийОборотыДтКт.СубконтоКт1

Скачивайте наздоровье)

Надеюсь Вам также будет интересен 




Этот видеокурс поможет Вам:
  • Избежать типичных и нетипичные ошибок в 1С:Бухгалтерия 8;
  • Cэкономить Вам время и силы;
  • Более уверенно работать с программой.




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

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