Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 14:57

обработка для ПоступлениеДопРасходов

Автор Nika Vibliani, 16 ноя 2023, 17:00

0 Пользователей и 1 гость просматривают эту тему.

Nika Vibliani

Привет всем, мне нужна ваш помощь. я сделал легкий внешняяобработка для поступления доп расходов.
я заполняю все реквизити (Дата; Контрагент; ДоговорКонтрагента; СпособРаспределения; СпособЗачетаАвансов; СтавкаНДС; Сумма; Валют; КурсВзаиморасчетов)
кроме "ДокументПартии"
Я хочу, чтобы я заполнил информацию о "НомерПоступления"  (Если я добавлю «Номер Поступления» в графе «Документ Партии», документ должен выбираться автоматически )

ДокументПартии тип документов может быть только "ПоступлениеТоваровУслуг"

как я могу легко добавить значении от этого реквизита?

                //test              Формирование документов
                впТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
                Doc = Документы.ПоступлениеДопРасходов.СоздатьДокумент();               
                Doc.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("USD");                               
                Doc.Дата =  ТекущаяДата();           
                Договор=Справочники.ДоговорыКонтрагентов;                                 
                Doc.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000005120");
                Doc.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("000005711");                 
                Doc.Организация = PrimaryOrgan;
                Doc.СпособРаспределения = Перечисления.СпособыРаспределенияДопРасходов.ПоСумме;
                Doc.СпособЗачетаАвансов =  Перечисления.СпособыЗачетаАвансов.НеЗачитывать;
                Doc.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;    //("БезНДС");
                //Doc.СуммаНДС =   0;
                Doc.Сумма = 100;
                ВалютаДокумента  = ("USD");
                Doc.КратностьВзаиморасчетов = 1;
                Doc.КурсВзаиморасчетов = 1;                 
                СтруктураРеквизитов = Новый Структура;
                СтруктураРеквизитов.Вставить("Номенклатура");               
                СтруктураРеквизитов.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000001041780");               
                Doc.ОтражатьВНалоговомУчете = false ;
                Doc.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3190.6");
                Doc.Ответственный =  впТекущийПользователь;
                     //////////////////////////////////////////////////////////////
                 НовыыйТабДолга = Doc.Товары.Добавить();
                 НовыыйТабДолга.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000001024486");
                 НовыыйТабДолга.Количество = 1;
                 НовыыйТабДолга.Сумма = 50;
                 НовыыйТабДолга.СчетУчетаБУ = ПланыСчетов.Хозрасчетный.НайтиПоКоду("1610");
                 НовыыйТабДолга.СуммаТовара = 50;
                 НовыыйТабДолга.СчетУчетаНДС =   ПланыСчетов.Хозрасчетный.НайтиПоКоду("3340.01");
                 
                 НовыыйТабДолга.ДокументПартии = Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту(НомерПоступления); //я хочу такая логика
            ///    (НомерПоступления - эта реквизиты. ПоступлениеТоваровУслуг > реквизити > НомерПоступления)///???                 
                //НовыыйТабДолга.ДокументПартии   = Doc.ДокументОснование;
           

спасибо заранее.


Максим75

Nika Vibliani, так НайтиПоРеквизиту подразумевает два параметра: имя самого реквизита, как оно задано в конфигураторе и значение реквизита, по которому будет поиск осуществляться.

antoneus

Но у документа же есть метод НайтиПоНомеру

Максим75

antoneus, так кто же легкие пути ищет?

Nika Vibliani

antoneus,

попробовал такой метод поиска:

НовыыйТабДолга.ДокументПартии = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("A0000051602");

Но выдает ошибку.  A0000051602 - Это номер документа о ПоступлениеТоваровУслуг. Только один документ имеет этот номер (номер уникальный)

ошибка:
В строке номер «1» в табличной части «Товар»: значение реквизита «Пакетный документ» не заполняется!
{Форма.Форма.Форма(338)}: Ошибка вызова метода контекста (Записать): Не удалось обработать: "Получить дополнительные расходов "!

antoneus

Ну это уже не ко мне) Это где-то дальше по коду ошибка. Вон, написано: Ошибка вызова метода контекста(Записать)

Nika Vibliani

я отменил СтруктураОбязательныхПолей.Вставить("ДокументПартии");  на  модуле объектов ПоступлениеДопРасходов. после этого документ создаются, но колонка "ДокументПартии" остается пустой.

когда я открываю этот колонка из документов, откроется окно (см. картинку)  (невозможно выбрать поступление товаров услуг документы и я думаю, что это причина, почему не смог получая смысл таким образом  НовыыйТабДолга.ДокументПартии = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("A0000051602");
ДокументПартии.jpg

Nika Vibliani

В документах, когда я хочу выбрать поступление товаров услуг документы, мне нужно нажать сформировать и потом выберите документ.

2.jpg

Максим75

Nika Vibliani, должно заполняться.
как вариант, а какой тип у ДокументПартии в табличной части? Вдруг там строка...

Nika Vibliani

@Максим75,

и как я могу добавить тип у Документ Партии в табличной части были значения от ПоступлениеТоваровУслуг?

эта модель объектов для "ПоступлениеДопРасходов"

Перем мВалютаРегламентированногоУчета Экспорт;
Перем ПартионныйУчетБУ;
Перем ПартионныйУчетНУ;
Перем ТаблицаВзаиморасчетов;

#Если Клиент Тогда

Функция ПечатьПоступлениеДопРасходов()

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр("Курс",            ЭтотОбъект.КурсВзаиморасчетов);
Запрос.УстановитьПараметр("Кратность",       ЭтотОбъект.КратностьВзаиморасчетов);
Запрос.Текст =
"ВЫБРАТЬ
| Номер,
| Дата,
| ДоговорКонтрагента,
| Контрагент,
| Организация,
| Содержание,
| СуммаДокумента КАК СуммаДокумента,
| ВалютаДокумента,
| УчитыватьНДС,
| СуммаВключаетНДС,
| СуммаНДС КАК СуммаНДС,
| ВложенныйЗапрос.ТоварыСумма КАК ТоварыСумма,
| ВложенныйЗапрос.ТоварыКоличество КАК ТоварыКоличество,
|   ВложенныйЗапрос.ТоварыСуммаНДС КАК ТоварыСуммаНДС
|ИЗ
| Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов,
| (ВЫБРАТЬ
| СУММА(ПоступлениеДопРасходовТовары.Сумма) КАК ТоварыСумма,
| КОЛИЧЕСТВО(ПоступлениеДопРасходовТовары.Номенклатура) КАК ТоварыКоличество,
|       СУММА(ПоступлениеДопРасходовТовары.СуммаНДС) КАК ТоварыСуммаНДС
|
| ИЗ
| Документ.ПоступлениеДопРасходов.Товары КАК ПоступлениеДопРасходовТовары
|
| ГДЕ
| Ссылка = &ТекущийДокумент) КАК ВложенныйЗапрос
|
|ГДЕ
| ПоступлениеДопРасходов.Ссылка = &ТекущийДокумент";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();

Макет       = ПолучитьМакет("Накладная");
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПоступлениеДопРасходов_Накладная";

// Выводим шапку накладной

ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.ТекстЗаголовка = ОМРаботаСДиалогами.СформироватьЗаголовокДокумента(Шапка, НСтр("ru='Доп. расходы';'"));
ТабДокумент.Вывести(ОбластьМакета);

ПредставлениеОрганизации = ГлЗащищеннаяОбработка.UGCZ_YFZU_QWHI_MUYN_FZKX(ОМКонтактнаяИнформация.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,");
ПредставлениеКонтрагента = ГлЗащищеннаяОбработка.RIRF_NTFB_HMDR_XCCH_CRCC(ОМКонтактнаяИнформация.СведенияОЮрФизЛице(Шапка.Контрагент, Шапка.Дата), "ПолноеНаименование,");

ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
ОбластьМакета.Параметры.ПредставлениеПоставщика = ПредставлениеКонтрагента;
ОбластьМакета.Параметры.Поставщик = Шапка.Контрагент;
ТабДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
ОбластьМакета.Параметры.ПредставлениеПолучателя = ПредставлениеОрганизации;
ОбластьМакета.Параметры.Получатель = Шапка.Организация;
ТабДокумент.Вывести(ОбластьМакета);

// Вывести табличную часть
ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДокумент.Вывести(ОбластьМакета);

СуммаВсего = Шапка.СуммаДокумента;

ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.НомерСтроки = 1;
ОбластьМакета.Параметры.Товар       = Шапка.Содержание;
ОбластьМакета.Параметры.Цена        = СуммаВсего;
ОбластьМакета.Параметры.Количество  = 1;
ОбластьМакета.Параметры.Сумма       = СуммаВсего;
ТабДокумент.Вывести(ОбластьМакета);

// Вывести Итого
ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.Всего = ОМФормированиеПечатныхФорм.ФорматСумм(СуммаВсего);
ТабДокумент.Вывести(ОбластьМакета);

// Вывести ИтогоНДС
Если Шапка.УчитыватьНДС Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
ОбластьМакета.Параметры.ВсегоНДС = ОМФормированиеПечатныхФорм.ФорматСумм(Шапка.СуммаНДС + Шапка.ТоварыСуммаНДС);
ОбластьМакета.Параметры.НДС      = ?(Шапка.СуммаВключаетНДС, ГлЗащищеннаяОбработка.DAIF_UXZC_SRFK_XDFV_FHFZ(), ГлЗащищеннаяОбработка.FOST_FZFY_TXEC_ZCJG_GYKA());
ТабДокумент.Вывести(ОбластьМакета);
КонецЕсли;

// Вывести Сумму прописью
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
СуммаКПрописи = СуммаВсего;

//ОбластьМакета.Параметры.ИтоговаяСтрока =ГлЗащищеннаяОбработка.IPUE_DDSC_UTHE_HCYD_SGSB() + 1 + ГлЗащищеннаяОбработка.AHDM_ZAHL_YGEC_ADDT_CEKB() + ОМФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);

ОбластьМакета.Параметры.ИтоговаяСтрока = НСтр("ru=' '; '")+"  1" + ГлЗащищеннаяОбработка.IPUE_DDSC_UTHE_HCYD_SGSB() ;

ОбластьМакета.Параметры.СуммаПрописью  = ОМРаботаСДиалогами.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);

ТабДокумент.Вывести(ОбластьМакета);

// Вывести подписи
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
ОбластьМакета.Параметры.Заполнить(Шапка);
ТабДокумент.Вывести(ОбластьМакета);

Возврат ТабДокумент;

КонецФункции // Печать


Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт

// Получить экземпляр документа на печать
Если ИмяМакета = "Накладная" тогда

// Управленческая печатная форма документа
ТабДокумент = ПечатьПоступлениеДопРасходов();

КонецЕсли;

ОМФормированиеПечатныхФорм.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОМРаботаСДиалогами.СформироватьЗаголовокДокумента(ЭтотОбъект, НСтр("ru='услуга сторонней организации'")), НепосредственнаяПечать);

