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