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