Перем ВалютаДоговора; Перем ОплатаДоговора; Перем ВыделятьВходящийНДС; // --------------------------------------------------------- Процедура ПроверкаВалютыДоговора() ОплатаДоговора = 1; Если Договор.Выбран() = 1 Тогда ОплатаДоговора = Договор.ОплатаДоговора; Если Договор.ВалютаДоговора.Выбран() = 1 Тогда ВалютаДоговора = Договор.ВалютаДоговора; КонецЕсли; КонецЕсли; КонецПроцедуры // --------------------------------------------------------- Функция ПересчетВОсновнуюВалюту( ПересчСумма ) Если ПустоеЗначение(ВалютаДоговора) = 0 Тогда Кратность = ВалютаДоговора.Кратность.Получить(ДатаДок); Кратность = ?(Кратность = 0, 1, Кратность); Сумма = ?(Курс > 0, ПересчСумма * Курс / Кратность, ПересчСумма); Иначе Сумма = ПересчСумма; КонецЕсли; Возврат Сумма; КонецФункции // --------------------------------------------------------- Процедура ОбработкаПроведения() СпрЦены = СоздатьОбъект("Справочник.Цены"); // ХА Если Договор.Выбран()=0 Тогда ТекстСообщения = "Не указан договор."; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; КонецЕсли; Сч10_1 = СчетПоКоду("10.1", ПланыСчетов.Основной); Сч10_2 = СчетПоКоду("10.2", ПланыСчетов.Основной); Сч10_3 = СчетПоКоду("10.3", ПланыСчетов.Основной); Сч41_1 = СчетПоКоду("41.1", ПланыСчетов.Основной); Сч41_2 = СчетПоКоду("41.2", ПланыСчетов.Основной); Сч41_3 = СчетПоКоду("41.3", ПланыСчетов.Основной); Сч60_1 = СчетПоКоду("60.1", ПланыСчетов.Основной); Сч60_2 = СчетПоКоду("60.2", ПланыСчетов.Основной); Сч60_11 = СчетПоКоду("60.11", ПланыСчетов.Основной); Сч60_22 = СчетПоКоду("60.22", ПланыСчетов.Основной); Сч004 = СчетПоКоду("004", ПланыСчетов.Основной); ПроверкаВалютыДоговора(); Метод = Константа.УчитыватьАктивыВВалюте.Получить(ДатаДок); ВыделятьВходящийНДС = Константа.ВыделятьВходящийНДС.Получить(ДатаДок); РасходыПоТоварам = Константа.ПорядокПризнанияРасходовПоТоварам.Получить(ДатаДок); РасходыПоМатериалам = Константа.ПорядокПризнанияМатериальныхРасходов.Получить(ДатаДок); СуммаАванса = 0; СуммаДопАванса = 0; СуммаЗадолженности = 0; Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.Доходы) или (НеПринимаемые = 1) Тогда СчетРасчетовСПоставщиком = Сч60_1; БухИт = СоздатьОбъект("БухгалтерскиеИтоги"); БухИт.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент); БухИт.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор); Если ОплатаДоговора = 2 Тогда БухИт.ВыполнитьЗапрос(, ТекущийДокумент(), Сч60_11,,Договор.ВалютаДоговора,,,3); Иначе БухИт.ВыполнитьЗапрос(, ТекущийДокумент(), Сч60_1,,,,,1); КонецЕсли; СуммаАванса = БухИт.СКД("С"); Иначе СчетРасчетовСПоставщиком = Сч60_2; БухИт = СоздатьОбъект("БухгалтерскиеИтоги"); БухИт.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент); БухИт.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор); БухИт.ИспользоватьСубконто(ВидыСубконто.ВидыРасчетовСПоставщиками, Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов); Если ОплатаДоговора = 2 Тогда БухИт.ВыполнитьЗапрос(, ТекущийДокумент(), Сч60_22,,Договор.ВалютаДоговора,,,3); Иначе БухИт.ВыполнитьЗапрос(, ТекущийДокумент(), Сч60_2,,,,,1); КонецЕсли; СуммаАванса = БухИт.СКД("С"); КонецЕсли; Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда БухИт = СоздатьОбъект("БухгалтерскиеИтоги"); БухИт.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент); БухИт.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор); БухИт.ИспользоватьСубконто(ВидыСубконто.ВидыРасчетовСПоставщиками, Перечисление.ВидыРасчетовСПоставщиками.ПрочиеРасходы); Если ОплатаДоговора = 2 Тогда БухИт.ВыполнитьЗапрос(, ТекущийДокумент(), Сч60_22,,Договор.ВалютаДоговора,,,3); Иначе БухИт.ВыполнитьЗапрос(, ТекущийДокумент(), Сч60_2,,,,,1); КонецЕсли; СуммаДопАванса = БухИт.СКД("С"); КонецЕсли; Если ОплатаДоговора = 2 Тогда // договор валютный // контрагент является нерезидентом Если СчетРасчетовСПоставщиком = Сч60_1 Тогда СчетРасчетовСПоставщиком = Сч60_11; Иначе СчетРасчетовСПоставщиком = Сч60_22; КонецЕсли; глТаблицаСчетов.УдалитьСтроки(); глТаблицаСчетов.НоваяСтрока(); глТаблицаСчетов.Счет = СчетРасчетовСПоставщиком; глТаблицаСчетов.Субконто1 = Контрагент; глТаблицаСчетов.Субконто2 = Договор; глТаблицаСчетов.Субконто3 = ?(СчетРасчетовСПоставщиком = Сч60_11,"",Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов); глТаблицаСчетов.Валюта = ВалютаДоговора; глТаблицаСчетов.Курс = Курс; глПереоценкаСчетов(Контекст, глТаблицаСчетов,, 0); КонецЕсли; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Если (Количество=0) и (Всего=0) Тогда Продолжить; КонецЕсли; Если Номенклатура.Выбран()=0 Тогда ТекстСообщения = "В строке "+НомерСтроки+" не указана номенклатура."; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; КонецЕсли; Если (МестоХранения.Выбран()=1) Тогда Операция.НоваяПроводка(); Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Материал Тогда Операция.Дебет.Счет = СчетПоКоду("МХ.1"); ИначеЕсли Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Товар Тогда Операция.Дебет.Счет = СчетПоКоду("МХ.2"); ИначеЕсли Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.ТоварНаКомиссии Тогда Операция.Дебет.Счет = СчетПоКоду("МХ.4"); КонецЕсли; Операция.Дебет.Номенклатура = Номенклатура; Операция.Дебет.МестаХранения = МестоХранения; Операция.Количество = Количество; Операция.СодержаниеПроводки = "Поступление МПЗ"; Операция.НомерЖурнала = "ТВ"; // ХА Если МестоХранения.ТипСклада = Перечисление.ТипыСкладов.Розничный Тогда Если Наценка <> 0 Тогда Операция.НоваяПроводка(); Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Материал Тогда Сообщить(СокрЛП(Номенклатура) + " Наценка на материалы не делается"); Иначе Операция.Дебет.Счет = Сч41_1; Операция.Дебет.Номенклатура = Константа.ХА_РозничныйТовар; Операция.Дебет.Субконто(2, МестоХранения); Операция.Кредит.Счет = СчетПоКоду("42"); Операция.НомерЖурнала = "ТВ"; Операция.Сумма = Наценка; Операция.СодержаниеПроводки = "Наценка"; КонецЕсли; КонецЕсли; КонецЕсли; // ХА КонецЕсли; Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.ТоварНаКомиссии Тогда Операция.НоваяПроводка(); Операция.Дебет.Счет = Сч004; Операция.Дебет.Номенклатура = Номенклатура; Операция.Дебет.Контрагенты = Контрагент; Операция.Дебет.Договоры = Договор; Операция.Количество = Количество; Операция.СодержаниеПроводки = "Поступление на комиссию"; Операция.НомерЖурнала = "ТВ"; Операция.Сумма = ПересчетВОсновнуюВалюту(Всего); ИначеЕсли (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.Доходы) или (НеПринимаемые = 1) Тогда Операция.НоваяПроводка(); Операция.СодержаниеПроводки = "Поступление МПЗ"; Операция.НомерЖурнала = "ТВ"; Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Материал Тогда Операция.Дебет.Счет = Сч10_1; Иначе Операция.Дебет.Счет = Сч41_1; КонецЕсли; Операция.Дебет.Номенклатура = Номенклатура; // ХА Если МестоХранения.ТипСклада = Перечисление.ТипыСкладов.Розничный Тогда Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Товар Тогда Операция.Дебет.Номенклатура = Константа.ХА_РозничныйТовар; Операция.Дебет.Субконто(2, МестоХранения); КонецЕсли; КонецЕсли; // ХА Если ОплатаДоговора = 2 Тогда // договор валютный // контрагент является нерезидентом Операция.Валюта = ВалютаДоговора; Операция.ВалСумма = Всего; КонецЕсли; Операция.Кредит.Счет = СчетРасчетовСПоставщиком; Операция.Кредит.Контрагенты = Контрагент; Операция.Кредит.Договоры = Договор; Операция.Количество = Количество; Операция.Сумма = ПересчетВОсновнуюВалюту(Всего); СуммаЗачета = Мин(СуммаАванса, ПересчетВОсновнуюВалюту(Всего)); СуммаАванса = СуммаАванса - СуммаЗачета; СуммаЗадолженности = СуммаЗадолженности + ПересчетВОсновнуюВалюту(Всего) - СуммаЗачета; Иначе Операция.НоваяПроводка(); Операция.СодержаниеПроводки = "Поступление МПЗ"; Операция.НомерЖурнала = "ТВ"; Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Материал Тогда Операция.Дебет.Счет = Сч10_2; Иначе Операция.Дебет.Счет = Сч41_2; КонецЕсли; Операция.Дебет.Контрагенты = Контрагент; Операция.Дебет.Договоры = Договор; Операция.Дебет.Номенклатура = Номенклатура; // ХА Если МестоХранения.ТипСклада = Перечисление.ТипыСкладов.Розничный Тогда Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Товар Тогда Операция.Дебет.Номенклатура = Константа.ХА_РозничныйТовар; Операция.Дебет.Субконто(2, МестоХранения); КонецЕсли; КонецЕсли; // ХА Если ОплатаДоговора = 2 Тогда // договор валютный // контрагент является нерезидентом Если Метод = 1 Тогда Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Материал Тогда Операция.Дебет.Счет = Сч10_3; Иначе Операция.Дебет.Счет = Сч41_3; КонецЕсли; КонецЕсли; Операция.Валюта = ВалютаДоговора; Если (ВыделятьВходящийНДС = 1) И (НДС > 0) Тогда Операция.ВалСумма = Всего - НДС; Иначе Операция.ВалСумма = Всего; КонецЕсли; КонецЕсли; Операция.Кредит.Счет = СчетРасчетовСПоставщиком; Операция.Кредит.Контрагенты = Контрагент; Операция.Кредит.Договоры = Договор; Если (СчетРасчетовСПоставщиком = Сч60_2) или (СчетРасчетовСПоставщиком = Сч60_22) Тогда Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; КонецЕсли; Операция.Количество = Количество; Операция.Сумма = ПересчетВОсновнуюВалюту(Всего); СуммаЗачета = Мин(СуммаАванса, ПересчетВОсновнуюВалюту(Всего)); СуммаАванса = СуммаАванса - СуммаЗачета; Если СуммаЗачета < ПересчетВОсновнуюВалюту(Всего) Тогда ДопСуммаЗачета = Мин(ПересчетВОсновнуюВалюту(Всего) - СуммаЗачета, Макс(0, СуммаДопАванса - СуммаЗадолженности)); СуммаЗадолженности = СуммаЗадолженности + ПересчетВОсновнуюВалюту(Всего) - СуммаЗачета; СуммаЗачета = СуммаЗачета + ДопСуммаЗачета; КонецЕсли; СуммаЗачетаНДС = ?(ПересчетВОсновнуюВалюту(Всего)>0, ПересчетВОсновнуюВалюту(НДС) * СуммаЗачета/ПересчетВОсновнуюВалюту(Всего), 0); Если (ВыделятьВходящийНДС = 1) Тогда //скорректируем сумму проводки по ТМЦ Операция.Сумма = ПересчетВОсновнуюВалюту(Всего - НДС); СуммаЗачета = СуммаЗачета - СуммаЗачетаНДС; КонецЕсли; Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Материал Тогда Если (РасходыПоМатериалам = Перечисление.ПорядокПризнанияМатериальныхРасходов.ПоОплатеПоставщику) и (СуммаЗачета > 0) Тогда Операция.НоваяПроводка(); Операция.Дебет.Счет = СчетПоКоду("Н02.2"); Операция.Сумма = СуммаЗачета; Операция.СодержаниеПроводки = "Принятые расходы по материалам."; Если (НДС>0) и (ВыделятьВходящийНДС = 0) Тогда Операция.НоваяПроводка(); Операция.Кредит.Счет = СчетПоКоду("НДС"); Операция.Кредит.Контрагенты = Контрагент; Операция.Кредит.Договоры = Договор; Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = ПересчетВОсновнуюВалюту(НДС)*(СуммаЗачета/ПересчетВОсновнуюВалюту(Всего)); Операция.СодержаниеПроводки = "Учтен входной НДС"; КонецЕсли; КонецЕсли; Иначе Если (РасходыПоТоварам = Перечисление.ПорядокПризнанияРасходовПоТоварам.ПоОплатеПоставщику) и (СуммаЗачета > 0) Тогда Операция.НоваяПроводка(); Операция.Дебет.Счет = СчетПоКоду("Н02.2"); Операция.Сумма = СуммаЗачета; Операция.СодержаниеПроводки = "Принятые расходы по товарам."; Если (НДС>0) и (ВыделятьВходящийНДС = 0) Тогда Операция.НоваяПроводка(); Операция.Кредит.Счет = СчетПоКоду("НДС"); Операция.Кредит.Контрагенты = Контрагент; Операция.Кредит.Договоры = Договор; Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = ПересчетВОсновнуюВалюту(НДС)*(СуммаЗачета/ПересчетВОсновнуюВалюту(Всего)); Операция.СодержаниеПроводки = "Учтен входной НДС"; КонецЕсли; КонецЕсли; КонецЕсли; //Начало признание расходов по товарам и материалам в случае "По оплате поставщику" Если НДС>0 Тогда Если ВыделятьВходящийНДС = 1 Тогда //Запишем проводку по НДС Операция.НоваяПроводка(); Операция.СодержаниеПроводки = "Входной НДС по поступившим МПЗ"; Операция.Дебет.Счет = СчетПоКоду("19.2"); Операция.Дебет.Контрагенты = Контрагент; Операция.Дебет.Договоры = Договор; Операция.Дебет.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Кредит.Счет = СчетРасчетовСПоставщиком; Операция.Кредит.Контрагенты = Контрагент; Операция.Кредит.Договоры = Договор; Если (СчетРасчетовСПоставщиком = Сч60_2) или (СчетРасчетовСПоставщиком = Сч60_22) Тогда Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; КонецЕсли; Операция.Сумма = ПересчетВОсновнуюВалюту(НДС); Если ОплатаДоговора = 2 Тогда // договор валютный // контрагент является нерезидентом Операция.Валюта = ВалютаДоговора; Операция.ВалСумма = НДС; КонецЕсли; КонецЕсли; Операция.НоваяПроводка(); Операция.Дебет.Счет = СчетПоКоду("НДС"); Операция.Дебет.Контрагенты = Контрагент; Операция.Дебет.Договоры = Договор; Операция.Дебет.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = ПересчетВОсновнуюВалюту(НДС); Операция.СодержаниеПроводки = "Входной НДС по поступившим МПЗ"; Если ВыделятьВходящийНДС = 1 Тогда Если СуммаЗачетаНДС > 0 Тогда //Запишем проводку по НДС Операция.НоваяПроводка(); Операция.Кредит.Счет = СчетПоКоду("19.2"); Операция.Кредит.Субконто(1, Контрагент); Операция.Кредит.Субконто(2, Договор); Операция.Кредит.Субконто(3, Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов); Операция.СодержаниеПроводки = "Входной НДС оплачен поставщику"; Операция.Дебет.Счет = СчетПоКоду("90.4"); Операция.Сумма = СуммаЗачетаНДС; Операция.НоваяПроводка(); Операция.Дебет.Счет = СчетПоКоду("Н02.2"); Операция.Сумма = СуммаЗачетаНДС; Операция.СодержаниеПроводки = "Принятые расходы (НДС)."; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; //формирование проводок по ГТД Если ((Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.ТоварНаКомиссии) или (Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Товар)) и (ПустоеЗначение(ГТД) = 0) Тогда ТекстСообщения = ""+НомерСтроки+". Товар "+Номенклатура+" определен как импортный." + РазделительСтрок + " Поступление товара учтено по забалансовому счету ГТД."; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 0); Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.СодержаниеПроводки = "Поступил импортный товар"; Операция.Дебет.Счет = СчетПоКоду("ГТД"); Операция.Дебет.Номенклатура = Номенклатура; Операция.Дебет.ГТД = ГТД; Операция.Количество = Количество; КонецЕсли; // ХА СпрЦены.ИспользоватьВладельца(Номенклатура); СпрЦены.ВыбратьЭлементыПоРеквизиту("ТипЦен",Константа.ХА_ЗакупочныеЦены); НайденаЦена = 0; Если СпрЦены.ПолучитьЭлемент() = 1 Тогда УстановитьРеквизитСправочника(СпрЦены,"Цена",Цена); Иначе СпрЦены.Новый(); СпрЦены.ТипЦен = Константа.ХА_ЗакупочныеЦены; СпрЦены.Записать(); УстановитьРеквизитСправочника(СпрЦены,"Цена",Цена); КонецЕсли; // ХА КонецЦикла; //Проводки распределения по видам расчетов Если (СуммаЗадолженности > 0) и (СуммаДопАванса > 0) Тогда СуммаКорректировки = Мин(СуммаЗадолженности, СуммаДопАванса); Операция.НоваяПроводка(); Операция.СодержаниеПроводки = "Корректировка взаиморасчетов"; Операция.НомерЖурнала = "БК"; Операция.Дебет.Счет = СчетРасчетовСПоставщиком; Если (НеПринимаемые = 0) Тогда Операция.Дебет.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; КонецЕсли; Операция.Дебет.Контрагенты = Контрагент; Операция.Дебет.Договоры = Договор; Операция.Кредит.Счет = ?(ОплатаДоговора = 2,Сч60_22,Сч60_2); Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.ПрочиеРасходы; Операция.Кредит.Контрагенты = Контрагент; Операция.Кредит.Договоры = Договор; Если ОплатаДоговора = 2 Тогда Если ПустоеЗначение(ВалютаДоговора) = 0 Тогда Операция.Валюта = ВалютаДоговора; Кратность = ВалютаДоговора.Кратность.Получить(ДатаДок); Кратность = ?(Кратность = 0, 1, Кратность); Операция.ВалСумма = ?(Курс = 0, 0, СуммаКорректировки * Кратность/Курс); КонецЕсли; КонецЕсли; Операция.Сумма = СуммаКорректировки; КонецЕсли; Операция.СуммаОперации = ПересчетВОсновнуюВалюту(Итог("Всего")); Операция.Записать(); ТекстСообщения = "Документ проведен."; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 0); глПриПроведении(ТекущийДокумент()); КонецПроцедуры