КонецПроцедуры // Печать

#КонецЕсли

 
Функция ПолучитьСтруктуруПечатныхФорм() Экспорт

Возврат Новый Структура("Накладная",ГлЗащищеннаяОбработка.CRQC_BIHW_HUXM_ECEF_EPXE());
КонецФункции // ПолучитьСтруктуруПечатныхФорм()

Процедура ЗаполнитьСчетаБУРегл(СтрокаТЧ,  СчетаУчета, ЗаполнятьБУ)

МетаданныеДокумента = ЭтотОбъект.Метаданные();

Если ЗаполнятьБУ = Истина Тогда
СтрокаТЧ.СчетУчетаБУ  = СчетаУчета.СчетУчетаБУ;
СтрокаТЧ.СчетУчетаНДС = СчетаУчета.СчетУчетаНДС; //ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ;

ИначеЕсли ЗаполнятьБУ = Ложь Тогда
СтрокаТЧ.СчетУчетаБУ  = ПланыСчетов.Хозрасчетный.ПустаяСсылка();
СтрокаТЧ.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.ПустаяСсылка();

КонецЕсли;

КонецПроцедуры


Процедура ЗаполнитьСчетаНУРегл(СтрокаТЧ, СчетаУчета, ЗаполнятьНУ)

Если ЗаполнятьНУ  = Истина Тогда
СтрокаТЧ.СчетУчетаНУ = СчетаУчета.СчетУчетаНУ;
СтрокаТЧ.СчетЗатратНУ = СчетаУчета.СчетРасходовНУ;

ИначеЕсли ЗаполнятьНУ = Ложь Тогда
СтрокаТЧ.СчетУчетаНУ = ПланыСчетов.Налоговый.ПустаяСсылка();
СтрокаТЧ.СчетЗатратНУ = ПланыСчетов.Налоговый.ПустаяСсылка();

КонецЕсли;

КонецПроцедуры


Процедура ЗаполнитьСчетаУСНРегл(СтрокаТЧ, СчетаУчета, ЗаполнятьНУ)

Если ЗаполнятьНУ = Истина Тогда

Если СчетаУчета.СчетУчетаУСН = ПланыСчетов.НалоговыйУСН.СырьеИМатериалы Тогда
СтрокаТЧ.СчетУчетаУСН = ПланыСчетов.НалоговыйУСН.ТранспортноЗаготовительныеРасходы;
СтрокаТЧ.ОтражениеВУСН    = Перечисления.ОтражениеВУСН.Принимаются;
Иначе
СтрокаТЧ.СчетУчетаУСН = ПланыСчетов.НалоговыйУСН.ПустаяСсылка();
СтрокаТЧ.ОтражениеВУСН = Перечисления.ОтражениеВУСН.НеПринимаются;
КонецЕсли;

ИначеЕсли ЗаполнятьНУ = Ложь Тогда

СтрокаТЧ.СчетУчетаУСН  = ПланыСчетов.НалоговыйУСН.ПустаяСсылка();

КонецЕсли;

КонецПроцедуры

Процедура ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТЧ, ЗаполнятьБУ, ЗаполнятьНУ) Экспорт

Склад = Неопределено;

Если НЕ ГлЗащищеннаяОбработка.WCUK_GUFP_VYLZ_FVFH_RFSJ(СтрокаТЧ.ДокументПартии) Тогда
Если НЕ СтрокаТЧ.ДокументПартии.Метаданные().Реквизиты.Найти("Склад") = Неопределено Тогда
Склад = СтрокаТЧ.ДокументПартии.Склад;
Иначе
КонецЕсли;
КонецЕсли;

СчетаУчета = ОМБухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрокаТЧ.Номенклатура, Склад);

ЗаполнитьСчетаБУРегл(СтрокаТЧ, СчетаУчета, ЗаполнятьБУ);
Если ГлЗащищеннаяОбработка.LXFJ_HZQD_CECG_WAED_TSMT(Организация, Дата) Тогда
ЗаполнитьСчетаУСНРегл(СтрокаТЧ, СчетаУчета, ЗаполнятьНУ);
Иначе
ЗаполнитьСчетаНУРегл(СтрокаТЧ, СчетаУчета, ЗаполнятьНУ);
КонецЕсли;

КонецПроцедуры // ЗаполнитьСчетаУчетаВСтрокеТабЧасти()


Процедура ЗаполнитьСчетаУчетаВТабЧасти(ТабличнаяЧасть, ЗаполнятьБУ, ЗаполнятьНУ) Экспорт

Для каждого СтрокаТабЧасти Из ТабличнаяЧасть Цикл
ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТабЧасти, ЗаполнятьБУ, ЗаполнятьНУ);
КонецЦикла;

КонецПроцедуры // обЗаполнитьСчетаУчетаВТабЧасти()

Процедура ЗаполнитьСтатьиНалоговыхДеклараций() Экспорт

//СтатьяВаловыхРасходов = Справочники.СтатьиНалоговыхДеклараций.НП_ПокупТовМатСыр;

КонецПроцедуры

//////////////////////////////////////////////////////////////////////////////////
//// ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА


Процедура ЗаполнитьТоварыПоПоступлениюТоваров(ДокументОснование) Экспорт

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.Текст ="
|ВЫБРАТЬ
| Док.Номенклатура,
| Док.Ссылка,
| Док.Ссылка.ВалютаДокумента КАК ВалютаОснования,
| Док.Сумма,
| Док.СуммаНДС,
| Док.Ссылка.УчитыватьНДС КАК УчитыватьНДС,
| Док.Ссылка.СуммаВключаетНДС КАК СуммаВключаетНДС,
| Док.Количество,
| Док.КоличествоМест,
| Док.ЕдиницаИзмерения,
| Док.Коэффициент,
| Док.СчетУчетаБУ,
| Док.СчетУчетаНУ,
| Док.СчетУчетаУСН,
| Док.ОтражениеВУСН,
| Док.СчетУчетаНДС
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК Док
|
|ГДЕ
| Док.Ссылка = &ДокументОснование
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Док.Номенклатура,
| Док.Ссылка,
| Док.Ссылка.ВалютаДокумента,
| Док.Сумма,
| Док.СуммаНДС,
| Док.Ссылка.УчитыватьНДС,
| Док.Ссылка.СуммаВключаетНДС,
| Док.Количество,
| Док.Количество,
| Док.ЕдиницаИзмерения,
| Док.Коэффициент,
| Док.СчетУчетаБУ,
| Док.СчетУчетаНУ,
| Null,
| Null,
| Док.СчетУчетаНДС
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Оборудование КАК Док
|
|ГДЕ
| Док.Ссылка = &ДокументОснование";

ГлЗащищеннаяОбработка.IHHM_AXSW_ISAC_FDZH_MACV();
РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл

СтрокаТабличнойЧасти = Товары.Добавить();


СтрокаТабличнойЧасти.Номенклатура     = Выборка.Номенклатура;
СтрокаТабличнойЧасти.Количество       = Выборка.Количество;
СтрокаТабличнойЧасти.КоличествоМест   = Выборка.КоличествоМест;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
СтрокаТабличнойЧасти.Коэффициент      = Выборка.Коэффициент;
СтрокаТабличнойЧасти.ДокументПартии   = ДокументОснование;
СтрокаТабличнойЧасти.СуммаТовара      = ОМОбщегоНазначения.ПересчитатьИзВалютыВВалюту(Выборка.Сумма +
                                                                   ?(Выборка.УчитыватьНДС И НЕ Выборка.СуммаВключаетНДС, Выборка.СуммаНДС, 0),
                                                                   Выборка.ВалютаОснования ,ВалютаДокумента,
                                                                   ОМОбщегоНазначения.КурсДокумента(Выборка.Ссылка, мВалютаРегламентированногоУчета),
                                                                   ОМОбщегоНазначения.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета),
                                                                   ОМОбщегоНазначения.КратностьДокумента(Выборка.Ссылка, мВалютаРегламентированногоУчета),
                                                                   ОМОбщегоНазначения.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета));

СтрокаТабличнойЧасти.СчетУчетаБУ  = Выборка.СчетУчетаБУ;

Если Выборка.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.ПустаяСсылка() Тогда
Склад = Неопределено;
Если НЕ ГлЗащищеннаяОбработка.WCUK_GUFP_VYLZ_FVFH_RFSJ(СтрокаТабличнойЧасти.ДокументПартии) Тогда
Если НЕ СтрокаТабличнойЧасти.ДокументПартии.Метаданные().Реквизиты.Найти("Склад") = Неопределено Тогда
Склад = СтрокаТабличнойЧасти.ДокументПартии.Склад;
Иначе
КонецЕсли;
КонецЕсли;
СчетаУчета = ОМБухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрокаТабличнойЧасти.Номенклатура, Склад);
СтрокаТабличнойЧасти.СчетУчетаНДС = СчетаУчета.СчетУчетаНДС;
Иначе
СтрокаТабличнойЧасти.СчетУчетаНДС = Выборка.СчетУчетаНДС;//ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ;
КонецЕсли;

СтрокаТабличнойЧасти.СчетУчетаНУ  = Выборка.СчетУчетаНУ;
Если Выборка.СчетУчетаУСН = ПланыСчетов.НалоговыйУСН.СырьеИМатериалы Тогда
СчетУчетаУСН = ПланыСчетов.НалоговыйУСН.ТранспортноЗаготовительныеРасходы;
СтрокаТабличнойЧасти.ОтражениеВУСН = Выборка.ОтражениеВУСН;
Иначе
СчетУчетаУСН = ПланыСчетов.НалоговыйУСН.ПустаяСсылка();
СтрокаТабличнойЧасти.ОтражениеВУСН = Перечисления.ОтражениеВУСН.НеПринимаются;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // ЗаполнитьТоварыПоПоступлениюТоваров()

Процедура ЗаполнитьТоварыПоПоступлениеДопРасходов(ДокументОснование) Экспорт

   Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
   
КонецПроцедуры // ЗаполнитьТоварыПоПоступлениюТоваров()


