Обработка для переноса оборотов счета для конфигурации 1С:Бухгалтерия 8

Доброго времени суток, уважаемые читатели нашего блога! Я хочу поделиться небольшой обработкой для конфигурации 1С:Бухгалтерия 8, для переноса оборотов одного счёта на другой. При совпадении аналитики счета, будет перенесена и она, то есть, если счет источник имеет вид субконто «Счет затрат», то значение этого субконто обязательно будет перенесено, несмотря на то, каким по счёту оно является в счёте приёмнике.

Если вы хотите скачать другие обработки для 1С 8, то можете посмотреть их здесь, а отчёты для 1С 8 тут. С помощью одной из обработок вы сможете удалить задублированные элементы в справочнике «Контрагенты». Другая обработка поможет сразу вывести на печать документы «Акт об оказании услуг», «Счет-Фактура» и «Приходный кассовый ордер».

Внешний вид обработки для переноса оборотов счёта:

Форма внешней обработки 1С 8 по переносу оборотов одного счёта на другой

Небольшая инструкция по работе с обработкой для переноса оборотов счета

  1. Для начала в поле «Конфигурация для» укажем конфигурацию, в которой мы будем работать. Значение «России» указывает, что работать будем в российской конфигурации «Бухгалтерия предприятия». Значение «Казахстана» указывает, что работать будем в конфигурации «Бухгалтерия для Казахстана».
  2. Выберем в поле «Организацию», по которой хотим переносить обороты «Счета источника».
  3. Определим период, в который хотим переносить обороты нашего счёта.
  4. Укажем счёт источник и счёт приёмник.
  5. Если выберем конкретную операцию в поле «Операция бух», то при нажатии на кнопку выполнить, все старые обороты будут удалены. Если поле «Операция бух» оставить пустым, то будет создана новая операция, введённая вручную.

Теперь можно сделать перенос оборотов с любого счета на другой счет. Для этого нужно вызвать другую форму обработки по кнопке на панели «Замена ссылок на счета».

Кнопка на панели «Замена ссылок на счета»

После нажатия на кнопку должна появиться следующая форма:

Управляемая форма замены счета

Кстати, эта форма откроется, если обработку встроить в дерево конфигурации, так как эта форма является управляемой.

Хотелось бы отметить, что перенос оборотов счёта осуществляется, если есть обороты счета источника по дебету.

При совпадении аналитики счета, будет перенесена и она, то есть, если счет источник имеет вид субконто «Счет затрат», то значение этого субконто обязательно будет перенесено, несмотря на то, каким по счёту оно является в счёте приёмнике.

Пример исходного кода обработки для переноса оборотов счета

Это всего лишь пример исходного кода обработки для переноса оборотов счета, так как есть ещё возможности для его улучшения. Постараюсь подробно описать только самую важную часть исходного кода. Как вы заметите, исходный код состоит только из одной процедуры:

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

Конечно, здесь опубликован не весь программный код обработки для переноса оборотов счета. Но его можно увидеть, да и опробовать саму эту обработку, если скачать по ссылке. Если у вас другие данные или другая конфигурация, то мы можем помочь изменить обработку под ваши нужды, обращайтесь.

ПОДПИСКА