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

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

Автор jeniks, 07 дек 2015, 11:44

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

jeniks

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

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

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


Теги:

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

Рейтинг@Mail.ru

Поиск