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