Показано с 1 по 2 из 2
-
07.12.2015, 12:49 #1
- Регистрация
- 20.08.2015
- Сообщений
- 24
- Сказал(а) спасибо
- 24
- Поблагодарили 17 раз(а) в 5 сообщениях
Добавляем новый счет реализации
Приветствую, ребят. Хочу добавить новый счет реализации. Документ ОтгрузкаМатериаловНаСторо ну
имеется 90.01, 90.12 (услуги), 79.1. Нужно в модуле дописать обработку для 79.2 счета. На форму добавить это поле с флажком - не проблема. Нужна сама обработка, вот модуль:
Код:// ДобавитьСтрокуВТаблицуПереоценки() // // {Изм., релиз 9.12.1 ПС 04.12.09 Процедура ДобавитьСтрокуВТаблицуПереоценки(ЕстьКурсРазница, Счет, Субк1, Субк2, Субк3 = "", Валюта) Если ЕстьКурсРазница <> 0 Тогда глТаблицаСчетов.НоваяСтрока(); глТаблицаСчетов.Счет = Счет; глТаблицаСчетов.Субконто1 = Субк1; глТаблицаСчетов.Субконто2 = Субк2; Если ПустоеЗначение(Субк3) = 0 Тогда глТаблицаСчетов.Субконто3 = Субк3; КонецЕсли; глТаблицаСчетов.Валюта = Валюта; КонецЕсли; КонецПроцедуры // ДобавитьСтрокуВТаблицуПереоценки() // пс} // Процедура ОбработкаПроведения() Перем ТаблицаПокупок,АвтоКП; // Если КоличествоСтрок()=0 тогда Предупреждение("Ни одной строки не введено!"); СтатусВозврата(0); Возврат; КонецЕсли; Если (ВидОтгрузки=0) Тогда // Если СтатьяДоходаРасхода.Выбран()=0 Тогда Предупреждение("Выберите статью дохода/расхода!"); СтатусВозврата(0); Возврат; КонецЕсли; // 1-е субконто - вид деятельности (новый реквизит) Если (ДатаДок>Константа.ДатаНПС) и (ВидДеятельности.Выбран() = 0) Тогда Предупреждение("Выберите вид деятельности (1-е субконто для субсчетов 90.07 и 90.08 И 90.10)!"); СтатусВозврата(0); Возврат; КонецЕсли; КонецЕсли; Если (_791=1) и (_9001= 1) Тогда Предупреждение("Выбрано два счета 79.1 и 90,01 одновременно !"); СтатусВозврата(0); Возврат; КонецЕсли; // {Изм., релиз 12.02.1 ПС 31.01.12 - с 2012 года отгрузка на счета 90.07 и 90.08, а не 91 // Авт. кн. покупок юАвтоКП(1,АвтоКП,Договор,ТаблицаПокупок); АвтоКП = ?((АвтоКП=1) И (ВидОтгрузки = 1) И (ДокументПоступления.Выбран()=1),1,0); // Если АвтоКП=1 Тогда // проверка начисления по счету АКП БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Получатель, 2); БИ.ИспользоватьСубконто(ВидыСубконто.Основание,Договор,2); БИ.ИспользоватьСубконто(ВидыСубконто.ДокПриобретения,ДокументПоступления,2); БИ.ВыполнитьЗапрос(ДокументПоступления.ДатаДок,ТекущийДокумент(),"АКП",,,,,1); Если БИ.КО()=0 Тогда // начисления не было АвтоКП = 0; КонецЕсли; КонецЕсли; юПроверкаНДСтч(Контекст,2); // Проверка ставок НДС в ТЧ // {Изм., релиз 9.12.1 ПЕ 30.11.09 // для валютных возвратов Валютный=0; ЗнОкр=0; Курс = 1; КурсПоставки = 1; // ПС 03.12.09 ЕстьКурсРазница = 0; Если (Договор.Выбран()=1) тогда Если (Договор.Валютный=1) И (Договор.Валюта.Выбран()=1) и (ВидОтгрузки = 1) Тогда Валютный= 1; ЗнОкр = 2; Курс = ПолучитьКурс(Договор.Валюта, ДатаДок); // курс на дату возврата Если ДокументПоступления.Выбран() = 1 Тогда КурсПоставки = ПолучитьКурс(Договор.Валюта, ДокументПоступления.ДатаДок); Иначе КурсПоставки = Курс; Сообщить("Проводки по курсовым разницам сделайте самостоятельно, так как документ поступления не выбран","!"); КонецЕсли; ЕстьКурсРазница = Курс - КурсПоставки; КонецЕсли; КонецЕсли; // пе} // {Изм., релиз 9.12.1 ПС 04.12.09 // Курс разницы Если ЕстьКурсРазница <> 0 Тогда // До проведения данного документа рекомендуется сначала выполнить переоценку задолженности по расчетам // с поставщиком. глТаблицаСчетов.УдалитьСтроки(); КонецЕсли; // пс} Если датаДок<Константа.ДатаНПС Тогда СчДох = СчетПоКоду("91.1" ); СчРасх = СчетПоКоду("91.2" ); СчНДС = СчетПоКоду("91.3" ); Иначе Если (_9001=0 )и (_791=0) и (_9012=0)Тогда СчДох = СчетПоКоду("90.07"); ЕСЛИ датаДок<Дата90 тОГДА СчНДС = СчетПоКоду("90.72"); СчРасх = СчетПоКоду("90.08"); ИНАЧЕ СчНДС = СчетПоКоду("90.8"); СчРасх = СчетПоКоду("90.10"); КОНЕЦЕСЛИ; ИначеЕсли _9001=1 Тогда СчДох = СчетПоКоду("90.01"); СчНДС = СчетПоКоду("90.02"); СчРасх = СчетПоКоду("90.04") ИначеЕсли _9012=1 Тогда СчДох = СчетПоКоду("90.12"); СчНДС = СчетПоКоду("90.22"); СчРасх = СчетПоКоду("90.24") ИначеЕсли _791=1 Тогда //// СчДох = СчетПоКоду("90.01"); СчНДС = СчетПоКоду("79.4"); СчРасх = СчетПоКоду("79.1") КонецЕсли; КонецЕсли; СчАванса = СчетПоКоду("62.4" ); Сч62 = СчетПоКоду("62.1"); // Изм., релиз 9.12.1 ПЕ 30.11.09 // {Изм., релиз 9.12.1 ПЕ 30.11.09 Если Валютный = 0 Тогда СчПоставщика = СчетПоКоду( "60.0" ); СчДебитора = СчетПоКоду( "76.1" ); Иначе СчПоставщика = СчетПоКоду( "60.2" ); СчДебитора = СчетПоКоду( "76.2" ); КонецЕсли; // пе} ИтогНДС = Итог("НДС"); // Операция.СуммаОперации=0; // Комм., релиз 9.12.1 ПЕ 30.11.09 // Если есть хотя бы одна строка в многострочной части, // начинаем формировать проводки Если (ВидОтгрузки=0) Тогда // ТЗ9 = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТЗ9, "СтавкаНДСспр,НДС,СуммаСНДС"); ТЗ9.Свернуть("СтавкаНДСспр","НДС,СуммаСНДС"); // Отпуск материалов покупателю ТЗ9.ВыбратьСтроки(); Пока ТЗ9.ПолучитьСтроку()=1 Цикл /// нет дохода Если (_791=0) Тогда Если ТЗ9.СуммаСНДС<>0 Тогда // Формируем проводку на сумму отпущенных материалов в разрезе ставок НДС. Операция.НоваяПроводка(); Операция.Дебет.Счет = Сч62; // 62.1 - 91.1 // Изм., релиз 9.12.1 ПЕ 30.11.09 Операция.Дебет.Контрагенты=Получатель; Операция.Дебет.Основание=Договор; Если датаДок<Константа.датаНПС Тогда Операция.Кредит.Счет = СчДох; Операция.Кредит.Субконто(1,СтатьяДоходаРасхода); // Операция.Кредит.Субконто(2,ТЗ9.СтавкаНДСспр); // иначе Если (_9001=0)и (_9012=0) Тогда Операция.Кредит.Счет = СчДох; Операция.Кредит.ВидыДеятельности = ВидДеятельности; // 62.1(2) - 90.07 Операция.Кредит.ОбъектыСтроительства=Константа.Объект; // Операция.Кредит.Субконто(3,СтатьяДоходаРасхода); // Операция.Кредит.Субконто(4,ТЗ9.СтавкаНДСспр); // ИначеЕсли (_9001=1) или (_9012=1) Тогда Операция.Кредит.Счет = СчДох; Операция.Кредит.ВидыДеятельности = ВидДеятельности; // 62.1(2) - 90.07 Операция.Кредит.ОбъектыСтроительства=Константа.Объект; // // Операция.Кредит.Субконто(3,СтатьяДоходаРасхода); // Операция.Кредит.Субконто(3,ТЗ9.СтавкаНДСспр); // КонецЕсли; Операция.СодержаниеПроводки = "Прочий доход по тек.деятельности"; КонецЕсли; Операция.НомерЖурнала = "МТ"; Операция.Сумма = ТЗ9.СуммаСНДС; //Итог( "СуммаСНДС" ); КонецЕсли; КонецЕсли; Если ТЗ9.НДС<>0 Тогда // 91.3 - 68.25 Операция.НоваяПроводка(); Операция.НомерЖурнала = "МТ"; Операция.СодержаниеПроводки = "Выделен НДС "+СокрЛП(ТЗ9.СтавкаНДСспр.Ставка)+"%"; Если датаДок<Константа.ДатаНПС Тогда Операция.Дебет.Счет = СчНДС; Операция.Дебет.Субконто(1,СтатьяДоходаРасхода); Операция.Дебет.Субконто(2,ТЗ9.СтавкаНДСспр); Иначе Если (_9001=0) и (_791=0) Тогда Операция.Дебет.Счет = СчНДС; Операция.Дебет.ВидыДеятельности = ВидДеятельности; // 62.1(2) - 90.07 Операция.Дебет.ОбъектыСтроительства=Константа.Объект; // Операция.Дебет.Субконто(3,СтатьяДоходаРасхода); // Операция.Дебет.Субконто(4,ТЗ9.СтавкаНДСспр); // ИначеЕсли (_9001=1) или (_9012=1) Тогда Операция.Дебет.Счет = СчНДС; Операция.Дебет.ВидыДеятельности = ВидДеятельности; // 62.1(2) - 90.07 Операция.Дебет.ОбъектыСтроительства=Константа.Объект; // //Операция.Дебет.Субконто(3,СтатьяДоходаРасхода); // Операция.Дебет.Субконто(3,ТЗ9.СтавкаНДСспр); // ИначеЕсли _791=1 Тогда Операция.Дебет.Счет = СчНДС; Операция.Дебет.Контрагенты=Получатель; Операция.Дебет.Основание=Договор; КонецЕсли; КонецЕсли; Операция.Кредит.Счет = СчетПоКоду("68.25"); Операция.Кредит.ПлатежиВбюджет=Перечисление.ПлатежиВбюджет.Налог; Операция.Сумма = ТЗ9.НДС; //Итог("НДС"); КонецЕсли; КонецЦикла; // аванс //БухИт = СоздатьОбъект("БухгалтерскиеИтоги"); //БухИт.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Получатель,2); //БухИт.ИспользоватьСубконто(ВидыСубконто.Основание, Договор, 2); //БухИт.ВыполнитьЗапрос(ТекущийДокумент(),,СчАванса,,,,,"С"); // //Аванс = БухИт.СНК(); // //Если Аванс > 0 Тогда // Операция.НоваяПроводка(); // Операция.Дебет.Счет = СчАванса; // Операция.Дебет.Контрагенты = Получатель; // Операция.Дебет.Основание = Договор; // Операция.Кредит.Счет = Сч62; // Изм., релиз 9.12.1 ПЕ 30.11.09 // Операция.Кредит.Контрагенты = Получатель; // Операция.Кредит.Основание = Договор; // // ЗачетАванса = Мин(Итог("суммасндс"), Аванс); // Операция.Сумма = ЗачетАванса; // Операция.СодержаниеПроводки = "Зачтен аванс"; // Операция.НомерЖурнала = "МТ"; //КонецЕсли; ИначеЕсли ДокументПоступления.Выбран()=1 тогда // возврат поставщику СчПоставщика = ?(ДокументПоступления.ВидПоставщика = Перечисление.ВидПоставщика.Поставщики, СчПоставщика, СчДебитора); // Изм., релиз 9.12.1 ПЕ 30.11.09 КонецЕсли; ////////// сторно ////////Если (ВидОтгрузки=1) И (ИтогНДС<>0) Тогда // возврат поставщику //////// Операция.НоваяПроводка(); //////// Операция.НомерЖурнала = "МТ"; //////// Операция.СодержаниеПроводки = "Возврат НДС"; //////// Операция.Кредит.Счет = СчетПоКоду("18.3"); //////// Операция.Кредит.Субконто(1,Получатель); //////// Операция.Дебет.Счет = СчПоставщика; //////// Операция.Дебет.Субконто(1,Получатель); //////// Операция.Дебет.Субконто(2,Договор); //////// // {Изм., релиз 9.12.1 ПЕ 30.11.09 //////// Если Валютный = 1 Тогда //////// Операция.Валюта = Договор.Валюта; //////// Операция.ВалСумма = ИтогНДС; //////// ДобавитьСтрокуВТаблицуПереоценки(ЕстьКурсРазница, СчПоставщика, Получатель, Договор, , Договор.Валюта); // ПС 04.12.09 //////// КонецЕсли; //////// Операция.Сумма = ОКР(ИтогНДС*?(Валютный=1,КурсПоставки,1),0); // ПС 04.12.09 //////// // пе} ////////КонецЕсли; // Если (ВидОтгрузки=1) И (ИтогНДС<>0) Тогда // возврат поставщику Операция.НоваяПроводка(); Операция.НомерЖурнала = "МТ"; Операция.СодержаниеПроводки = "Возврат НДС"; Операция.Дебет.Счет = СчетПоКоду("18.3"); Операция.Дебет.Субконто(1,Получатель); Операция.Кредит.Счет = СчПоставщика; Операция.Кредит.Субконто(1,Получатель); Операция.Кредит.Субконто(2,Договор); // {Изм., релиз 9.12.1 ПЕ 30.11.09 Если Валютный = 1 Тогда Операция.Валюта = Договор.Валюта; Операция.ВалСумма = ИтогНДС; ДобавитьСтрокуВТаблицуПереоценки(ЕстьКурсРазница, СчПоставщика, Получатель, Договор, , Договор.Валюта); // ПС 04.12.09 КонецЕсли; Операция.Сумма = ОКР(ИтогНДС*?(Валютный=1,КурсПоставки,1),0)*(-1); // ПС 04.12.09 // пе} КонецЕсли; //////// // Для дополнительного сервиса проверяем количество материала. // Если его не хватает - будем выдавать сообщение. БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения, МестоХранения, 2); БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники, Ответственный, 2); БИ.ИспользоватьСубконто(ВидыСубконто.Материалы); БИ.ВключатьСубсчета( 1 ); БИ.ВыполнитьЗапрос(ТекущийДокумент(),, "10",,,,, 5); // Теперь формируем проводки для каждой строки документа Пока ПолучитьСтроку()=1 Цикл Если КоличествоОтпущено=0 Тогда // Если не указано количество отпускаемного материала, // выдаем сообщение и проводку не формируем. Сообщить( "Строка " + СокрЛП( НомерСтроки ) + ": не указано количество материала """ +СокрЛП(Материал)+""". Проводка не записана!", "!"); Продолжить; КонецЕсли; // Проверяем остаток материала. ОстКол = 0; ОстСум = 0; БИ.ПолучитьСчет(, Материал.СубСчет10 ); Если БИ.ПолучитьСубконто(ВидыСубконто.Материалы,, Материал) = 1 Тогда ОстКол=БИ.СКД("К"); // Суммовой остаток, потребуется для расчета средней цены ОстСум=БИ.СКД("С"); КонецЕсли; Если ОстКол=0 Тогда // Если отсутствует требуемый материал, выдаем сообщение, и проводку не формируем. //Сообщить( "Субчет " + СокрЛП( Материал.СубСчет10 )+ ", место хранения """+СокрЛП(МестоХранения)+""": нет материала """+СокрЛП(Материал)+""".", "!"); Сообщить( "Субчет " + СокрЛП( Материал.СубСчет10 ) + ", место хранения """+СокрЛП(МестоХранения) + ", ответственный """ +СокрЛП(Ответственный) +""": нет материала """+СокрЛП(Материал)+""".", "!"); СтатусВозврата(0); Возврат; Иначе Если ОстКол < КоличествоОтпущено Тогда //Сообщить( "Субчет " + СокрЛП( Материал.СубСчет10 )+ ", место хранения """+СокрЛП(МестоХранения)+""": недостаточно материала """+СокрЛП(Материал)+""".", "!"); Сообщить( "Субчет " + СокрЛП( Материал.СубСчет10 ) + ", место хранения """+СокрЛП(МестоХранения) + ", ответственный """ +СокрЛП(Ответственный) +""": недостаточно материала """+СокрЛП(Материал)+""".", "!"); СтатусВозврата(0); Возврат; КонецЕсли; Операция.НоваяПроводка(); Операция.НомерЖурнала="МТ"; Если (ВидОтгрузки=0) Тогда Операция.Кредит.Счет = Материал.СубСчет10; Операция.Кредит.Материалы = Материал; Операция.Кредит.МестаХранения = МестоХранения; Операция.Кредит.Субконто(3,Ответственный); иначе Операция.Дебет.Счет = Материал.СубСчет10; Операция.Дебет.Материалы = Материал; Операция.Дебет.МестаХранения = МестоХранения; Операция.Дебет.Субконто(3,Ответственный); КонецЕсли; Если (ВидОтгрузки=0) Тогда // 91.2 - 10.х Операция.Дебет.Счет = СчРасх; Если ДатаДок<Константа.датаНПС Тогда Операция.Дебет.Субконто(1,СтатьяДоходаРасхода); Иначе Если _791=0 Тогда Операция.Дебет.Субконто(3,СтатьяДоходаРасхода); // Операция.дебет.ОбъектыСтроительства=Константа.Объект; // Операция.Дебет.ВидыДеятельности = ВидДеятельности; // Иначе Операция.Дебет.Контрагенты=Получатель; Операция.Дебет.Основание=Договор; КонецЕсли; КонецЕсли; Если (ВидОтгрузки=0) Тогда ОперацияСумма = 0; Если КоличествоОтпущено=ОстКол Тогда // Если материал отпускается полностью, // полностью списываем сумму ОперацияСумма=ОстСум; Иначе ОперацияСумма=Окр( ОстСум/ОстКол*КоличествоОтпущено, 2 ); КонецЕсли; Операция.Сумма = ОперацияСумма; Операция.СодержаниеПроводки = "Списан материал"; УчетнаяЦена = ОперацияСумма/?(КоличествоОтпущено=0,1,КоличествоОтпущено); Иначе ОперацияСумма = 0; Если КоличествоОтпущено=ОстКол Тогда // Если материал отпускается полностью, // полностью списываем сумму ОперацияСумма=-ОстСум; Иначе ОперацияСумма=Окр( ОстСум/ОстКол*КоличествоОтпущено, 2 )*(-1); КонецЕсли; Операция.Сумма = ОперацияСумма*(-1); Операция.СодержаниеПроводки = "Списан материал"; УчетнаяЦена = ОперацияСумма/?(КоличествоОтпущено=0,1,КоличествоОтпущено)*(-1); КонецЕсли; Иначе // возврат поставщику 60.1 (76.1) - 10.х ////Операция.Дебет.Счет = СчПоставщика; ////Операция.Дебет.Субконто(1,Получатель); ////Операция.Дебет.Субконто(2,Договор); ////// {Изм., релиз 9.12.1 ПЕ 30.11.09 ////Если Валютный = 1 Тогда //// Операция.Валюта = Договор.Валюта; //// Операция.ВалСумма = СуммаСНДС - НДС; //// ДобавитьСтрокуВТаблицуПереоценки(ЕстьКурсРазница, СчПоставщика, Получатель, Договор, , Договор.Валюта); // ПС 04.12.09 ////КонецЕсли; ////Операция.Сумма= ОКР((СуммаСНДС - НДС)*?(Валютный=1,КурсПоставки,1),0); ////// пе} ////Операция.СодержаниеПроводки = "Возврат поставщику"; Операция.Кредит.Счет = СчПоставщика; Операция.Кредит.Субконто(1,Получатель); Операция.Кредит.Субконто(2,Договор); // {Изм., релиз 9.12.1 ПЕ 30.11.09 Если Валютный = 1 Тогда Операция.Валюта = Договор.Валюта; Операция.ВалСумма = СуммаСНДС - НДС; ДобавитьСтрокуВТаблицуПереоценки(ЕстьКурсРазница, СчПоставщика, Получатель, Договор, , Договор.Валюта); // ПС 04.12.09 КонецЕсли; Операция.Сумма= ОКР((СуммаСНДС - НДС)*?(Валютный=1,КурсПоставки,1),0)*(-1); // пе} Операция.СодержаниеПроводки = "Возврат поставщику"; Если (АвтоКП=1) Тогда ТаблицаПокупок.НоваяСтрока(); ТаблицаПокупок.Товар = Материал; ТаблицаПокупок.Всего = СуммаСНДС; ТаблицаПокупок.Сумма = Сумма; ТаблицаПокупок.НДС = НДС; КонецЕсли; КонецЕсли; Если (ВидОтгрузки=0) Тогда Операция.Количество=КоличествоОтпущено; Иначе Операция.Количество=КоличествоОтпущено*(-1); КонецЕсли; // Сумму операции будет считать, так как неизвестно, сколько материала // реально отпущено. // Операция.СуммаОперации = Операция.СуммаОперации + Операция.Сумма; // Комм., релиз 9.12.1 ПЕ 30.11.09 КонецЕсли; КонецЦикла; // Комм., релиз 9.12.1 ПЕ 30.11.09: сумма и содержание заполняются при записи // Операция.СуммаОперации = Итог("СуммаСндс"); // И // Комм., релиз 9.12.1 ПЕ 30.11.09 // Операция.Содержание = ?(ВидОтгрузки=0,"Отпуск","Возврат")+" материалов/ "+Получатель; // Комм., релиз 9.12.1 ПЕ 30.11.09 // Если АвтоКП=1 Тогда юДляЗаполненияАвтоКнигиПокупок(Контекст, ТаблицаПокупок); КонецЕсли; // {Изм., релиз 9.12.1 ПС 04.12.09 // Курс разницы Если ЕстьКурсРазница <> 0 Тогда Операция.ЗаписатьПроводки(); глПереоценкаСчетов(Контекст, глТаблицаСчетов); КонецЕсли; // пс} Операция.Записать(); КонецПроцедуры
-
08.12.2015, 08:48 #2
- Регистрация
- 29.11.2013
- Адрес
- Берег Волги
- Сообщений
- 2024
- Сказал(а) спасибо
- 651
- Поблагодарили 10238 раз(а) в 2700 сообщениях
Re: Добавляем новый счет реализации
А в чем проблема-то?
Пишите проводку так же, как и для счета 79.1. Полагаю, что выбор счета реализации через флажки нерационально, лучше сделать список (наподобие поля "Надбавка")
Социальные закладки