Поступление доп.расходов

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
Поступление доп.расходов, Выгрузка в БП
 
Добрый день!

Столкнулись с проблемой при выгрузки документов "ПоступлениеДопРасходов" из Альфа-Авто: Автосалон+Автосервис+Автозапчасти. Редакция 4.1.01.15 в Бухгалтерию 1.6:
В Альфе имеется документ ПоступлениеДопРасходов, в котором есть 2 строки: одна - с НДС 18%, другая - без НДС. Альфа это позволяет, т.к. ставка НДС задается в строке табличной части.
При выгрузке в Бухгалтерии формируется документ ПоступлениеДопРасходов, в котором ОБЩАЯ СУММА и ОБЩИЙ НДС доп.расходов распределяется по товарам из документа-основания (ПоступлениеТоваров).
Сначала документ в Бухгалтерии не желал проводиться - ругался на незаполненный реквизит СтавкаНДС. Когда я добавил в обработку загрузки заполнение этого реквизита значением "18%", документ стал проводится, но сумма поступления неверно разносится в книге покупок - она вся попадает в колонку "18%", а не распределяется по нескольким колонкам, как того хочет бухгалтер.
Что надо сделать, чтобы выгруженная сумма поступления доп.расходов правильно разносилась в книге покупок?
 
Делайте два документа в альфе?
 
Здравствуйте,

исходя из постановки задачи необходимо переписать обработчик загрузки ПоступленияДопРасходов таким образом, чтобы для строк табличной части Поступления (на основе которого заполняется ПоступлениеДопРасходов) для каждого вида СтавкиНДС строк создавался своё ПоступлениеДопРасходов.

Т.е. на основе Поступления необходимо закешировать данные в таблицу значений, отсортировать таблицу по ставкам НДС.
Для каждого вида ставки НДС создать своё ПоступлениеДопРасходов. Например, строки поступления со ставкой НДС 18% войдут в первое ПоступлениеДопРасходов, а строки со ставкой БезНДС во второе ПоступлениеДопРасходов. Таким образом получится разделение на документы по ставкам НДС. Другого решение указанной выше проблемы не вижу.

Пример кода обработчика загрузки приведу чуть позже.
 
Тогда надо еще как-то по иному работать с таблицей соответствия, чтобы для каждого ПоступленияДопРасходов из Альфы в нее можно было занести несколько строк - по одной для каждого ПоступленияДопРасходов в Бух (по аналогии, как сделано для Заказ-Наряда, который в Бух формирует 2 документа: "требование-накладная" и "реализация товаров и услуг").
А счет-фактура полученный, как я понимаю, должен будет вводится на основании всех этих ПоступленийДопРасходов.
 
Стоит, наверно, добавить, что выгрузка делается по партиям.
В процедуре загрузки сумма доп.расходов берется из таблицы ПартииТоваров, в которой общая сумма расходов уже разнесена по номенклатуре, т.е. разделить ее по ставкам НДС уже невозможно.
 
В АА в регистре ПартииТоваровКомпании есть реквизит СтавкаНДС, чтобы он выгружался
в выгрузку данных из Альфа-Авто надо отредактировать процедуру ВыгрузитьОбъект:
Код
         ТекстЗапроса = 
         "ВЫБРАТЬ
         |   ПартииТоваровКомпании.СкладКомпании КАК СкладКомпании,
         |   ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
         |   ПартииТоваровКомпании.ВидДвижения КАК ВидДвижения,
         |   ПартииТоваровКомпании.СтатусПартии КАК СтатусПартии,            
         |   ПартииТоваровКомпании.ХозОперация КАК ХозОперация,
         |   ПартииТоваровКомпании.Партия КАК Партия,
         |   ПартииТоваровКомпании.Количество КАК Количество,
         |   ПартииТоваровКомпании.Сумма КАК Сумма,
         |   ПартииТоваровКомпании.СуммаНДС КАК СуммаНДС,
         |   ПартииТоваровКомпании.СтавкаНДС КАК СтавкаНДС
         |ИЗ
         |   РегистрНакопления.ПартииТоваровКомпании КАК ПартииТоваровКомпании
         |ГДЕ
         |   ПартииТоваровКомпании.Регистратор = &ТекОбъект
         |            
         |УПОРЯДОЧИТЬ ПО
         |   СкладКомпании,
         |   Номенклатура,
         |   СтатусПартии,
         |   ВидДвижения";



