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