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