Как сделать управляемую форму для авансового отчета в 1С:УПП 1.3?

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

При переводе пользователей на работу через тонкий клиент в конфигурациях на обычных формах (таких как 1С:Управление производственным предприятием 1.3) часто возникает необходимость предоставить доступ к отдельным документам. Одним из наиболее востребованных документов для рядовых сотрудников является АвансовыйОтчет. Однако в типовой УПП 1.3 документ реализован исключительно на обычных формах. Разберем, почему попытка просто скопировать форму из других конфигураций приводит к проблемам и как правильно организовать ввод авансовых отчетов в тонком клиенте.

Архитектурные сложности прямого переноса формы из УТ 11 или ERP

Проанализируем, с какими препятствиями сталкивается разработчик при попытке заимствования управляемой формы из современных конфигураций (например, Управление торговлей 11 или ERP):

  1. Зависимость от Библиотеки стандартных подсистем (БСП): современные конфигурации используют актуальные версии БСП с развитым клиент-серверным взаимодействием. Перенос типовой формы влечет за собой необходимость копирования десятков общих модулей, служебных параметров сеанса и процедур, отсутствующих в УПП 1.3.
  2. Различия в структуре метаданных: в торговых и ERP-системах логика авансового отчета завязана на справочники Партнеры, Договоры, Соглашения, УпаковкиЕдиницыИзмерения, а также на регистры оперативного контура без прямого бухгалтерского учета. В УПП 1.3 документ ориентирован на бухгалтерский план счетов и субконто.
  3. Контекст общих модулей: в УПП 1.3 большинство общих модулей скомпилировано для толстого клиента. Попытка вызвать их процедуры из управляемой формы тонкого клиента (директивы &НаКлиенте) приведет к ошибкам времени выполнения, если у модулей не установлены флаги Вызов сервера и Сервер.

Вариант 1. Разработка облегченной управляемой формы документа

Самый надежный и быстрый способ решения задачи — не копировать тысячи строк типового кода, а создать новую компактную управляемую форму непосредственно в документе АвансовыйОтчет.

Рассмотрим логику реализации по шагам:

  1. Определение минимального состава реквизитов: выносим на форму только те данные, которые заполняет подотчетное лицо (организация, подотчетное лицо, валюта, дата, комментарий и табличную часть с расходами: контрагент, сумма, ставка НДС, входящий номер и дата чека).
  2. Исключение сложной бухгалтерской аналитики: счета учета затрат, счета расчетов с контрагентами, статьи затрат по налоговому учету и счета НДС не отображаются на форме сотрудника.
  3. Сохранение без проведения: сотрудник в тонком клиенте записывает документ в статусе черновика. Бухгалтер открывает этот же документ на обычной форме в толстом клиенте, выполняет проверку, проставляет счета учета и проводит документ.

Для корректного вызова нужной формы в зависимости от режима работы настроим перехват в модуле менеджера документа. Добавим обработчик события ОбработкаПолученияФормы:


Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
	
	// Переопределяем форму только для основной формы объекта
	Если ВидФормы = "ФормаОбъекта" Тогда
		#Если ТонкийКлиент Или ВебКлиент Тогда
			ВыбраннаяФорма = "Документ.АвансовыйОтчет.Форма.УправляемаяФормаДокумента";
			СтандартнаяОбработка = Ложь;
		#КонецЕсли
	КонецЕсли;
	
КонецПроцедуры

Вариант 2. Использование конфигурации «1С:Бухгалтерия предприятия 3.0» в качестве донора

Если требуется полноценная бухгалтерская логика на управляемой форме со счетами учета и расчетом НДС, в качестве исходного образца лучше использовать 1С:Бухгалтерия предприятия 3.0, а не УТ 11.

Выясним, почему БП 3.0 предпочтительнее:

  1. Структура табличных частей (Товары, ОплатаПоставщикам, Прочее, Авансы) в БП 3.0 концептуально совпадает со структурой УПП 1.3.
  2. В обеих конфигурациях используется бухгалтерский план счетов и типовые механизмы работы с субконто.
  3. При переносе формы из БП 3.0 потребуется изолировать модули формы от служебных вызовов БСП, переписав их на прямые обращения к процедурам сервера текущей конфигурации.

Вариант 3. Создание внешнего АРМ (рабочего места подотчетника)

Чтобы не вносить изменения в структуру типового документа и модуль менеджера, разработаем внешнюю обработку на управляемых формах. Посмотрим на преимущества такого подхода:

  1. Изоляция кода: логика интерфейса подотчетного лица полностью вынесена за пределы конфигурации, что упрощает дальнейшие обновления УПП 1.3.
  2. Программное создание документа: пользователь заполняет поля в обработке, нажимает кнопку отправки, и серверный метод обработки программно создает объект ДокументОбъект.АвансовыйОтчет:

&НаСервере
Функция СоздатьАвансовыйОтчетНаСервере(ДанныеФормы)
	
	НовыйДокумент = Документы.АвансовыйОтчет.СоздатьДокумент();
	НовыйДокумент.Дата = ТекущаяДата();
	НовыйДокумент.Организация = ДанныеФормы.Организация;
	НовыйДокумент.ФизЛицо = ДанныеФормы.ПодотчетноеЛицо;
	
	Для Каждого СтрокаРасхода Из ДанныеФормы.Расходы Цикл
		НоваяСтрока = НовыйДокумент.Прочее.Добавить();
		НоваяСтрока.Содержание = СтрокаРасхода.Описание;
		НоваяСтрока.Сумма = СтрокаРасхода.Сумма;
		НоваяСтрока.НДС = СтрокаРасхода.НДС;
	КонецЦикла;
	
	НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
	Возврат НовыйДокумент.Ссылка;
	
КонецФункции

Таким образом, отказ от адаптации громоздких типовых форм из УТ 11 в пользу собственной облегченной управляемой формы или отдельного АРМ позволяет быстро запустить работу подотчетных лиц в тонком клиенте без нарушения целостности учета в УПП 1.3.

← На главную