PDA

Просмотр полной версии : Добавляем новый счет реализации



jeniks
07.12.2015, 12:49
Приветствую, ребят. Хочу добавить новый счет реализации. Документ ОтгрузкаМатериаловНаСторо ну
имеется 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 Тогда
Операция.ЗаписатьПроводки( );
глПереоценкаСчетов(Контек� �т, глТаблицаСчетов);
КонецЕсли;
// пс}

Операция.Записать();

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

http://i76.fastpic.ru/big/2015/1207/93/d2d8e97022803d44edd2664e13c61193.jpg (http://fastpic.ru/)

alexandr_ll
08.12.2015, 08:48
А в чем проблема-то?
Пишите проводку так же, как и для счета 79.1. Полагаю, что выбор счета реализации через флажки нерационально, лучше сделать список (наподобие поля "Надбавка")