А в обработчике загрузки ПоступленияДопРасходов заменить алгоритм загрузки ДопРасходов на:
Код
   //Сначала разберемся с услугами, которые идут не себестоимость. Для них нужно вводить документ ПоступлениеДопРасходов
   ЕстьПроцедураЗагрузки = Истина; ИмяМенеджераОбъекта = "ПоступлениеТоваровУслуг";   
   Если ПустаяСтрока(ТекОбъект) и ПустаяСтрока(ИдентификаторОбъекта) Тогда Возврат; КонецЕсли;
   
   тзПартии = Новый ТаблицаЗначений;
   тзПартии.Колонки.Добавить("Номенклатура");
   тзПартии.Колонки.Добавить("Сумма");
   тзПартии.Колонки.Добавить("СуммаНДС");
   тзПартии.Колонки.Добавить("СтавкаНДС");
   
   КурсДокумента = ПолучитьЗначениеРеквизита("КурсДокумента");
   Если КурсДокумента = 0 Тогда КурсДокумента = 1; КонецЕсли;
   
   //Заполним табицу движений партий
   Автомобили            = Ложь;
   ТекТабличнаяЧасть      = ПолучитьТабличнуюЧасть(ИдентификаторОбъекта, "ПартииТоваров");
   Если ТекТабличнаяЧасть.Количество() = 0 Тогда
      ТекТабличнаяЧасть   = ПолучитьТабличнуюЧасть(ИдентификаторОбъекта, "ОстаткиАвтомобилей");
      Автомобили         = Истина;
   КонецЕсли;   
   Для к = 0 по ТекТабличнаяЧасть.Количество() - 1 Цикл
      ЗначенияСтроки      = ТекТабличнаяЧасть.Получить(к).Значение;                  
      
      Если Автомобили Тогда
         Номенклатура   = ПолучитьОбъект(ЗначенияСтроки["Автомобиль"], "Справочник.Номенклатура");
      Иначе
         Номенклатура   = ПолучитьНоменклатуру(ЗначенияСтроки["Номенклатура"]);
      КонецЕсли;   
      
      СтрокаПартии            = тзПартии.Добавить();
      СтрокаПартии.Номенклатура   = Номенклатура;
      СтрокаПартии.Сумма         = ЗначенияСтроки["Сумма"]/КурсДокумента;
      СтрокаПартии.СуммаНДС      = ЗначенияСтроки["СуммаНДС"]/КурсДокумента;
      СтрокаПартии.СтавкаНДС      = ПолучитьСтавкуНДСПоИдентификатору(ЗначенияСтроки["СтавкаНДС"]);
   КонецЦикла;
   тзПартии.Свернуть("Номенклатура,СтавкаНДС","Сумма,СуммаНДС");   
   
   Если тзПартии.Количество() > 0 Тогда
      ТаблицаДанных   = Новый ТаблицаЗначений();
      ТаблицаДанных.Колонки.Добавить("Номенклатура");
      ТаблицаДанных.Колонки.Добавить("Ссылка");
      ТаблицаДанных.Колонки.Добавить("ВалютаОснования");
      ТаблицаДанных.Колонки.Добавить("Сумма");
      ТаблицаДанных.Колонки.Добавить("СуммаТовара");
      ТаблицаДанных.Колонки.Добавить("СуммаНДС");
      ТаблицаДанных.Колонки.Добавить("ДокументПартии");
      ТаблицаДанных.Колонки.Добавить("УчитыватьНДС");
      ТаблицаДанных.Колонки.Добавить("СуммаВключаетНДС");
      ТаблицаДанных.Колонки.Добавить("Количество");
      ТаблицаДанных.Колонки.Добавить("КоличествоМест");
      ТаблицаДанных.Колонки.Добавить("ЕдиницаИзмерения");
      ТаблицаДанных.Колонки.Добавить("Коэффициент");
      ТаблицаДанных.Колонки.Добавить("СчетУчетаБУ");
      ТаблицаДанных.Колонки.Добавить("СчетУчетаНУ");
      ТаблицаДанных.Колонки.Добавить("ОтражениеВУСН");
      ТаблицаДанных.Колонки.Добавить("СчетУчетаНДС");
      ТаблицаДанных.Колонки.Добавить("СтавкаНДС");
      
      ДокументПоступленияИД = ПолучитьЗначениеРеквизита("ДокументОснование");
      ТипОбъекта = "Документ.";
      Идентификатор = ПолучитьЗначениеРеквизита("_1С_ИдентификаторБД",ТипОбъекта,ДокументПоступленияИД);
      //Идентификатор получаем только ради получения типа объекта. Если тип объекта основания у нас
      //комплектация/разукомплектация, то документ основание у нас = ДокументПоступления + "-ПР"
      //Потому что при перегрузке этих документов загружаются документы списания и поступления с окончанием "-ПР"
      Если ТипОбъекта = "Документ.Комплектация" ИЛИ ТипОбъекта = "Документ.Разукомплектация" Тогда
         ДокументПоступленияИД = ДокументПоступленияИД+"-ПР";
      КонецЕсли;      
      
      Если НЕ ЗначениеЗаполнено(ДокументПоступленияИД) Тогда
          Сообщить("Не удалось перегрузить документ ""Поступление доп. расходов"" №"+ПолучитьЗначениеРеквизита("_1С_Номер")+". Не обнаружен документ основание!!!");
         ДобавитьСообщениеОЗагрузке("208",ПолучитьПредставление(ВидОбъекта),ТекОбъект," Реквизит ""Документ расчетов с контрагентом"". ");
         Возврат;
      Иначе         
         КодСообщения = "";      
         ДокументПоступления = ЗагрузитьДокументПоСсылке(ДокументПоступленияИД,КодСообщения);
         Если ДокументПоступления = Неопределено Тогда
            Сообщить("Не удалось перегрузить документ ""Поступление доп. расходов"" №"+ПолучитьЗначениеРеквизита("_1С_Номер")+". Не обнаружен документ основание!!!");
            ДобавитьСообщениеОЗагрузке("208",ПолучитьПредставление(ВидОбъекта),ТекОбъект," Реквизит ""Документ расчетов с контрагентом"". ");
            Возврат;
         Иначе         
            Если КодСообщения <> "" Тогда
               ДобавитьСообщениеОЗагрузке(КодСообщения,ПолучитьПредставление(ВидОбъекта),ТекОбъект," Реквизит ""Документ расчетов с контрагентом"". ")
            КонецЕсли;            
         КонецЕсли;                  
      КонецЕсли;
      
      Запрос = Новый Запрос;
      Запрос.УстановитьПараметр("ДокументОснование", ДокументПоступления.Ссылка);
      Запрос.Текст ="ВЫБРАТЬ
                    |   Док.Номенклатура,
                    |   Док.Ссылка,
                    |   Док.Ссылка.ВалютаДокумента КАК ВалютаОснования,
                    |   Док.Сумма,
                    |   Док.СуммаНДС,
                    |   Док.Ссылка.УчитыватьНДС КАК УчитыватьНДС,
                    |   Док.Ссылка.СуммаВключаетНДС КАК СуммаВключаетНДС,
                    |   Док.Количество,
                    |   Док.КоличествоМест,
                    |   Док.ЕдиницаИзмерения,
                    |   Док.Коэффициент,
                    |   Док.СчетУчетаБУ,
                    |   Док.СчетУчетаНУ,
                    |   Док.ОтражениеВУСН,
                    |   Док.СчетУчетаНДС
                    |ИЗ
                    |   Документ.ПоступлениеТоваровУслуг.Товары КАК Док
                    |ГДЕ
                    |   Док.Ссылка = &ДокументОснование
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |   Док.Номенклатура,
                    |   Док.Ссылка,
                    |   Док.Ссылка.ВалютаДокумента,
                    |   Док.Сумма,
                    |   Док.СуммаНДС,
                    |   Док.Ссылка.УчитыватьНДС,
                    |   Док.Ссылка.СуммаВключаетНДС,
                    |   Док.Количество,
                    |   Док.Количество,
                    |   Док.ЕдиницаИзмерения,
                    |   Док.Коэффициент,
                    |   Док.СчетУчетаБУ,
                    |   Док.СчетУчетаНУ,
                    |   NULL,
                    |   Док.СчетУчетаНДС
                    |ИЗ
                    |   Документ.ПоступлениеТоваровУслуг.Оборудование КАК Док
                    |ГДЕ
                    |   Док.Ссылка = &ДокументОснование
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |   Док.Номенклатура,
                    |   Док.Ссылка,
                    |   NULL,
                    |   NULL,
                    |   NULL,
                    |   NULL,
                    |   NULL,
                    |   Док.Количество,
                    |   Док.КоличествоМест,
                    |   Док.ЕдиницаИзмерения,
                    |   Док.Коэффициент,
                    |   Док.СчетУчетаБУ,
                    |   Док.СчетУчетаНУ,
                    |   NULL,
                    |   NULL
                    |ИЗ
                    |   Документ.ПеремещениеТоваров.Товары КАК Док
                    |ГДЕ
                    |   Док.Ссылка = &ДокументОснование
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |   Док.Номенклатура,
                    |   Док.Ссылка,
                    |   NULL,
                    |   Док.Сумма,
                    |   NULL,
                    |   NULL,
                    |   NULL,
                    |   Док.Количество,
                    |   Док.КоличествоМест,
                    |   Док.ЕдиницаИзмерения,
                    |   Док.Коэффициент,
                    |   Док.СчетУчетаБУ,
                    |   Док.СчетУчетаНУ,
                    |   NULL,
                    |   NULL
                    |ИЗ
                    |   Документ.ОприходованиеТоваров.Товары КАК Док
                    |ГДЕ
                    |   Док.Ссылка = &ДокументОснование";

      РезультатЗапроса = Запрос.Выполнить();
      
      Выборка = РезультатЗапроса.Выбрать();
      Пока Выборка.Следующий() Цикл

         СтрокаТабличнойЧасти = ТаблицаДанных.Добавить();

         
         СтрокаТабличнойЧасти.Номенклатура      = Выборка.Номенклатура;
         СтрокаТабличнойЧасти.Количество         = Выборка.Количество;
         СтрокаТабличнойЧасти.КоличествоМест      = Выборка.КоличествоМест;
         СтрокаТабличнойЧасти.ЕдиницаИзмерения   = Выборка.ЕдиницаИзмерения;
         СтрокаТабличнойЧасти.Коэффициент      = Выборка.Коэффициент;
         СтрокаТабличнойЧасти.ДокументПартии      = ДокументПоступления.Ссылка;                                              
         СтрокаТабличнойЧасти.СуммаТовара      = Выборка.Сумма;                                                                                                   

         СтрокаТабличнойЧасти.СчетУчетаБУ  = Выборка.СчетУчетаБУ;
         СтрокаТабличнойЧасти.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымУслугам;
         СтрокаТабличнойЧасти.СчетУчетаНУ  = Выборка.СчетУчетаНУ;
         СтрокаТабличнойЧасти.ОтражениеВУСН = ?(ЗначениеЗаполнено(Выборка.ОтражениеВУСН), Выборка.ОтражениеВУСН, Перечисления.ОтражениеВУСН.НеПринимаются);
         
         СтрокаПартии = тзПартии.Найти(СтрокаТабличнойЧасти.Номенклатура,"Номенклатура");
         Если СтрокаПартии <> Неопределено Тогда
            СтрокаТабличнойЧасти.Сумма      = СтрокаПартии.Сумма-СтрокаПартии.СуммаНДС;
            СтрокаТабличнойЧасти.СуммаНДС   = СтрокаПартии.СуммаНДС;
            СтрокаТабличнойЧасти.СтавкаНДС   = СтрокаПартии.СтавкаНДС;
         КонецЕсли;
      КонецЦикла;      
      
      
      ТаблицаДанных.Сортировать("СтавкаНДС");
      ПредСтавкаНДС               = "";
      Док            = 0;
      ЭтоПервыйДокумент   = Истина;
      
      Для Каждого ТекСтрока Из ТаблицаДанных Цикл
         ТекСтавкаНДС   = ТекСтрока.СтавкаНДС;
         Если ПредСтавкаНДС<>ТекСтавкаНДС Тогда
            Если НЕ ЭтоПервыйДокумент Тогда 
               ЗакрытьДокумент(ТекОбъект);
               УстановитьСоответствие(ИдентификаторОбъекта+"-"+Док, ТекОбъект);
               ДобавитьИнформациюОЗагрузке(ТекОбъект);
               Док      = Док + 1;
            КонецЕсли;
            
            ДокМенеджер         = Документы.ПоступлениеДопРасходов;
            ТекОбъект         = ДокМенеджер.ПустаяСсылка();
               
            Если НЕ ПолучитьСоответствие(ДокМенеджер, ИдентификаторОбъекта+"-"+Док, ТекОбъект) Тогда
               ТекОбъект = ДокМенеджер.СоздатьДокумент();      
            Иначе
               ЭтоНовыйОбъект = Ложь;
               Если НеОбновлятьСуществующие Тогда Возврат;КонецЕсли;   
            КонецЕсли;
            
            ЗагрузитьШапку(ТекОбъект);
            УстановитьРеквизит(ТекОбъект,"Дата", ПолучитьЗначениеРеквизита("_1С_Дата"));
               
            УстановитьРеквизит(ТекОбъект,"СпособРаспределения",   Перечисления.СпособыРаспределенияДопРасходов.ПоСумме);
            УстановитьРеквизит(ТекОбъект,"СтавкаНДС",         ТекСтрока.СтавкаНДС);
                  
            // установим счета бухгалтерского и налогового учета
            ТекОбъект.ЗаполнитьСчетаУчетаРасчетов();            
            
            //Заполним по документу поступления.
            ТекОбъект.Товары.Очистить();
            
            ЭтоПервыйДокумент   = Ложь;
         КонецЕсли;
         
         НоваяСтрока   = ТекОбъект.Товары.Добавить();
         ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
         
         ПредСтавкаНДС   = ТекСтавкаНДС;
      КонецЦикла;

      ЗакрытьДокумент(ТекОбъект);
   КонецЕсли;
   
   Если Тип("ДокументСсылка.ПеремещениеТоваров") = ТипЗнч(ДокументПоступления) Тогда
      ДобавитьСообщениеОЗагрузке("103",ПолучитьПредставление(ВидОбъекта),ТекОбъект,"Документ основание - ""Перемещение товаров"". Реквизит табличной части ""Сумма товара"" не может быть заполнен.");
   КонецЕсли;

