Адаптация формы документа под мобильного клиента

30.06.26

Разработка - Работа с интерфейсом

Если открыть форму только что созданного объекта документа в мобильном клиенте, можно будет встретить предупреждающую форму о том, что форма документа не адаптирована для использования в мобильном клиенте. Здесь будет описан один из способов обхода этой формы.

Введение 


Задача была такой: "Нужно было создавать документы в 1С через мобильного клиента".

Нужно сканировать маркированные коды для отбраковки.

Через расширение был создан документ "Отбраковка КМ". Далее на телефон установили мобильного клиента. Открыв список документов, высветилось сообщение. 

 

 

Такое сообщение нежелательно бы было показывать пользователю. Поэтому принято решение убрать его.


Как искали место появления сообщения


В самом начале было неизвестно, где искать, так как в интернете никакой информации не было найдено. После того, как пооткрывали другие документы типовой конфигурации, стало известно, что счет на оплату и реализация открываются, не выдавая сообщения. Стали сравнивать формы и код модулей формы. Там нашелся код адаптации формы.

Который выглядел примерно так (код переписан для более простой формы):        



&НаСервере
Процедура МобильныйКлиентАдаптацияФормы()
	
	Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
		Возврат;
	КонецЕсли;
	
	МобильныйКлиентБПФормаСписка.НастроитьФормуОбъекта(ЭтотОбъект);
	МобильныйКлиентБПФормаСписка.ВстроитьЭлементВГруппуМКСписок(ЭтотОбъект, Элементы.Список);
	
	АдаптироватьМККоманднаяПанельФормы();
	
	АдаптироватьМКСписокФормы();
	
	АдаптироватьМККонтекстСписокФормы();
	
КонецПроцедуры

&НаСервере
Процедура АдаптироватьМККоманднаяПанельФормы()
	
	КомандыПоля = МобильныйКлиентБПФормаСписка.НовыйОписаниеКомандТабличноеПоле();
	КомандыПоля.КомандаСоздать = "ФормаСоздать";
	МобильныйКлиентБПФормаСписка.АдаптироватьМККоманднаяПанельФормы(ЭтотОбъект, КомандыПоля);

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

