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