13:42 Задача 1.1 оперативный учет | |
1) добавляем в справ номенклатура реквезит видНоменклатуры =ПеречислениеСсылка.ВидыНоменклатуры 2)фифо перв пришел перв ушел лифо послед пришел первым ушел 3) по партиям с переодичн в год поэтому создаем регистр сведений УчетнаяПолитика с реквизитом ресурс называем его как Значение с ссылкой на перечисление ПеречислениеСсылка.УчетнаяПолитика 4) в регистр ОстаткиНоменклатуры добавляем измерение Партия с ссылкой на =ДокументСсылка.ПриходнаяНакладная и ресурс стоимость 5)скопируем регистр ОстаткиНоменклатуры и сделаем его оборотным,переименуем его назовем Продажи измерения не меняем, ресурсы будут такие количество .себестоимость.СуммаПродаж 5)в модуле объекта приходной пишем след код : Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр ОстаткиНоменклатуры Приход Движения.ОстаткиНоменклатуры.Записывать = Истина; Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура; Движение.Партии = Ссылка; Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество; Движение.Стоимость = ТекСтрокаСписокНоменклатуры.Сумма; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры 6) в модуле объекта Расходной пишем след код: Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) СуммаПоДокументу=СписокНоменклатуры.Итог("Сумма"); КонецПроцедуры Процедура ОбработкаПроведения(Отказ, РежимПроведения) Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.Продажи.Записывать = Истина; //Очистим формируемые наборы, чтобы не было проблем с остатками при оперативном проведении Движения.ОстаткиНоменклатуры.Записать(); // Получим данные по учетной политике из периодического регистра сведений ТекущаяПолитика = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).Значение; Если ТекущаяПолитика = Перечисления.УчетнаяПолитика.ФИФО Тогда ПорядокПартий = "ВОЗР"; Иначе ПорядокПартий = "УБЫВ"; КонецЕсли; //Установим исключительную блокировку на те записи регистров, по которым осуществляется чтение, а потом - запись Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); Запрос = Новый запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма |ПОМЕСТИТЬ ДокТч |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДокТч.Номенклатура КАК Номенклатура, | ДокТч.Количество КАК Количество, | ДокТч.Сумма КАК Сумма, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток, | ОстаткиНоменклатурыОстатки.Партии КАК Партии |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | ДокТч.Номенклатура | ИЗ | ДокТч КАК ДокТч)) КАК ОстаткиНоменклатурыОстатки | ПО ДокТч.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | ОстаткиНоменклатурыОстатки.Партии.Дата "+ПорядокПартий+" |ИТОГИ | МАКСИМУМ(Количество), | МАКСИМУМ(Сумма), | СУММА(КоличествоОстаток), | СУММА(СтоимостьОстаток) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Ссылка",Ссылка); Запрос.УстановитьПараметр("МоментВремени",МоментВремени()); Результат = Запрос.Выполнить(); ВыборкаНоменклатуры = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ОбщаяСуммаПродаж = 0; Пока ВыборкаНоменклатуры.Следующий() Цикл Если ВыборкаНоменклатуры.Количество > ВыборкаНоменклатуры.КоличествоОстаток Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "По " + ВыборкаНоменклатуры.Номенклатура + " осталось только " + ВыборкаНоменклатуры.КоличествоОстаток + " необходимо " + ВыборкаНоменклатуры.Количество; Сообщение.Сообщить(); КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; ВыборкаПартий = ВыборкаНоменклатуры.Выбрать(); ОсталосьСписать = ВыборкаНоменклатуры.Количество; СуммаСписанногоПоТовару = 0; Пока ОсталосьСписать > 0 И ВыборкаПартий.Следующий() Цикл Если ВыборкаПартий.КоличествоОстаток = 0 Тогда Продолжить; КонецЕсли; КоличествоСписания = МИН(ОсталосьСписать, ВыборкаПартий.КоличествоОстаток); Если ВыборкаПартий.КоличествоОстаток > ОсталосьСписать Тогда СуммаСписания = ОсталосьСписать * ВыборкаПартий.СтоимостьОстаток / ВыборкаПартий.КоличествоОстаток; Иначе СуммаСписания = ВыборкаПартий.СтоимостьОстаток; КонецЕсли; Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаПартий.Номенклатура; Движение.Партии = ВыборкаПартий.Партии; Движение.Количество = КоличествоСписания; Движение.Стоимость = СуммаСписания; ОсталосьСписать = ОсталосьСписать - КоличествоСписания; СуммаСписанногоПоТовару = СуммаСписанногоПоТовару + Движение.Стоимость; КонецЦикла; //Сформируем записи в регистре "Продажи" Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаНоменклатуры.Номенклатура; Движение.Количество = ВыборкаНоменклатуры.Количество; Движение.Себестоимость = СуммаСписанногоПоТовару; Движение.СуммаПродаж = ВыборкаНоменклатуры.Сумма; КонецЦикла; КонецПроцедуры Переходим к отчетам 1) Остатки пишем запрос : ВЫБРАТЬ ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура, ОстаткиНоменклатурыОстатки.Партии, ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Количество, ОстаткиНоменклатурыОстатки.СтоимостьОстаток КАК Сумма ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки 2) выбираем ресурсы сумма ,количество 3) Параметры Период,День (День в поле Выражение втавляем КонецПериода(&КонецДня, "День") 4)группировки номенклатура партии 5) делаем видимым параметры в форме отчета Отчет Продажи 1) пишем такой запрос: ВЫБРАТЬ ПродажиОбороты.Номенклатура, СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество, СУММА(ПродажиОбороты.СебестоимостьОборот) КАК Себестоимость, СУММА(ПродажиОбороты.СуммаПродажОборот) КАК Продажа, СУММА(ПродажиОбороты.СуммаПродажОборот - ПродажиОбороты.СебестоимостьОборот) КАК Выручка ИЗ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура 2)группировки детальные записи 3) параметры НачалоПериода,КонецПериода выражение КонецПериода(&ОкончаниеПериода, "День") тип дата задача решена. | |
|
Всего комментариев: 0 | |