////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА

Функция ПодготовитьТаблицуТоваров(РезультатЗапросаПоТоварам, СтруктураШапкиДокумента)

ТаблицаТоваров = РезультатЗапросаПоТоварам.Выгрузить();
ТаблицаТоваров.Колонки.Добавить("ВидЦенности", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыЦенностей"));
ТаблицаТоваров.Колонки.Добавить("Ценность");

ПодготовитьТаблицуТоваровРегл(ТаблицаТоваров, СтруктураШапкиДокумента);

Возврат ТаблицаТоваров;

КонецФункции // ПодготовитьТаблицуТоваров()

Процедура ПодготовитьТаблицуТоваровРегл(ТаблицаТоваров, СтруктураШапкиДокумента)

Если СтруктураШапкиДокумента.Сумма = 0 тогда

Возврат; //Дополнительное распределение не требуется

КонецЕсли;

СуммаКРаспределению = СтруктураШапкиДокумента.Сумма;
НДСКРаспределению   = СтруктураШапкиДокумента.СуммаНДС;
КолонкаБазиса       = ?(СпособРаспределения = Перечисления.СпособыРаспределенияДопРасходов.ПоКоличеству, "Количество",
                      ?(СпособРаспределения = Перечисления.СпособыРаспределенияДопРасходов.ПоСумме,      "СуммаТовара",""));

Если ГлЗащищеннаяОбработка.WSMW_ADVP_CYZB_NWCB_NOOD(КолонкаБазиса) тогда
//Не выбран способ распределения
Возврат;

ИначеЕсли ТаблицаТоваров.Итог(КолонкаБазиса) = 0 тогда
//Базис распределения - пустая колонка!
Возврат;

КонецЕсли;

БазисРаспределения = ТаблицаТоваров.ВыгрузитьКолонку(КолонкаБазиса);
ИтогРаспределения  = ОМУправлениеПроизводством.РаспределитьПропорционально(СуммаКРаспределению,БазисРаспределения);

Если НЕ (НДСКРаспределению = 0) тогда
ИтогРаспределенияНДС = ОМУправлениеПроизводством.РаспределитьПропорционально(НДСКРаспределению,БазисРаспределения);
КонецЕсли;

Для НомерСтрокиТаблицы = 0 по ИтогРаспределения.ВГраница() цикл

Если не ИтогРаспределения[НомерСтрокиТаблицы] = 0 тогда
ТаблицаТоваров[НомерСтрокиТаблицы].Сумма  = ТаблицаТоваров[НомерСтрокиТаблицы].Сумма + ИтогРаспределения[НомерСтрокиТаблицы];
КонецЕсли;

Если Не(НДСКРаспределению = 0) тогда

Если НЕ ИтогРаспределенияНДС[НомерСтрокиТаблицы] = 0 тогда
ТаблицаТоваров[НомерСтрокиТаблицы].НДС = ТаблицаТоваров[НомерСтрокиТаблицы].НДС + ИтогРаспределенияНДС[НомерСтрокиТаблицы];
КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецПроцедуры // ПодготовитьТаблицуТоваровРегл()

// Процедуры и  функции, обслуживающие зачет авансов
Функция ПодготовитьТаблицуЗачетаАвансов(СтруктураШапкиДокумента)

Если СтруктураШапкиДокумента.СпособЗачетаАвансов <> Перечисления.СпособыЗачетаАвансов.ПоДокументу Тогда
ТаблицаЗачетаАвансов = ЗачетАвансов.ВыгрузитьКолонки();
Иначе
ТаблицаЗачетаАвансов = ЗачетАвансов.Выгрузить();
ТаблицаЗачетаАвансов.Свернуть("ДокументАванса", "СуммаЗачета");
КонецЕсли;
ТаблицаЗачетаАвансов.Колонки.ДокументАванса.Имя = "ДокументРасчетов";
ТаблицаЗачетаАвансов.Колонки.СуммаЗачета.Имя    = "СуммаВзаиморасчетов";

Возврат ТаблицаЗачетаАвансов;

КонецФункции

Процедура ПроверитьЗаполнениеТабличнойЧастиЗачетАвансов(ТаблицаЗачетаАвансов, СтруктураШапкиДокумента, Отказ, Заголовок)

Если (ТаблицаЗачетаАвансов.Количество() = 0) Тогда

Если СтруктураШапкиДокумента.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.ПоДокументу Тогда
ТекстОшибки = НСтр("ru='Не заполнен реквизит ""Документ аванса"" (закладка ""Зачет авансов"")'");
ОМОбщегоНазначения.СообщитьОбОшибке(ТекстОшибки, Отказ, Заголовок);
КонецЕсли;

ИначеЕсли (ТаблицаЗачетаАвансов.Количество() = 1)
И ОМОбщегоНазначения.ЗначениеНеЗаполнено(ТаблицаЗачетаАвансов[0].ДокументРасчетов) Тогда

ТекстОшибки = НСтр("ru='Не заполнен реквизит ""Документ аванса"" (закладка ""Зачет авансов"")'");
ОМОбщегоНазначения.СообщитьОбОшибке(ТекстОшибки, Отказ, Заголовок);

Иначе

СтруктураОбязательныхПолей = Новый Структура("ДокументАванса");
   
ОМОбщегоНазначения.ПроверитьЗаполнениеТабличнойЧасти(
ЭтотОбъект, "ЗачетАвансов", СтруктураОбязательныхПолей, Отказ, Заголовок);

КонецЕсли;

КонецПроцедуры // ПроверитьЗаполнениеТабличнойЧастиЗачетАвансов()


// Проверяет правильность заполнения шапки документа.
// Если какой-то из реквизтов шапки, влияющий на проведение не заполнен или
// заполнен не корректно, то выставляется флаг отказа в проведении.
// Проверяется также правильность заполнения реквизитов ссылочных полей документа.
// Проверка выполняется по объекту и по выборке из результата запроса по шапке.
//
// Параметры:
//  СтруктураШапкиДокумента - структура, содержащая рексвизиты шапки документа и результаты запроса по шапке
//  Отказ                   - флаг отказа в проведении,
//  Заголовок               - строка, заголовок сообщения об ошибке проведения.
//
Процедура ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок)

