#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
УстановитьУсловноеОформление();
УчетПрослеживаемыхТоваровЛокализация.УстановитьЗаголовокНомерГТД(Элементы,
Элементы.РаспределениеОтклоненийНомерГТД.Имя);
Параметры.Свойство("Распоряжение", Распоряжение);
ЗаполнитьДанныеДляРаспределенияОтклонений();
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Запись_СчетФактураВыданный"
И Параметр.Свойство("ФормаВладелец")
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыРаспределениеОтклонений
&НаКлиенте
Процедура РаспределениеОтклоненийКоличествоРаспределеноПриИзменении(Элемент)
РаспределениеОтклоненийПриИзменении("Количество");
КонецПроцедуры
&НаКлиенте
Процедура РаспределениеОтклоненийСуммаРаспределеноПриИзменении(Элемент)
РаспределениеОтклоненийПриИзменении("Сумма");
КонецПроцедуры
&НаКлиенте
Процедура РаспределениеОтклоненийСуммаНДСРаспределеноПриИзменении(Элемент)
РаспределениеОтклоненийПриИзменении("СуммаНДС");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОформитьСчетФактуру(Команда)
ОчиститьСообщения();
РезультатПроверки = Новый Структура;
Если РасхожденияРаспределены(РезультатПроверки) Тогда
Если Не РезультатПроверки.ВыбраныСтроки Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(СтрШаблон(НСтр("ru = 'Не выбраны строки.'")));
Иначе
ОформитьСчетФактуруЗавершение(КодВозвратаДиалога.ОК, Новый Структура);
КонецЕсли;
Иначе
ТекстВопроса = НСтр("ru = 'Распределены не все расхождения.
|Продолжить оформление корректировочного счета-фактуры?'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
Обработчик = Новый ОписаниеОповещения("ОформитьСчетФактуруЗавершение", ЭтотОбъект, Новый Структура);
ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьАвтоматически(Команда)
РаспределитьРасхожденияНаСервере();
РазвернутьСтрокиРасхождений();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспределениеОтклоненийКоличествоРаспределено.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспределениеОтклоненийСуммаРаспределено.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспределениеОтклонений.СчетФактура");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РаспределениеОтклоненийВыбран.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РаспределениеОтклонений.СчетФактура");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеДляРаспределенияОтклонений()
ДЗРаспределениеОтклонений = РеквизитФормыВЗначение("РаспределениеОтклонений");
ДЗРаспределениеОтклонений.Строки.Очистить();
ТекстыЗапроса = Новый Массив();
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
" Распоряжение = &Распоряжение
| И Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение, Номенклатура, Характеристика, КодСтроки";
ПараметрыФормированияТаблицы.Показатели = "Оформлено, ОформленоПоВозвратам, Отгружено, СписаноДоППС, ОприходованоДоППС, Скорректировано, ОформленоСчетовФактур";
ПараметрыФормированияТаблицы.Ресурсы = "Количество, Сумма, СуммаНДСРегл";
ПараметрыФормированияТаблицы.ИмяВременнойТаблицы = "втРаспоряженияНаОтгрузкуОборотыРазвернутая";
втРаспоряженияНаОтгрузкуОборотыРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
ТекстыЗапроса.Добавить(втРаспоряженияНаОтгрузкуОборотыРазвернутая);
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеУчета.Распоряжение КАК Распоряжение,
| ДанныеУчета.Номенклатура КАК Номенклатура,
| ДанныеУчета.Характеристика КАК Характеристика,
| ДанныеУчета.КодСтроки КАК КодСтроки,
| СУММА(ДанныеУчета.ОформленоКоличествоОборот + ДанныеУчета.СкорректированоКоличествоОборот) КАК КоличествоРеализовано,
| СУММА(ДанныеУчета.ОформленоСуммаОборот + ДанныеУчета.СкорректированоСуммаОборот) КАК СуммаРеализовано,
| СУММА(ДанныеУчета.ОформленоСуммаНДСРеглОборот + ДанныеУчета.СкорректированоСуммаНДСРеглОборот) КАК СуммаНДСРеализовано,
| СУММА(ДанныеУчета.ОформленоКоличествоОборот) КАК КоличествоРеализованоБезКорректировки,
| СУММА(ДанныеУчета.ОформленоСуммаОборот) КАК СуммаРеализованоБезКорректировки,
| СУММА(ДанныеУчета.ОформленоСуммаНДСРеглОборот) КАК СуммаНДСРеализованоБезКорректировки,
| СУММА(ДанныеУчета.ОтгруженоКоличествоОборот - ДанныеУчета.ОформленоПоВозвратамКоличествоОборот - ДанныеУчета.СписаноДоППСКоличествоОборот + ДанныеУчета.ОприходованоДоППСКоличествоОборот) КАК КоличествоОтгружено,
| СУММА(ДанныеУчета.ОтгруженоСуммаОборот - ДанныеУчета.ОформленоПоВозвратамСуммаОборот - ДанныеУчета.СписаноДоППССуммаОборот + ДанныеУчета.ОприходованоДоППССуммаОборот) КАК СуммаОтгружено,
| СУММА(ДанныеУчета.ОформленоСчетовФактурКоличествоОборот) КАК КоличествоОформлено,
| СУММА(ДанныеУчета.ОформленоСчетовФактурСуммаОборот) КАК СуммаОформлено,
| СУММА(ДанныеУчета.ОформленоСчетовФактурСуммаНДСРеглОборот) КАК СуммаНДСОформлено
|ПОМЕСТИТЬ втТаблицаРасхождений
|ИЗ
| втРаспоряженияНаОтгрузкуОборотыРазвернутая КАК ДанныеУчета
|
|СГРУППИРОВАТЬ ПО
| ДанныеУчета.Распоряжение,
| ДанныеУчета.Номенклатура,
| ДанныеУчета.Характеристика,
| ДанныеУчета.КодСтроки
|
|ИМЕЮЩИЕ
| (СУММА(ДанныеУчета.ОформленоСчетовФактурКоличествоОборот) <> 0
| ИЛИ ДанныеУчета.КодСтроки = 0)
| И (ВЫБОР
| КОГДА СУММА(ДанныеУчета.ОформленоКоличествоОборот) = 0
| И СУММА(ДанныеУчета.СкорректированоКоличествоОборот) = 0
| ТОГДА СУММА(ДанныеУчета.ОтгруженоКоличествоОборот - ДанныеУчета.ОформленоПоВозвратамКоличествоОборот - ДанныеУчета.СписаноДоППСКоличествоОборот + ДанныеУчета.ОприходованоДоППСКоличествоОборот - ДанныеУчета.ОформленоСчетовФактурКоличествоОборот)
| ИНАЧЕ
| СУММА(ДанныеУчета.ОформленоКоличествоОборот + ДанныеУчета.СкорректированоКоличествоОборот - ДанныеУчета.ОформленоСчетовФактурКоличествоОборот)
| КОНЕЦ <> 0
| ИЛИ ВЫБОР
| КОГДА СУММА(ДанныеУчета.ОформленоСуммаОборот) = 0
| И СУММА(ДанныеУчета.СкорректированоСуммаОборот) = 0
| ТОГДА СУММА(ДанныеУчета.ОтгруженоСуммаОборот - ДанныеУчета.ОформленоПоВозвратамСуммаОборот - ДанныеУчета.СписаноДоППССуммаОборот + ДанныеУчета.ОприходованоДоППССуммаОборот - ДанныеУчета.ОформленоСчетовФактурСуммаОборот)
| ИНАЧЕ
| СУММА(ДанныеУчета.ОформленоСуммаОборот + ДанныеУчета.СкорректированоСуммаОборот - ДанныеУчета.ОформленоСчетовФактурСуммаОборот)
| КОНЕЦ <> 0
| ИЛИ ВЫБОР
| КОГДА СУММА(ДанныеУчета.ОформленоСуммаНДСРеглОборот) = 0
| И СУММА(ДанныеУчета.ОформленоСчетовФактурКоличествоОборот) = 0
| ТОГДА 0
| КОГДА СУММА(ДанныеУчета.ОформленоСуммаНДСРеглОборот) = 0
| И СУММА(ДанныеУчета.СкорректированоСуммаНДСРеглОборот) = 0
| И СУММА(ДанныеУчета.ОтгруженоКоличествоОборот - ДанныеУчета.ОформленоПоВозвратамКоличествоОборот - ДанныеУчета.СписаноДоППСКоличествоОборот + ДанныеУчета.ОприходованоДоППСКоличествоОборот - ДанныеУчета.ОформленоСчетовФактурКоличествоОборот) = 0
| ТОГДА -СУММА(ДанныеУчета.ОформленоСчетовФактурСуммаНДСРеглОборот)
| КОГДА СУММА(ДанныеУчета.ОформленоСуммаНДСРеглОборот) = 0
| ТОГДА СУММА(ДанныеУчета.ОтгруженоКоличествоОборот - ДанныеУчета.ОформленоПоВозвратамКоличествоОборот + ДанныеУчета.СкорректированоКоличествоОборот - ДанныеУчета.СписаноДоППСКоличествоОборот + ДанныеУчета.ОприходованоДоППСКоличествоОборот - ДанныеУчета.ОформленоСчетовФактурКоличествоОборот) / СУММА(ДанныеУчета.ОформленоСчетовФактурКоличествоОборот) * СУММА(ДанныеУчета.ОформленоСчетовФактурСуммаНДСРеглОборот)
| ИНАЧЕ
| СУММА(ДанныеУчета.ОформленоСуммаНДСРеглОборот + ДанныеУчета.СкорректированоСуммаНДСРеглОборот - ДанныеУчета.ОформленоСчетовФактурСуммаНДСРеглОборот)
| КОНЕЦ <> 0)
|;
|
|
|ВЫБРАТЬ
| ТаблицаРасхождений.Номенклатура КАК Номенклатура,
| ТаблицаРасхождений.Характеристика КАК Характеристика,
| ТаблицаРасхождений.КодСтроки КАК КодСтроки,
| ТаблицаРасхождений.КоличествоРеализовано КАК КоличествоРеализовано,
| ТаблицаРасхождений.СуммаРеализовано КАК СуммаРеализовано,
| ТаблицаРасхождений.СуммаНДСРеализовано КАК СуммаНДСРеализовано,
| ТаблицаРасхождений.КоличествоРеализованоБезКорректировки КАК КоличествоРеализованоБезКорректировки,
| ТаблицаРасхождений.СуммаРеализованоБезКорректировки КАК СуммаРеализованоБезКорректировки,
| ТаблицаРасхождений.СуммаНДСРеализованоБезКорректировки КАК СуммаНДСРеализованоБезКорректировки,
| ТаблицаРасхождений.КоличествоОтгружено КАК КоличествоОтгружено,
| ТаблицаРасхождений.СуммаОтгружено КАК СуммаОтгружено,
| ТаблицаРасхождений.КоличествоОформлено КАК КоличествоОформлено,
| ТаблицаРасхождений.СуммаОформлено КАК СуммаОформлено,
| ТаблицаРасхождений.СуммаНДСОформлено КАК СуммаНДСОформлено
|ИЗ
| втТаблицаРасхождений КАК ТаблицаРасхождений
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика";
ТекстыЗапроса.Добавить(ТекстЗапроса);
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
" Распоряжение = &Распоряжение
| И ((Номенклатура, Характеристика, КодСтроки) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| втТаблицаРасхождений.Номенклатура,
| втТаблицаРасхождений.Характеристика,
| втТаблицаРасхождений.КодСтроки
| ИЗ
| втТаблицаРасхождений)
| ИЛИ (Номенклатура, Характеристика) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| втТаблицаРасхождений.Номенклатура,
| втТаблицаРасхождений.Характеристика
| ИЗ
| втТаблицаРасхождений
| ГДЕ
| втТаблицаРасхождений.КодСтроки = 0))";
ПараметрыФормированияТаблицы.Периодичность = "Регистратор";
ПараметрыФормированияТаблицы.Группировка = "Регистратор, Период, Номенклатура, Характеристика, КодСтроки";
ПараметрыФормированияТаблицы.Показатели = "Оформлено, ОформленоПоВозвратам, Отгружено, СписаноДоППС, ОприходованоДоППС, Скорректировано, ОформленоСчетовФактур";
ПараметрыФормированияТаблицы.Ресурсы = "Количество, Сумма, СуммаНДСРегл";
ПараметрыФормированияТаблицы.ИмяВременнойТаблицы = "втРаспоряженияНаОтгрузкуСчетаФактуры";
втРаспоряженияНаОтгрузкуСчетаФактуры =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
ТекстыЗапроса.Добавить(втРаспоряженияНаОтгрузкуСчетаФактуры);
ТекстЗапроса =
"ВЫБРАТЬ
| МАКСИМУМ(ДвиженияСчетовФактур.Период) КАК Период,
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ДвиженияСчетовФактур.Регистратор КАК Документ.СчетФактураВыданный).Исправление
| ТОГДА ВЫРАЗИТЬ(ДвиженияСчетовФактур.Регистратор КАК Документ.СчетФактураВыданный).СчетФактураОснование
| ИНАЧЕ
| ДвиженияСчетовФактур.Регистратор
| КОНЕЦ КАК СчетФактура,
| ДвиженияСчетовФактур.Номенклатура КАК Номенклатура,
| ДвиженияСчетовФактур.Характеристика КАК Характеристика,
| ДвиженияСчетовФактур.КодСтроки КАК КодСтроки
|ПОМЕСТИТЬ втКрайниеПериодыСчетовФактурОформленныхПоРаспоряжению
|ИЗ
| втРаспоряженияНаОтгрузкуСчетаФактуры КАК ДвиженияСчетовФактур
|ГДЕ
| ((ДвиженияСчетовФактур.Номенклатура, ДвиженияСчетовФактур.Характеристика, ДвиженияСчетовФактур.КодСтроки) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| втТаблицаРасхождений.Номенклатура КАК Номенклатура,
| втТаблицаРасхождений.Характеристика КАК Характеристика,
| втТаблицаРасхождений.КодСтроки КАК КодСтроки
| ИЗ
| втТаблицаРасхождений)
| ИЛИ (ДвиженияСчетовФактур.Номенклатура, ДвиженияСчетовФактур.Характеристика) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| втТаблицаРасхождений.Номенклатура КАК Номенклатура,
| втТаблицаРасхождений.Характеристика КАК Характеристика
| ИЗ
| втТаблицаРасхождений
| ГДЕ
| втТаблицаРасхождений.КодСтроки = 0))
| И ТИПЗНАЧЕНИЯ(ДвиженияСчетовФактур.Регистратор) = ТИП(Документ.СчетФактураВыданный)
|
|СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ДвиженияСчетовФактур.Регистратор КАК Документ.СчетФактураВыданный).Исправление
| ТОГДА ВЫРАЗИТЬ(ДвиженияСчетовФактур.Регистратор КАК Документ.СчетФактураВыданный).СчетФактураОснование
| ИНАЧЕ
| ДвиженияСчетовФактур.Регистратор
| КОНЕЦ,
| ДвиженияСчетовФактур.Номенклатура,
| ДвиженияСчетовФактур.Характеристика,
| ДвиженияСчетовФактур.КодСтроки
|;
|
|
|ВЫБРАТЬ
| ДвиженияСчетовФактур.Регистратор КАК СчетФактура,
| ДвиженияСчетовФактур.Номенклатура КАК Номенклатура,
| ДвиженияСчетовФактур.Характеристика КАК Характеристика,
| ДвиженияСчетовФактур.КодСтроки КАК КодСтроки
|ПОМЕСТИТЬ втСчетаФактурыОформленныеПоРаспоряжению
|ИЗ
| втКрайниеПериодыСчетовФактурОформленныхПоРаспоряжению КАК втКрайниеПериоды
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втРаспоряженияНаОтгрузкуСчетаФактуры КАК ДвиженияСчетовФактур
| ПО втКрайниеПериоды.Период = ДвиженияСчетовФактур.Период
| И втКрайниеПериоды.Номенклатура = ДвиженияСчетовФактур.Номенклатура
| И втКрайниеПериоды.Характеристика = ДвиженияСчетовФактур.Характеристика
| И втКрайниеПериоды.КодСтроки = ДвиженияСчетовФактур.КодСтроки
| И втКрайниеПериоды.СчетФактура = ВЫБОР
| КОГДА ВЫРАЗИТЬ(ДвиженияСчетовФактур.Регистратор КАК Документ.СчетФактураВыданный).Исправление
| ТОГДА ВЫРАЗИТЬ(ДвиженияСчетовФактур.Регистратор КАК Документ.СчетФактураВыданный).СчетФактураОснование
| ИНАЧЕ
| ДвиженияСчетовФактур.Регистратор
| КОНЕЦ
|;
|
|
|ВЫБРАТЬ
| ВложенныйЗапрос.СчетФактура КАК СчетФактура,
| ВложенныйЗапрос.Период КАК Период,
| ВложенныйЗапрос.Корректировочный КАК Корректировочный,
| ВложенныйЗапрос.Распоряжение КАК Распоряжение,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВложенныйЗапрос.КодСтроки КАК КодСтроки,
| ВложенныйЗапрос.ИсходныйСчетФактура КАК ИсходныйСчетФактура,
| ВложенныйЗапрос.НомерГТД КАК НомерГТД,
| ВложенныйЗапрос.СтавкаНДС КАК СтавкаНДС
|ПОМЕСТИТЬ втЦепочкиСчетовФактурОформленныхПоРаспоряжению
|ИЗ
| (ВЫБРАТЬ
| СчетаФактурыТовары.Ссылка КАК СчетФактура,
| СчетаФактурыДокументы.Дата КАК Период,
| СчетаФактурыДокументы.Корректировочный КАК Корректировочный,
| СчетаФактурыТовары.Распоряжение КАК Распоряжение,
| СчетаФактурыТовары.Номенклатура КАК Номенклатура,
| СчетаФактурыТовары.Характеристика КАК Характеристика,
| СчетаФактурыТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СчетаФактурыТовары.КодСтроки КАК КодСтроки,
| ВЫБОР
| КОГДА СчетаФактурыДокументы.Корректировочный
| ИЛИ СчетаФактурыДокументы.Исправление
| ТОГДА СчетаФактурыТовары.ИсходныйСчетФактура
| ИНАЧЕ
| СчетаФактурыТовары.Ссылка
| КОНЕЦ КАК ИсходныйСчетФактура,
| СчетаФактурыТовары.НомерГТД КАК НомерГТД,
| СчетаФактурыТовары.СтавкаНДС КАК СтавкаНДС
| ИЗ
| Документ.СчетФактураВыданный.Товары КАК СчетаФактурыТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втСчетаФактурыОформленныеПоРаспоряжению КАК СчетаФактурыОформленныеПоРаспоряжению
| ПО СчетаФактурыТовары.Ссылка = СчетаФактурыОформленныеПоРаспоряжению.СчетФактура
| И СчетаФактурыТовары.Номенклатура = СчетаФактурыОформленныеПоРаспоряжению.Номенклатура
| И СчетаФактурыТовары.Характеристика = СчетаФактурыОформленныеПоРаспоряжению.Характеристика
| И (СчетаФактурыТовары.КодСтроки = СчетаФактурыОформленныеПоРаспоряжению.КодСтроки
| ИЛИ СчетаФактурыОформленныеПоРаспоряжению.КодСтроки = 0)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СчетаФактурыДокументы
| ПО СчетаФактурыТовары.Ссылка = СчетаФактурыДокументы.Ссылка
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| СчетаФактурыТовары.Ссылка,
| СчетаФактурыДокументы.Дата,
| СчетаФактурыДокументы.Корректировочный,
| СчетаФактурыТовары.Распоряжение,
| СчетаФактурыТовары.Номенклатура,
| СчетаФактурыТовары.Характеристика,
| СчетаФактурыТовары.ЕдиницаИзмерения,
| СчетаФактурыТовары.КодСтроки,
| ВЫБОР
| КОГДА СчетаФактурыДокументы.Корректировочный
| ИЛИ СчетаФактурыДокументы.Исправление
| ТОГДА СчетаФактурыТовары.ИсходныйСчетФактура
| ИНАЧЕ
| СчетаФактурыТовары.Ссылка
| КОНЕЦ,
| СчетаФактурыТовары.НомерГТД,
| СчетаФактурыТовары.СтавкаНДС
| ИЗ
| втСчетаФактурыОформленныеПоРаспоряжению КАК СчетаФактурыОформленныеПоРаспоряжению
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный.Товары КАК СчетаФактурыТовары
| ПО СчетаФактурыОформленныеПоРаспоряжению.СчетФактура = СчетаФактурыТовары.ИсходныйСчетФактура
| И СчетаФактурыОформленныеПоРаспоряжению.СчетФактура <> ЗНАЧЕНИЕ(Документ.СчетФактураВыданный.ПустаяСсылка)
| И СчетаФактурыОформленныеПоРаспоряжению.СчетФактура <> СчетаФактурыТовары.Ссылка
| И СчетаФактурыОформленныеПоРаспоряжению.Номенклатура = СчетаФактурыТовары.Номенклатура
| И СчетаФактурыОформленныеПоРаспоряжению.Характеристика = СчетаФактурыТовары.Характеристика
| И СчетаФактурыОформленныеПоРаспоряжению.КодСтроки = СчетаФактурыТовары.КодСтроки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СчетаФактурыДокументы
| ПО СчетаФактурыТовары.Ссылка = СчетаФактурыДокументы.Ссылка
| И СчетаФактурыДокументы.Проведен
| И СчетаФактурыДокументы.Исправление) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.СчетФактура,
| ВложенныйЗапрос.Период,
| ВложенныйЗапрос.Корректировочный,
| ВложенныйЗапрос.Распоряжение,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.ЕдиницаИзмерения,
| ВложенныйЗапрос.КодСтроки,
| ВложенныйЗапрос.СтавкаНДС,
| ВложенныйЗапрос.ИсходныйСчетФактура,
| ВложенныйЗапрос.НомерГТД
|;
|
|
|ВЫБРАТЬ
| МАКСИМУМ(ЦепочкиСчетовФактур.Период) КАК Период,
| ЦепочкиСчетовФактур.Корректировочный КАК Корректировочный,
| ЦепочкиСчетовФактур.Распоряжение КАК Распоряжение,
| ЦепочкиСчетовФактур.Номенклатура КАК Номенклатура,
| ЦепочкиСчетовФактур.Характеристика КАК Характеристика,
| ЦепочкиСчетовФактур.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ЦепочкиСчетовФактур.КодСтроки КАК КодСтроки,
| ЦепочкиСчетовФактур.ИсходныйСчетФактура КАК ИсходныйСчетФактура,
| ЦепочкиСчетовФактур.НомерГТД КАК НомерГТД,
| ЦепочкиСчетовФактур.СтавкаНДС КАК СтавкаНДС
|ПОМЕСТИТЬ втКрайниеПериодыЦепочекСчетовФактурОформленныхПоРаспоряжению
|ИЗ
| втЦепочкиСчетовФактурОформленныхПоРаспоряжению КАК ЦепочкиСчетовФактур
|
|СГРУППИРОВАТЬ ПО
| ЦепочкиСчетовФактур.Корректировочный,
| ЦепочкиСчетовФактур.Распоряжение,
| ЦепочкиСчетовФактур.Номенклатура,
| ЦепочкиСчетовФактур.Характеристика,
| ЦепочкиСчетовФактур.ЕдиницаИзмерения,
| ЦепочкиСчетовФактур.КодСтроки,
| ЦепочкиСчетовФактур.ИсходныйСчетФактура,
| ЦепочкиСчетовФактур.НомерГТД,
| ЦепочкиСчетовФактур.СтавкаНДС
|;
|
|
|ВЫБРАТЬ
| ЦепочкиСчетовФактур.СчетФактура КАК СчетФактура,
| ЦепочкиСчетовФактур.Период КАК Период,
| ЦепочкиСчетовФактур.Распоряжение КАК Распоряжение,
| ЦепочкиСчетовФактур.Номенклатура КАК Номенклатура,
| ЦепочкиСчетовФактур.Характеристика КАК Характеристика,
| ЦепочкиСчетовФактур.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ЦепочкиСчетовФактур.КодСтроки КАК КодСтроки,
| ЦепочкиСчетовФактур.ИсходныйСчетФактура КАК ИсходныйСчетФактура,
| СчетаФактурыТовары.НомерСтрокиПриПечати КАК НомерСтрокиПриПечати,
| ЦепочкиСчетовФактур.НомерГТД КАК НомерГТД,
| СчетаФактурыТовары.Количество КАК КоличествоДоступно,
| СчетаФактурыТовары.КоличествоПоРНПТ КАК КоличествоПоРНПТДоступно,
| ЦепочкиСчетовФактур.СтавкаНДС КАК СтавкаНДС,
| СчетаФактурыТовары.Сумма КАК СуммаДоступно,
| СчетаФактурыТовары.СуммаНДС КАК СуммаНДСДоступно,
| СчетаФактурыТовары.СуммаБезНДСВал КАК СуммаБезНДСВалДоступно
|ИЗ
| втЦепочкиСчетовФактурОформленныхПоРаспоряжению КАК ЦепочкиСчетовФактур
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКрайниеПериодыЦепочекСчетовФактурОформленныхПоРаспоряжению КАК КрайниеПериоды
| ПО ЦепочкиСчетовФактур.Период = КрайниеПериоды.Период
| И ЦепочкиСчетовФактур.Распоряжение = КрайниеПериоды.Распоряжение
| И ЦепочкиСчетовФактур.Номенклатура = КрайниеПериоды.Номенклатура
| И ЦепочкиСчетовФактур.Характеристика = КрайниеПериоды.Характеристика
| И ЦепочкиСчетовФактур.ЕдиницаИзмерения = КрайниеПериоды.ЕдиницаИзмерения
| И ЦепочкиСчетовФактур.КодСтроки = КрайниеПериоды.КодСтроки
| И ЦепочкиСчетовФактур.ИсходныйСчетФактура = КрайниеПериоды.ИсходныйСчетФактура
| И ЦепочкиСчетовФактур.НомерГТД = КрайниеПериоды.НомерГТД
| И ЦепочкиСчетовФактур.СтавкаНДС = КрайниеПериоды.СтавкаНДС
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный.Товары КАК СчетаФактурыТовары
| ПО ЦепочкиСчетовФактур.СчетФактура = СчетаФактурыТовары.Ссылка
| И ЦепочкиСчетовФактур.Распоряжение = СчетаФактурыТовары.Распоряжение
| И ЦепочкиСчетовФактур.Номенклатура = СчетаФактурыТовары.Номенклатура
| И ЦепочкиСчетовФактур.Характеристика = СчетаФактурыТовары.Характеристика
| И ЦепочкиСчетовФактур.ЕдиницаИзмерения = СчетаФактурыТовары.ЕдиницаИзмерения
| И ЦепочкиСчетовФактур.КодСтроки = СчетаФактурыТовары.КодСтроки
| И ЦепочкиСчетовФактур.НомерГТД = СчетаФактурыТовары.НомерГТД
| И ЦепочкиСчетовФактур.СтавкаНДС = СчетаФактурыТовары.СтавкаНДС";
ТекстыЗапроса.Добавить(ТекстЗапроса);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = СтрСоединить(ТекстыЗапроса, НакладныеСервер.ТекстРазделителяЗапросов());
Запрос.УстановитьПараметр("Распоряжение", Распоряжение);
РезультатЗапроса = Запрос.ВыполнитьПакет();
СчетаФактурыПоРаспоряжению = РезультатЗапроса[8].Выгрузить();
СчетаФактурыПоРаспоряжению.Сортировать("СчетФактура Убыв");
СчетаФактурыПоРаспоряжениюБезКодаСтроки = СчетаФактурыПоРаспоряжению.Скопировать();
СчетаФактурыПоРаспоряжениюБезКодаСтроки.Свернуть("СчетФактура, Распоряжение, Номенклатура, Характеристика, ЕдиницаИзмерения, ИсходныйСчетФактура, НомерСтрокиПриПечати, НомерГТД, СтавкаНДС",
"КоличествоДоступно, КоличествоПоРНПТДоступно, СуммаДоступно, СуммаНДСДоступно, СуммаБезНДСВалДоступно");
ДанныеРасхождений = РезультатЗапроса[2].Выбрать();
СтруктураПоиска = Новый Структура("Номенклатура, Характеристика, КодСтроки");
СтруктураПоискаБезКодаСтроки = Новый Структура("Номенклатура, Характеристика");
Пока ДанныеРасхождений.Следующий() Цикл
Если ДанныеРасхождений.КоличествоРеализованоБезКорректировки <> 0
Или ДанныеРасхождений.КоличествоРеализовано <> 0 Тогда
КоличествоРаспределено = ДанныеРасхождений.КоличествоРеализовано - ДанныеРасхождений.КоличествоОформлено;
СуммаРаспределено = ДанныеРасхождений.СуммаРеализовано - ДанныеРасхождений.СуммаОформлено;
СуммаНДСРаспределено = ДанныеРасхождений.СуммаНДСРеализовано - ДанныеРасхождений.СуммаНДСОформлено;
Иначе
КоличествоРаспределено = ДанныеРасхождений.КоличествоОтгружено - ДанныеРасхождений.КоличествоОформлено;
СуммаРаспределено = ДанныеРасхождений.СуммаОтгружено - ДанныеРасхождений.СуммаОформлено;
Если ДанныеРасхождений.КоличествоОформлено = 0 Тогда
СуммаНДСРаспределено = 0;
ИначеЕсли ДанныеРасхождений.КоличествоОтгружено = 0 Тогда
СуммаНДСРаспределено = -ДанныеРасхождений.СуммаНДСОформлено;
Иначе
СуммаНДСРаспределено = КоличествоРаспределено / ДанныеРасхождений.КоличествоОформлено * ДанныеРасхождений.СуммаНДСОформлено;
КонецЕсли;
КонецЕсли;
Если КоличествоРаспределено <> 0
Или СуммаРаспределено <> 0
Или СуммаНДСРаспределено <> 0 Тогда
НоваяСтрокаНоменклатуры = ДЗРаспределениеОтклонений.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаНоменклатуры, ДанныеРасхождений, "Номенклатура, Характеристика, КодСтроки");
НоваяСтрокаНоменклатуры.КоличествоРаспределено = КоличествоРаспределено;
НоваяСтрокаНоменклатуры.СуммаРаспределено = СуммаРаспределено;
НоваяСтрокаНоменклатуры.СуммаНДСРаспределено = СуммаНДСРаспределено;
НоваяСтрокаНоменклатуры.КоличествоКРаспределению = КоличествоРаспределено;
НоваяСтрокаНоменклатуры.СуммаКРаспределению = СуммаРаспределено;
НоваяСтрокаНоменклатуры.СуммаНДСКРаспределению = СуммаНДСРаспределено;
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ДанныеРасхождений, "Номенклатура, Характеристика, КодСтроки");
ДанныеИсходныхСчетовФактур = СчетаФактурыПоРаспоряжению.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаСФ Из ДанныеИсходныхСчетовФактур Цикл
НоваяСтрокаСФ = НоваяСтрокаНоменклатуры.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаСФ, ДанныеРасхождений, "Номенклатура, Характеристика, КодСтроки");
ЗаполнитьЗначенияСвойств(НоваяСтрокаСФ, СтрокаСФ, "Распоряжение, СчетФактура, ЕдиницаИзмерения, ИсходныйСчетФактура, НомерСтрокиПриПечати, СтавкаНДС, НомерГТД, КоличествоДоступно, КоличествоПоРНПТДоступно, СуммаДоступно, СуммаНДСДоступно");
НоваяСтрокаСФ.СуммаВалДоступно = СтрокаСФ.СуммаБезНДСВалДоступно;
КонецЦикла;
Если ДанныеИсходныхСчетовФактур.Количество() = 0 Тогда
ЗаполнитьЗначенияСвойств(СтруктураПоискаБезКодаСтроки, ДанныеРасхождений, "Номенклатура, Характеристика");
ДанныеИсходныхСчетовФактур = СчетаФактурыПоРаспоряжениюБезКодаСтроки.НайтиСтроки(СтруктураПоискаБезКодаСтроки);
Для Каждого СтрокаСФ Из ДанныеИсходныхСчетовФактур Цикл
НоваяСтрокаСФ = НоваяСтрокаНоменклатуры.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаСФ, ДанныеРасхождений, "Номенклатура, Характеристика, КодСтроки");
ЗаполнитьЗначенияСвойств(НоваяСтрокаСФ, СтрокаСФ, "Распоряжение, СчетФактура, ЕдиницаИзмерения, ИсходныйСчетФактура, НомерСтрокиПриПечати, СтавкаНДС, НомерГТД, КоличествоДоступно, КоличествоПоРНПТДоступно, СуммаДоступно, СуммаНДСДоступно");
НоваяСтрокаСФ.СуммаВалДоступно = СтрокаСФ.СуммаБезНДСВалДоступно;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗначениеВРеквизитФормы(ДЗРаспределениеОтклонений, "РаспределениеОтклонений");
КонецПроцедуры
&НаСервере
Функция РасхожденияРаспределены(РезультатПроверки)
ЕстьОшибкиРаспределения = Ложь;
ВыбраныСтроки = Ложь;
ДЗРаспределениеОтклонений = РеквизитФормыВЗначение("РаспределениеОтклонений");
Для Каждого СтрокаНоменклатуры Из ДЗРаспределениеОтклонений.Строки Цикл
Если СтрокаНоменклатуры.Выбран Тогда
ВыбраныСтроки = Истина;
Если СтрокаНоменклатуры.КоличествоРаспределено <> 0
Или СтрокаНоменклатуры.СуммаРаспределено <> 0
Или СтрокаНоменклатуры.СуммаНДСРаспределено <> 0 Тогда
ОбщегоНазначения.СообщитьПользователю(СтрШаблон(НСтр("ru = 'Не распределены расхождения по номенклатуре %1 %2'"),
СтрокаНоменклатуры.Номенклатура,
?(ЗначениеЗаполнено(СтрокаНоменклатуры.Характеристика), "(" + СтрокаНоменклатуры.Характеристика + ")", "")));
ЕстьОшибкиРаспределения = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
РезультатПроверки.Вставить("ВыбраныСтроки", ВыбраныСтроки);
Возврат Не ЕстьОшибкиРаспределения;
КонецФункции
&НаСервере
Функция ПолучитьДанныеКорректировочныхСчетовФактур()
Результат = Новый Соответствие;
ДЗРаспределениеОтклонений = РеквизитФормыВЗначение("РаспределениеОтклонений");
ТаблицаРаспределениеОтклонений = ТаблицаОтклонений(ДЗРаспределениеОтклонений);
МассивОтгрузокОснований = ТаблицаРаспределениеОтклонений.ВыгрузитьКолонку("ОтгрузкаТоваров");
ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(МассивОтгрузокОснований);
СтруктураОтбора = Новый Структура();
Для Каждого ОтгрузкаТоваровОснование Из МассивОтгрузокОснований Цикл
ДанныеСчетаФактуры = ОбщегоНазначенияУТВызовСервера.ЗначенияРеквизитовОбъекта(ОтгрузкаТоваровОснование, "Организация, Контрагент, Договор, НалогообложениеНДС, Дата");
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(ДанныеСчетаФактуры.Организация);
СтруктураОтбора.Вставить("ОтгрузкаТоваров", ОтгрузкаТоваровОснование);
СтрокиНоменклатуры = ТаблицаРаспределениеОтклонений.НайтиСтроки(СтруктураОтбора);
ДокументОбъект = Документы.СчетФактураВыданный.СоздатьДокумент();
ДокументОбъект.Дата = ТекущаяДатаСеанса();
ДокументОбъект.ДатаВыставления = ТекущаяДатаСеанса();
ДокументОбъект.РучнаяКорректировкаСуммДокумента = Истина;
ДокументОбъект.НачислениеНДСПриОтгрузке = Истина;
ДокументОбъект.Корректировочный = Истина;
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("ДокументОснование", ОтгрузкаТоваровОснование);
ДанныеЗаполнения.Вставить("Организация", ДанныеСчетаФактуры.Организация);
ДанныеЗаполнения.Вставить("Контрагент", ДанныеСчетаФактуры.Контрагент);
ДанныеЗаполнения.Вставить("Договор", ДанныеСчетаФактуры.Договор);
ДанныеЗаполнения.Вставить("Исправление", Ложь);
ДанныеЗаполнения.Вставить("Корректировочный", Истина);
ДанныеЗаполнения.Вставить("НачислениеНДСПриОтгрузке", Истина);
ДанныеЗаполнения.Вставить("ОформлениеСчетаФактурыПоОтгрузкеИзРабочегоМеста", Новый Массив);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
ДанныеЗаполнения.Вставить("СчетФактураОснование", ДокументОбъект.СчетФактураОснование);
ДанныеЗаполнения.Вставить("Период", ДокументОбъект.Дата);
ДатаОтгрузки = Документы.СчетФактураВыданный.ОпределитьДатуОтгрузки(ДанныеЗаполнения);
СтруктураПоиска = Новый Структура("Распоряжение, КодСтроки, Номенклатура");
Для Каждого СтрокаНоменклатуры Из СтрокиНоменклатуры Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаНоменклатуры.Номенклатура;
НоваяСтрока.Характеристика = СтрокаНоменклатуры.Характеристика;
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаНоменклатуры);
НайденныеСтрокиНоменклатуры = СтрокаНоменклатуры.СчетФактура.Товары.НайтиСтроки(СтруктураПоиска);
НоваяСтрока.ТипЗапасов = ?(НайденныеСтрокиНоменклатуры.Количество() > 0, НайденныеСтрокиНоменклатуры[0].ТипЗапасов, Перечисления.ТипыЗапасов.Товар);
НоваяСтрока.Распоряжение = СтрокаНоменклатуры.Распоряжение;
НоваяСтрока.СтавкаНДС = СтрокаНоменклатуры.СтавкаНДС;
НоваяСтрока.ИсходныйСчетФактура = СтрокаНоменклатуры.ИсходныйСчетФактура;
НоваяСтрока.ПредыдущийСчетФактура = СтрокаНоменклатуры.СчетФактура;
НоваяСтрока.НомерСтрокиПриПечати = СтрокаНоменклатуры.НомерСтрокиПриПечати;
НоваяСтрока.НомерСтрокиИсходногоСФ = СтрокаНоменклатуры.НомерСтрокиПриПечати;
НоваяСтрока.КодСтроки = СтрокаНоменклатуры.КодСтроки;
НоваяСтрока.ЕдиницаИзмерения = СтрокаНоменклатуры.ЕдиницаИзмерения;
Если СтрокаНоменклатуры.КоличествоРаспределено > 0 Тогда
НоваяСтрока.КоличествоУвеличение = СтрокаНоменклатуры.КоличествоРаспределено;
Иначе
НоваяСтрока.КоличествоУменьшение = -СтрокаНоменклатуры.КоличествоРаспределено;
КонецЕсли;
НоваяСтрока.Количество = СтрокаНоменклатуры.КоличествоДоступно + СтрокаНоменклатуры.КоличествоРаспределено;
Если СтрокаНоменклатуры.КоличествоПоРНПТДоступно > 0 Тогда
Если СтрокаНоменклатуры.КоличествоРаспределено > 0 Тогда
НоваяСтрока.КоличествоПоРНПТУвеличение = СтрокаНоменклатуры.КоличествоРаспределено;
Иначе
НоваяСтрока.КоличествоПоРНПТУменьшение = Мин(-СтрокаНоменклатуры.КоличествоРаспределено, СтрокаНоменклатуры.КоличествоПоРНПТДоступно);
КонецЕсли;
НоваяСтрока.КоличествоПоРНПТ = СтрокаНоменклатуры.КоличествоПоРНПТДоступно + ?(СтрокаНоменклатуры.КоличествоРаспределено > 0, НоваяСтрока.КоличествоПоРНПТУвеличение, -НоваяСтрока.КоличествоПоРНПТУменьшение);
КонецЕсли;
НоваяСтрока.НомерГТД = СтрокаНоменклатуры.НомерГТД;
Если СтрокаНоменклатуры.СуммаРаспределено > 0 Тогда
НоваяСтрока.СуммаБезНДСВалУвеличение = СтрокаНоменклатуры.СуммаРаспределено;
НоваяСтрока.СуммаБезНДСВал = СтрокаНоменклатуры.СуммаВалДоступно + НоваяСтрока.СуммаБезНДСВалУвеличение;
НоваяСтрока.Сумма = РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(
НоваяСтрока.СуммаБезНДСВал,
ВалютаРегламентированногоУчета,
ДокументОбъект.ВалютаВзаиморасчетов,
ДокументОбъект.Валюта,
ДатаОтгрузки);
НоваяСтрока.СуммаНДС = УчетНДСУПКлиентСервер.РассчитатьСуммуНДС(НоваяСтрока.Сумма, НоваяСтрока.СтавкаНДС);
НоваяСтрока.СуммаУвеличение = РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(
НоваяСтрока.СуммаБезНДСВалУвеличение,
ВалютаРегламентированногоУчета,
ДокументОбъект.ВалютаВзаиморасчетов,
ДокументОбъект.Валюта,
ДатаОтгрузки);
НоваяСтрока.СуммаНДСУвеличение = УчетНДСУПКлиентСервер.РассчитатьСуммуНДС(НоваяСтрока.СуммаУвеличение, НоваяСтрока.СтавкаНДС);
Иначе
НоваяСтрока.СуммаБезНДСВалУменьшение = -СтрокаНоменклатуры.СуммаРаспределено;
НоваяСтрока.СуммаБезНДСВал = СтрокаНоменклатуры.СуммаВалДоступно - НоваяСтрока.СуммаБезНДСВалУменьшение;
НоваяСтрока.Сумма = РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(
НоваяСтрока.СуммаБезНДСВал,
ВалютаРегламентированногоУчета,
ДокументОбъект.ВалютаВзаиморасчетов,
ДокументОбъект.Валюта,
ДатаОтгрузки);
НоваяСтрока.СуммаНДС = УчетНДСУПКлиентСервер.РассчитатьСуммуНДС(НоваяСтрока.Сумма, НоваяСтрока.СтавкаНДС);
НоваяСтрока.СуммаУменьшение = РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(
НоваяСтрока.СуммаБезНДСВалУменьшение,
ВалютаРегламентированногоУчета,
ДокументОбъект.ВалютаВзаиморасчетов,
ДокументОбъект.Валюта,
ДатаОтгрузки);
НоваяСтрока.СуммаНДСУменьшение = УчетНДСУПКлиентСервер.РассчитатьСуммуНДС(НоваяСтрока.СуммаУменьшение, НоваяСтрока.СтавкаНДС);
КонецЕсли;
КонецЦикла;
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ВалютаРегламентированногоУчета", ВалютаРегламентированногоУчета);
ПараметрыЗаполнения.Вставить("ВалютаУправленческогоУчета", ЗначениеНастроекПовтИсп.ВалютаУправленческогоУчета());
ПараметрыЗаполнения.Вставить("ВалютаСчетаФактуры", ДокументОбъект.Валюта);
ПараметрыЗаполнения.Вставить("ЭтоКорректировочный", ДокументОбъект.Корректировочный);
ПараметрыЗаполнения.Вставить("ЭтоИсправление", ДокументОбъект.Исправление);
ПараметрыЗаполнения.Вставить("ДокументОснование", ДокументОбъект.ДокументОснование);
ПараметрыЗаполнения.Вставить("ВалютаВзаиморасчетов", ДокументОбъект.ВалютаВзаиморасчетов);
ПараметрыЗаполнения.Вставить("ОплатаВВалюте", ДокументОбъект.ОплатаВВалюте);
ПараметрыЗаполнения.Вставить("ПлатежноРасчетныеДокументы", ДокументОбъект.ПлатежноРасчетныеДокументы.Выгрузить());
ПараметрыЗаполнения.Вставить("Период", ДокументОбъект.Дата);
Документы.СчетФактураВыданный.РассчитатьСуммуНДСРеглПриОтгрузке(ДокументОбъект.Товары, ПараметрыЗаполнения);
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("Товары", ОбщегоНазначения.ТаблицаЗначенийВМассив(ДокументОбъект.Товары.Выгрузить()));
Результат.Вставить(ДокументОбъект.ДокументОснование, СтруктураВозврата);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура РаспределитьРасхожденияНаСервере()
ДЗРаспределениеОтклонений = РеквизитФормыВЗначение("РаспределениеОтклонений");
Для Каждого СтрокаНоменклатура Из ДЗРаспределениеОтклонений.Строки Цикл
КоличествоКРаспределению = СтрокаНоменклатура.КоличествоКРаспределению;
СуммаКРаспределению = СтрокаНоменклатура.СуммаКРаспределению;
СуммаНДСКРаспределению = СтрокаНоменклатура.СуммаНДСКРаспределению;
Для Каждого СтрокаСчетФактура Из СтрокаНоменклатура.Строки Цикл
КоличествоКРаспределениюПоСчетуФактуре = ?(КоличествоКРаспределению > 0, КоличествоКРаспределению, Макс(КоличествоКРаспределению, -СтрокаСчетФактура.КоличествоДоступно));
СуммаКРаспределениюПоСчетуФактуре = ?(СуммаКРаспределению > 0, СуммаКРаспределению, Макс(СуммаКРаспределению, -СтрокаСчетФактура.СуммаДоступно));
СуммаНДСКРаспределениюПоСчетуФактуре = ?(СуммаНДСКРаспределению > 0, СуммаНДСКРаспределению, Макс(СуммаНДСКРаспределению, -СтрокаСчетФактура.СуммаНДСДоступно));
СтрокаСчетФактура.КоличествоРаспределено = КоличествоКРаспределениюПоСчетуФактуре;
СтрокаСчетФактура.СуммаРаспределено = СуммаКРаспределениюПоСчетуФактуре;
СтрокаСчетФактура.СуммаНДСРаспределено = СуммаНДСКРаспределениюПоСчетуФактуре;
КоличествоКРаспределению = КоличествоКРаспределению - КоличествоКРаспределениюПоСчетуФактуре;
СуммаКРаспределению = СуммаКРаспределению - СуммаКРаспределениюПоСчетуФактуре;
СуммаНДСКРаспределению = СуммаНДСКРаспределению - СуммаНДСКРаспределениюПоСчетуФактуре;
КонецЦикла;
СтрокаНоменклатура.КоличествоРаспределено = КоличествоКРаспределению;
СтрокаНоменклатура.СуммаРаспределено = СуммаКРаспределению;
СтрокаНоменклатура.СуммаНДСРаспределено = СуммаНДСКРаспределению;
Если КоличествоКРаспределению = 0
И СуммаКРаспределению = 0
И СуммаНДСКРаспределению = 0 Тогда
СтрокаНоменклатура.Выбран = Истина;
КонецЕсли;
КонецЦикла;
ЗначениеВРеквизитФормы(ДЗРаспределениеОтклонений, "РаспределениеОтклонений");
КонецПроцедуры
&НаСервере
Функция ТаблицаОтклонений(ДеревоОтклонений)
ИтоговаяТаблица = Новый ТаблицаЗначений;
Для Каждого КолонкаДерева Из ДеревоОтклонений.Колонки Цикл
ИтоговаяТаблица.Колонки.Добавить(КолонкаДерева.Имя, КолонкаДерева.ТипЗначения);
КонецЦикла;
ИтоговаяТаблица.Колонки.Добавить("ОтгрузкаТоваров");
Для Каждого СтрокаНоменклатуры Из ДеревоОтклонений.Строки Цикл
Если СтрокаНоменклатуры.Выбран Тогда
Для Каждого СтрокаСФ Из СтрокаНоменклатуры.Строки Цикл
Если СтрокаСФ.КоличествоРаспределено <> 0
Или СтрокаСФ.СуммаРаспределено <> 0
Или СтрокаСФ.СуммаНДСРаспределено <> 0 Тогда
НоваяСтрока = ИтоговаяТаблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСФ);
НоваяСтрока.ОтгрузкаТоваров = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НоваяСтрока.СчетФактура, "ДокументОснование");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ИтоговаяТаблица;
КонецФункции
&НаКлиенте
Процедура РазвернутьСтрокиРасхождений()
КоллекцияСтрокРасхождений = РаспределениеОтклонений.ПолучитьЭлементы();
Для Каждого ТекСтрока Из КоллекцияСтрокРасхождений Цикл
Элементы.РаспределениеОтклонений.Развернуть(ТекСтрока.ПолучитьИдентификатор(), Истина);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура РаспределениеОтклоненийПриИзменении(ИмяРеквизита)
ТекСтрока = Элементы.РаспределениеОтклонений.ТекущиеДанные;
СтрокаНоменклатуры = ТекСтрока.ПолучитьРодителя();
СтрокиСчетаФактурыПоНоменклатуре = СтрокаНоменклатуры.ПолучитьЭлементы();
ИтогРаспределено = 0;
Для Каждого ТекСтрокаСчетФактура Из СтрокиСчетаФактурыПоНоменклатуре Цикл
ИтогРаспределено = ИтогРаспределено + ТекСтрокаСчетФактура[ИмяРеквизита+"Распределено"];
КонецЦикла;
СтрокаНоменклатуры[ИмяРеквизита+"Распределено"] = СтрокаНоменклатуры[ИмяРеквизита+"КРаспределению"] - ИтогРаспределено;
СтрокаНоменклатуры.Выбран = (СтрокаНоменклатуры.КоличествоРаспределено = 0
И СтрокаНоменклатуры.СуммаРаспределено = 0 И СтрокаНоменклатуры.СуммаНДСРаспределено = 0);
КонецПроцедуры
&НаКлиенте
Процедура ОформитьСчетФактуруЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> КодВозвратаДиалога.ОК Тогда
Возврат;
КонецЕсли;
ДанныеКорректировочныхСчетовФактур = ПолучитьДанныеКорректировочныхСчетовФактур();
Для Каждого КлючИЗначениеСФ Из ДанныеКорректировочныхСчетовФактур Цикл
ДанныеСчетаФактуры = ОбщегоНазначенияУТВызовСервера.ЗначенияРеквизитовОбъекта(КлючИЗначениеСФ.Ключ, "Организация, Контрагент, Договор, НалогообложениеНДС, Дата");
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ДокументОснование", КлючИЗначениеСФ.Ключ);
ПараметрыОткрытия.Вставить("Организация", ДанныеСчетаФактуры.Организация);
ПараметрыОткрытия.Вставить("Контрагент", ДанныеСчетаФактуры.Контрагент);
ПараметрыОткрытия.Вставить("Исправление", Ложь);
ПараметрыОткрытия.Вставить("Корректировочный", Истина);
ПараметрыОткрытия.Вставить("НачислениеНДСПриОтгрузке", Истина);
ПараметрыОткрытия.Вставить("ОформлениеСчетаФактурыПоОтгрузкеИзРабочегоМеста", КлючИЗначениеСФ.Значение.Товары);
ПараметрыОткрытия.Вставить("ЭтоКорректировочныйСчетФактураПоОтгрузке", Истина);
ПараметрыФормы = Новый Структура("Основание, ДокументОснование", ПараметрыОткрытия, КлючИЗначениеСФ.Ключ);
ОткрытьФорму("Документ.СчетФактураВыданный.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект, Истина);
КонецЦикла;
КонецПроцедуры
#КонецОбласти