Как заполнить документ «Оказание услуг» на основании «Счета на оплату» в 1С:Бухгалтерии 2.0

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В конфигурации «1С:Бухгалтерия предприятия» редакции 2.0 разработчиками не предусмотрен стандартный механизм ввода на основании между документами СчетНаОплатуПокупателю и ОказаниеУслуг. Разберем, почему этих документов нет в типовой связке, проанализируем различия в их структуре и рассмотрим варианты решения данной задачи.

Архитектурные различия документов

Выясним причину, по которой типовой механизм ввода на основании не реализован «из коробки». Она заключается в концептуальном расхождении структур этих двух документов:

  1. Документ «Счет на оплату покупателю» построен по принципу «Один покупатель — много товаров/услуг». Контрагент и договор указываются в шапке документа, а список номенклатуры (включая услуги) расположен в табличной части.
  2. Документ «Оказание услуг» предназначен для группового оказания однотипной услуги множеству клиентов (например, абонентская плата или аренда). В его структуре услуга, счет доходов и счет расходов фиксируются в шапке, а табличная часть Контрагенты содержит список покупателей, их договоры и суммы.

Из-за такого инвертированного строения реквизитов прямое переносы данных из одного документа в другой требует трансформации данных из табличной части счета в шапку оказания услуг и наоборот.

Вариант 1. Программное заполнение в модуле документа

Рассмотрим вариант доработки конфигурации путем переопределения процедуры ОбработкаЗаполнения в модуле объекта документа ОказаниеУслуг. Для этого необходимо добавить документ СчетНаОплатуПокупателю в список оснований документа «Оказание услуг» и прописать код переноса реквизитов.

Проанализируем пример кода процедуры заполнения:


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

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

Важное примечание: при заполнении счетов учета в документе «Оказание услуг» следует указывать счета основной деятельности (90.01.1, 90.02.1, 90.03), если услуги относятся к основным видам деятельности компании, а не счета прочих доходов и расходов (91).

Вариант 2. Использование внешних обработок (без снятия с поддержки)

Обратим внимание на то, что прямое изменение кода в модуле документа требует снятия объекта с поддержки, что усложнит последующие обновления конфигурации. При этом механизм расширений конфигурации в платформе 1С:Предприятие 8.2 еще не поддерживался.

Чтобы избежать модификации типовой конфигурации, рассмотрим альтернативные безнависационные пути:

  1. Внешняя обработка заполнения табличной части: создается обработка, подключаемая через справочник «Дополнительные внешние обработки». Пользователь открывает документ «Оказание услуг», выбирает счет на оплату через форму обработки, и табличная часть заполняется автоматически.
  2. Внешняя обработка-мастер (Рабочее место): разрабатывается отдельный инструмент, который подбирает выписанные счета на оплату за период, группирует их по конкретной услуге и автоматически формирует один или несколько документов «Оказание услуг».

Типовое решение без доработок

Если услуга оказывается не группе контрагентов, а одному конкретному покупателю, правильным решением является использование документа «Реализация товаров и услуг» (или «Услуги (акт)»). Для него механизм ввода на основании из документа СчетНаОплатуПокупателю реализован в типовой конфигурации по умолчанию и не требует программирования.

← На главную