// Укажем, что надо проверить:
СтруктураОбязательныхПолей = Новый Структура("Организация,
|ВалютаДокумента, Контрагент, ДоговорКонтрагента,
|КурсВзаиморасчетов,КратностьВзаиморасчетов");

СтруктураОбязательныхПолей.Вставить("СчетУчетаРасчетовСКонтрагентом");
Если СтруктураШапкиДокумента.Сумма <> 0 Тогда
СтруктураОбязательныхПолей.Вставить("СпособРаспределения");
КонецЕсли;

// Зачет авансов
СтруктураОбязательныхПолей.Вставить("СпособЗачетаАвансов");
Если (СтруктураШапкиДокумента.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически)
ИЛИ (СтруктураШапкиДокумента.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.ПоДокументу) Тогда
СтруктураОбязательныхПолей.Вставить("СчетУчетаРасчетовПоАвансам");
КонецЕсли;

// Документ должен принадлежать хотя бы к одному виду учета (управленческий, бухгалтерский, налоговый)
ОМОбщегоНазначения.ПроверитьПринадлежностьКВидамУчета(СтруктураШапкиДокумента, Отказ, Заголовок);

// Теперь вызовем общую процедуру проверки.
ОМОбщегоНазначения.ПроверитьЗаполнениеШапкиДокумента(ЭтотОбъект, СтруктураОбязательныхПолей, Отказ, Заголовок);

//Организация в документе должна совпадать с организацией, указанной в договоре взаиморасчетов.
ОМБухгалтерскийУчет.ПроверитьСоответствиеОрганизацииДоговоруВзаиморасчетов(Организация, ДоговорКонтрагента, СтруктураШапкиДокумента.ДоговорОрганизация, Отказ, Заголовок);

КонецПроцедуры // ПроверитьЗаполнениеШапки()

// Проверяет правильность заполнения строк табличной части "Товары".
//
// Параметры:
// Параметры:
//  ТаблицаПоТоварам        - таблица значений, содержащая данные для проведения и проверки ТЧ Товары
//  СтруктураШапкиДокумента - структура, содержащая рексвизиты шапки документа и результаты запроса по шапке
//  Отказ                   - флаг отказа в проведении.
//  Заголовок               - строка, заголовок сообщения об ошибке проведения.
//
Процедура ПроверитьЗаполнениеТабличнойЧастиТовары(ТаблицаПоТоварам, СтруктураШапкиДокумента, Отказ, Заголовок)

// Укажем, что надо проверить:
СтруктураОбязательныхПолей = Новый Структура("Номенклатура, Количество,СчетУчетаБУ");

//СтруктураОбязательныхПолей.Вставить("ДокументПартии");

Если СтруктураШапкиДокумента.СпособРаспределения = Перечисления.СпособыРаспределенияДопРасходов.ПоСумме Тогда
СтруктураОбязательныхПолей.Вставить("СуммаТовара");
КонецЕсли;

Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда
СтруктураОбязательныхПолей.Вставить("СчетУчетаНУ");
КонецЕсли;

// Теперь вызовем общую процедуру проверки.
ОМОбщегоНазначения.ПроверитьЗаполнениеТабличнойЧасти(ЭтотОбъект, "Товары", СтруктураОбязательныхПолей, Отказ, Заголовок);

Для Каждого СтрокаТЧ из ТаблицаПоТоварам Цикл

Если СтрокаТЧ.СчетУчетаБУЗабалансовый Тогда

СтрокаНачалаСообщенияОбОшибке = ГлЗащищеннаяОбработка.EPSL_IBLU_UCVX_MXKE_GHYG()+ СокрЛП(СтрокаТЧ.НомерСтроки) +
                               ГлЗащищеннаяОбработка.RCZY_YZZP_WUYP_KVWC_EXPQ();

ГлЗащищеннаяОбработка.USZT_UAWV_HVFT_UKBF_RATE(СтрокаНачалаСообщенияОбОшибке, Отказ, Заголовок);

Иначе

СтрокаНачалаСообщенияОбОшибке = ГлЗащищеннаяОбработка.EUWV_ASBU_JFGR_XESZ_CSIV()+ СокрЛП(СтрокаТЧ.НомерСтроки) +
                               ГлЗащищеннаяОбработка.JZAE_OLHZ_RISC_SGAY_SAFZ();

Если ГлЗащищеннаяОбработка.FYBH_XKHZ_RCSL_UABZ_CTTU(СтрокаТЧ.СчетУчетаНДС) Тогда
ГлЗащищеннаяОбработка.AIIM_XWVH_PIOQ_XAZI_HSET(СтрокаНачалаСообщенияОбОшибке, Отказ, Заголовок);
КонецЕсли;

КонецЕсли;

КонецЦикла;

ОМУправлениеЗапасами.ПроверитьЧтоНетУслуг(ЭтотОбъект,"Товары", ТаблицаПоТоварам, Отказ, Заголовок); // Здесь услуг быть не должно.

КонецПроцедуры // ПроверитьЗаполнениеТабличнойЧастиТовары()

// Формируем движения по регистрам.
//
// Параметры:
//  СтруктураШапкиДокумента   - структура, содержащая рексвизиты шапки документа и результаты запроса по шапке
//  ТаблицаПоТоварам          - таблица значений, содержащая данные для проведения и проверки ТЧ Товары
//  Отказ                     - флаг отказа в проведении
//
Процедура ДвиженияПоРегистрам(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаЗачетаАвансов, Отказ,Заголовок,РежимПроведения)

// Общие таблицы вызываемых процедур
ТаблицаАвансов = Новый ТаблицаЗначений;

ДвиженияПоРегистрамБухгалтерии(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаЗачетаАвансов, Отказ, Заголовок, РежимПроведения);
ДвиженияРегистровПодсистемыНДС(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаАвансов, Отказ, Заголовок);
ДвиженияПоРазницам(СтруктураШапкиДокумента, ТаблицаПоТоварам);
    ДвиженияПоРегистрамУСНРегл(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ, Заголовок);

КонецПроцедуры // ДвиженияПоРегистрам()

// Процедура формирует движения по постоянным и временным разницам
//
Процедура ДвиженияПоРазницам(СтруктураШапкиДокумента, ТаблицаПоТоварам)

Если НЕ СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда
Возврат;
КонецЕсли;


ПроводкиНУ      = Движения.Налоговый;
ДатаДока        = Дата;
ТипСтатьяЗатрат = Тип("СправочникСсылка.СтатьиЗатрат");
ТипПДиР         = Тип("СправочникСсылка.ПрочиеДоходыИРасходы");

ПоддержкаПБУ18 = ОМОбщегоНазначения.ПрименениеПБУ18(СтруктураШапкиДокумента.Организация,ДатаДока);
Если НЕ ПоддержкаПБУ18 Тогда
Возврат;
КонецЕсли;

    мКэшСчетов = Новый Соответствие;

Для Каждого СтрокаТЧ из ТаблицаПоТоварам Цикл

СуммаВПроводку = СтрокаТЧ.Сумма;

СчетНУСоответствующийСчетуБУ = мКэшСчетов[СтрокаТЧ.СчетУчетаБУ];
Если СчетНУСоответствующийСчетуБУ = Неопределено Тогда
СчетНУСоответствующийСчетуБУ = ОМБухгалтерскийУчет.ПреобразоватьСчетаБУвСчетНУ(Новый Структура("СчетБУ",СтрокаТЧ.СчетУчетаБУ), "НУ", Ложь, Дата);
мКэшСчетов[СтрокаТЧ.СчетУчетаБУ] = СчетНУСоответствующийСчетуБУ;
КонецЕсли;

Если СчетНУСоответствующийСчетуБУ = СтрокаТЧ.СчетУчетаНУ Тогда
Продолжить;
КонецЕсли;
Если ГлЗащищеннаяОбработка.MFUP_HNPV_MZLS_BWHP_XMBC(СчетНУСоответствующийСчетуБУ) Тогда
Сообщить(ГлЗащищеннаяОбработка.WDWU_SFAX_NBLL_EDBZ_EPAX() +  СтрокаТЧ.СчетУчетаБУ + ГлЗащищеннаяОбработка.SJLQ_XCNA_NXDS_UKZX_TPOO());
Продолжить;
КонецЕсли;

Проводка = ПроводкиНУ.Добавить();

Проводка.Период      = ДатаДока;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Содержание  = ГлЗащищеннаяОбработка.KWAR_EWVD_ZSKH_KSVE_CRGY();
Проводка.СчетДт      = СчетНУСоответствующийСчетуБУ;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Номенклатура", СтрокаТЧ.Номенклатура);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Склады",       СтрокаТЧ.Склад);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 1, СтрокаТЧ.СтатьяЗатратНУ);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 2, СтрокаТЧ.СтатьяЗатратНУ);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 3, СтрокаТЧ.СтатьяЗатратНУ);

Если ПартионныйУчетНУ Тогда
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Партии", СтрокаТЧ.ДокументОприходования);
КонецЕсли;

Проводка.Сумма = СтрокаТЧ.Сумма;
Если ТипЗнч(СтрокаТЧ.СтатьяЗатратНУ) = ТипСтатьяЗатрат
И СтрокаТЧ.СтатьяЗатратНУ.ВидРасходовНУ = Перечисления.ВидыРасходовНУ.НеУчитываемыеВЦеляхНалогообложения Тогда
Проводка.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.ПР;

ИначеЕсли ТипЗнч(СтрокаТЧ.СтатьяЗатратНУ) = ТипПДиР
И НЕ СтрокаТЧ.СтатьяЗатратНУ.ПринятиеКналоговомуУчету Тогда
Проводка.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.ПР;

Иначе
Проводка.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.ВР;

КонецЕсли;

Проводка = ПроводкиНУ.Добавить();

Проводка.Период      = ДатаДока;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Содержание  = ГлЗащищеннаяОбработка.GSHX_GDNX_VXCU_ZEXB_WBUX();
Проводка.СчетДт      = СтрокаТЧ.СчетУчетаНУ;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт, 1, СтрокаТЧ.СтатьяЗатратНУ);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт, "Номенклатура", СтрокаТЧ.Номенклатура);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт, "Склады",       СтрокаТЧ.Склад);

Если ПартионныйУчетНУ Тогда
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Партии", СтрокаТЧ.ДокументОприходования);
КонецЕсли;

Проводка.Сумма = - СтрокаТЧ.Сумма;

Если ТипЗнч(СтрокаТЧ.СтатьяЗатратНУ) = ТипСтатьяЗатрат
И СтрокаТЧ.СтатьяЗатратНУ.ВидРасходовНУ = Перечисления.ВидыРасходовНУ.НеУчитываемыеВЦеляхНалогообложения Тогда
Проводка.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.ПР;

ИначеЕсли ТипЗнч(СтрокаТЧ.СтатьяЗатратНУ) = ТипПДиР
И НЕ СтрокаТЧ.СтатьяЗатратНУ.ПринятиеКналоговомуУчету Тогда
Проводка.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.ПР;

Иначе
Проводка.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.ВР;

КонецЕсли;

КонецЦикла; // Для Каждого СтрокаТЧ из ТаблицаПоТоварам Цикл

КонецПроцедуры // ДвиженияПоРазницам

// Формирует бухгалтерские и налоговые проводки по регистрам бухгалтерии
// а также регистрирует НДС с распределяемых доп. расходов в регистре НДСДопРасходы
//

Процедура ДвиженияПоРегистрамБухгалтерии(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаЗачетаАвансов, Отказ,Заголовок,РежимПроведения)

//ТаблицаАвансов = ОМУправлениеВзаиморасчетами.ЗачетАванса(ЭтотОбъект,СтруктураШапкиДокумента,СтруктураШапкиДокумента.НДСВключенВСтоимость, мВалютаРегламентированногоУчета, Новый Структура ("ТаблицаПоТоварам",ТаблицаПоТоварам), Отказ,Заголовок,"НА");
ДатаДока       = Дата;
ПроводкиБУ     = Движения.Хозрасчетный;
ПроводкиНУ = Движения.Налоговый;

ТаблицыДокумента = Новый Структура("ТаблицаПоТоварам", ТаблицаПоТоварам);

ТаблицаВзаиморасчетов = ОМУправлениеВзаиморасчетами.ЗачестьАвансКонтрагента(
СтруктураШапкиДокумента, ТаблицыДокумента, ТаблицаЗачетаАвансов, ПроводкиБУ,
СтруктураШапкиДокумента.НДСВключенВСтоимость, Отказ, Заголовок);

ИтогоКоличество  = ТаблицаПоТоварам.Итог("Количество");
ИтогоСуммаТовара = ТаблицаПоТоварам.Итог("СуммаТовара");

МассивСчет = ОМОбщегоНазначения.СчетИЕРАРХИИ(ПланыСчетов.Налоговый.ТМЦНаСкладах);

Сумма1600 = 0;

// Проводки по дополнительным расходам
Для каждого СтрокаТЧ из ТаблицаПоТоварам Цикл

СуммаВПроводку = СтрокаТЧ.Сумма;

Если Не СуммаВПроводку = 0 Тогда

Проводка = ПроводкиБУ.Добавить();

Проводка.Период      = ДатаДока;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Содержание  = ГлЗащищеннаяОбработка.GBWW_FXWS_QWVO_CSBA_CTPP();

Проводка.СчетДт      = СтрокаТЧ.СчетУчетаБУ;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", СтрокаТЧ.Номенклатура);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады",       СтрокаТЧ.Склад);

Если ПартионныйУчетБУ Тогда
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Партии", СтрокаТЧ.ДокументОприходования);
КонецЕсли;

Проводка.Сумма = СуммаВПроводку;

Если СтрокаТЧ.СчетУчетаБУ.Забалансовый Тогда
Проводка.Сумма = Проводка.Сумма + СтрокаТЧ.НДС;
Если НЕ (СтрокаТЧ.СчетУчетаБУ.ВидыСубконто.Найти(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты ,"ВидСубконто") = Неопределено) Тогда
Проводка.СубконтоДт.Контрагенты = СтруктураШапкиДокумента.Контрагент;
КонецЕсли;
Иначе
Проводка.СчетКт = СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Контрагенты",        СтруктураШапкиДокумента.Контрагент, Истина);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Договоры",           СтруктураШапкиДокумента.ДоговорКонтрагента);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ДокументыРасчетовСКонтрагентами", СтруктураШапкиДокумента.Ссылка);
Если СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом.Валютный Тогда
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаВзаиморасчетов;
Проводка.ВалютнаяСуммаКт = СтрокаТЧ.СуммаВал;
КонецЕсли;
            КонецЕсли;

// Проводка по НДС
Если СтруктураШапкиДокумента.УчитыватьНДС  Тогда  //И СтрокаТаблицы.НДС > 0

