Каталог решений - Правила переноса документа Сторно в Бухгалтерию 3.0 из любой конфигурации, где он есть

Правила переноса документа Сторно в Бухгалтерию 3.0 из любой конфигурации, где он есть

Правила переноса документа Сторно в Бухгалтерию 3.0 из любой конфигурации, где он есть

В наличии

В данной статье представлен код обработчика «ПослеЗагрузки» документа бухгалтерии «Сторно».

Категория:

Описание

Может, кому-нибудь будет полезно.

Как известно, в типовых правилах конвертации документ "Сторно" не представлен. 

В Бухгалтерии 3.0 сторнирование производится с помощью документа "ОперацияБух".

Если создавать этот документ руками, то он полностью заполняется проводками сторнируемого документа с противоположным знаком.

При создании правил обмена, важно правильно заполнить реквизит "СторнируемыйДокумент" и создать для этого типа ПКО.

Для этого реквизита обязательно указать в ПКС "ПередВыгрузкой": 

  ВыгрузитьТолькоСсылку = Истина;

В ПКС "СпособЗаполнения" пишем: 

  Значение = "Сторно";

Ну и наконец в обработчике "ПослеЗагрузки" пишем следующий код:

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

В общем, правило можно сделать для конвертации из любой конфигурации, хоть из 7.7. 

Главное правильно сконвертировать сторнируемый документ, а дальше после загрузки заполнятся все движения Сторно.

has been added to your cart:
Оформление заказа