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