Если НЕ СтруктураШапкиДокумента.Контрагент.ЯвляетсаНеРезидентом Тогда

Если НЕ СтруктураШапкиДокумента.НДСВключенВСтоимость И СтрокаТЧ.НДС <> 0 тогда
Проводка = ПроводкиБУ.Добавить();

Проводка.Период       = Дата;
Проводка.Организация  = СтруктураШапкиДокумента.Организация;
Проводка.Сумма        = СтрокаТЧ.НДС;
Проводка.Содержание   = ГлЗащищеннаяОбработка.JDCW_CUQT_ATFD_HZEQ_LVBY();

Проводка.СчетДт       = СтрокаТЧ.СчетУчетаНДС;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"СФПолученные", Ссылка, Истина, Заголовок);
Если СтрокаТЧ.ВидЦенности = Перечисления.ВидыЦенностей.СМРПодрядные тогда
СубконтоОбСтр = СтрокаТЧ.СчетЗатрат.ВидыСубконто.Найти(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства,"ВидСубконто");
Если СубконтоОбСтр = Неопределено тогда
ОМОбщегоНазначения.СообщитьОбОшибке(ГлЗащищеннаяОбработка.DHNV_HUYU_EANO_KGTV_QCJR() + Строка(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства) + ГлЗащищеннаяОбработка.CMAC_BNBC_XUAC_TISH_OQEW(),, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"ОбъектыСтроительства", СтрокаТЧ["Субконто"+СубконтоОбСтр.НомерСтроки],Истина, Заголовок);
КонецЕсли;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
КонецЕсли;

Проводка.СчетКт       = СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Контрагенты",СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Договоры",СтруктураШапкиДокумента.ДоговорКонтрагента);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ДокументыРасчетовСКонтрагентами",СтруктураШапкиДокумента.Ссылка);
Если СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом.Валютный Тогда
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаВзаиморасчетов;
Проводка.ВалютнаяСуммаКт = СтрокаТЧ.НДСВал;
КонецЕсли;

КонецЕсли;  //НЕ СтруктураШапкиДокумента.НДСВключенВСтоимость

Если СтруктураШапкиДокумента.ДоговорКонтрагента.УчетАгентскогоНДС И СтрокаТЧ.НДС <> 0 Тогда

// Нужно дополнительно сформировать проводку по начислению НДС налогового агента
Проводка2 = ПроводкиБУ.Добавить();

Проводка2.Период          = ДатаДока;
Проводка2.Организация     = СтруктураШапкиДокумента.Организация;
Проводка2.Содержание      = ГлЗащищеннаяОбработка.HGTJ_SFQW_VUPP_ZZHV_EXNU();

Проводка2.СчетДт          = СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом;
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетДт,Проводка2.СубконтоДт,"Контрагенты",        СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетДт,Проводка2.СубконтоДт,"Договоры",           СтруктураШапкиДокумента.ДоговорКонтрагента);
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетДт,Проводка2.СубконтоДт,"ДокументыРасчетовСКонтрагентами", СтруктураШапкиДокумента.Ссылка);

Если СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом.Валютный Тогда
Проводка2.ВалютаДт        = СтруктураШапкиДокумента.ВалютаВзаиморасчетов;
Проводка2.ВалютнаяСуммаДт = СтрокаТЧ.НДСВал;
КонецЕсли;

Проводка2.СчетКт          = ПланыСчетов.Хозрасчетный.НДС;
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетКт,Проводка2.СубконтоКт,"Контрагенты", СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетКт,Проводка2.СубконтоКт,"СФПолученные",СтруктураШапкиДокумента.Ссылка);
Проводка2.СубконтоКт.СФПолученные  = Ссылка;

Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютнаяСуммаКт = СтрокаТЧ.НДСВал;
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаДокумента;
КонецЕсли;

Проводка2.Сумма       = СтрокаТЧ.НДС;

КонецЕсли;  // СтруктураШапкиДокумента.ДоговорКонтрагента.УчетАгентскогоНДС

Иначе

Если СтруктураШапкиДокумента.ДоговорКонтрагента.УчетАгентскогоНДС Тогда

Если СтруктураШапкиДокумента.НДСВключенВСтоимость И СтрокаТЧ.НДС <> 0 тогда

Проводка = ПроводкиБУ.Добавить();

Проводка.Период       = Дата;
Проводка.Организация  = СтруктураШапкиДокумента.Организация;
Проводка.Сумма        = СтрокаТЧ.НДС;
Проводка.Содержание   = ГлЗащищеннаяОбработка.HGTJ_SFQW_VUPP_ZZHV_EXNU();

Проводка.СчетДт       = СтрокаТЧ.СчетУчетаНДС;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"СФПолученные", Ссылка, Истина, Заголовок);
Если СтрокаТЧ.ВидЦенности = Перечисления.ВидыЦенностей.СМРПодрядные тогда
СубконтоОбСтр = СтрокаТЧ.СчетЗатрат.ВидыСубконто.Найти(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства,"ВидСубконто");
Если СубконтоОбСтр = Неопределено тогда
ОМОбщегоНазначения.СообщитьОбОшибке(ГлЗащищеннаяОбработка.DHNV_HUYU_EANO_KGTV_QCJR() + Строка(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства) + ГлЗащищеннаяОбработка.CMAC_BNBC_XUAC_TISH_OQEW(),, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"ОбъектыСтроительства", СтрокаТЧ["Субконто"+СубконтоОбСтр.НомерСтроки],Истина, Заголовок);
КонецЕсли;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
КонецЕсли;

Проводка.СчетКт          = ПланыСчетов.Хозрасчетный.НДС;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Контрагенты", СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"СФПолученные",СтруктураШапкиДокумента.Ссылка);
Проводка.СубконтоКт.СФПолученные  = Ссылка;

Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютнаяСуммаКт = СтрокаТЧ.НДСВал;
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаДокумента;
КонецЕсли;

Проводка.Сумма       = СтрокаТЧ.НДС;

Проводка2 = ПроводкиБУ.Добавить();

Проводка2.Период          = ДатаДока;
Проводка2.Организация     = СтруктураШапкиДокумента.Организация;
Проводка2.Содержание      = "НДС включен в стоимость";

Проводка2.СчетДт      = СтрокаТЧ.СчетУчетаБУ;
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетДт,Проводка2.СубконтоДт,"Номенклатура", СтрокаТЧ.Номенклатура);
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетДт,Проводка2.СубконтоДт,"Склады",       СтрокаТЧ.Склад);

Если ПартионныйУчетБУ Тогда
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетДт, Проводка2.СубконтоДт, "Партии", СтрокаТЧ.ДокументОприходования);
КонецЕсли;

Если СтрокаТЧ.СчетУчетаБУ.Валютный Тогда
Проводка2.ВалютаДт        = СтруктураШапкиДокумента.ВалютаВзаиморасчетов;
Проводка2.ВалютнаяСуммаДт = СтрокаТЧ.СуммаВал;
КонецЕсли;

Проводка2.СчетКт       = СтрокаТЧ.СчетУчетаНДС;
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетКт,Проводка.СубконтоКт,"СФПолученные", Ссылка, Истина, Заголовок);
Если СтрокаТЧ.ВидЦенности = Перечисления.ВидыЦенностей.СМРПодрядные тогда
СубконтоОбСтр = СтрокаТЧ.СчетЗатрат.ВидыСубконто.Найти(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства,"ВидСубконто");
Если СубконтоОбСтр = Неопределено тогда
ОМОбщегоНазначения.СообщитьОбОшибке(ГлЗащищеннаяОбработка.DHNV_HUYU_EANO_KGTV_QCJR() + Строка(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства) + ГлЗащищеннаяОбработка.CMAC_BNBC_XUAC_TISH_OQEW(),, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетКт,Проводка2.СубконтоКт,"ОбъектыСтроительства", СтрокаТЧ["Субконто"+СубконтоОбСтр.НомерСтроки],Истина, Заголовок);
КонецЕсли;
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетКт,Проводка2.СубконтоКт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка2.СчетКт,Проводка2.СубконтоКт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
КонецЕсли;

Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютнаяСуммаКт = СтрокаТЧ.СтрокаТЧ.НДСВал;
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаДокумента;
КонецЕсли;

Проводка2.Сумма       = СтрокаТЧ.НДС;

ИначеЕсли СтрокаТЧ.НДС <> 0 Тогда 

Проводка = ПроводкиБУ.Добавить();

Проводка.Период       = Дата;
Проводка.Организация  = СтруктураШапкиДокумента.Организация;
Проводка.Сумма        = СтрокаТЧ.НДС;
Проводка.Содержание   = ГлЗащищеннаяОбработка.HGTJ_SFQW_VUPP_ZZHV_EXNU();

Проводка.СчетДт       = СтрокаТЧ.СчетУчетаНДС;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"СФПолученные", Ссылка, Истина, Заголовок);
Если СтрокаТЧ.ВидЦенности = Перечисления.ВидыЦенностей.СМРПодрядные тогда
СубконтоОбСтр = СтрокаТЧ.СчетЗатрат.ВидыСубконто.Найти(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства,"ВидСубконто");
Если СубконтоОбСтр = Неопределено тогда
ОМОбщегоНазначения.СообщитьОбОшибке(ГлЗащищеннаяОбработка.DHNV_HUYU_EANO_KGTV_QCJR() + Строка(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства) + ГлЗащищеннаяОбработка.CMAC_BNBC_XUAC_TISH_OQEW(),, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"ОбъектыСтроительства", СтрокаТЧ["Субконто"+СубконтоОбСтр.НомерСтроки],Истина, Заголовок);
КонецЕсли;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
Иначе
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты", СтруктураШапкиДокумента.Контрагент,Истина, Заголовок);
КонецЕсли;

Проводка.СчетКт          = ПланыСчетов.Хозрасчетный.НДС;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Контрагенты", СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"СФПолученные",СтруктураШапкиДокумента.Ссылка);
Проводка.СубконтоКт.СФПолученные  = Ссылка;

Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютнаяСуммаКт = СтрокаТЧ.НДСВал;
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаДокумента;
КонецЕсли;

Проводка.Сумма       = СтрокаТЧ.НДС;

КонецЕсли;
КонецЕсли;
КонецЕсли;

КонецЕсли;


Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда

Проводка = ПроводкиНУ.Добавить();