&НаКлиенте
Процедура Подключаемый_КомандаМКПоказатьСкрытьПрочиеКолонки(Команда)
	
	МобильныйКлиентБПФормаОбъектаКлиентСервер.УправлениеФормойСпискаКолонкаПрочее(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КомандаМКПоказатьСкрытьОтбор(Команда)
	МобильныйКлиентБПФормаОбъектаКлиентСервер.УправлениеФормойОтбораМК(ЭтотОбъект);
КонецПроцедуры


&НаСервере
Процедура АдаптироватьМККонтекстСписокФормы()
	
	МобильныйКлиентБПФормаОбъекта.АдаптироватьКонтекстноеМеню(ЭтотОбъект);

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

&НаСервере
Процедура АдаптироватьМКСписокФормы()
	
	МобильныйКлиентБПФормаСписка.ПодготовитьСписокФормы(ЭтотОбъект);
		
	Элементы.Дата.РастягиватьПоГоризонтали = Истина;
	МобильныйКлиентБПФормаСписка.ВстроитьЭлементВГруппуМК_ДатаНомер(ЭтотОбъект, Элементы.Дата);
	
	ПолеМК_Номер = Элементы.Добавить("ПолеМК_Номер", Тип("ПолеФормы"), Элементы.Список);
	ПолеМК_Номер.ПутьКДанным = "Список.Номер";
	ПолеМК_Номер.Вид = ВидПоляФормы.ПолеНадписи;
	МобильныйКлиентБПФормаСписка.ВстроитьЭлементВГруппуМК_ДатаНомер(ЭтотОбъект, ПолеМК_Номер);
	
	МобильныйКлиентБПФормаСписка.ВстроитьЭлементыВГруппуМК_Прочее(ЭтотОбъект, "Список");
	
КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	МобильныйКлиентАдаптацияФормы();
КонецПроцедуры

Вставив этот код отображение документов на форме изменится, но форма с сообщением никуда не денется.

Думая дальше мы скопировали форму из счета в новый документ и сделали ее основной, скопированная форма вела себя также как и остальные формы документа. 


Решение


Следующим решением было поискать подходящее место в БСП. И как результат - оно нашлось!

 В общем модуле "МобильныйКлиентБП" нашелся метод.

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

		ИмяФормы = ВыбраннаяФорма.ПолноеИмя();
		
	Иначе // требуется подобрать форму
		
		ОписаниеИсточника = Метаданные.НайтиПоТипу(ТипЗнч(Источник));
		ИмяФормы = ОписаниеИсточника.ПолноеИмя() + "." +
			?(ВыбраннаяФорма = Неопределено, ВидФормы, "Форма." + ВыбраннаяФорма);
			
	КонецЕсли;
	
	ЗаголовокФормы = "";
	Если Не Параметры.Свойство("Заголовок", ЗаголовокФормы) Тогда
		
		Если ОткрываемаяФормаУказанаЯвно Тогда
			
			ЗаголовокФормы = ВыбраннаяФорма.Синоним;
			
		Иначе
			
			Если ВидФормы = "ФормаСписка"
				И Не ПустаяСтрока(ОписаниеИсточника.РасширенноеПредставлениеСписка) Тогда
				
				ЗаголовокФормы = ОписаниеИсточника.РасширенноеПредставлениеСписка;
				
			ИначеЕсли ВидФормы = "ФормаСписка"
				И Не ПустаяСтрока(ОписаниеИсточника.ПредставлениеСписка) Тогда
				
				ЗаголовокФормы = ОписаниеИсточника.ПредставлениеСписка;
				
			Иначе
				
				ЗаголовокФормы = ОписаниеИсточника.Синоним;
				
			КонецЕсли;
			
		КонецЕсли;

	КонецЕсли;
	
	Ключ = Неопределено;
	Параметры.Свойство("Ключ", Ключ);
	ОписаниеНедоступногоДействия = ОписаниеНедоступногоДействия(ИмяФормы, ВидФормы, ЗаголовокФормы, Ключ);
	
	СтандартнаяОбработка = Ложь;
	ВыбраннаяФорма = "ОбщаяФорма.НедоступноНаМобильномКлиенте";
	
	ПараметрыОткрываемойФормы = Новый Структура;
	Для каждого ПараметрФормы Из Параметры Цикл
		ПараметрыОткрываемойФормы.Вставить(ПараметрФормы.Ключ, ПараметрФормы.Значение);
	КонецЦикла; 
	
	ПараметрыОткрытия = МобильныйКлиентБПКлиентСервер.НовыйПараметрыОткрытияФормыСПредупреждением();
	ПараметрыОткрытия.ИмяФормы                = ИмяФормы;
	ПараметрыОткрытия.Заголовок               = ЗаголовокФормы;
	ПараметрыОткрытия.ПереопределенаНаСервере = Истина;
	
	Параметры.Очистить();
	
	ПараметрыФормыНедоступно = МобильныйКлиентБПКлиентСервер.НовыйПараметрыФормаНедоступноНаМобильном();
	ПараметрыФормыНедоступно.ОписаниеНедоступногоДействия = ОписаниеНедоступногоДействия;
	ПараметрыФормыНедоступно.ФормаДоступнаСПредупреждением = ФормаДоступнаСПредупреждением;
	
	Параметры.Вставить("ПараметрыФормыНедоступно",  ПараметрыФормыНедоступно);
	Параметры.Вставить("ПараметрыОткрываемойФормы", ПараметрыОткрываемойФормы);
	Параметры.Вставить("ПереопределенаНаСервере",   ПараметрыОткрытия.ПереопределенаНаСервере);
	Параметры.Вставить("ПараметрыОткрытия",         ПараметрыОткрытия);
    
КонецПроцедуры

 В этом методе интересен стал кусок этот кода:

	Если Менеджер = "ЖурналДокументовМенеджер" Тогда
		ФормаДоступнаБезЗапроса = ФормаЖурналаДокументовАдаптирована(ИмяОбъекта, ВидФормы);
	ИначеЕсли Менеджер = "ДокументМенеджер" Тогда
		ФормаДоступнаБезЗапроса = (ВидФормы = "ФормаВыбора")
		Или ФормаДокументаАдаптирована(ИмяОбъекта, ВидФормы);
	КонецЕсли;

Точнее, метод "ФормаДокументаАдаптирована". 

В типовом виде он выглядит так:

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

Для того чтобы убрать сообщение, мы добавили этот метод в расширение  с изменением и контролем.

В результате получилось вот так.

&ИзменениеИКонтроль("ФормаДокументаАдаптирована")
Функция КПК_ФормаДокументаАдаптирована(ИмяОбъекта, ВидФормы)

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

	Возврат ФормаАдаптирована;

КонецФункции

Заключение


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

При этом даже если в форме никакой адаптации не было прописано.

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

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

31720 руб.

27.03.2025    86826    62    42    

73

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный ТСД (терминал сбора данных) сканер для 1С для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически. Решение предназначено для считывания штрихкодов, а не для их создания и печати.

3050 руб.

22.04.2019    121260    722    205    

383

Мобильная разработка Сканер штрих-кода Терминал сбора данных 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

3050 руб.

03.12.2018    70740    240    106    

187

Мобильная разработка 1С:Предприятие 8 1С:Управление торговлей 11 Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

"МРМ:Маркировка" для работы с конфигурациями 1С - готовое решение, позволяющее быстро автоматизировать работу учетной системы 1С на ордерном и безордерном складе при работе как с товарами, подлежащими обязательной маркировке, так и с товарами, учет которых построен на базе линейных штрих-кодов. Решение поддерживает большинство распространенных складских документов, необходимых для работы кладовщику на терминале сбора данных. Для начинающих пользователей имеется подробная инструкция по работе с приложением в разрезе видов документов.

19000 руб.

24.06.2025    3297    26    0    

4

Мобильная разработка Мессенджеры и боты 1С:Предприятие 8 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13420 руб.

27.12.2021    52722    130    182    

228

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5246 руб.

29.06.2020    25249    34    6    

53

Консолидация данных Работа с интерфейсом Программист Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)

Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.

6088 руб.

17.10.2025    2504    3    0    

2
Для отправки сообщения требуется регистрация/авторизация