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