пятница, 29 мая 2015 г.

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

Решение:


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

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

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




Процедура ОбработкаПроведения(Отказ, Режим)

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


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


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Записать();
СчетУчета = ПланыСчетов.Управленческий.Товары;

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

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



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




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

КонецЦикла;

//Продажа
Движение        = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
Движение.Период = Дата;
Движение.Сумма  = СуммаПоДокументу;



КонецПроцедуры



7) Документ "Корректировка себестоимости"

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Очистить();
Движения.Управленческий.Записать();

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

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| УправленческийОбороты.Субконто1 КАК Номенклатура,
| УправленческийОбороты.СуммаОборот
|ИЗ
| РегистрБухгалтерии.Управленческий.Обороты(&ДатаНачала, &ДатаОкончания, , Счет = &СчетУчета, , , , ) КАК УправленческийОбороты";

Запрос.УстановитьПараметр("СчетУчета", ПланыСчетов.Управленческий.Товары);
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("ДатаОкончания",КонецМесяца(Дата));

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

КонецЕсли;
КонецЦикла;
КонецПроцедуры





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

ПО УправленческийОборотыДтКт.СубконтоДт1 = ПлановаяСебестоимостьСрезПоследних.Номенклатура



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

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

Решение:

Задача очень похожа на предыдущую.


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

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

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


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



7) Переходим к Расходной накладной.

В расходной накладной склад не указывается. Поэтому списывать товары будем списывать со складов  в произвольном порядке (так как в условии ничего об этом не сказано) .
При проведении заполним субконто "Агенты" к счету "Прибыли и убытки", таким образом по этому счету сможем получить данные при проведении документа "Начисление вознаграждения".



Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Записать();
СчетУчета = ПланыСчетов.Управленческий.Товары;

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

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



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



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

КонецЕсли;

КонецПроцедуры


7) Документ "Начисление вознаграждения"


Процедура ОбработкаПроведения(Отказ, РежимПроведения)

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

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

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| УправленческийОбороты.Субконто1 КАК Агент,
| УправленческийОбороты.СуммаОборот
|ИЗ
| РегистрБухгалтерии.Управленческий.Обороты(&НачПериода, &КонПериода, , Счет = &Счет, , , КорСчет В (&Коррсчета), ) КАК УправленческийОбороты";

Запрос.УстановитьПараметр("НачПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонПериода", КонецМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("Счет",  ПланыСчетов.Управленческий.ПрибылиУбытки);
Коррсчета = Новый Массив(2);
Коррсчета.Добавить(ПланыСчетов.Управленческий.Покупатели);
Коррсчета.Добавить(ПланыСчетов.Управленческий.Товары);
Запрос.УстановитьПараметр("Коррсчета",  Коррсчета);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда 
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.Поставщики;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Агент] = Выборка.Агент;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ВидыЗадолженности] = Справочники.ВидыЗадолженностей.ЗадолженностьПередАгентами;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Сумма = (-Выборка.СуммаОборот)/2;
КонецЦикла;
КонецЕсли;
КонецПроцедуры




8) Отчет 
Строим элементарный отчет по таблице остатков по счету "Поставщики".
ВЫБРАТЬ
УправленческийОстатки.Субконто1 КАК Сотрудник,
СУММА(УправленческийОстатки.СуммаОстатокКт) КАК Долг
ИЗ
РегистрБухгалтерии.Управленческий.Остатки(, Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики), , Субконто2 = ЗНАЧЕНИЕ(Справочник.ВидыЗадолженностей.ЗадолженностьПередАгентами)) КАК УправленческийОстатки

СГРУППИРОВАТЬ ПО

УправленческийОстатки.Субконто1


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

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

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

Решение:

Фразу "Система должна обеспечивать пользователя возможностью ведения складского учета не только на счете «Товары», но и на любом другом выбранным пользователем счете
",  будем трактовать как и в задаче 2.31 создав константу "СчетУчета".

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

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

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


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


7) Переходим к Расходной накладной.


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Записать();
СчетУчета = Константы.СчетУчета.Получить();

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

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



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


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

Если Выборка.Количество <= Выборка.КоличествоРег Тогда

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

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

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

Иначе
Отказ =Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара " + Выборка.Номенклатура + " в количестве "+ (Выборка.Количество -Выборка.КоличествоРег);
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;

КонецПроцедуры


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

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