Перем ВспомогательнаяТаблица; Перем ТаблицаДляВыбораДоговораПоставки; Перем ТаблицаКоррекции; Перем НеобходимоСписатьКоличество; Перем СуммаСписания; Перем БИОстаткиПоДоговорамК; Перем ПП_БИОстаткиПоДоговорам, ПП_БиНДС; Перем УчтенВходнойНДС; Перем ВыделятьВходящийНДС; Перем РасходыПоМатериалам; Перем БиНДС; Перем Метод; Перем БИОстаткиДляНДС; Перем БИОстаткиДляНДСК; // ХА Процедура УчестьСтоимостьРанееСписанныхМатериалов(ОтобратьПоДоговору, КоличествоНоменклатурыВсего, СуммаНоменклатурыВсего, СуммаНоменклатурыВсегоВал) Далее //Перем ВспомогательнаяТаблица; // //Процедура УчестьСтоимостьРанееСписанныхМатериалов(ОтобратьПоДоговору, КоличествоНоменклатурыВсего, СуммаНоменклатурыВсего, СуммаНоменклатурыВсегоВал) // // ВспомогательнаяТаблица.ВыбратьСтроки(); // Пока ВспомогательнаяТаблица.ПолучитьСтроку() = 1 Цикл // Если (ВспомогательнаяТаблица.Номенклатура = Номенклатура) // и (ВспомогательнаяТаблица.Договор = ОтобратьПоДоговору) Тогда // КоличествоНоменклатурыВсего = КоличествоНоменклатурыВсего - ВспомогательнаяТаблица.Количество; // СуммаНоменклатурыВсего = СуммаНоменклатурыВсего - ВспомогательнаяТаблица.Сумма; // СуммаНоменклатурыВсегоВал = СуммаНоменклатурыВсегоВал - ВспомогательнаяТаблица.ВалСумма; // КонецЕсли; // КонецЦикла; // //КонецПроцедуры // УчестьСтоимостьРанееСписанныхМатериалов() Функция ХА_ПеремещениеСАвтоподборомДоговора(БИ_1, БИ_2 = 0, БИОстаткиПоДоговорам=0) ОбъектНалогообложения = Константа.ОбъектНалогообложения.Получить(ДатаДок); ТаблицаДляВыбораДоговораПоставки = СоздатьОбъект("ТаблицаЗначений"); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("Договор", "Справочник.Договоры"); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("КоефОплаты", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("СуммаЗадолженности", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ОстатокМатериалов", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ОстатокМатериаловВал", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("КоличествоМатериала", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("СуммаМатериала", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("СуммаМатериалаВал", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ПринятоКРасходам", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ПринятоКРасходамВал", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ПП_ОстатокМатериалов", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ПП_ОстатокМатериаловВал", "Число", 15, 3); Если БИ_1.ПолучитьСубконто(ВидыСубконто.Номенклатура,, Номенклатура) =0 Тогда Возврат 0; КонецЕсли; Если ПустоеЗначение(Контрагент) = 0 Тогда Если БИ_1.ПолучитьСубконто(ВидыСубконто.Контрагенты,, Контрагент) = 0 Тогда ТекстСообщения = "На складе нет номенклатуры " + Номенклатура + ", которая поступила от контрагента " + Контрагент; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат 0; КонецЕсли; Иначе // необходимо сбросить ранее установленного контрагенра БИ_1.ПолучитьСубконто(ВидыСубконто.Контрагенты,, 0); КонецЕсли; ТаблицаДляВыбораДоговораПоставки.УдалитьСтроки(); Если Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.ТоварНаКомиссии Тогда СчетУч = "004"; ИначеЕсли Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар Тогда СчетУч = "41.2"; Иначе СчетУч = "10.2"; КонецЕсли; Если БИ_1.ПолучитьСчет(,СчетУч)=1 Тогда БИ_1.ВыбратьСубконто(3); Пока БИ_1.ПолучитьСубконто(3) = 1 Цикл ДоговорРасчетов = БИ_1.Субконто(3); КоличествоМатериала = БИ_1.СКД("К"); СуммаМатериала = БИ_1.СКД("С"); УчестьСтоимостьРанееСписанныхМатериалов(ДоговорРасчетов, КоличествоМатериала, СуммаМатериала,0); Если КоличествоМатериала > 0 Тогда ТаблицаДляВыбораДоговораПоставки.НоваяСтрока(); ТаблицаДляВыбораДоговораПоставки.Договор = ДоговорРасчетов; ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала = КоличествоМатериала; ТаблицаДляВыбораДоговораПоставки.СуммаМатериала = СуммаМатериала; КонецЕсли; КонецЦикла; КонецЕсли; ТаблицаДляВыбораДоговораПоставки.Сортировать("+КоефОплаты, КоличествоМатериала"); Возврат ТаблицаДляВыбораДоговораПоставки; //ОплаченнаяСуммаСписанияПоСтроке = ?(ВСчетАванса=0,0,СуммаСписанияПоСтроке*ВСчетАванса/ПересчетВОсновнуюВалюту(Сумма)); //ТаблицаДляВыбораДоговораПоставки.ВыбратьСтроки(); //Пока (ТаблицаДляВыбораДоговораПоставки.ПолучитьСтроку() = 1) // и (НеобходимоСписатьКоличество > 0) Цикл // РассчитатьСписаниеПоДоговору(БИ_2,ТаблицаДляВыбораДоговораПоставки.Договор, // ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала, // ТаблицаДляВыбораДоговораПоставки.СуммаМатериала, // ТаблицаДляВыбораДоговораПоставки.ОстатокМатериалов, // ТаблицаДляВыбораДоговораПоставки.СуммаЗадолженности, // ТаблицаДляВыбораДоговораПоставки.СуммаМатериалаВал, // ТаблицаДляВыбораДоговораПоставки.ОстатокМатериаловВал, // ТаблицаДляВыбораДоговораПоставки.ПринятоКРасходам, // ТаблицаДляВыбораДоговораПоставки.ПринятоКРасходамВал, // ТаблицаДляВыбораДоговораПоставки.ПП_ОстатокМатериалов, // ТаблицаДляВыбораДоговораПоставки.ПП_ОстатокМатериаловВал); // //КонецЦикла; КонецФункции // ПеремещениеСАвтоподборомДоговора() // ХА //****************************************************************************** Процедура ВыполнитьКорректировку(БИ, БИОстаткиПоДоговорам) ВспомогательнаяТаблица.Свернуть("Договор","Сумма"); //ВспомогательнаяТаблица.НоваяКолонка("НДС", "Число", 15, 2); ВспомогательнаяТаблица.НоваяКолонка("СписанныйНДС", "Число", 15, 2); ВспомогательнаяТаблица.НоваяКолонка("СуммаСписания", "Число", 15, 2); ТаблицаКоррекции.Сортировать("Договор+"); Если ВыделятьВходящийНДС = 1 Тогда ВспомогательнаяТаблица.ВыбратьСтроки(); Пока ВспомогательнаяТаблица.ПолучитьСтроку() = 1 Цикл Поз = 0; Если УчтенВходнойНДС.НайтиЗначение(ВспомогательнаяТаблица.Договор,Поз,"Договор")=1 Тогда ВспомогательнаяТаблица.СписанныйНДС = УчтенВходнойНДС.ПолучитьЗначение(Поз,"Сумма"); ВспомогательнаяТаблица.Сумма = ВспомогательнаяТаблица.Сумма + ВспомогательнаяТаблица.СписанныйНДС; Иначе ВспомогательнаяТаблица.СписанныйНДС = 0; КонецЕсли; КонецЦикла; КонецЕсли; Если РасходыПоМатериалам = Перечисление.ПорядокПризнанияМатериальныхРасходов.ПоОплатеПоставщику Тогда ВспомогательнаяТаблица.ВыбратьСтроки(); Пока ВспомогательнаяТаблица.ПолучитьСтроку() = 1 Цикл ВспомогательнаяТаблица.СуммаСписания = ВспомогательнаяТаблица.Сумма; КонецЦикла; КонецЕсли; ТаблицаКоррекции.ВыбратьСтроки(); Пока ТаблицаКоррекции.ПолучитьСтроку()=1 Цикл Дог = ТаблицаКоррекции.Договор; Сч = ТаблицаКоррекции.Счет; СумДолг = ТаблицаКоррекции.Сумма; Если ТаблицаКоррекции.Валюта.Выбран()=1 Тогда Валюта=ТаблицаКоррекции.Валюта; ВалСумма=ТаблицаКоррекции.ВалСумма; Иначе Валюта=""; ВалСумма=0; КонецЕсли; Если Сч = СчетПоКоду("60.2") Тогда СчКор = СчетПоКоду("60.1") ИначеЕсли Сч = СчетПоКоду("60.22") Тогда СчКор = СчетПоКоду("60.11") ИначеЕсли Сч = СчетПоКоду("60.4") Тогда СчКор = СчетПоКоду("60.3") ИначеЕсли Сч = СчетПоКоду("76.6") Тогда СчКор = СчетПоКоду("76.5") ИначеЕсли Сч = СчетПоКоду("71.2") Тогда СчКор = СчетПоКоду("71.1") КонецЕсли; Поз = 0; Если ВспомогательнаяТаблица.НайтиЗначение(Дог,Поз,"Договор")=1 Тогда СумСп = ВспомогательнаяТаблица.ПолучитьЗначение(Поз,"Сумма"); СумКор = Мин(СумСп,СумДолг); Разн = СумСп - СумКор; Если (ВалСумма>0)и(СумКор>0) Тогда ВалСумма = ?(СумДолг = 0, 0, ВалСумма*СумКор/СумДолг); КонецЕсли; ВспомогательнаяТаблица.УстановитьЗначение(Поз,"Сумма",?(Разн>0,Разн,0)); Если СумКор>0 тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = Сч; Операция.Дебет.Субконто(1,Дог.Владелец); Операция.Дебет.Субконто(2,Дог); Операция.Дебет.Субконто(3,Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов); Операция.Кредит.Счет = СчКор; Операция.Кредит.Субконто(1,Дог.Владелец); Операция.Кредит.Субконто(2,Дог); Если ВалСумма>0 Тогда Операция.ВалСумма=ВалСумма; Операция.Валюта=Валюта; КонецЕсли; Операция.Сумма = СумКор; Операция.СодержаниеПроводки = "Корректировка взаиморасчетов"; КонецЕсли; Если ВыделятьВходящийНДС = 1 Тогда СумСпНДС = ВспомогательнаяТаблица.ПолучитьЗначение(Поз,"СписанныйНДС"); СумКорНДС = Мин(СумСпНДС,?(СумСп = 0, 0, СумСпНДС * СумКор / СумСп)); Если БИ.ПолучитьСчет(,СчетПоКоду("19.2"))=1 Тогда ОстатокНДС = БИ.СКД("С"); БИ.ПолучитьСчет(,0); Иначе ОстатокНДС = 0; КонецЕсли; СумКорНДС = Мин(ОстатокНДС,СумКорНДС); Разн = СумСпНДС - СумКорНДС; Если (ВалСумма>0)и(СумКор>0) Тогда ВалСумма =?(СумДолг = 0, 0, ВалСумма*СумКор/СумДолг); КонецЕсли; ВспомогательнаяТаблица.УстановитьЗначение(Поз,"СписанныйНДС",?(Разн>0,Разн,0)); Если СумКорНДС>0 тогда Операция.НоваяПроводка(); Если (СчетЗатрат = СчетПоКоду("08.3")) или (СчетЗатрат = СчетПоКоду("08.4")) Тогда Операция.НомерЖурнала = "ОС"; Операция.Дебет.Счет = СчетЗатрат; Операция.Дебет.Субконто(1, Субконто1); Операция.Дебет.Субконто(2, Субконто2); Операция.Дебет.Субконто(3, Субконто3); Иначе Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетПоКоду("19.1"); Операция.Дебет.Субконто(1,Дог.Владелец); Операция.Дебет.Субконто(2,Дог); КонецЕсли; Операция.Кредит.Счет = СчетПоКоду("19.2"); Операция.Кредит.Субконто(1,Дог.Владелец); Операция.Кредит.Субконто(2,Дог); Операция.Кредит.Субконто(3,Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов); Операция.Сумма = СумКорНДС; Операция.СодержаниеПроводки = "Корректировка НДС"; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Если ВыделятьВходящийНДС = 1 Тогда ВспомогательнаяТаблица.ВыбратьСтроки(); Пока ВспомогательнаяТаблица.ПолучитьСтроку() = 1 Цикл Если ВспомогательнаяТаблица.СписанныйНДС > 0 Тогда Если (СчетЗатрат = СчетПоКоду("08.3")) или (СчетЗатрат = СчетПоКоду("08.4")) Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ОС"; Операция.Кредит.Счет = СчетЗатрат; Операция.Кредит.Субконто(1, Субконто1); Операция.Кредит.Субконто(2, Субконто2); Операция.Кредит.Субконто(3, Субконто3); Операция.Дебет.Счет = СчетПоКоду("90.4"); Операция.Сумма = - ВспомогательнаяТаблица.СписанныйНДС; Операция.СодержаниеПроводки = "Корректировка НДС"; КонецЕсли; Операция.НоваяПроводка(); Операция.НомерЖурнала = "НУ"; Операция.Дебет.Счет = СчетПоКоду("Н02.2"); Операция.Сумма = - ВспомогательнаяТаблица.СписанныйНДС; Операция.СодержаниеПроводки = "Сторнирован входящий НДС."; ВспомогательнаяТаблица.Сумма = ВспомогательнаяТаблица.Сумма - ВспомогательнаяТаблица.СписанныйНДС; КонецЕсли; КонецЦикла; КонецЕсли; Если РасходыПоМатериалам = Перечисление.ПорядокПризнанияМатериальныхРасходов.ПоОплатеПоставщику Тогда ВспомогательнаяТаблица.ВыбратьСтроки(); Пока ВспомогательнаяТаблица.ПолучитьСтроку() = 1 Цикл Если ВспомогательнаяТаблица.Сумма > 0 Тогда ДоговорРасчетов = ВспомогательнаяТаблица.Договор; // Рассчитаем стоимость остатка материалов и ТЗР, приобретнных по данному договору. ОстатокМатериалов = 0; Если БИОстаткиПоДоговорам.ПолучитьСубконто(ВидыСубконто.Договоры,, ДоговорРасчетов) = 1 Тогда ОстатокМатериалов = БИОстаткиПоДоговорам.СКД("С"); КонецЕсли; Если БИОстаткиПоДоговорамК.ПолучитьСубконто(ВидыСубконто.ДоговорыПоставки,, ДоговорРасчетов) = 1 Тогда ОстатокМатериалов= ОстатокМатериалов + БИОстаткиПоДоговорамК.СКД("С"); КонецЕсли; Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда Если ПП_БИОстаткиПоДоговорам.ПолучитьСубконто(ВидыСубконто.Договоры,, ДоговорРасчетов) = 1 Тогда ОстатокМатериалов = ОстатокМатериалов - ПП_БИОстаткиПоДоговорам.СКД("С"); КонецЕсли; КонецЕсли; СуммаРасходов = Мин(ОстатокМатериалов + ВспомогательнаяТаблица.Сумма, ВспомогательнаяТаблица.СуммаСписания); Если СуммаРасходов > 0 Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "НУ"; Операция.Дебет.Счет = СчетПоКоду("Н02.2"); Операция.Сумма = - СуммаРасходов; Операция.СодержаниеПроводки = "Сторнированы ранее принятые расходы."; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры //****************************************************************************** Процедура УчестьВТаблицеКор(БИт,Дог) ВыбСч = БИт.Счет; ФлЕсть = 0; ТаблицаКоррекции.ВыбратьСтроки(); Пока ТаблицаКоррекции.ПолучитьСтроку()=1 Цикл Если (ТаблицаКоррекции.Счет = ВыбСч) и (ТаблицаКоррекции.Договор = Дог) Тогда ФлЕсть = 1; Прервать; КонецЕсли; КонецЦикла; Если ФлЕсть = 0 Тогда ТаблицаКоррекции.НоваяСтрока(); ТаблицаКоррекции.Счет = ВыбСч; ТаблицаКоррекции.Договор = Дог; Если Дог.ОплатаДоговора = 2 Тогда ТаблицаКоррекции.Валюта = Дог.ВалютаДоговора; БИт.ПолучитьВалюту(,Дог.ВалютаДоговора); ТаблицаКоррекции.ВалСумма = БИт.СКК("В"); КонецЕсли; ТаблицаКоррекции.Сумма = БИт.СКК("С"); КонецЕсли; КонецПроцедуры //****************************************************************************** // СформироватьПроводки() // // Параметры: // Нет. // // Вызывается из формул элементов диалога: // Нет. // // Описание: // Здесь описывается процедура. // Процедура СформироватьПроводки(СуммаРасходов = 0, НДС = 0, СуммаРасходовВал = 0, ПП_СуммаРасходов = 0 , ПП_СуммаРасходовВал = 0, ПП_НДС = 0, НДС_Сч19 = 0) Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетЗатрат; Операция.Дебет.Субконто(1, Субконто1); Операция.Дебет.Субконто(2, Субконто2); Операция.Дебет.Субконто(3, Субконто3); Операция.Кредит.Счет = СчетПоКоду("10.2"); Если (ВспомогательнаяТаблица.ВалСумма<>0) и (Метод = 1) Тогда Операция.Кредит.Счет = СчетПоКоду("10.3"); Операция.Валюта = ВспомогательнаяТаблица.Договор.ВалютаДоговора; Операция.ВалСумма= ВспомогательнаяТаблица.ВалСумма; КонецЕсли; Операция.Кредит.Номенклатура = Номенклатура; Операция.Кредит.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Кредит.Договоры = ВспомогательнаяТаблица.Договор; Операция.Количество = ВспомогательнаяТаблица.Количество; Операция.Сумма = ВспомогательнаяТаблица.Сумма; Операция.СодержаниеПроводки = "Перемещение МПЗ"; СуммаСписания = СуммаСписания + ВспомогательнаяТаблица.Сумма; Если СуммаРасходов <> 0 Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "НУ"; Операция.Дебет.Счет = СчетПоКоду("Н02.2"); Операция.Сумма = СуммаРасходов; Операция.СодержаниеПроводки = "Принятые расходы"; КонецЕсли; Если НДС>0 Тогда Операция.НоваяПроводка(); Если УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.Принимаются Тогда Операция.Кредит.Счет = СчетПоКоду("НДС"); Операция.Кредит.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Кредит.Договоры = ВспомогательнаяТаблица.Договор; Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = НДС; Операция.СодержаниеПроводки = "Учтен входной НДС"; Иначе Операция.Дебет.Счет = СчетПоКоду("НДС"); Операция.Дебет.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Дебет.Договоры = ВспомогательнаяТаблица.Договор; Операция.Дебет.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = - НДС; Операция.СодержаниеПроводки = "Корректировка входного НДС"; КонецЕсли; СтрокаТЗ=0; Если УчтенВходнойНДС.НайтиЗначение(ВспомогательнаяТаблица.Договор,СтрокаТЗ,1)=1 Тогда УчтенВходнойНДС.УстановитьЗначение(СтрокаТЗ,2,УчтенВходнойНДС.ПолучитьЗначение(СтрокаТЗ,2)+НДС); Иначе УчтенВходнойНДС.НоваяСтрока(); УчтенВходнойНДС.Договор = ВспомогательнаяТаблица.Договор; УчтенВходнойНДС.Сумма = НДС; КонецЕсли; КонецЕсли; //****************************** //Положения 2009 года Если ДатаДок >= '01.01.2009' Тогда Если ПП_НДС > 0 Тогда Операция.НоваяПроводка(); Операция.Кредит.Счет = СчетПоКоду("ПП.Н"); Операция.Кредит.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Кредит.Договоры = ВспомогательнаяТаблица.Договор; Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = ПП_НДС; Операция.СодержаниеПроводки = "Списание НДС переходного периода"; //Корректировка счета НДС Операция.НоваяПроводка(); Операция.Дебет.Счет = СчетПоКоду("НДС"); Операция.Дебет.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Дебет.Договоры = ВспомогательнаяТаблица.Договор; Операция.Дебет.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = - ПП_НДС; Операция.СодержаниеПроводки = "Корректировка входного НДС"; Если УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.НеПринимаются Тогда //Корректировка принятого НДС Операция.НоваяПроводка(); Операция.НомерЖурнала = "НУ"; Операция.Дебет.Счет = СчетПоКоду("Н02.2"); Операция.Сумма = - ПП_НДС; Операция.СодержаниеПроводки = "Сторнирован входящий НДС."; КонецЕсли; Если НДС_Сч19 > 0 Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетЗатрат; Операция.Дебет.Субконто(1, Субконто1); Операция.Дебет.Субконто(2, Субконто2); Операция.Дебет.Субконто(3, Субконто3); Операция.Кредит.Счет = СчетПоКоду("19.2"); Операция.Кредит.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Кредит.Договоры = ВспомогательнаяТаблица.Договор; Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = НДС_Сч19; Операция.СодержаниеПроводки = "Включен НДС в стоимость материалов"; КонецЕсли; Если УчтенВходнойНДС.НайтиЗначение(ВспомогательнаяТаблица.Договор,СтрокаТЗ,1)=1 Тогда УчтенВходнойНДС.УстановитьЗначение(СтрокаТЗ,3,УчтенВходнойНДС.ПолучитьЗначение(СтрокаТЗ,3)+ПП_НДС); Иначе УчтенВходнойНДС.НоваяСтрока(); УчтенВходнойНДС.Договор = ВспомогательнаяТаблица.Договор; УчтенВходнойНДС.ПП_Сумма = ПП_НДС; КонецЕсли; Операция.ЗаписатьПроводки(); КонецЕсли; Если (СуммаРасходовВал <> 0) И (ПП_СуммаРасходовВал > 0) Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ПП"; Операция.Кредит.Счет = СчетПоКоду("ПП.М.2"); Операция.Кредит.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Кредит.Договоры = ВспомогательнаяТаблица.Договор; Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = Мин(ПП_СуммаРасходов/ПП_СуммаРасходовВал*СуммаРасходовВал,ПП_СуммаРасходов);; Операция.Валюта = ВспомогательнаяТаблица.Договор.ВалютаДоговора; Операция.ВалСумма = Мин(СуммаРасходовВал,ПП_СуммаРасходовВал); Операция.СодержаниеПроводки = "Списание расходов переходного периода"; ИначеЕсли (СуммаРасходов <> 0) И (ПП_СуммаРасходов > 0) Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ПП"; Операция.Кредит.Счет = СчетПоКоду("ПП.М.1"); Операция.Кредит.Контрагенты = ВспомогательнаяТаблица.Договор.Владелец; Операция.Кредит.Договоры = ВспомогательнаяТаблица.Договор; Операция.Кредит.ВидыРасчетовСПоставщиками = Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов; Операция.Сумма = Мин(ПП_СуммаРасходов, СуммаРасходов); Операция.СодержаниеПроводки = "Списание расходов переходного периода"; КонецЕсли; КонецЕсли; //****************************** КонецПроцедуры // СформироватьПроводки() //****************************************************************************** // УчестьСтоимостьРанееСписанныхМатериалов() // // Параметры: // Нет. // // Вызывается из формул элементов диалога: // Нет. // // Описание: // Здесь описывается процедура. // Процедура УчестьСтоимостьРанееСписанныхМатериалов(ОтобратьПоДоговору, КоличествоНоменклатурыВсего, СуммаНоменклатурыВсего, СуммаНоменклатурыВсегоВал) ВспомогательнаяТаблица.ВыбратьСтроки(); Пока ВспомогательнаяТаблица.ПолучитьСтроку() = 1 Цикл Если (ВспомогательнаяТаблица.Номенклатура = Номенклатура) и (ВспомогательнаяТаблица.Договор = ОтобратьПоДоговору) Тогда КоличествоНоменклатурыВсего = КоличествоНоменклатурыВсего - ВспомогательнаяТаблица.Количество; СуммаНоменклатурыВсего = СуммаНоменклатурыВсего - ВспомогательнаяТаблица.Сумма; СуммаНоменклатурыВсегоВал = СуммаНоменклатурыВсегоВал - ВспомогательнаяТаблица.ВалСумма; КонецЕсли; КонецЦикла; КонецПроцедуры // УчестьСтоимостьРанееСписанныхМатериалов() //****************************************************************************** // УчестьСтоимостьРанееСписанныхМатериаловПоДоговору() // // Параметры: // Нет. // // Вызывается из формул элементов диалога: // Нет. // // Описание: // Здесь описывается процедура. // Процедура УчестьСтоимостьРанееСписанныхМатериаловПоДоговору(ОтобратьПоДоговору, СуммаМатерилов, СуммаМатериловВал) ВспомогательнаяТаблица.ВыбратьСтроки(); Пока ВспомогательнаяТаблица.ПолучитьСтроку() = 1 Цикл Если ВспомогательнаяТаблица.Договор = ОтобратьПоДоговору Тогда СуммаМатерилов = СуммаМатерилов - ВспомогательнаяТаблица.Сумма; СуммаМатериловВал = СуммаМатериловВал - ВспомогательнаяТаблица.ВалСумма; КонецЕсли; КонецЦикла; КонецПроцедуры // УчестьСтоимостьРанееСписанныхМатериаловПоДоговору() //****************************************************************************** // СуммаЗадолженности() // // Параметры: // Нет. // // Возвращаемое значение: // Здесь описывается возвращаемое значение. // // Вызывается из формул элементов диалога: // Нет. // // Описание: // Здесь описывается функция. // Функция СуммаЗадолженности(БухИт) Задолженность = 0; ДоговорОплаты = БухИт.Субконто(ВидыСубконто.Договоры); ОплатаДоговора = ДоговорОплаты.ОплатаДоговора; Если ОплатаДоговора = 2 Тогда Валюта = ДоговорОплаты.ВалютаДоговора; Если БухИт.ПолучитьВалюту(, Валюта) = 1 Тогда Если Метод = 0 Тогда Курс = Валюта.Курс.Получить(ДатаДок); Кратность = Валюта.Кратность.Получить(ДатаДок); Кратность = ?(Кратность = 0, 1, Кратность); Задолженность = БухИт.СКК("В")* Курс / Кратность; Иначе Задолженность = БухИт.СКК("В"); КонецЕсли; БухИт.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; Иначе Задолженность = БухИт.СКК("С"); КонецЕсли; Возврат Задолженность; КонецФункции // СуммаЗадолженности() //****************************************************************************** // Рассчитать() // // Параметры: // Нет. // // Вызывается из формул элементов диалога: // Нет. // // Описание: // Здесь описывается процедура. // Процедура Рассчитать(БухИт, ДоговорРасчетов, КоличествоНоменклатурыВсего, СуммаНоменклатурыВсего, СуммаЗадолженности, СуммаМатериаловПоДоговору, СуммаНоменклатурыВсегоВал, СуммаМатериаловПоДоговоруВал, ПП_СуммаМатериаловПоДоговору = 0, ПП_СуммаМатериаловПоДоговоруВал = 0) ПП_НДС_Сч19 = 0; Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда Если (ДатаДок >= '01.01.2009') И (ВыделятьВходящийНДС = 0) Тогда ПП_НДС_Сч19 = ПП_БиНДС.СКД("19.2",,,,ДоговорРасчетов,); КонецЕсли; КонецЕсли; Если КоличествоНоменклатурыВсего <= НеобходимоСписатьКоличество Тогда КоличествоСписано = КоличествоНоменклатурыВсего; СуммаСписано = СуммаНоменклатурыВсего; СуммаСписаноВал = СуммаНоменклатурыВсегоВал; Иначе КоличествоСписано = НеобходимоСписатьКоличество; СуммаСписано = НеобходимоСписатьКоличество*(СуммаНоменклатурыВсего/КоличествоНоменклатурыВсего); СуммаСписаноВал = НеобходимоСписатьКоличество*(СуммаНоменклатурыВсегоВал/КоличествоНоменклатурыВсего); ПП_НДС_Сч19 = НеобходимоСписатьКоличество*(ПП_НДС_Сч19/КоличествоНоменклатурыВсего); КонецЕсли; НеобходимоСписатьКоличество = НеобходимоСписатьКоличество - КоличествоСписано; Если (ДоговорРасчетов.ОплатаДоговора = 2) и (Метод = 1) Тогда КурсДок = ДоговорРасчетов.ВалютаДоговора.Курс.Получить(ДатаДок); КратностьДок = ДоговорРасчетов.ВалютаДоговора.Кратность.Получить(ДатаДок); КурсДок = ?(КурсДок = 0,1,КурсДок); КратностьДок = ?(КратностьДок = 0,1,КратностьДок); Если ((РасходыПоМатериалам = Перечисление.ПорядокПризнанияМатериальныхРасходов.ПоОплатеПоставщику) и (Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Материал)) Тогда СуммаМатериаловПоДоговоруВал = СуммаЗадолженности + ПП_СуммаМатериаловПоДоговоруВал; КонецЕсли; СуммаРасходовВал = Мин(Макс(0, СуммаМатериаловПоДоговоруВал - СуммаЗадолженности), СуммаСписаноВал); СуммаРасходов = Мин(Макс(0, СуммаМатериаловПоДоговоруВал - СуммаЗадолженности), СуммаСписаноВал) * КурсДок / КратностьДок; КурсПоступления = ?(СуммаНоменклатурыВсегоВал<>0, СуммаНоменклатурыВсего/СуммаНоменклатурыВсегоВал, 1); НеПринятыхМПЗ = Макс(0,СуммаМатериаловПоДоговору,СуммаЗадолженности*КурсПоступления); Иначе Если ((РасходыПоМатериалам = Перечисление.ПорядокПризнанияМатериальныхРасходов.ПоОплатеПоставщику) и (Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Материал)) Тогда СуммаМатериаловПоДоговору = СуммаЗадолженности + ПП_СуммаМатериаловПоДоговору; КонецЕсли; СуммаРасходовВал = 0; СуммаРасходов = Мин(Макс(0, СуммаМатериаловПоДоговору - СуммаЗадолженности), СуммаСписано + ПП_НДС_Сч19); НеПринятыхМПЗ = Макс(0,СуммаМатериаловПоДоговору,СуммаЗадолженности); КонецЕсли; Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда Если ВыделятьВходящийНДС = 1 Тогда НеПринятыхМПЗ = 0; Если БИОстаткиДляНДС.ПолучитьСубконто(1,,ДоговорРасчетов)=1 Тогда НеПринятыхМПЗ = НеПринятыхМПЗ + Макс(0, БИОстаткиДляНДС.СКД()); КонецЕсли; Если БИОстаткиДляНДСК.ПолучитьСубконто(1,,ДоговорРасчетов)=1 Тогда НеПринятыхМПЗ = НеПринятыхМПЗ + Макс(0, БИОстаткиДляНДСК.СКД()); КонецЕсли; УчестьСтоимостьРанееСписанныхМатериаловПоДоговору(ДоговорРасчетов, НеПринятыхМПЗ, 0); КонецЕсли; КонецЕсли; ВспомогательнаяТаблица.НоваяСтрока(); ВспомогательнаяТаблица.НОменклатура = Номенклатура; ВспомогательнаяТаблица.Договор = ДоговорРасчетов; ВспомогательнаяТаблица.Количество = КоличествоСписано; ВспомогательнаяТаблица.Сумма = СуммаСписано; ВспомогательнаяТаблица.ВалСумма = СуммаСписаноВал; НДС = 0; ПП_НДС = 0; НДС_Сч19 = 0; Если БиНДС.ПолучитьСубконто(1,,ДоговорРасчетов.Владелец)=1 Тогда Если БиНДС.ПолучитьСубконто(2,,ДоговорРасчетов) = 1 Тогда Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда НДС_Сч19 = ПП_БиНДС.СКД("19.2",,,,ДоговорРасчетов,); ПП_НДС = ПП_БиНДС.СКД("ПП.Н",,,,ДоговорРасчетов,); КонецЕсли; СтрокаТЗ=0; Если УчтенВходнойНДС.НайтиЗначение(ДоговорРасчетов,СтрокаТЗ,1)=1 Тогда СписаноНДС = УчтенВходнойНДС.ПолучитьЗначение(СтрокаТЗ,2); Иначе СписаноНДС = 0; КонецЕсли; Если (ВыделятьВходящийНДС = 1) Тогда СуммаДляНДС = СуммаСписано; Иначе СуммаДляНДС = СуммаРасходов; КонецЕсли; ПП_СуммаСписано = СуммаСписано + ПП_НДС_Сч19; СуммаДляНДС = СуммаДляНДС - ПП_НДС_Сч19; НДС = Мин(?(НеПринятыхМПЗ>0,(СуммаДляНДС*(БиНДС.СКД()-СписаноНДС)/НеПринятыхМПЗ ), (БиНДС.СКД()-СписаноНДС)), (БиНДС.СКД()-СписаноНДС)); Если ПП_СуммаМатериаловПоДоговору*ПП_НДС = 0 Тогда ПП_НДС = 0; Иначе ПП_НДС = ?(ПП_СуммаСписано >= ПП_СуммаМатериаловПоДоговору, ПП_НДС,ПП_СуммаСписано/ПП_СуммаМатериаловПоДоговору*ПП_НДС); КонецЕсли; Если ПП_СуммаМатериаловПоДоговору*НДС_Сч19 = 0 Тогда НДС_Сч19 = 0; Иначе НДС_Сч19 = ?(ПП_СуммаСписано >= ПП_СуммаМатериаловПоДоговору, ПП_НДС_Сч19,ПП_СуммаСписано/ПП_СуммаМатериаловПоДоговору*ПП_НДС_Сч19); КонецЕсли; //Досписываем остаток со счета НДС, т.к. его больше быть не должно Если (ПП_НДС <> 0) ИЛИ (НДС_Сч19 <> 0) Тогда Если (НДС > 0) И (ПП_НДС_Сч19 = 0) И (ВыделятьВходящийНДС = 0) И (ДатаДок >= '01.01.2009') Тогда НДС = НДС - ПП_НДС; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если (УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.Принимаются) и (СчетЗатрат <> СчетПоКоду("08.3")) и (СчетЗатрат <> СчетПоКоду("08.4")) Тогда СформироватьПроводки(СуммаРасходов,НДС,СуммаРасходовВал, ПП_СуммаМатериаловПоДоговору,ПП_СуммаМатериаловПоДоговоруВал,ПП_НДС,НДС_Сч19); Иначе НДС = 0; Если БиНДС.ПолучитьСубконто(1,,ДоговорРасчетов.Владелец)=1 Тогда Если БиНДС.ПолучитьСубконто(2,,ДоговорРасчетов) = 1 Тогда СтрокаТЗ=0; Если УчтенВходнойНДС.НайтиЗначение(ДоговорРасчетов,СтрокаТЗ,1)=1 Тогда СписаноНДС = УчтенВходнойНДС.ПолучитьЗначение(СтрокаТЗ,2); Иначе СписаноНДС = 0; КонецЕсли; НДС = Мин(?(НеПринятыхМПЗ = 0, 0,(СуммаСписано*(БиНДС.СКД()-СписаноНДС)/НеПринятыхМПЗ )), (БиНДС.СКД()-СписаноНДС)); КонецЕсли; КонецЕсли; Если БухИт.ПолучитьСубконто(ВидыСубконто.Договоры,, ДоговорРасчетов) = 1 Тогда БухИт.ВыбратьСчета(); Пока БухИт.ПолучитьСчет()=1 Цикл Если БухИт.Счет = СчетПоКоду("19.2") Тогда Продолжить; КонецЕсли; УчестьВТаблицеКор(БухИт, ДоговорРасчетов); КонецЦикла; КонецЕсли; Если НДС>0 Тогда СформироватьПроводки(0,НДС,0,0,0,ПП_НДС,НДС_Сч19); Иначе СформироватьПроводки(0,0); КонецЕсли; КонецЕсли; КонецПроцедуры // Рассчитать() //****************************************************************************** // ПеремещениеПоУказанномуДоговору() // // Параметры: // Нет. // // Вызывается из формул элементов диалога: // Нет. // // Описание: // Здесь описывается процедура. // Процедура ПеремещениеПоУказанномуДоговору(БИ1, БИ2, БИОстаткиПоДоговорам) Если БИ1.ПолучитьСубконто(ВидыСубконто.Договоры,, Договор) = 1 Тогда КоличествоМатериала = БИ1.СКД("К"); СуммаМатериала = БИ1.СКД("С"); СуммаМатериалаВал = 0; Если Договор.ОплатаДоговора = 2 Тогда Если БИ1.ПолучитьВалюту(, Договор.ВалютаДоговора) = 1 Тогда СуммаМатериалаВал = БИ1.СКД("В"); БИ1.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; УчестьСтоимостьРанееСписанныхМатериалов(Договор, КоличествоМатериала, СуммаМатериала, СуммаМатериалаВал); // Рассчитаем задолженность по данному договору. СуммаЗадолженности = 0; Если БИ2.ПолучитьСубконто(ВидыСубконто.Договоры,, Договор) = 1 Тогда СуммаЗадолженности = СуммаЗадолженности(БИ2); КонецЕсли; // Рассчитаем стоимость остатка материалов и ТЗР, приобретнных по данному договору. ОстатокМатериалов = 0; ОстатокМатериаловВал = 0; Если БИОстаткиПоДоговорам.ПолучитьСубконто(ВидыСубконто.Договоры,, Договор) = 1 Тогда ОстатокМатериалов = БИОстаткиПоДоговорам.СКД("С"); Если Договор.ОплатаДоговора = 2 Тогда Если БИОстаткиПоДоговорам.ПолучитьВалюту(, Договор.ВалютаДоговора) = 1 Тогда ОстатокМатериаловВал = БИОстаткиПоДоговорам.СКД("В"); БИОстаткиПоДоговорам.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; КонецЕсли; ПП_ОстатокМатериалов = 0; ПП_ОстатокМатериаловВал = 0; Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда Если ПП_БИОстаткиПоДоговорам.ПолучитьСубконто(ВидыСубконто.Договоры,, Договор) = 1 Тогда ПП_ОстатокМатериалов = ПП_БИОстаткиПоДоговорам.СКД("С"); Если Договор.ОплатаДоговора = 2 Тогда Если ПП_БИОстаткиПоДоговорам.ПолучитьВалюту(, Договор.ВалютаДоговора) = 1 Тогда ПП_ОстатокМатериаловВал = ПП_БИОстаткиПоДоговорам.СКД("В"); ПП_БИОстаткиПоДоговорам.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если БИОстаткиПоДоговорамК.ПолучитьСубконто(ВидыСубконто.ДоговорыПоставки,, Договор) = 1 Тогда ОстатокМатериалов= ОстатокМатериалов + БИОстаткиПоДоговорамК.СКД("С"); Если Договор.ОплатаДоговора = 2 Тогда Если БИОстаткиПоДоговорамК.ПолучитьВалюту(, Договор.ВалютаДоговора) = 1 Тогда ОстатокМатериаловВал= ОстатокМатериаловВал + БИОстаткиПоДоговорамК.СКД("В"); БИОстаткиПоДоговорамК.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; КонецЕсли; // Учтем материалы уже списанные данным документом. УчестьСтоимостьРанееСписанныхМатериаловПоДоговору(Договор, ОстатокМатериалов, ОстатокМатериаловВал); Если (ПП_ОстатокМатериалов <> 0) ИЛИ (ПП_ОстатокМатериаловВал <> 0) Тогда УчестьСтоимостьРанееСписанныхМатериаловПоДоговору(Договор, ПП_ОстатокМатериалов, ПП_ОстатокМатериаловВал); КонецЕсли; Рассчитать(БИ2, Договор, КоличествоМатериала, СуммаМатериала, СуммаЗадолженности, ОстатокМатериалов, СуммаМатериалаВал, ОстатокМатериаловВал, ПП_ОстатокМатериалов, ПП_ОстатокМатериаловВал); КонецЕсли; КонецПроцедуры // ПеремещениеПоУказанномуДоговору() //****************************************************************************** // ПеремещениеСАвтоподборомДоговора() // // Параметры: // Нет. // // Вызывается из формул элементов диалога: // Нет. // // Описание: // Здесь описывается процедура. // Процедура ПеремещениеСАвтоподборомДоговора(БИ1, БИ2, БИОстаткиПоДоговорам) Если ПустоеЗначение(Контрагент) = 0 Тогда Если БИ1.ПолучитьСубконто(ВидыСубконто.Контрагенты,, Контрагент) = 0 Тогда ТекстСообщения = "На складе нет номенклатуры " + Номенклатура + ", которая поступила от контрагента " + Контрагент; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; КонецЕсли; Иначе // необходимо сбросить ранее установленного контрагенра БИ1.ПолучитьСубконто(ВидыСубконто.Контрагенты,, 0); КонецЕсли; ТаблицаДляВыбораДоговораПоставки.УдалитьСтроки(); БИ1.ВыбратьСубконто(ВидыСубконто.Договоры); Пока БИ1.ПолучитьСубконто(ВидыСубконто.Договоры) = 1 Цикл ДоговорРасчетов = БИ1.Субконто(ВидыСубконто.Договоры); КоличествоМатериала = БИ1.СКД("К"); СуммаМатериала = БИ1.СКД("С"); СуммаМатериалаВал = 0; Если ДоговорРасчетов.ОплатаДоговора = 2 Тогда Если БИ1.ПолучитьВалюту(, ДоговорРасчетов.ВалютаДоговора) = 1 Тогда СуммаМатериалаВал = БИ1.СКД("В"); БИ1.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; УчестьСтоимостьРанееСписанныхМатериалов(ДоговорРасчетов, КоличествоМатериала, СуммаМатериала, СуммаМатериалаВал); Если КоличествоМатериала > 0 Тогда // Рассчитаем задолженность по данному договору. СуммаЗадолженности = 0; Если БИ2.ПолучитьСубконто(ВидыСубконто.Договоры,, ДоговорРасчетов) = 1 Тогда СуммаЗадолженности = СуммаЗадолженности(БИ2); КонецЕсли; // Рассчитаем стоимость остатка материалов и ТЗР, приобретнных по данному договору. ОстатокМатериалов = 0; ОстатокМатериаловВал = 0; Если БИОстаткиПоДоговорам.ПолучитьСубконто(ВидыСубконто.Договоры,, ДоговорРасчетов) = 1 Тогда ОстатокМатериалов = БИОстаткиПоДоговорам.СКД("С"); Если ДоговорРасчетов.ОплатаДоговора = 2 Тогда Если БИОстаткиПоДоговорам.ПолучитьВалюту(, ДоговорРасчетов.ВалютаДоговора) = 1 Тогда ОстатокМатериаловВал = БИОстаткиПоДоговорам.СКД("В"); БИОстаткиПоДоговорам.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; КонецЕсли; Если БИОстаткиПоДоговорамК.ПолучитьСубконто(ВидыСубконто.ДоговорыПоставки,, ДоговорРасчетов) = 1 Тогда ОстатокМатериалов= ОстатокМатериалов + БИОстаткиПоДоговорамК.СКД("С"); Если ДоговорРасчетов.ОплатаДоговора = 2 Тогда Если БИОстаткиПоДоговорамК.ПолучитьВалюту(, ДоговорРасчетов.ВалютаДоговора) = 1 Тогда ОстатокМатериаловВал= ОстатокМатериаловВал + БИОстаткиПоДоговорамК.СКД("В"); БИОстаткиПоДоговорамК.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; КонецЕсли; ПП_ОстатокМатериалов = 0; ПП_ОстатокМатериаловВал = 0; Если (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда Если ПП_БИОстаткиПоДоговорам.ПолучитьСубконто(ВидыСубконто.Договоры,, ДоговорРасчетов) = 1 Тогда ПП_ОстатокМатериалов = ПП_БИОстаткиПоДоговорам.СКД("С"); Если ДоговорРасчетов.ОплатаДоговора = 2 Тогда Если ПП_БИОстаткиПоДоговорам.ПолучитьВалюту(, ДоговорРасчетов.ВалютаДоговора) = 1 Тогда ПП_ОстатокМатериаловВал = ПП_БИОстаткиПоДоговорам.СКД("В"); ПП_БИОстаткиПоДоговорам.ПолучитьВалюту(, 0);// сбросим выбор валюты КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если ДоговорРасчетов.ОплатаДоговора = 2 Тогда КоефОплатыДоговора = СуммаЗадолженности/?(ОстатокМатериаловВал=0,0.01,ОстатокМатериаловВал); Иначе КоефОплатыДоговора = СуммаЗадолженности/?(ОстатокМатериалов=0,0.01,ОстатокМатериалов); КонецЕсли; УчестьСтоимостьРанееСписанныхМатериаловПоДоговору(ДоговорРасчетов, ОстатокМатериалов, ОстатокМатериаловВал); Если (ПП_ОстатокМатериалов <> 0) ИЛИ (ПП_ОстатокМатериаловВал <> 0) Тогда УчестьСтоимостьРанееСписанныхМатериаловПоДоговору(ДоговорРасчетов, ПП_ОстатокМатериалов, ПП_ОстатокМатериаловВал); КонецЕсли; ТаблицаДляВыбораДоговораПоставки.НоваяСтрока(); ТаблицаДляВыбораДоговораПоставки.Договор = ДоговорРасчетов; ТаблицаДляВыбораДоговораПоставки.КоефОплаты = КоефОплатыДоговора; ТаблицаДляВыбораДоговораПоставки.СуммаЗадолженности = СуммаЗадолженности; ТаблицаДляВыбораДоговораПоставки.ОстатокМатериалов = ОстатокМатериалов; ТаблицаДляВыбораДоговораПоставки.ОстатокМатериаловВал= ОстатокМатериаловВал; ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала = КоличествоМатериала; ТаблицаДляВыбораДоговораПоставки.СуммаМатериала = СуммаМатериала; ТаблицаДляВыбораДоговораПоставки.СуммаМатериалаВал = СуммаМатериалаВал; ТаблицаДляВыбораДоговораПоставки.ПП_ОстатокМатериалов = ПП_ОстатокМатериалов; ТаблицаДляВыбораДоговораПоставки.ПП_ОстатокМатериаловВал= ПП_ОстатокМатериаловВал; КонецЕсли; КонецЦикла; // Если расходы принимаются к налоговому учету, то в первую очередь // будут списываться самые оплаченные и самые маленькие партии. // Если расходы не принимаются к налоговому учету, то в первую очередь // будут списываться самые "неоплаченные" и самые маленькие партии. Если УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.Принимаются Тогда ТаблицаДляВыбораДоговораПоставки.Сортировать("КоефОплаты, КоличествоМатериала"); Иначе // расходы не принимаются к налоговому учету ТаблицаДляВыбораДоговораПоставки.Сортировать("-КоефОплаты, КоличествоМатериала"); КонецЕсли; ТаблицаДляВыбораДоговораПоставки.ВыбратьСтроки(); Пока (ТаблицаДляВыбораДоговораПоставки.ПолучитьСтроку() = 1) и (НеобходимоСписатьКоличество > 0) Цикл Рассчитать(БИ2, ТаблицаДляВыбораДоговораПоставки.Договор, ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала, ТаблицаДляВыбораДоговораПоставки.СуммаМатериала, ТаблицаДляВыбораДоговораПоставки.СуммаЗадолженности, ТаблицаДляВыбораДоговораПоставки.ОстатокМатериалов, ТаблицаДляВыбораДоговораПоставки.СуммаМатериалаВал, ТаблицаДляВыбораДоговораПоставки.ОстатокМатериаловВал, ТаблицаДляВыбораДоговораПоставки.ПП_ОстатокМатериалов, ТаблицаДляВыбораДоговораПоставки.ПП_ОстатокМатериаловВал); КонецЦикла; КонецПроцедуры // ПеремещениеСАвтоподборомДоговора() //***************************************************************************** Процедура ОбработкаПроведения() // ХА Если (МестоХранения.ТипСклада <> Перечисление.ТипыСкладов.Розничный) и (МестоХраненияПриемник.ТипСклада = Перечисление.ТипыСкладов.Розничный) Тогда //ВспомогательнаяТаблица = СоздатьОбъект("ТаблицаЗначений"); //ВспомогательнаяТаблица.НоваяКолонка("Номенклатура", "Справочник.Номенклатура"); //ВспомогательнаяТаблица.НоваяКолонка("Договор", "Справочник.Договоры"); //ВспомогательнаяТаблица.НоваяКолонка("Количество", "Число", 15, 3); //ВспомогательнаяТаблица.НоваяКолонка("Сумма", "Число", 15, 2); //ВспомогательнаяТаблица.НоваяКолонка("ВалСумма", "Число", 15, 2); //ВспомогательнаяТаблица.НоваяКолонка("НеПринимаемые", "Число", 1, 0); //ВспомогательнаяТаблица.НоваяКолонка("РанееПринято", "Число", 15, 2); //ВспомогательнаяТаблица.НоваяКолонка("РанееПринятоВал", "Число", 15, 2); СписокТоваров = СоздатьОбъект("СписокЗначений"); ВыгрузитьТабличнуюЧасть(СписокТоваров, "Номенклатура"); БИ4 = СоздатьОбъект("БухгалтерскиеИтоги"); БИ4.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокТоваров, 2); БИ4.ИспользоватьСубконто(ВидыСубконто.Контрагенты); БИ4.ИспользоватьСубконто(ВидыСубконто.Договоры); БИ4.Опции(1,0); БИ4.ВыполнитьЗапрос(, ТекущийДокумент(), "10.2,10.3,41.2,41.3,004",,,1,,"СКВ"); БИ_43 = СоздатьОбъект("БухгалтерскиеИтоги"); БИ_43.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокТоваров, 2); БИ_43.Опции(1,0); БИ_43.ВыполнитьЗапрос(, ТекущийДокумент(), "43",,,1,,"СКВ"); КонецЕсли; // ХА Сч10_1 = СчетПоКоду("10.1"); Сч10_2 = СчетПоКоду("10.2"); Сч10_3 = СчетПоКоду("10.3"); Если (ПустоеЗначение(СчетЗатрат) = 1)и(ВидПеремещения =0) Тогда ТекстСообщения = "Не указан счет отнесения затрат."; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; КонецЕсли; СписокМатериалов = СоздатьОбъект("СписокЗначений"); ВыгрузитьТабличнуюЧасть(СписокМатериалов, "Номенклатура"); Метод = Константа.УчитыватьАктивыВВалюте.Получить(ДатаДок); ВыделятьВходящийНДС = Константа.ВыделятьВходящийНДС.Получить(ДатаДок); РасходыПоТоварам = Константа.ПорядокПризнанияРасходовПоТоварам.Получить(ДатаДок); РасходыПоМатериалам = Константа.ПорядокПризнанияМатериальныхРасходов.Получить(ДатаДок); Если (ВидПеремещения =1) Тогда // ХА Если (МестоХранения.ТипСклада = Перечисление.ТипыСкладов.Розничный) или (МестоХраненияПриемник.ТипСклада = Перечисление.ТипыСкладов.Розничный) Тогда ВспомогательнаяТаблица = СоздатьОбъект("ТаблицаЗначений"); ВспомогательнаяТаблица.НоваяКолонка("Номенклатура", "Справочник.Номенклатура"); ВспомогательнаяТаблица.НоваяКолонка("Договор", "Справочник.Договоры"); ВспомогательнаяТаблица.НоваяКолонка("Количество", "Число", 15, 3); ВспомогательнаяТаблица.НоваяКолонка("Сумма", "Число", 15, 2); ВспомогательнаяТаблица.НоваяКолонка("ВалСумма", "Число", 15, 2); //Если МестоХранения.ТипСклада <> Перечисление.ТипыСкладов.Розничный Тогда // БИ2 = СоздатьОбъект("БухгалтерскиеИтоги"); // СписокТоваров = СоздатьОбъект("СписокЗначений"); // ВыгрузитьТабличнуюЧасть(СписокТоваров, "Номенклатура"); // БИ2.ИспользоватьСубконто(ВидыСубконто.Номенклатура,СписокТоваров,2); // БИ2.ВыполнитьЗапрос(, ТекущийДокумент(), "10.1, 41.1, 43",,,,,5); //КонецЕсли; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Если Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Материал Тогда СчУч = СчетПоКоду("10.2"); СчУчРоз = СчетПоКоду("10.1"); ИначеЕсли Номенклатура.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Продукция Тогда СчУч = СчетПоКоду("43"); СчУчРоз = СчетПоКоду("41.1"); Иначе СчУч = СчетПоКоду("41.2"); СчУчРоз = СчетПоКоду("41.1"); КонецЕсли; Если (МестоХранения.ТипСклада = Перечисление.ТипыСкладов.Розничный) и (МестоХраненияПриемник.ТипСклада <> Перечисление.ТипыСкладов.Розничный) Тогда Наценка = ХА_РозничнаяСумма - ХА_ЗакупочнаяСумма; Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчУч; Операция.Дебет.Субконто(1, Номенклатура); Операция.Дебет.Субконто(2, Контрагент); Операция.Дебет.Субконто(3, Договор); Операция.Кредит.Счет = СчУчРоз; Операция.Кредит.Субконто(1, Константа.ХА_РозничныйТовар); Операция.Кредит.Субконто(2, МестоХранения); Операция.Количество = Количество; Операция.Сумма = ХА_ЗакупочнаяСумма; Операция.СодержаниеПроводки = "Перемещение МПЗ"; Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетПоКоду("42"); Операция.Кредит.Счет = СчУчРоз; Операция.Кредит.Субконто(1, Константа.ХА_РозничныйТовар); Операция.Сумма = Наценка; Операция.СодержаниеПроводки = "Наценка"; ИначеЕсли (МестоХранения.ТипСклада <> Перечисление.ТипыСкладов.Розничный) и (МестоХраненияПриемник.ТипСклада = Перечисление.ТипыСкладов.Розничный) Тогда ОсталосьСписатьКоличество = Количество; Если Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Продукция Тогда Если БИ_43.ПолучитьСубконто(ВидыСубконто.Номенклатура,, Номенклатура) <> 0 Тогда ОстатокСумма = БИ_43.СКД(1); ОстатокКол = БИ_43.СКД(3); Если ОстатокКол > 0 Тогда СписаноКоличество = Мин(ОстатокКол,Количество); ВсегоСуммаСписания = Окр(СписаноКоличество * ОстатокСумма/ОстатокКол,2); ОсталосьСписатьКоличество = ОсталосьСписатьКоличество - СписаноКоличество; Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчУчРоз; Операция.Дебет.Субконто(1, Константа.ХА_РозничныйТовар); Операция.Дебет.Субконто(2, МестоХраненияПриемник); Операция.Кредит.Счет = СчУч; Операция.Кредит.Субконто(1, Номенклатура); Операция.Количество = СписаноКоличество; Операция.Сумма = ВсегоСуммаСписания; Операция.СодержаниеПроводки = "Перемещение МПЗ"; КонецЕсли; КонецЕсли; Иначе ТаблицаДляВыбораДоговораПоставки = ХА_ПеремещениеСАвтоподборомДоговора(БИ4); Если ТаблицаДляВыбораДоговораПоставки <> 0 Тогда ТаблицаДляВыбораДоговораПоставки.ВыбратьСтроки(); СуммаСписанияПоСтроке=0; ВсегоСуммаСписания = 0; //ОсталосьСписатьКоличество = Количество; Пока ТаблицаДляВыбораДоговораПоставки.ПолучитьСтроку() =1 Цикл Если ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала > ОсталосьСписатьКоличество Тогда СуммаСписанияПоСтроке = ОсталосьСписатьКоличество*ТаблицаДляВыбораДоговораПоставки.СуммаМатериала/ ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала; СписаноКоличество = ОсталосьСписатьКоличество; ОсталосьСписатьКоличество = 0; Иначе СуммаСписанияПоСтроке = ТаблицаДляВыбораДоговораПоставки.СуммаМатериала; СписаноКоличество = ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала; ОсталосьСписатьКоличество = ОсталосьСписатьКоличество - ТаблицаДляВыбораДоговораПоставки.КоличествоМатериала; КонецЕсли; ВсегоСуммаСписания = ВсегоСуммаСписания + СуммаСписанияПоСтроке; Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчУчРоз; Операция.Дебет.Субконто(1, Константа.ХА_РозничныйТовар); Операция.Дебет.Субконто(2, МестоХраненияПриемник); Операция.Кредит.Счет = СчУч; Операция.Кредит.Субконто(1, Номенклатура); Операция.Кредит.Субконто(2, ТаблицаДляВыбораДоговораПоставки.Договор.Владелец); Операция.Кредит.Субконто(3, ТаблицаДляВыбораДоговораПоставки.Договор); Операция.Количество = СписаноКоличество; Операция.Сумма = СуммаСписанияПоСтроке; Операция.СодержаниеПроводки = "Перемещение МПЗ"; //Если ОсталосьСписатьКоличество <= 0 Тогда // Прервать; //КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчУчРоз; Операция.Дебет.Субконто(1, Константа.ХА_РозничныйТовар); Операция.Дебет.Субконто(2, МестоХраненияПриемник); Операция.Кредит.Счет = СчетПоКоду("42"); Операция.Сумма = ХА_РозничнаяСумма - ВсегоСуммаСписания; Операция.СодержаниеПроводки = "Наценка"; //Если ХА_СторнироватьРасходыНУ = Перечисление.Булево.Да Тогда // Операция.НоваяПроводка(); // Операция.НомерЖурнала = "НУ"; // Операция.Дебет.Счет = СчетПоКоду("Н02.2"); // Операция.Сумма = - ВсегоСуммаСписания; // Операция.СодержаниеПроводки = "Сторнированы расходы НУ"; //КонецЕсли; Если ОсталосьСписатьКоличество > 0 Тогда Сообщить("Перемещение № "+СокрЛП(НомерДок)+" Не хватает " + Номенклатура.Наименование); СтатусВозврата(0); Возврат; КонецЕсли; ИначеЕсли (МестоХранения.ТипСклада = Перечисление.ТипыСкладов.Розничный) и (МестоХраненияПриемник.ТипСклада = Перечисление.ТипыСкладов.Розничный) Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчУчРоз; Операция.Дебет.Субконто(1, Константа.ХА_РозничныйТовар); Операция.Дебет.Субконто(2, МестоХраненияПриемник); Операция.Кредит.Счет = СчУчРоз; Операция.Кредит.Субконто(1, Константа.ХА_РозничныйТовар); Операция.Кредит.Субконто(2, МестоХранения); Операция.Количество = Количество; Операция.Сумма = ХА_РозничнаяСумма; Операция.СодержаниеПроводки = "Перемещение МПЗ"; КонецЕсли; КонецЦикла; КонецЕсли; // ХА // 2 варианта расчета себестоимости ИначеЕсли (Константа.ОбъектНалогообложения.Получить(ДатаДок)=Перечисление.ВариантОбъектаНалогообложения.ДоходыМинусРасходы) Тогда ВспомогательнаяТаблица = СоздатьОбъект("ТаблицаЗначений"); ВспомогательнаяТаблица.НоваяКолонка("Номенклатура", "Справочник.Номенклатура"); ВспомогательнаяТаблица.НоваяКолонка("Договор", "Справочник.Договоры"); ВспомогательнаяТаблица.НоваяКолонка("Количество", "Число", 15, 3); ВспомогательнаяТаблица.НоваяКолонка("Сумма", "Число", 15, 2); ВспомогательнаяТаблица.НоваяКолонка("ВалСумма", "Число", 15, 2); УчтенВходнойНДС = СоздатьОбъект("ТаблицаЗначений"); УчтенВходнойНДС.НоваяКолонка("Договор", "Справочник.Договоры"); УчтенВходнойНДС.НоваяКолонка("Сумма", "Число", 15, 2); УчтенВходнойНДС.НоваяКолонка("ПП_Сумма", "Число", 15, 2); ТаблицаКоррекции = СоздатьОбъект("ТаблицаЗначений"); ТаблицаКоррекции.НоваяКолонка("Счет", "Счет"); ТаблицаКоррекции.НоваяКолонка("Договор", "Справочник.Договоры"); ТаблицаКоррекции.НоваяКолонка("Валюта", "Справочник.Валюты"); ТаблицаКоррекции.НоваяКолонка("ВалСумма", "Число", 15, 2); ТаблицаКоррекции.НоваяКолонка("Сумма", "Число", 15, 2); ТаблицаДляВыбораДоговораПоставки = СоздатьОбъект("ТаблицаЗначений"); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("Договор", "Справочник.Договоры"); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("КоефОплаты", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("СуммаЗадолженности", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ОстатокМатериалов", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ОстатокМатериаловВал", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("КоличествоМатериала", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("СуммаМатериала", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("СуммаМатериалаВал", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ПП_ОстатокМатериалов", "Число", 15, 3); ТаблицаДляВыбораДоговораПоставки.НоваяКолонка("ПП_ОстатокМатериаловВал", "Число", 15, 3); БИ1 = СоздатьОбъект("БухгалтерскиеИтоги"); БИ1.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокМатериалов, 2); БИ1.ИспользоватьСубконто(ВидыСубконто.Контрагенты); БИ1.ИспользоватьСубконто(ВидыСубконто.Договоры); БИ1.ВыполнитьЗапрос(, ТекущийДокумент(), "10.2, 10.3",,,,, "КСВ"); БИНеПринимаемые = СоздатьОбъект("БухгалтерскиеИтоги"); БИНеПринимаемые.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокМатериалов, 2); БИНеПринимаемые.ВыполнитьЗапрос(, ТекущийДокумент(), Сч10_1); БИОстаткиПоДоговорам = СоздатьОбъект("БухгалтерскиеИтоги"); // бух. итоги для автоматического заполнения БИОстаткиПоДоговорам.ИспользоватьСубконто(ВидыСубконто.Договоры); СписокСчетов = "10.12, 10.13, 44.2"; Если РасходыПоТоварам <> Перечисление.ПорядокПризнанияРасходовПоТоварам.ПоОплатеПоставщику Тогда СписокСчетов = СписокСчетов + ", 41.2, 41.3"; КонецЕсли; Если РасходыПоМатериалам <> Перечисление.ПорядокПризнанияМатериальныхРасходов.ПоОплатеПоставщику Тогда СписокСчетов = СписокСчетов + ", 10.2, 10.3"; КонецЕсли; БИОстаткиПоДоговорам.ВыполнитьЗапрос(, ТекущийДокумент(), СписокСчетов,,,,, "СВ"); ПП_БИОстаткиПоДоговорам = СоздатьОбъект("БухгалтерскиеИтоги"); // бух. итоги для автоматического заполнения ПП_БИОстаткиПоДоговорам.ИспользоватьСубконто(ВидыСубконто.Договоры); ПП_БИОстаткиПоДоговорам.Опции(1,0); ПП_БИОстаткиПоДоговорам.ВыполнитьЗапрос(, ТекущийДокумент(), "ПП.М.1, ПП.М.2",,,,, "СВ"); ПП_БиНДС = СоздатьОбъект("БухгалтерскиеИтоги"); ПП_БиНДС.Актуальность(1); ПП_БиНДС.Рассчитать(, ТекущийДокумент(), "19.2, ПП.Н"); БИОстаткиПоДоговорамК = СоздатьОбъект("БухгалтерскиеИтоги"); // бух. итоги для автоматического заполнения БИОстаткиПоДоговорамК.ИспользоватьСубконто(ВидыСубконто.ДоговорыПоставки); СписокСчетов = ""; Если РасходыПоТоварам <> Перечисление.ПорядокПризнанияРасходовПоТоварам.ПоОплатеПоставщику Тогда СписокСчетов = "КМС.1, КМС.3"; КонецЕсли; Если РасходыПоТоварам = Перечисление.ПорядокПризнанияРасходовПоТоварам.ПоФактуПолученияДохода Тогда СписокСчетов = СписокСчетов + ", ПС.1, ПС.2"; КонецЕсли; Если ПустоеЗначение(СписокСчетов) = 1 Тогда СписокСчетов = "00"; КонецЕсли; БИОстаткиПоДоговорамК.ВыполнитьЗапрос(, ТекущийДокумент(), СписокСчетов,,,,, "СВ"); БИ2 = СоздатьОбъект("БухгалтерскиеИтоги"); БИ2.ИспользоватьСубконто(ВидыСубконто.Договоры); БИ2.ИспользоватьСубконто(ВидыСубконто.ВидыРасчетовСПоставщиками, Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов); СписокСчетов = "60.2, 60.4, 71.2, 76.6, 60.22, 71.22, 76.66"; Если ВыделятьВходящийНДС = 1 Тогда СписокСчетов = СписокСчетов + ",19.2"; Конецесли; БИ2.ВыполнитьЗапрос(, ТекущийДокумент(), СписокСчетов,,,,, "СВ"); БиНДС = СоздатьОбъект("БухгалтерскиеИтоги"); БиНДС.ИспользоватьСубконто(ВидыСубконто.Контрагенты); БиНДС.ИспользоватьСубконто(ВидыСубконто.Договоры); БиНДС.ИспользоватьСубконто(ВидыСубконто.ВидыРасчетовСПоставщиками, Перечисление.ВидыРасчетовСПоставщиками.РасходыНаПриобретениеМатериалов,2); БиНДС.ВыполнитьЗапрос(, ТекущийДокумент(), "НДС"); Если (ВыделятьВходящийНДС = 1) Тогда БИОстаткиДляНДС = СоздатьОбъект("БухгалтерскиеИтоги"); // бух. итоги для автоматического заполнения БИОстаткиДляНДС.ИспользоватьСубконто(ВидыСубконто.Договоры); БИОстаткиДляНДС.ВыполнитьЗапрос(, ТекущийДокумент(), "10.12, 10.13, 44.2, 41.2, 41.3, 10.2, 10.3",,,,, "С"); БИОстаткиДляНДСК = СоздатьОбъект("БухгалтерскиеИтоги"); // бух. итоги для автоматического заполнения БИОстаткиДляНДСК.ИспользоватьСубконто(ВидыСубконто.ДоговорыПоставки); БИОстаткиДляНДСК.Опции(1,0); БИОстаткиДляНДСК.ВыполнитьЗапрос(, ТекущийДокумент(), "КМС.1, КМС.3",,,,, "С"); КонецЕсли; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл СуммаСписания=0; //// Прверим есть ли на складе материал. //Если БИ1.ПолучитьСубконто(ВидыСубконто.Номенклатура,, Номенклатура) = 0 Тогда // ТекстСообщения = "На складе нет номенклатуры:" + Номенклатура; // глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); // глНеПроводить(ТекущийДокумент()); // Возврат; //КонецЕсли; НеобходимоСписатьКоличество = Количество; //Если расходы принимаются, сначала спишем принимаемые материалы Если (УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.Принимаются) и (БИ1.ПолучитьСубконто(ВидыСубконто.Номенклатура,, Номенклатура) = 1) Тогда Если ПустоеЗначение(Договор) = 0 Тогда // договор указан ПеремещениеПоУказанномуДоговору(БИ1, БИ2, БИОстаткиПоДоговорам); Иначе // В документе не указан договор. ПеремещениеСАвтоподборомДоговора(БИ1, БИ2, БИОстаткиПоДоговорам); КонецЕсли; КонецЕсли; //Если принимаемых материалов не достаточно, или расходы не принимаемые, спишем не приниаемые материалы СуммаСписанияНеПринимаемая = 0; Если НеобходимоСписатьКоличество > 0 Тогда Если БИНеПринимаемые.ПолучитьСубконто(1,,Номенклатура)=1 Тогда Если (НеобходимоСписатьКоличество>БИНеПринимаемые.СКД("К"))и (УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.Принимаются) Тогда ТекстСообщения = "На складе всего "+(БИНеПринимаемые.СКД("К") + Количество - НеобходимоСписатьКоличество)+" "+Номенклатура+" из необходимых "+Количество; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; Иначе КоличествоДляСписания = Мин(НеобходимоСписатьКоличество,БИНеПринимаемые.СКД("К")); Себестоимость = БИНеПринимаемые.СКД("С")/БИНеПринимаемые.СКД("К")*КоличествоДляСписания; Сумма = Себестоимость; КонецЕсли; Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетЗатрат; Операция.Дебет.Субконто(1, Субконто1); Операция.Дебет.Субконто(2, Субконто2); Операция.Дебет.Субконто(3, Субконто3); Операция.Кредит.Счет = Сч10_1; Операция.Кредит.Номенклатура = Номенклатура; Операция.Количество = КоличествоДляСписания; Операция.Сумма = Себестоимость; СуммаСписанияНеПринимаемая = Себестоимость; НеобходимоСписатьКоличество = НеобходимоСписатьКоличество - КоличествоДляСписания; ИначеЕсли (УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.Принимаются) Тогда ТекстСообщения = "На складе всего "+(Количество - НеобходимоСписатьКоличество)+" "+Номенклатура+" из необходимых "+Количество; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; КонецЕсли; Операция.ЗаписатьПроводки(); КонецЕсли; //Если расходы не принимаемые, принимаемые материалы списываем если не хватает не принимаемых Если (УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.НеПринимаются) и (НеобходимоСписатьКоличество > 0) Тогда Если ПустоеЗначение(Договор) = 0 Тогда // договор указан ПеремещениеПоУказанномуДоговору(БИ1, БИ2, БИОстаткиПоДоговорам); Иначе // В документе не указан договор. ПеремещениеСАвтоподборомДоговора(БИ1, БИ2, БИОстаткиПоДоговорам); КонецЕсли; КонецЕсли; Если НеобходимоСписатьКоличество > 0 Тогда ТекстСообщения = "На складе не хватает "+НеобходимоСписатьКоличество+" "+Номенклатура.ЕдиницаИзмерения+" "+Номенклатура; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; КонецЕсли; Сумма = СуммаСписания + СуммаСписанияНеПринимаемая; Если УчитыватьНаМЦ = 1 Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетПоКоду("МЦ"); Операция.Дебет.Номенклатура = Номенклатура; Операция.Дебет.Сотрудники = МОЛ; Операция.СодержаниеПроводки = "Поступило в экспл."; Операция.Количество = Количество; Операция.Сумма = Сумма; КонецЕсли; КонецЦикла; Если (УчетРасходовДляНУ = Перечисление.ВариантыУчетаРасходовДляНУ.НеПринимаются) или (СчетЗатрат = СчетПоКоду("08.3")) или (СчетЗатрат = СчетПоКоду("08.4")) Тогда ВыполнитьКорректировку(БИ2, БИОстаткиПоДоговорам); КонецЕсли; //Объект налогообложения "Доходы", списываем только не принимаемые материалы Иначе БИ1 = СоздатьОбъект("БухгалтерскиеИтоги"); БИ1.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокМатериалов, 2); БИ1.ВыполнитьЗапрос(, ТекущийДокумент(), Сч10_1); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл Если БИ1.ПолучитьСубконто(1,,Номенклатура)=1 Тогда Если Количество>БИ1.СКД("К") Тогда ТекстСообщения = "На складе всего "+БИ1.СКД("К")+" "+Номенклатура+" из необходимых "+Количество; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; Иначе КоличествоДляСписания = Количество; Себестоимость = БИ1.СКД("С")/БИ1.СКД("К")*Количество; Сумма = Себестоимость; КонецЕсли; Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетЗатрат; Операция.Дебет.Субконто(1, Субконто1); Операция.Дебет.Субконто(2, Субконто2); Операция.Дебет.Субконто(3, Субконто3); Операция.Кредит.Счет = Сч10_1; Операция.Кредит.Номенклатура = Номенклатура; Операция.Количество = КоличествоДляСписания; Операция.Сумма = Себестоимость; Если УчитыватьНаМЦ = 1 Тогда Операция.НоваяПроводка(); Операция.НомерЖурнала = "ТВ"; Операция.Дебет.Счет = СчетПоКоду("МЦ"); Операция.Дебет.Номенклатура = Номенклатура; Операция.Дебет.Сотрудники = МОЛ; Операция.СодержаниеПроводки = "Поступило в экспл."; Операция.Количество = Количество; Операция.Сумма = Сумма; КонецЕсли; Иначе ТекстСообщения = "На складе нет номенклатуры: "+Номенклатура; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 1); глНеПроводить(ТекущийДокумент()); Возврат; КонецЕсли; Операция.ЗаписатьПроводки(); КонецЦикла; КонецЕсли; Если (МестоХранения.Выбран()=1) Тогда ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл Если (Количество>0)и(Номенклатура.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.Услуга) и (Номенклатура.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.ПосредническаяУслуга) и (Номенклатура.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.УслугаЕНВД) Тогда Если Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Материал Тогда СчетСклада = СчетПоКоду("МХ.1"); ИначеЕсли Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар Тогда СчетСклада = СчетПоКоду("МХ.2"); ИначеЕсли Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.ТоварНаКомиссии Тогда СчетСклада = СчетПоКоду("МХ.4"); Иначе СчетСклада = СчетПоКоду("МХ.3"); КонецЕсли; Операция.НоваяПроводка(); Если ВидПеремещения = 1 Тогда Операция.Дебет.Счет = СчетСклада; Операция.Дебет.Номенклатура = Номенклатура; Операция.Дебет.МестаХранения = МестоХраненияПриемник; Операция.СодержаниеПроводки = "Перемещение МПЗ"; Иначе Операция.СодержаниеПроводки = "Списание МПЗ"; КонецЕсли; Операция.Кредит.Счет = СчетСклада; Операция.Кредит.Номенклатура = Номенклатура; Операция.Кредит.МестаХранения = МестоХранения; Операция.Количество = Количество; Операция.НомерЖурнала = "ТВ"; КонецЕсли; КонецЦикла; КонецЕсли; Операция.СуммаОперации = Итог("Сумма"); Операция.Записать(); ТекстСообщения = "Документ проведен."; глСообщениеПроведения(ТекстСообщения, ТекущийДокумент(), 0); глПриПроведении(ТекущийДокумент()); КонецПроцедуры