Проводка.Период      = ДатаДока;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Содержание  = ГлЗащищеннаяОбработка.ZGUB_CXXP_YLVU_YAUC_ZLCB();
Проводка.СчетДт      = СтрокаТЧ.СчетУчетаНУ;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", СтрокаТЧ.Номенклатура);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады",       СтрокаТЧ.Склад);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 1, СтрокаТЧ.СтатьяЗатратНУ);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 2, СтрокаТЧ.СтатьяЗатратНУ);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 3, СтрокаТЧ.СтатьяЗатратНУ);

Если ПартионныйУчетНУ Тогда
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Партии", СтрокаТЧ.ДокументОприходования);
КонецЕсли;

Проводка.СчетКт = ПланыСчетов.Налоговый.ПоступлениеИВыбытиеИмуществаРаботУслугПрав;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"УсловияПоступленияИВыбытия", Перечисления.УсловияПоступленияИВыбытияИмущества.ЗаПлату);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Контрагенты",          СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Договоры", СтруктураШапкиДокумента.ДоговорКонтрагента);

Проводка.Сумма       = СтрокаТЧ.Сумма;
Проводка.КорректируемыйДокумент= СтрокаТЧ.ДокументОприходования;

Если НЕ МассивСчет.Найти(СтрокаТЧ.СчетУчетаНУ) = Неопределено Тогда
Сумма1600 = Сумма1600 + Проводка.Сумма;
КонецЕсли;

ОМНалоговыйУчет.ВидУчетаПоПБУ18(Проводка);

КонецЕсли; // Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда

КонецЕсли; // Если Не СуммаВПроводку = 0 Тогда

КонецЦикла; // Для каждого СтрокаТЧ из ТаблицаПоТоварам Цикл

Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда

Если Сумма1600 <> 0 Тогда

Проводка = ПроводкиНУ.Добавить();

Проводка.Период       = ДатаДока;
Проводка.Организация  = СтруктураШапкиДокумента.Организация;
Проводка.СчетДт       = ПланыСчетов.Налоговый.НП_ПокупТовМатСырПрочее;
Проводка.Сумма        = Сумма1600;
Проводка.ВидУчетаДт   = Перечисления.ВидыУчетаПоПБУ18.НУ;
Проводка.Содержание   = НСтр("ru='Расходы на приобретение МПЗ'");

КонецЕсли;

КонецЕсли;

ПроводкиПоНДФЛ(ПроводкиБУ, ПроводкиНУ, СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ);

//ПроводкиПоВДВР(ПроводкиНУ, СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ);

//Учет курсовых разниц
Если (ВалютаДокумента <> мВалютаРегламентированногоУчета) тогда
ОМБухгалтерскийУчет.ПереоценкаСчетовДокументаРегл(ЭтотОбъект,СтруктураШапкиДокумента, мВалютаРегламентированногоУчета,Отказ);
КонецЕсли; // Учет курсовых разниц

КонецПроцедуры // ДвиженияПоРегистрамБухгалтерииРегл()

Процедура ДвиженияПоРегиструНДСНачисленный(СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ,Заголовок)

// Движения возврата по регистру НДСПредъявленный
УказанДокументВозврата = не ГлЗащищеннаяОбработка.QTEE_YUVA_UCZE_JAFH_GXCQ(СтруктураШапкиДокумента.Сделка);

ТаблицаДвижений_НДСПредъявленный = Движения.НДСПредъявленный.Выгрузить();
ТаблицаДвижений_НДСПредъявленный.Очистить();

ТаблицаДвижений_НДСНачисленный = Движения.НДСНачисленный.Выгрузить();
ТаблицаДвижений_НДСНачисленный.Очистить();

Для Каждого СтрокаВозврата Из ТаблицаПоТоварам Цикл

Если НЕ СтруктураШапкиДокумента.НДСВключенВСтоимость И НЕ СтрокаВозврата.НДС = 0 Тогда
//Отражение возврата поставщику в регистре "НДС"
Если СтрокаВозврата.НДС > 0 Тогда
СтрокаДвижения = ТаблицаДвижений_НДСПредъявленный.Добавить();
СтрокаДвижения.СуммаБезНДС = СтрокаВозврата.СуммаБезНДС;
СтрокаДвижения.НДС = СтрокаВозврата.НДС;
СтрокаДвижения.Событие = Перечисления.СобытияПоНДСПокупки.ПредъявленНДСПоставщиком;
СтрокаДвижения.Поставщик    = СтруктураШапкиДокумента.Контрагент;
ИначеЕсли СтрокаВозврата.НДС < 0 Тогда 
СтрокаДвижения = ТаблицаДвижений_НДСНачисленный.Добавить();
СтрокаДвижения.СуммаБезНДС = -1 * СтрокаВозврата.СуммаБезНДС;
СтрокаДвижения.НДС = -1 * СтрокаВозврата.НДС;
СтрокаДвижения.Событие = Перечисления.СобытияПоНДСПродажи.ВосстановлениеНДС;
СтрокаДвижения.Покупатель = СтруктураШапкиДокумента.Контрагент;
СтрокаДвижения.ВидНачисления = Перечисления.НДСВидНачисления.НДСВосстановлен;
КонецЕсли;

СтрокаДвижения.Период = СтруктураШапкиДокумента.Дата;
СтрокаДвижения.Организация = СтруктураШапкиДокумента.Организация;
СтрокаДвижения.СчетФактура = ?(УказанДокументВозврата, СтруктураШапкиДокумента.Сделка, СтруктураШапкиДокумента.Ссылка);
СтрокаДвижения.ВидЦенности = СтрокаВозврата.ВидЦенности;
СтрокаДвижения.СтавкаНДС = СтрокаВозврата.СтавкаНДС;
СтрокаДвижения.СчетУчетаНДС = СтрокаВозврата.СчетУчетаНДС;
КонецЕсли;

КонецЦикла;

Движения.НДСПредъявленный.мПериод    = СтруктураШапкиДокумента.Дата;
Движения.НДСПредъявленный.мТаблицаДвижений = ТаблицаДвижений_НДСПредъявленный;
Движения.НДСПредъявленный.ДобавитьДвижение();

    Движения.НДСНачисленный.мПериод = СтруктураШапкиДокумента.Дата;
Движения.НДСНачисленный.мТаблицаДвижений = ТаблицаДвижений_НДСНачисленный;
Движения.НДСНачисленный.ДобавитьДвижение();

КонецПроцедуры

Процедура ПроводкиПоВДВР(ПроводкиНУ, СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ)

// Налоговый учет
Если НЕ СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда
Возврат;
КонецЕсли;

// Получим таблицу движений по видам налоговой деятельности

// ТОВАРЫ
ТаблицаКопия = ТаблицаПоТоварам.Скопировать();

Для Каждого СтрокаТаблици Из ТаблицаКопия Цикл
Если СтрокаТаблици.СчетУчетаНУ = ПланыСчетов.Налоговый.ПриобретениеОбъектовОсновныхСредств Тогда
ТаблицаКопия.Удалить(СтрокаТаблици);
КонецЕсли;
КонецЦикла;
ТаблицаКопия.Свернуть("ВидЦенности, СчетЗатратНУ","СуммаБезНДС");
ТаблицаДвижений = ТаблицаКопия.Скопировать();

ТаблицаДвижений.Свернуть("ВидЦенности, СчетЗатратНУ","СуммаБезНДС");

Для Каждого СтрокаТаблицы Из ТаблицаДвижений Цикл

Если  СтрокаТаблицы.СуммаБезНДС <> 0 И Не ГлЗащищеннаяОбработка.ZHZS_FRKA_WCXP_SASH_UVBF(СтрокаТаблицы.СчетЗатратНУ) Тогда

Проводка = ПроводкиНУ.Добавить();

Проводка.Период                                 = СтруктураШапкиДокумента.Дата;
Проводка.Активность                             = Истина;
Проводка.Организация                            = СтруктураШапкиДокумента.Организация;
Проводка.ВидУчетаДт                             = Перечисления.ВидыУчетаПоПБУ18.НУ;
//Проводка.ВидУчетаКт                             = Перечисления.ВидыУчетаПоПБУ18.НУ;
Проводка.Сумма                                  = СтрокаТаблицы.СуммаБезНДС;
Проводка.Содержание                             = "Признание дополнительных затрат в качестве затрат на приобретение"; //ГлЗащищеннаяОбработка.SZSF_JCUB_DXDV_AFTE_UUPS();
Проводка.НомерЖурнала                           = "";

Проводка.СчетДт                            = СтрокаТаблицы.СчетЗатратНУ;
//Проводка.СчетКт                            = СтрокаТаблицы.СчетЗатратНУ;
КонецЕсли;

КонецЦикла;

КонецПроцедуры

Процедура ПроводкиПоНДФЛ(ПроводкиБУ, ПроводкиНУ, СтруктураШапкиДокумента,ТаблицаПоТоварам, Отказ)

Если СтруктураШапкиДокумента.ДоговорКонтрагента.КодДоходаНДФЛ = Справочники.ДоходыНДФЛ.ПустаяСсылка() ИЛИ СтруктураШапкиДокумента.СуммаНДФЛ = 0 Тогда
Возврат;
КонецЕсли;

Проводка = ПроводкиБУ.Добавить();

Проводка.Период      = СтруктураШапкиДокумента.Дата;
Проводка.Активность  = Истина;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Сумма       = ОМОбщегоНазначения.ПересчитатьИзВалютыВВалюту(СтруктураШапкиДокумента.СуммаНДФЛ, мВалютаРегламентированногоУчета,
ВалютаДокумента,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Курс,      1,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Кратность, 1);
Проводка.Содержание  = ?(СтруктураШапкиДокумента.Контрагент.ЯвляетсаНеРезидентом, "Доходы нерезидента начисляются", "занятой доход");

Если СтруктураШапкиДокумента.ДоговорКонтрагента.ОрганизацияИсполнениеОбязанностейАгентскогоНУ Тогда
Проводка.СчетДт = СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты",СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Договоры",   СтруктураШапкиДокумента.ДоговорКонтрагента);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"ДокументыРасчетовСКонтрагентами",Ссылка);
Иначе
Проводка.СчетДт = СтруктураШапкиДокумента.СчетУчетаЗатрат;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,1,СтруктураШапкиДокумента.Субконто1);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,2,СтруктураШапкиДокумента.Субконто2);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,3,СтруктураШапкиДокумента.Субконто3);
КонецЕсли;

Если Проводка.СчетДт.Валютный Тогда
Проводка.ВалютаДт        = СтруктураШапкиДокумента.ВалютаДокумента;
Проводка.ВалютнаяСуммаДт = СтруктураШапкиДокумента.СуммаНДФЛ;
КонецЕсли;


