Счет-фактура выданный / Форма рабочее место для оформления корректировочных счетов фактур по отгрузкам / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	УстановитьУсловноеОформление();
	УчетПрослеживаемыхТоваровЛокализация.УстановитьЗаголовокНомерГТД(Элементы, 
		Элементы.РаспределениеОтклоненийНомерГТД.Имя);
	
	Параметры.Свойство("Распоряжение", Распоряжение);
	
	ЗаполнитьДанныеДляРаспределенияОтклонений();
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец ИнтеграцияС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);
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьСчетФактуруЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> КодВозвратаДиалога.ОК Тогда
		Возврат;
	КонецЕсли;
	
	ДанныеКорректировочныхСчетовФактур = ПолучитьДанныеКорректировочныхСчетовФактур();
			
	Для Каждого КлючИЗначениеСФ Из ДанныеКорректировочныхСчетовФактур Цикл 
		
		ДанныеСчетаФактуры = ОбщегоНазначенияУТВызовСервера.ЗначенияРеквизитовОбъекта(КлючИЗначениеСФ.Ключ, "Организация, Контрагент, Договор, НалогообложениеНДС, Дата");
		
		ПараметрыОткрытия = Новый Структура;
		ПараметрыОткрытия.Вставить("ДокументОснование", КлючИЗначениеСФ.Ключ);
		ПараметрыОткрытия.Вставить("Организация",       ДанныеСчетаФактуры.Организация);
		ПараметрыОткрытия.Вставить("Контрагент",        ДанныеСчетаФактуры.Контрагент);
		ПараметрыОткрытия.Вставить("Исправление",       Ложь);
		ПараметрыОткрытия.Вставить("Корректировочный",  Истина);
		ПараметрыОткрытия.Вставить("НачислениеНДСПриОтгрузке",    Истина);
		ПараметрыОткрытия.Вставить("ОформлениеСчетаФактурыПоОтгрузкеИзРабочегоМеста", КлючИЗначениеСФ.Значение.Товары);
		ПараметрыОткрытия.Вставить("ЭтоКорректировочныйСчетФактураПоОтгрузке", Истина);
		
		ПараметрыФормы = Новый Структура("Основание, ДокументОснование", ПараметрыОткрытия, КлючИЗначениеСФ.Ключ);
		ОткрытьФорму("Документ.СчетФактураВыданный.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект, Истина);
		
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

Связанные материалы