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