17:01 Задача 1.15 | |
Интересная задача состоящая из части предыдущих 1.13.14. и накрученная другими вкусностями . составим план решения : 1)поступление приходная продажа расходная 2)Для каждой номенклатурной позиции произвольное колво единиц измерения пачка контейнер 3 пачки это 30 шт 3 контейнера 3000 шт для этого создадим справочник единицы измерения и соотношение единиц регистр сведений в котором определим измерения Номенклатура,ЕдиницыИзмерения ресурсы КоличествоШтук 3)Далее по условию учет товаров в разрезе складов .поэтому добавим куда нужно поле склад в регистр остатки документы приходная расходная . 4) В расходной накладной по условию нужно поле получатель .так как товар может продаваться перемещаться со склада на склад у поля Получатель будет составной тип = СправочникСсылка.Контрагенты, СправочникСсылка.Склады. 5) При подборе получателя колонки цена сумма в расходной должны исчезать . себестоимость считается как средняя по складу . 6) Позднее а след день или далее делают распределение суммы затрат на доставку товаров,которые не перемещались, для этого заводят отдельный документ РаспределениеЗатрат. сумма распределятся согласно себестоимости товаров в накладных Итак приступим : мы уже создали справочник еденицы изм и регистр сведений соотношение единиц. мы добавили поля Склад в регистр и шапки докум ,также поле получатель в расходной теперь опишем документы: Приходная в таб Части СписокНоменклатуры добавим колонку ед изм в модуле объекта : Процедура ОбработкаПроведения(Отказ, Режим) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура, | ПриходнаяНакладнаяСписокНоменклатуры.Ед, | СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма, | СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество * СоотношениеЕдиниц.КоличествоШтук) КАК КоличествоШт |ИЗ | Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоотношениеЕдиниц КАК СоотношениеЕдиниц | ПО ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура = СоотношениеЕдиниц.Номенклатура | И ПриходнаяНакладнаяСписокНоменклатуры.Ед = СоотношениеЕдиниц.ЕдиницаИзмирения |ГДЕ | ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура, | ПриходнаяНакладнаяСписокНоменклатуры.Ед"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = Склад; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоШт; Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма; КонецЦикла; Движения.ОстаткиНоменклатуры.Записывать = Истина; КонецПроцедуры Документ Расходная: в шапке добавим два поля склад, получатель,создадим форму документа добавим в не код &НаКлиенте Процедура ПолучательПриИзменении(Элемент) Элементы.СписокНоменклатурыЦена.Видимость = ТипЗнч(Объект.Получатель) = Тип("СправочникСсылка.Контрагенты"); Элементы.СписокНоменклатурыСумма.Видимость = ТипЗнч(Объект.Получатель) = Тип("СправочникСсылка.Контрагенты"); КонецПроцедуры Документ РаспределениеЗатрат в шапке дата номер Сумма в таб части Накладные реквизит Накладная тип =ДокументСсылка.РасходнаяНакладная создадим форму документа в модуле объекта: код Процедура ОбработкаПроведения(Отказ, Режим) Движения.Продажи.Записывать = Истина; Движения.Продажи.Записать(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Продажи"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = Накладные; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Реализация", "Накладная"); Блокировка.Заблокировать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РаспределениеЗатратНакладные.Накладная КАК Накладная |ПОМЕСТИТЬ Накладные |ИЗ | Документ.РаспределениеЗатрат.Накладные КАК РаспределениеЗатратНакладные |ГДЕ | РаспределениеЗатратНакладные.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РаспределениеЗатратНакладные.Накладная |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПродажиОбороты.Номенклатура КАК Номенклатура, | ПродажиОбороты.Реализация КАК Реализация, | ПродажиОбороты.СебестоимостьОборот КАК СебестоимостьОборот, | ПродажиОбороты.Реализация.Дата |ИЗ | Накладные КАК Накладные | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты( | , | , | , | Реализация В | (ВЫБРАТЬ | Накладные.Накладная | ИЗ | Накладные КАК Накладные)) КАК ПродажиОбороты | ПО Накладные.Накладная = ПродажиОбороты.Реализация | |УПОРЯДОЧИТЬ ПО | Номенклатура |ИТОГИ | СУММА(СебестоимостьОборот) |ПО | ОБЩИЕ, | Номенклатура"; Запрос.Параметры.Вставить("Ссылка",Ссылка); Результат = Запрос.Выполнить(); ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВыборкаОбщийИтог.Следующий(); Распределено = 0; ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл КН = ВыборкаНоменклатура.СебестоимостьОборот/ВыборкаОбщийИтог.СебестоимостьОборот; ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл КР = ВыборкаДетальныеЗаписи.СебестоимостьОборот/ВыборкаНоменклатура.СебестоимостьОборот; Движение = Движения.Продажи.Добавить(); Движение.Период = ВыборкаДетальныеЗаписи.РеализацияДата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Реализация = ВыборкаДетальныеЗаписи.Реализация; Движение.Себестоимость = Сумма*КН*КР; Распределено = Распределено+Окр(Движение.Себестоимость,2); КонецЦикла; КонецЦикла; //КОПЕЙКИ ОТ ОКРУГЛЕНИЯ НА ПЕРВУЮ СТРОКУ ДВИЖЕНИЙ Если Распределено<>Сумма Тогда Стр = Движения.Продажи[0]; Движение = Движения.Продажи.Добавить(); Движение.Период = Стр.Период; Движение.Номенклатура = Стр.Номенклатура; Движение.Реализация = Стр.Реализация; Движение.Себестоимость =Распределено-Сумма; КонецЕсли; КонецПроцедуры Отчеты :Продажи Запрос отчета: ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.Реализация, ПродажиОбороты.КоличествоОборот КАК Количество, ПродажиОбороты.СебестоимостьОборот КАК Себестоимость, ПродажиОбороты.СуммаОборот КАК Продажа, ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот КАК Прибыль ИЗ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты Ресурсы выбираем все возможные Параметры НачалоПериода ,КонецПериода тип дата Группировки Номенклатура ,ДетальныеЗаписи выбранные поля:Номенклатура Реализация Количество Себестоимость Продажа Прибыль Прибыль в запросе это добавленная функция разность ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот Задача решена. | |
|
Всего комментариев: 3 | |
| |