Если СтруктураШапкиДокумента.Контрагент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо И
СтруктураШапкиДокумента.Контрагент.ЯвляетсаНеРезидентом Тогда
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НДФЛНерезидентаНачисление;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Контрагенты",СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Договоры",   СтруктураШапкиДокумента.ДоговорКонтрагента);
Иначе
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НДФЛНачисление;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ФизЛицаОрганизаций",СтруктураШапкиДокумента.Контрагент);
КонецЕсли;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ДоходыНДФЛ", СтруктураШапкиДокумента.ДоговорКонтрагента.КодДоходаНДФЛ);

Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаДокумента;
Проводка.ВалютнаяСуммаКт = СтруктураШапкиДокумента.СуммаНДФЛ;
КонецЕсли;


Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда

Если НЕ СтруктураШапкиДокумента.СчетУчетаЗатратНУ = ПланыСчетов.Налоговый.ПустаяСсылка() Тогда

Проводка = ПроводкиНУ.Добавить();

Проводка.Период      = СтруктураШапкиДокумента.Дата;
Проводка.Активность  = Истина;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Сумма       = ОМОбщегоНазначения.ПересчитатьИзВалютыВВалюту(СтруктураШапкиДокумента.СуммаНДФЛ, мВалютаРегламентированногоУчета,
ВалютаДокумента,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Курс,      1,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Кратность, 1);

Проводка.Содержание  = "Доходы нерезидента начисляются";

Проводка.СчетДт = СтруктураШапкиДокумента.СчетУчетаЗатратНУ;
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,1,СтруктураШапкиДокумента.СубконтоНУ1);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,2,СтруктураШапкиДокумента.СубконтоНУ2);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,3,СтруктураШапкиДокумента.СубконтоНУ3);

КонецЕсли;

КонецЕсли;

///////Администрирование пенсий//////////

СтруктураНастроикиПенсии = УниверсальныеМеханизмы.ПолучитьСтруктуруПараметрыПенсии(Дата);
СтавкаНДФЛ = ОМПроведениеРасчетов.ЗначениеСтавкиНДФЛотСтавкиНалогообложенияРезидента(ДоговорКонтрагента.КодДоходаНДФЛ,Дата)/100;

Для Каждого СтрокаТовары Из ТаблицаПоТоварам Цикл

Если СтавкаНДФЛ <> 0 И ДоговорКонтрагента.РасчетПенсии = Истина Тогда
СуммаПенсииДляПроведения = СтрокаТовары.Сумма * СтруктураНастроикиПенсии.ПроцентПенсии / 100;
Иначе
СуммаПенсииДляПроведения = 0;
КонецЕсли;

Если СуммаПенсииДляПроведения > 0 Тогда

СтруктураНастроикиПенсии = УниверсальныеМеханизмы.ПолучитьСтруктуруПараметрыПенсии(Дата);

Проводка = ПроводкиБУ.Добавить();

Проводка.Период      = СтруктураШапкиДокумента.Дата;
Проводка.Активность  = Истина;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Сумма       = ОМОбщегоНазначения.ПересчитатьИзВалютыВВалюту(СуммаПенсииДляПроведения, мВалютаРегламентированногоУчета,
ВалютаДокумента,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Курс,      1,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Кратность, 1);
Проводка.Содержание  = "Пенсия начислена";

Если СтруктураШапкиДокумента.ДоговорКонтрагента.ОрганизацияИсполнениеОбязанностейАгентскогоНУ Тогда
Проводка.СчетДт = СтруктураШапкиДокумента.СчетУчетаРасчетовСКонтрагентом;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Контрагенты",СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Договоры",   СтруктураШапкиДокумента.ДоговорКонтрагента);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"ДокументыРасчетовСКонтрагентами",Ссылка);
Иначе
Проводка.СчетДт = СтруктураШапкиДокумента.СчетУчетаЗатрат;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,1,СтруктураШапкиДокумента.Субконто1);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,2,СтруктураШапкиДокумента.Субконто2);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,3,СтруктураШапкиДокумента.Субконто3);
КонецЕсли;

Если Проводка.СчетДт.Валютный Тогда
Проводка.ВалютаДт        = СтруктураШапкиДокумента.ВалютаДокумента;
Проводка.ВалютнаяСуммаДт = СуммаПенсииДляПроведения;
КонецЕсли;


Проводка.СчетКт = СтруктураНастроикиПенсии.ПромежуточныйСчет;


ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ФизЛицаОрганизаций",СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ДоходыНДФЛ", СтруктураШапкиДокумента.ДоговорКонтрагента.КодДоходаНДФЛ);

Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаДокумента;
Проводка.ВалютнаяСуммаКт = СтруктураШапкиДокумента.СуммаНДФЛ;
КонецЕсли;


Проводка = ПроводкиБУ.Добавить();

Проводка.Период      = СтруктураШапкиДокумента.Дата;
Проводка.Активность  = Истина;
Проводка.Организация = СтруктураШапкиДокумента.Организация;
Проводка.Сумма       = ОМОбщегоНазначения.ПересчитатьИзВалютыВВалюту(СуммаПенсииДляПроведения, мВалютаРегламентированногоУчета,
ВалютаДокумента,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Курс,      1,
ОМОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, Дата).Кратность, 1);
Проводка.Содержание  = "Пенсия начислена (Организация)";

Проводка.СчетДт = СтрокаТовары.СчетУчетаБУ;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", СтрокаТовары.Номенклатура);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады",       СтрокаТовары.Склад);

Если ПартионныйУчетБУ Тогда
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Партии", СтрокаТовары.ДокументОприходования);
КонецЕсли;

//ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Подразделения",СтруктураШапкиДокумента.Подразделение);

Если Проводка.СчетДт.Валютный Тогда
Проводка.ВалютаДт        = СтруктураШапкиДокумента.ВалютаДокумента;
Проводка.ВалютнаяСуммаДт = СуммаПенсииДляПроведения;
КонецЕсли;


Проводка.СчетКт = СтруктураНастроикиПенсии.ПромежуточныйСчетОрганизация;

ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ФизЛицаОрганизаций",СтруктураШапкиДокумента.Контрагент);
ОМОбщегоНазначения.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ДоходыНДФЛ", СтруктураШапкиДокумента.ДоговорКонтрагента.КодДоходаНДФЛ);

Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютаКт        = СтруктураШапкиДокумента.ВалютаДокумента;
Проводка.ВалютнаяСуммаКт = СтруктураШапкиДокумента.СуммаНДФЛ;
КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Процедура ДвиженияПоРегистрамУСНРегл(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ, Заголовок)

Если (Не СтруктураШапкиДокумента.ОтражатьВНалоговомУчетеУСН) Тогда
Возврат;
КонецЕсли;

НаборДвижений = Движения.РасходыПриУСН;

// Получим таблицу значений, совпадающую со струкутрой набора записей регистра.
ТаблицаДвижений = НаборДвижений.Выгрузить();
ТаблицаДвижений.Очистить();

ОМНалоговыйУчетУСН.ПоступлениеРасходовУСН(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаДвижений,
Перечисления.ВидыРасходовУСН.Услуги, СтруктураШапкиДокумента.ДоговорКонтрагента,
Перечисления.СтатусыПартийУСН.Купленные, СтруктураШапкиДокумента.СуммаВключаетНДС);

//Недостающие поля.
ТаблицаДвижений.ЗаполнитьЗначения(Организация, "Организация");
ТаблицаДвижений.ЗаполнитьЗначения(Дата, "Период");
ТаблицаДвижений.ЗаполнитьЗначения(Ссылка, "Регистратор");
ТаблицаДвижений.ЗаполнитьЗначения(Истина, "Активность");

НаборДвижений.мПериод            = Дата;
НаборДвижений.мТаблицаДвижений   = ТаблицаДвижений;

Если Не Отказ Тогда
Движения.РасходыПриУСН.ВыполнитьПриход();
НаборДвижений.Записать(Истина);
КонецЕсли;

ОМНалоговыйУчетУСН.ДвиженияУСН(Ссылка, РежимПроведения);

КонецПроцедуры

Процедура ДвиженияРегистровПодсистемыНДС(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаАвансов, Отказ, Заголовок)

Если Не ОМОбщегоНазначения.ПроводитьДокументПоРазделуУчета(СтруктураШапкиДокумента.Организация, Перечисления.РазделыУчета.НДС, СтруктураШапкиДокумента.Дата) Тогда
Возврат;
КонецЕсли;

Если СтруктураШапкиДокумента.ОрганизацияПрименяетУСН тогда
// Движения по этому документу делать не нужно
Возврат;
КонецЕсли;

ТаблицаДвиженийПокупки = Движения.НДСПокупки.Выгрузить();
ТаблицаДвиженийПокупки.Очистить();

ОМУчетНДС.СформироватьДвиженияПоРегиструНДСПокупки(СтруктураШапкиДокумента, ТаблицаПоТоварам, "Товары", ТаблицаДвиженийПокупки);
Если СтруктураШапкиДокумента.ВидОперации = Перечисления.ВидыОперацийПоступлениеДопРасходов.ПоступлениеДопРасходовКорректируемый Тогда
ТаблицаДвиженийПокупки.ЗаполнитьЗначения(Перечисления.СобытияПоНДСПокупки.КоректировкаСчетФактури,"Событие");
КонецЕсли;

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

Если Движения.НДСпоОСиНМА.Количество()  Тогда
ТаблицаДвиженийНДСпоОСиНМА = Движения.НДСпоОСиНМА.Выгрузить();
Движения.НДСпоОСиНМА.ВыполнитьРасход();
КонецЕсли;

КонецЕсли;


ТаблицаДвиженийПокупки.Свернуть("Организация, Поставщик, СчетФактура, Событие, СтавкаНДС, Период, Активность, СчетФактураВыписанно","СуммаБезНДС, НДС");
Если ТаблицаДвиженийПокупки.Количество() > 0 Тогда

Движения.НДСПокупки.мПериод          = Дата;
Движения.НДСПокупки.мТаблицаДвижений = ТаблицаДвиженийПокупки;
Движения.НДСПокупки.ДобавитьДвижение();
Движения.НДСПокупки.Записать();

Если СтруктураШапкиДокумента.ПредъявленСчетФактура Тогда

