Имя: Пароль:
1C
1С v8
Маааааленький вопросик про счет фактуры
0 Valiant
 
11.05.12
11:59
Нужно в очень сильно измененную КА 1.1.16 внедрить корректировочные счет фактуры, но я правильно понял, что в последней версии КА 1.1.19 отказались от документов корректировочный счет фактуры судя по процедуре обновления:
////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции обновления ИБ

// Документы виды КорректировочныйСчетФактура... более не используется
// производится замена их на документы КорректировкаПоступления/КорректировкаРеализации
// с регистрацией счетов-фактур
//
Процедура ОбработатьКорректировочныеСчетаФактуры() Экспорт
   
   ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
       
   СчетДоходов              = ПланыСчетов.Хозрасчетный.ВыручкаНеОблагаемаяЕНВД;
   СчетРасходов             = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеОблагаемаяЕНВД;
   
   // Обработка корректировочных счетов-фактур выданных
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    УдалитьКорректировочныйСчетФактураВыданный.Ссылка,
   |    УдалитьКорректировочныйСчетФактураВыданный.СчетФактура КАК ДокументРеализации,
   |    УдалитьКорректировочныйСчетФактураВыданный.Номер КАК НомерСчетаФактуры,
   |    УдалитьКорректировочныйСчетФактураВыданный.Дата КАК Дата,
   |    УдалитьКорректировочныйСчетФактураВыданный.Организация КАК Организация,
   |    УдалитьКорректировочныйСчетФактураВыданный.Контрагент КАК Контрагент,
   |    УдалитьКорректировочныйСчетФактураВыданный.ДоговорКонтрагента КАК ДоговорКонтрагента,
   |    УдалитьКорректировочныйСчетФактураВыданный.ВалютаДокумента КАК ВалютаДокумента,
   |    УдалитьКорректировочныйСчетФактураВыданный.СчетФактура.Номер КАК НомерИсходногоДокумента,
   |    УдалитьКорректировочныйСчетФактураВыданный.СчетФактура.Дата КАК ДатаИсходногоДокумента,
   |    УдалитьКорректировочныйСчетФактураВыданный.ТоварыИУслуги.(
   |        Номенклатура КАК Номенклатура,
   |        КоличествоДоИзменения КАК КоличествоДоИзменения,
   |        КоличествоПослеИзменения КАК Количество,
   |        ЦенаДоИзменения КАК ЦенаДоИзменения,
   |        ЦенаПослеИзменения КАК Цена,
   |        СтоимостьБезНДСДоИзменения КАК СуммаДоИзменения,
   |        СтоимостьБезНДСПослеИзменения КАК Сумма,
   |        СтавкаНДС КАК СтавкаНДС,
   |        СуммаНДСДоИзменения КАК СуммаНДСДоИзменения,
   |        СуммаНДСПослеИзменения КАК СуммаНДС,
   |        ЕСТЬNULL(УдалитьКорректировочныйСчетФактураВыданный.ТоварыИУслуги.Номенклатура.Услуга, ЛОЖЬ) КАК Услуга,
   |        НаименованиеНоменклатуры КАК Содержание,
   |        ВидЦенности КАК ВидЦенности
   |    )
   |ИЗ
   |    Документ.УдалитьКорректировочныйСчетФактураВыданный КАК УдалитьКорректировочныйСчетФактураВыданный
   |ГДЕ
   |    УдалитьКорректировочныйСчетФактураВыданный.Проведен";
   
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий() Цикл
       НовыйДокументКорректировки = Документы.КорректировкаРеализации.СоздатьДокумент();
       НовыйДокументКорректировки.ВидОперации = Перечисления.ВидыОперацийИсправленияПоступленияРеализации.СогласованноеИзменение;
       
       ЗаполнитьЗначенияСвойств(НовыйДокументКорректировки, Выборка);        
       
       ВыборкаТоварыИУслуги = Выборка.ТоварыИУслуги.Выбрать();
       Пока ВыборкаТоварыИУслуги.Следующий() Цикл
           
           Если ВыборкаТоварыИУслуги.Услуга Тогда
               НоваяСтрока = НовыйДокументКорректировки.Услуги.Добавить();    
           Иначе
               НоваяСтрока = НовыйДокументКорректировки.Товары.Добавить();
           КонецЕсли;
           
           ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаТоварыИУслуги);
           
           Если НЕ ВыборкаТоварыИУслуги.Услуга Тогда
               СчетУчетаНДС = "";
               ПолучитьСчетУчетаПоВидуЦенности(НоваяСтрока.СчетУчетаБУ, СчетУчетаНДС, ВыборкаТоварыИУслуги.ВидЦенности, Выборка.ДоговорКонтрагента, ВалютаРегламентированногоУчета);
           КонецЕсли;            
           
           НоваяСтрока.СчетРасходовБУ             = СчетРасходов;
           НоваяСтрока.СчетДоходовБУ              = СчетДоходов;            
           
       КонецЦикла;
       
       НовыйДокументКорректировки.КорректироватьБУиНУ = Ложь;
       НовыйДокументКорректировки.Комментарий         = "## Создан на основании: " + Выборка.Ссылка + " ##";
       
       Попытка
           НовыйДокументКорректировки.Записать(РежимЗаписиДокумента.Проведение);
           Выборка.Ссылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
           
           // Создаем счет-фактуру        
           СчетФактура = Документы.СчетФактураВыданный.СоздатьДокумент();            
           СчетФактура.Заполнить(НовыйДокументКорректировки.Ссылка);
           СчетФактура.ОпределениеПараметровСчетаФактуры();
           СчетФактура.Контрагент                  = Выборка.Контрагент;
           СчетФактура.ДоговорКонтрагента          = Выборка.ДоговорКонтрагента;
           СчетФактура.Номер                       = Выборка.НомерСчетаФактуры;
           СчетФактура.Дата                        = Выборка.Дата;
           СчетФактура.ВидСчетаФактуры                = Перечисления.ВидСчетаФактурыВыставленного.Корректировочный;
           СчетФактура.НомерИсходногоДокумента     = Выборка.НомерИсходногоДокумента;
           СчетФактура.ДатаИсходногоДокумента      = Выборка.ДатаИсходногоДокумента;
           СчетФактура.Комментарий                 = "## Создан на основании: " + Выборка.Ссылка + " ##";
           
           СчетФактура.ДатаНомерДокументовОплаты.Добавить();
                       
           Попытка
               СчетФактура.Записать(РежимЗаписиДокумента.Проведение);                
           Исключение
               ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
           КонецПопытки;
           
       Исключение
           ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
       КонецПопытки;
       
   КонецЦикла;    
   
   // Обработка корректировочных счетов-фактур полученных
   Запрос.Текст =
   "ВЫБРАТЬ
   |    УдалитьКорректировочныйСчетФактураПолученный.Ссылка,
   |    УдалитьКорректировочныйСчетФактураПолученный.Дата КАК Дата,
   |    УдалитьКорректировочныйСчетФактураПолученный.Организация КАК Организация,
   |    УдалитьКорректировочныйСчетФактураПолученный.Контрагент КАК Контрагент,
   |    УдалитьКорректировочныйСчетФактураПолученный.ДоговорКонтрагента КАК ДоговорКонтрагента,
   |    УдалитьКорректировочныйСчетФактураПолученный.СчетФактура КАК ДокументПоступления,
   |    УдалитьКорректировочныйСчетФактураПолученный.НомерВходящегоДокумента КАК НомерВходящегоДокумента,
   |    УдалитьКорректировочныйСчетФактураПолученный.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
   |    УдалитьКорректировочныйСчетФактураПолученный.ВалютаДокумента КАК ВалютаДокумента,
   |    УдалитьКорректировочныйСчетФактураПолученный.СчетФактура.ДатаВходящегоДокумента КАК ДатаИсходногоДокумента,
   |    УдалитьКорректировочныйСчетФактураПолученный.СчетФактура.НомерВходящегоДокумента КАК НомерИсходногоДокумента,
   |    УдалитьКорректировочныйСчетФактураПолученный.ВосстановлениеНДС.(
   |        СтавкаНДС КАК СтавкаНДС,
   |        СуммаНДС КАК СуммаНДС,
   |        УдалитьКорректировочныйСчетФактураПолученный.ВосстановлениеНДС.Сумма - УдалитьКорректировочныйСчетФактураПолученный.ВосстановлениеНДС.СуммаНДС КАК Сумма,
   |        ВидЦенности КАК ВидЦенности
   |    ),
   |    УдалитьКорректировочныйСчетФактураПолученный.ВычетНДС.(
   |        СтавкаНДС КАК СтавкаНДС,
   |        СуммаНДС КАК СуммаНДС,
   |        УдалитьКорректировочныйСчетФактураПолученный.ВычетНДС.Сумма - УдалитьКорректировочныйСчетФактураПолученный.ВычетНДС.СуммаНДС КАК Сумма,
   |        ВидЦенности КАК ВидЦенности
   |    )
   |ИЗ
   |    Документ.УдалитьКорректировочныйСчетФактураПолученный КАК УдалитьКорректировочныйСчетФактураПолученный
   |ГДЕ
   |    УдалитьКорректировочныйСчетФактураПолученный.Проведен";
   
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий() Цикл
       НовыйДокументКорректировки = Документы.КорректировкаПоступления.СоздатьДокумент();
       НовыйДокументКорректировки.ВидОперации = Перечисления.ВидыОперацийИсправленияПоступленияРеализации.СогласованноеИзменение;
       НовыйДокументКорректировки.ВосстановитьНДС = Истина;
       НовыйДокументКорректировки.УчитыватьНДС    = Истина;
       
       ЗаполнитьЗначенияСвойств(НовыйДокументКорректировки, Выборка);        
       
       ВыборкаВосстановлениеНДС = Выборка.ВосстановлениеНДС.Выбрать();
       Пока ВыборкаВосстановлениеНДС.Следующий() Цикл            
           Если ВыборкаВосстановлениеНДС.ВидЦенности = Перечисления.ВидыЦенностей.ПрочиеРаботыИУслуги Тогда
               НоваяСтрока = НовыйДокументКорректировки.Услуги.Добавить();            
               НоваяСтрока.СтавкаНДС           = ВыборкаВосстановлениеНДС.СтавкаНДС;
               НоваяСтрока.СуммаДоИзменения    = ВыборкаВосстановлениеНДС.Сумма;
               НоваяСтрока.СуммаНДСДоИзменения = ВыборкаВосстановлениеНДС.СуммаНДС;
               НоваяСтрока.ЕстьВДокументеПоступления = Истина;            
               ПолучитьСчетУчетаПоВидуЦенности(НоваяСтрока.СчетЗатрат, НоваяСтрока.СчетУчетаНДС, ВыборкаВосстановлениеНДС.ВидЦенности, Выборка.ДоговорКонтрагента, ВалютаРегламентированногоУчета);
           Иначе
               НоваяСтрока = НовыйДокументКорректировки.Товары.Добавить();            
               НоваяСтрока.СтавкаНДС           = ВыборкаВосстановлениеНДС.СтавкаНДС;
               НоваяСтрока.СуммаДоИзменения    = ВыборкаВосстановлениеНДС.Сумма;
               НоваяСтрока.СуммаНДСДоИзменения = ВыборкаВосстановлениеНДС.СуммаНДС;
               НоваяСтрока.ЕстьВДокументеПоступления = Истина;            
               ПолучитьСчетУчетаПоВидуЦенности(НоваяСтрока.СчетУчетаБУ, НоваяСтрока.СчетУчетаНДС, ВыборкаВосстановлениеНДС.ВидЦенности, Выборка.ДоговорКонтрагента, ВалютаРегламентированногоУчета);
           КонецЕсли;
       КонецЦикла;
       
       ВыборкаВычетНДС = Выборка.ВычетНДС.Выбрать();
       Пока ВыборкаВычетНДС.Следующий() Цикл            
           Если ВыборкаВычетНДС.ВидЦенности = Перечисления.ВидыЦенностей.ПрочиеРаботыИУслуги Тогда
               НоваяСтрока = НовыйДокументКорректировки.Услуги.Добавить();            
               НоваяСтрока.СтавкаНДС = ВыборкаВычетНДС.СтавкаНДС;
               НоваяСтрока.Сумма     = ВыборкаВычетНДС.Сумма;
               НоваяСтрока.СуммаНДС  = ВыборкаВычетНДС.СуммаНДС;
               НоваяСтрока.ЕстьВДокументеПоступления = Истина;
               ПолучитьСчетУчетаПоВидуЦенности(НоваяСтрока.СчетЗатрат, НоваяСтрока.СчетУчетаНДС, ВыборкаВычетНДС.ВидЦенности, Выборка.ДоговорКонтрагента, ВалютаРегламентированногоУчета);
           Иначе
               НоваяСтрока = НовыйДокументКорректировки.Товары.Добавить();            
               НоваяСтрока.СтавкаНДС = ВыборкаВычетНДС.СтавкаНДС;
               НоваяСтрока.Сумма     = ВыборкаВычетНДС.Сумма;
               НоваяСтрока.СуммаНДС  = ВыборкаВычетНДС.СуммаНДС;
               НоваяСтрока.ЕстьВДокументеПоступления = Истина;
               ПолучитьСчетУчетаПоВидуЦенности(НоваяСтрока.СчетУчетаБУ, НоваяСтрока.СчетУчетаНДС, ВыборкаВычетНДС.ВидЦенности, Выборка.ДоговорКонтрагента, ВалютаРегламентированногоУчета);
           КонецЕсли;
       КонецЦикла;
       
       НовыйДокументКорректировки.корректироватьБУиНУ = Ложь;
       НовыйДокументКорректировки.Комментарий         = "## Создан на основании: " + Выборка.Ссылка + " ##";
       
       Попытка
           НовыйДокументКорректировки.Записать(РежимЗаписиДокумента.Проведение);
           Выборка.Ссылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
           
           // Создаем счет-фактуру        
           СчетФактура = Документы.СчетФактураПолученный.СоздатьДокумент();            
           СчетФактура.Заполнить(НовыйДокументКорректировки.Ссылка);
           СчетФактура.ОпределениеПараметровСчетаФактуры();
           СчетФактура.Контрагент                  = Выборка.Контрагент;
           СчетФактура.ДоговорКонтрагента          = Выборка.ДоговорКонтрагента;
           СчетФактура.НомерВходящегоДокумента     = Выборка.НомерВходящегоДокумента;
           СчетФактура.ДатаВходящегоДокумента      = Выборка.ДатаВходящегоДокумента;
           СчетФактура.Дата                        = Выборка.Дата;
           СчетФактура.ВидСчетаФактуры             = Перечисления.ВидСчетаФактурыПолученного.Корректировочный;
           СчетФактура.НомерИсходногоДокумента     = Выборка.НомерИсходногоДокумента;
           СчетФактура.ДатаИсходногоДокумента      = Выборка.ДатаИсходногоДокумента;
           СчетФактура.Комментарий                 = "## Создан на основании: " + Выборка.Ссылка + " ##";
           
           Попытка
               СчетФактура.Записать(РежимЗаписиДокумента.Проведение);                
           Исключение
               ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
           КонецПопытки;
           
       Исключение
           ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
       КонецПопытки;
       
   КонецЦикла;    
   
КонецПроцедуры

вопрос: можно сразу смело внедрять в конфу новые документы КорректировкаПоступления/КорректировкаРеализации, а счет фактуры сделанные на их основании и будут корректировочными, я ведь правильно понимаю ?
Закон Брукера: Даже маленькая практика стоит большой теории.