....


Вторая часть обработчика остается неизменной.
К идентификатору ПоступленияДопРасходов при загрузке нового документа добавляется порядковый номер:

ИдентификаторОбъекта+"-"+Док

это учитывается при установке соответствия. В счет фактуре выданной может быть только одно основание,
т.е. надо будет внести соответствующие изменения.

Но все таки рекомендуется просто установить СтавкуНДС по умолчанию и не делать никакого разделения по ставкам НДС.

Для вашего конкретного случая можно использовать приведенный выше код, но все таки лучше просто ограничиться заполнением СтавкиНДС значением по умолчанию.
 
Действительно, в Альфе в регистре ПартииТоваров есть реквизит СтавкаНДС, но заполняется он не из ПоступленияДопРасходов, а из Номенклатуры, на которую разносятся расходы.
Вот выдержка из обработки проведения ПоступленияДопРасходов:
Код
    Если ЕстьСтавкаНДС Тогда
        НоваяЗапись.СтавкаНДС = СтрокаТовар.СтавкаНДС;
    КонецЕсли;

В моем случае в ПоступленииДопУслуг 2 строки
Строка 1: Сумма - 971,53 руб.   СуммаНДС - 174,87 руб.   СтавкаНДС - 18%
Строка 2: Сумма - 53,33 руб.    СуммаНДС - 0 руб.        СтавкаНДС - БезНДС
В документе-основании один товар - по регистру ПартииТоваров создается всего одно движение:
Сумма с НДС - 1 199,73 руб.   Сумма НДС - 174,87 руб.   СтавкаНДС - 18%

Получается, чтобы брать ставку из Партий надо переделывать проведение документа, чего очень не хочется делать.
Я сделал немного по другому: т.к. при выгрузке документа выгружаются как ПартииТоваров, так и сама табличная часть документа, я беру сумму расхода по каждой ставки из табличной части и делю каждое движение в партиях пропорционально. Вроде работает правильно.

В СФ ПОЛУЧЕННОЙ может быть несколько оснований.

Спасибо за помощь.
Изменено: Константин Никитюк - 07.10.2010 10:37:35
 
В Альфе в с/ф одно основание только.
 
А в Альфе больше и не надо, т.к. ПоступлениеДопРасходов тоже одно.
А при выгрузке в Бух оно распадается на несколько документов, поэтому и получается, что у СФ полученной несколько оснований - это допустимо и работает.
 
Цитата
Константин Никитюк пишет:
В моем случае в ПоступленииДопУслуг 2 строки
Строка 1: Сумма - 971,53 руб. СуммаНДС - 174,87 руб. СтавкаНДС - 18%
Строка 2: Сумма - 53,33 руб. СуммаНДС - 0 руб. СтавкаНДС - БезНДС
В документе-основании один товар - по регистру ПартииТоваров создается всего одно движение:
Сумма с НДС - 1 199,73 руб. Сумма НДС - 174,87 руб. СтавкаНДС - 18%

Ситуация будет рассмотрена подробней и скорей всего исправлена
Замечание зарегистрировано под номеров С0103181.
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С