ТаблицаДвиженийПокупки.ЗаполнитьЗначения(2, "СчетФактураВыписанно");
ТаблицаДвиженийПокупки.ЗаполнитьЗначения(Перечисления.СобытияПоНДСПокупки.НДСОплачен,"Событие");

Движения.НДСПокупки.мПериод          = Дата;
Движения.НДСПокупки.мТаблицаДвижений = ТаблицаДвиженийПокупки;
Движения.НДСПокупки.ДобавитьДвижение();
Движения.НДСПокупки.Записать();

КонецЕсли;

Если СтруктураШапкиДокумента.НДСВключенВСтоимость Тогда

Для Каждого
Из ТаблицаДвиженийПокупки Цикл
Строка.СуммаБезНДС = - Строка.СуммаБезНДС;
Строка.НДС         = - Строка.НДС;
Строка.Событие     = Перечисления.СобытияПоНДСПокупки.НДСВключенВСтоимость;
КонецЦикла;

Движения.НДСПокупки.мПериод          = Дата;
Движения.НДСПокупки.мТаблицаДвижений = ТаблицаДвиженийПокупки;
Движения.НДСПокупки.ДобавитьДвижение();
Движения.НДСПокупки.Записать();

КонецЕсли;

КонецЕсли;

ОМУчетНДС.СформироватьДвиженияПоРегиструНДСРасчетыСПоставщиками_Задолженность(СтруктураШапкиДокумента, ТаблицаПоТоварам, "ТаблицаПоТоварам", Движения, Отказ, СтруктураШапкиДокумента.УчетАгентскогоНДС,); //ТаблицаАвансов

Если не СтруктураШапкиДокумента.УчитыватьНДС Тогда
Возврат;
КонецЕсли;

Если СтруктураШапкиДокумента.УчетАгентскогоНДС Тогда
ОМУчетНДС.СформироватьДвиженияПоРегиструНДСНачисленный_ПоступлениеАгентскогоНДС(СтруктураШапкиДокумента,Движения.НДСПредъявленный.Выгрузить(),Движения);
КонецЕсли;

Если СтруктураШапкиДокумента.ВидОперации = Перечисления.ВидыОперацийПоступлениеДопРасходов.ПоступлениеДопРасходовКорректируемый Тогда
ДвиженияПоРегиструНДСНачисленный(СтруктураШапкиДокумента,ТаблицаПоТоварам,Отказ,Заголовок);
КонецЕсли;

// при необходимости отражаем в регистре партионного учета для НДС
    ТаблицаДвиженийНДСПартии = Движения.НДСПартииТоваров;

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

ТаблицаДляНДСПартии.ЗаполнитьЗначения(Истина,"Услуга");
ОМУчетНДС.СформироватьДвиженияПоступленияПоРегиструНДСПартииТоваров(СтруктураШапкиДокумента,ТаблицаДляНДСПартии, ТаблицаДвиженийНДСПартии, Отказ);

КонецЕсли;

КонецПроцедуры // ДвиженияРегистровПодсистемыНДС()


Процедура ОбработкаЗаполнения(Основание)

Если НЕ ОМОбщегоНазначения.ПроверитьМетаданные(Основание) Тогда
Возврат
КонецЕсли;

Если ТипЗнч(Основание) = Тип("ДокументСсылка.ПоступлениеДопРасходов") Тогда

Реквизиты = ЭтотОбъект.Метаданные().Реквизиты;

Для Каждого Строка Из Реквизиты Цикл
ЭтотОбъект[Строка.Имя] = Основание[Строка.Имя];
КонецЦикла;    

ВидОперации  = Перечисления.ВидыОперацийПоступлениеДопРасходов.ПоступлениеДопРасходовКорректируемый;
ДокОснование = Основание.Ссылка;


ЗаполнитьТоварыПоПоступлениеДопРасходов(Основание);

Иначе

// Заполним реквизиты из стандартного набора по документу основанию.
ОМОбщегоНазначения.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);

ЗаполнитьТоварыПоПоступлениюТоваров(Основание);

КонецЕсли;
КонецПроцедуры // ОбработкаЗаполнения()

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

// Сформируем структуру реквизитов шапки документа
СтруктураШапкиДокумента = ОМОбщегоНазначения.СформироватьСтруктуруШапкиДокумента(ЭтотОбъект);
СтруктураПолейУчетнойПолитикиНУ = Новый Структура("СложныйУчетНДС");
ОМОбщегоНазначения.ДополнитьПоложениямиУчетнойПолитики(СтруктураШапкиДокумента, СтруктураШапкиДокумента.Дата, Отказ, СтруктураШапкиДокумента.Организация, "Нал", СтруктураПолейУчетнойПолитикиНУ);

// Заголовок для сообщений об ошибках проведения.
Заголовок = ОМОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);

Если ОМОбщегоНазначения.РучнаяКорректировкаОбработкаПроведения(РучнаяКорректировка,Отказ,Заголовок,ЭтотОбъект) Тогда
Возврат
КонецЕсли;

// Заполним по шапке документа дерево параметров, нужных при проведении.
ДеревоПолейЗапросаПоШапке = ОМОбщегоНазначения.СформироватьДеревоПолейЗапросаПоШапке();
ОМОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "Организация"          , "ДоговорОрганизация");
ОМОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "ВидДоговора"          , "ВидДоговора");
ОМОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "УчетАгентскогоНДС"    , "УчетАгентскогоНДС");
ОМОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "ВидАгентскогоДоговора", "ВидАгентскогоДоговора");

// Сформируем запрос на дополнительные параметры, нужные при проведении, по данным шапки документа
СтруктураШапкиДокумента = ОМУправлениеЗапасами.СформироватьЗапросПоДеревуПолей(ЭтотОбъект, ДеревоПолейЗапросаПоШапке, СтруктураШапкиДокумента, мВалютаРегламентированногоУчета);

ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок);

// Если шапка не заполнена корректна то дальше лучше не идти, поскольку возможны ошибки
Если Отказ Тогда
Возврат;
КонецЕсли;

// Получим необходимые данные для проведения и проверки заполенения данные по табличной части "Товары".
СтруктураПолей = Новый Структура;
СтруктураПолей.Вставить("Номенклатура", "Номенклатура");
СтруктураПолей.Вставить("Количество"  , "Количество");
СтруктураПолей.Вставить("Сумма"       , "Сумма");
СтруктураПолей.Вставить("НДС"         , "СуммаНДС");

СтруктураПолей.Вставить("СтавкаНДС"               , "Ссылка.СтавкаНДС");
СтруктураПолей.Вставить("Услуга"               , "Номенклатура.Услуга");
СтруктураПолей.Вставить("СуммаТовара"          , "СуммаТовара");
СтруктураПолей.Вставить("ДокументОприходования", "ДокументПартии");
СтруктураПолей.Вставить("Склад" ,                "ДокументПартии.Склад");
СтруктураПолей.Вставить("ВидДоговораПартии" ,    "ДокументПартии.ДоговорКонтрагента.ВидДоговора");
СтруктураПолей.Вставить("ДокументПартииВидОперации", "ДокументПартии.ВидОперации");
СтруктураПолей.Вставить("СчетУчетаБУ" ,          "СчетУчетаБУ");
СтруктураПолей.Вставить("СчетУчетаБУЗабалансовый","СчетУчетаБУ.Забалансовый");
СтруктураПолей.Вставить("СчетУчетаНДС",          "СчетУчетаНДС");
СтруктураПолей.Вставить("СчетУчетаНУ" ,          "СчетУчетаНУ");
СтруктураПолей.Вставить("СчетУчетаУСН",          "СчетУчетаУСН");
СтруктураПолей.Вставить("ОтражениеВУСН"  ,       "ОтражениеВУСН");
СтруктураПолей.Вставить("СтатьяЗатратНУ",        "СтатьяЗатратНУ");
СтруктураПолей.Вставить("СчетЗатратНУ",        "СчетЗатратНУ");

РезультатЗапросаПоТоварам = ОМУправлениеЗапасами.СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "Товары", СтруктураПолей);
ТаблицаПоТоварам          = ПодготовитьТаблицуТоваров(РезультатЗапросаПоТоварам, СтруктураШапкиДокумента);

ТаблицаПоТоварам.Колонки.Добавить("СуммаСНДС");
ТаблицаПоТоварам.ЗагрузитьКолонку(ТаблицаПоТоварам.ВыгрузитьКолонку("Сумма"),"СуммаСНДС");

ПартионныйУчетБУ = ОМУправлениеЗапасами.ВедетсяПартионныйУчет(ОМОбщегоНазначения.ПолучитьПараметрыУчетнойПолитики(КонецМесяца(Дата), Отказ, Организация, "Бух"));
ПартионныйУчетНУ = ОМУправлениеЗапасами.ВедетсяПартионныйУчет(ОМОбщегоНазначения.ПолучитьПараметрыУчетнойПолитики(КонецМесяца(Дата), Отказ, Организация, "Нал"));

ПроверитьЗаполнениеТабличнойЧастиТовары(ТаблицаПоТоварам, СтруктураШапкиДокумента, Отказ, Заголовок);

// Зачет авансов
ТаблицаЗачетаАвансов = ПодготовитьТаблицуЗачетаАвансов(СтруктураШапкиДокумента);
ПроверитьЗаполнениеТабличнойЧастиЗачетАвансов(ТаблицаЗачетаАвансов, СтруктураШапкиДокумента, Отказ, Заголовок);

////Проверим на возможность проведения в БУ и НУ
ОМУправлениеВзаиморасчетами.ПроверкаВозможностиПроведенияВ_БУ_НУ(СтруктураШапкиДокумента, СтруктураШапкиДокумента.ДоговорКонтрагента, Отказ, Заголовок);

ОМУправлениеВзаиморасчетами.ПодготовкаТаблицыЗначенийДляЦелейПриобретенияИРеализации(ТаблицаПоТоварам, СтруктураШапкиДокумента, СтруктураШапкиДокумента.НДСВключенВСтоимость);

Если НЕ Отказ Тогда
ДвиженияПоРегистрам(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаЗачетаАвансов, Отказ,Заголовок,РежимПроведения);
КонецЕсли;

КонецПроцедуры // ОбработкаПроведения()

Процедура ОбработкаУдаленияПроведения(Отказ)

ОМОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, РучнаяКорректировка);

КонецПроцедуры

// Процедура - обработчик события "ПередЗаписью".
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

СуммаДокумента = ОМОбщегоНазначения.ПолучитьСуммуДокументаСНДС(ЭтотОбъект);

КонецПроцедуры

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
ОМОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
КонецПроцедуры

мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск