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