Untitled
unknown
plain_text
a year ago
13 kB
1
Indexable
Never
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) СуммаПоДокументу = СписокНоменклатуры.Итог("Сумма"); КонецПроцедуры Процедура ОбработкаПроведенияБУ (Отказ) // ДВИЖЕНИЯ ПО РЕГИСТРУ УПРАВЛЕНЧЕСКИЙ (СТАРАЯ МЕТОДИКА ПРОВЕДЕНИЯ) Движения.Управленческий.Записывать = Истина; Движения.Управленческий.Записать(); // Установка блокировки данных в регистре Управленческий по списку номенклатур табличной части и счету Товары Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий"); ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура, "Номенклатура"); Блокировка.Заблокировать(); // Запрос получения данных для формирования движений Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.ИнвНомер КАК ИнвНомер, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма |ПОМЕСТИТЬ ВТ_ТабЧасть |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.ИнвНомер, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура, | ИнвНомер |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ТабЧасть.Номенклатура КАК Номенклатура, | ВТ_ТабЧасть.ИнвНомер КАК ИнвНомер, | ВТ_ТабЧасть.Количество КАК КоличествоВДокументе, | ВТ_ТабЧасть.Сумма КАК СуммаВДокументе, | ЕСТЬNULL(УправленческийОстаткиПоНоменклатуре.СуммаОстаток, 0) КАК СуммаОстатокПоНоменклатуре, | ЕСТЬNULL(УправленческийОстаткиПоНоменклатуреИИнвНомеру.КоличествоОстаток, 0) КАК КоличествоОстатокПоИнвНомеру, | ВТ_ТабЧасть.Номенклатура.Представление КАК НоменклатураПредставление, | ВТ_ТабЧасть.ИнвНомер.Представление КАК ИнвНомерПредставление, | ЕСТЬNULL(УправленческийОстаткиПоНоменклатуре.КоличествоОстаток, 0) КАК КоличествоОстатокПоНоменклатуре |ИЗ | ВТ_ТабЧасть КАК ВТ_ТабЧасть | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки( | &МоментВремени, | Счет = &СчетТовары, | &СубконтоНоменклатура, | Субконто1 В | (ВЫБРАТЬ | А.Номенклатура | ИЗ | ВТ_ТабЧасть КАК А)) КАК УправленческийОстаткиПоНоменклатуре | ПО ВТ_ТабЧасть.Номенклатура = УправленческийОстаткиПоНоменклатуре.Субконто1 | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки( | &МоментВремени, | Счет = &СчетТовары, | &СубконтоНомИИнвНомер, | (Субконто1, Субконто2) В | (ВЫБРАТЬ | А.Номенклатура, | А.ИнвНомер | ИЗ | ВТ_ТабЧасть КАК А)) КАК УправленческийОстаткиПоНоменклатуреИИнвНомеру | ПО ВТ_ТабЧасть.Номенклатура = УправленческийОстаткиПоНоменклатуреИИнвНомеру.Субконто1 | И ВТ_ТабЧасть.ИнвНомер = УправленческийОстаткиПоНоменклатуреИИнвНомеру.Субконто2 |ИТОГИ | МАКСИМУМ(СуммаОстатокПоНоменклатуре), | МАКСИМУМ(КоличествоОстатокПоНоменклатуре) |ПО | Номенклатура"; СубконтоНоменклатура = Новый Массив(1); СубконтоНоменклатура[0] = ПланыВидовХарактеристик.ВидыСубконто.Номенклатура; СубконтоНомИИнвНомер = Новый Массив(2); СубконтоНомИИнвНомер[0] = ПланыВидовХарактеристик.ВидыСубконто.Номенклатура; СубконтоНомИИнвНомер[1] = ПланыВидовХарактеристик.ВидыСубконто.ИнвНомер; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.УстановитьПараметр("СчетТовары", ПланыСчетов.Управленческий.Товары); ЗАпрос.УстановитьПараметр("СубконтоНоменклатура", СубконтоНоменклатура); Запрос.УстановитьПараметр("СубконтоНомИИнвНомер", СубконтоНомИИнвНомер); // Обход результатов запроса ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Переменные для расчета себестоимости списания КоличественныйОстатокПоНоменклатуре = ВыборкаНоменклатура.КоличествоОстатокПоНоменклатуре; СуммовойОстатокПоНоменклатуре = ВыборкаНоменклатура.СуммаОстатокПоНоменклатуре; // Переменные для контроля списания всей стоимости, если будет списано всё количество номенклатуры КоличествоОсталосьСписать = ВыборкаНоменклатура.КоличествоОстатокПоНоменклатуре; СуммаОсталосьСписать = ВыборкаНоменклатура.СуммаОстатокПоНоменклатуре; Выборка = ВыборкаНоменклатура.Выбрать(); Пока Выборка.Следующий() Цикл // Контроль наличия номенклатуры и инвентарного номера Превышение = Выборка.КоличествоВДокументе - Выборка.КоличествоОстатокПоИнвНомеру; Если Превышение > 0 Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = СтрШаблон("Превышение остатка по инвентарному номеру %1 и номенклатуре %2 в количестве %3", Выборка.ИнвНомерПредставление, Выборка.НоменклатураПредставление, Превышение); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; // Проводка отражения списания товара Проводка = Движения.Управленческий.Добавить(); Проводка.Период = Дата; Проводка.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки; Проводка.СчетКт = ПланыСчетов.Управленческий.Товары; Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура; Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ИнвНомер] = Выборка.ИнвНомер; Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделения] = Подразделение; Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура; Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ИнвНомер] = Выборка.ИнвНомер; Проводка.КоличествоКт = Выборка.КоличествоВДокументе; Если Выборка.КоличествоВДокументе = КоличествоОсталосьСписать Тогда СуммаСписываем = СуммаОсталосьСписать; Иначе СуммаСписываем = Выборка.КоличествоВДокументе / КоличественныйОстатокПоНоменклатуре * СуммовойОстатокПоНоменклатуре; КонецЕсли; Проводка.Сумма = СуммаСписываем; КоличествоОсталосьСписать = КоличествоОсталосьСписать - Выборка.КоличествоВДокументе; СуммаОсталосьСписать = СуммаОсталосьСписать - Проводка.Сумма; // Проводка отражения продажи Проводка = Движения.Управленческий.Добавить(); Проводка.Период = Дата; Проводка.СчетДт = ПланыСчетов.Управленческий.Покупатели; Проводка.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки; Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура; Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ИнвНомер] = Выборка.ИнвНомер; Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Подразделения] = Подразделение; Проводка.Сумма = Выборка.СуммаВДокументе; КонецЦикла; КонецЦикла; КонецПроцедуры