среда, 18 марта 2015 г.

1c специалист задача 1.29

Решение:
Задача идентична прошлой, за исключением того что в партии в документе "Дополнительные затраты" указываются в таб. части. Следовательно изменениям подвергнется только  этот документ .
Для того чтобы выполнилось условие отчета "В отчетах себестоимость должна отражаться с учетом распределенных затрат, вне зависимости от того, в каком периоде был введен документ «Дополнительные затраты». движения будем записывать с нужной датой: Для регистра "продажи" запишем с датой продажи, для "стоимости номенклатуры" с датой прихода.


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

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

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

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

РезультатЗапроса = Запрос.Выполнить();

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

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

Если Выборка. КоличествоРасход> 0 Тогда
Движение = Движения.Продажи.Добавить();
Движение.Период = Выборка.ДатаДвижения;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Себестоимость = Выборка.КоличествоРасход *ЗатратыНаЕдиницу;
КонецЕсли;

КонецЦикла;
КонецЦикла;

КонецЕсли;

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

Скачать решение задачи 1.29 (1с специалист):



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

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