15:22 Задача 1.10 | |
В этой задаче создаем дополнительный справочник Единицы измерения .с реквизитом Коэффициент- число,2 в Приходной и Расходной добавляем реквизит склад 2)В регистр накопления остатки добавляем измерение склад 3) создаем регистр Себестоимость тоже остатки измерения номенклатура , ресурсы сумма ,количество Добавим регистр сведений ЗначениеСвойствТоваров независим не периодич измерения Номенклатура , ВидыСвойств тип ПланВидовХарактеристикСсылка.СвойстваОбъектов ресурс Значение тип Характеристика.СвойстваОбъектов Документы 1) в приходной в модуле объекта: Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) СуммаПоДокументу = СписокНоменклатуры.Итог("Сумма"); КонецПроцедуры Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиНоменклатуры.Записывать = Истина; Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура; Движение.Склад = Склад; Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество; КонецЦикла; Движения.Себестоимость.Записывать = Истина; Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл Движение = Движения.Себестоимость.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура; Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество; Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма; КонецЦикла; КонецПроцедуры В расходной: в модуле объекта : Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) СуммаПоДокументу = СписокНоменклатуры.Итог("Сумма"); КонецПроцедуры Процедура ОбработкаПроведения(Отказ, Режим) Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.УстановитьЗначение("Склад", Склад); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); Блокировка.Заблокировать(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Себестоимость"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); Блокировка.Заблокировать(); Движения.Себестоимость.Очистить(); Движения.Себестоимость.Записать(); Движения.ОстаткиНоменклатуры.Очистить(); Движения.ОстаткиНоменклатуры.Записать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.ЕдиницаИзмерения, | СУММА(ЕСТЬNULL(РасходнаяНакладнаяСписокНоменклатуры.Количество, 0) * ВЫБОР | КОГДА РасходнаяНакладнаяСписокНоменклатуры.ЕдиницаИзмерения.Коэффициент = NULL | ТОГДА 1 | ИНАЧЕ РасходнаяНакладнаяСписокНоменклатуры.ЕдиницаИзмерения.Коэффициент | КОНЕЦ) КАК Количество, | МИНИМУМ(РасходнаяНакладнаяСписокНоменклатуры.НомерСтроки) КАК НомерСтроки |ПОМЕСТИТЬ Товары |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | И РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидТовара = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар) | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.ЕдиницаИзмерения | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Товары.Номенклатура, | Товары.Количество КАК Количество, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокСклад, | ЕСТЬNULL(СебестоимостьОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокСебестоимость, | ЕСТЬNULL(СебестоимостьОстатки.СуммаОстаток, 0) КАК СуммаОстатокСебстоимость, | Товары.НомерСтроки |ИЗ | Товары КАК Товары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &Момент, | Номенклатура В | (ВЫБРАТЬ | Товары.Номенклатура | ИЗ | Товары КАК Товары)) КАК ОстаткиНоменклатурыОстатки | ПО Товары.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Себестоимость.Остатки( | &Момент, | Номенклатура В | (ВЫБРАТЬ | Товары.Номенклатура | ИЗ | Товары КАК Товары)) КАК СебестоимостьОстатки | ПО Товары.Номенклатура = СебестоимостьОстатки.Номенклатура |ГДЕ | ОстаткиНоменклатурыОстатки.Склад = &Склад"; Запрос.УстановитьПараметр("Момент", МоментВремени()); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Склад", Склад); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Нехватка = ВыборкаДетальныеЗаписи.Количество - ВыборкаДетальныеЗаписи.КоличествоОстатокСклад; Если Нехватка > 0 Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает товара "+ВыборкаДетальныеЗаписи.Номенклатура+" в количестве "+Нехватка; Сообщение.Поле = "Список номенклатуры["+(ВыборкаДетальныеЗаписи.НомерСтроки - 1)+"].Количество"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; Если НЕ Отказ Тогда Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КоличествоДляСебстоимости = Движение.Количество; Движение = Движения.Себестоимость.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; Движение.Сумма = КоличествоДляСебстоимости * ВыборкаДетальныеЗаписи.СуммаОстатокСебстоимость / ВыборкаДетальныеЗаписи.КоличествоОстатокСебестоимость; КонецЕсли; КонецЦикла; Движения.ОстаткиНоменклатуры.Записать(); Движения.Себестоимость.Записать(); КонецПроцедуры Отчет: В ведомости по складу два регистра :по двум регистрам запрос левое соединение в связи по полю Номенклатура Отбор параметр склад, НачПериода Кон Периода, группировки производитель ,детальные записи сам запрос: ВЫБРАТЬ ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура, ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 0) КАК КолНачОст, ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 0) КАК КолКонОст, ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход, 0) КАК КолПриход, ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход, 0) КАК КолРасход, ВЫБОР КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоНачальныйОстаток, 0) = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаНачальныйОстаток, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоНачальныйОстаток, 0) КОНЕЦ КАК СуммаНачОст, ВЫБОР КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоКонечныйОстаток, 0) = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаКонечныйОстаток, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоКонечныйОстаток, 0) КОНЕЦ КАК СуммаКонОст, ВЫБОР КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоПриход, 0) = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаПриход, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоПриход, 0) КОНЕЦ КАК СуммаПриход, ВЫБОР КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоРасход, 0) = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаРасход, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоРасход, 0) КОНЕЦ КАК СуммаРасход, ОстаткиНоменклатурыОстаткиИОбороты.Склад ИЗ РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты КАК ОстаткиНоменклатурыОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Себестоимость.ОстаткиИОбороты КАК СебестоимостьОстаткиИОбороты ПО ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура = СебестоимостьОстаткиИОбороты.Номенклатура {ХАРАКТЕРИСТИКИ ТИП(Справочник.Номенклатура) ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов ПОЛЕКЛЮЧА Ссылка ПОЛЕИМЕНИ Наименование ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначениеСвойствТоваров ПОЛЕОБЪЕКТА Номенклатура ПОЛЕВИДА ВидыСвойств ПОЛЕЗНАЧЕНИЯ Значение } | |
|
Всего комментариев: 0 | |