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