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