Айкидо против режима совместимости 1С - используем новые возможности платформы на старых конфигурациях

15.10.25

Задачи пользователя - Адаптация типовых решений

В статье описаны основные приемы борьбы с режимом совместимости.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Бесплатно
Полный пример удаления файлов на платформе 1С 8.х
.epf 12,24Kb
2 Скачать бесплатно
Реализация мягкого варианта обхода ограничений для WEB и мобильного клиента
.epf 9,65Kb
1 Скачать бесплатно

Так почему, же с режимом совместимости надо бороться, ведь он предназначен для поддержки старых конфигураций? Изначально оно так и было, однако с появлением 1С 8.3.3 это стало не совсем так.

Запрещенная комбинация условий

Получить такую комбинацию можно следующим образом:

  1. Режим совместимости – 8.2.13 или 8.1
  2. Включен запрет на синхронные вызовы и модальные окна. 

Результатам этого станет следующее: новые обработки не смогут запуститься, по причине явного указания типов при проверке синтаксиса, а старые обработки станут неработоспособными - не было в те времена асинхронных решений.

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

Именно по этой причине, рекомендуется обходить особенности работы режима совместимости, чтобы гарантировать работу обработки в будущем, или если уж вы, как и я, являетесь поклонником ретро - дать возможность работать и на старых и на новых версиях 1С.

Работа режима совместимости показана на этой блок-схеме:

Раз уж речь пошла об том, как обойти режим совместимости, то это можно сделать при помощи следующих приемов:

  1. Неявное создание типов
  2. Открытие форм через ПолучитьФорму с последующей обработкой
  3. Вызов функции из строки
  4. Мягкий и жесткий аналог оператора выполнить на WEB клиенте
  5. Локальные способы обхода некоторых ограничений под IOS.

Все способы обхода имеет смысл рассмотреть подробно. 

Неявное создание типов

Для этого следует рассмотреть сначала явное создание типов, и оно выглядит так:

Пар = новый Структура; //Дополнительные параметры
Т = новый ОписаниеОповещения ("ТЕСТ_В", ЭтаФорма, Пар);

Однако, оператор новый имеет и другой синтаксис, который не проверяется синтаксическим анализатором:

Пар = новый Структура; //Дополнительные параметры
Массив = новый Массив;
Массив.Добавить("ТЕСТ_В");
Массив.Добавить(ЭтаФорма);
Массив.Добавить(Пар);
Т = новый("ОписаниеОповещения",Массив);

Открытие форм через ПолучитьФорму

На примере обычных форм этот код выглядит таким образом:

Форма1=ЭтотОбъект.ПолучитьФорму("ФормаТОб",ЭтаФорма,новый УникальныйИдентификатор);
    Форма1.Параметры = новый Структура("Т","1234");
    Форма1.ОткрытьМодально();

Примечание:В данном случае Параметры - это экспортная переменная, которая была создана в открываемой форме. Упрощает унификацию кода с Управляемыми формами.

Для управляемых форм код выглядит таким образом:

   Форма1=ПолучитьФорму(ИмяФормыОткрытия,ПараметрыФормы,ЭтаФорма);
   Если ТипОписаниеОповещения=Неопределено Тогда // 1с 8.3.2 и старше
		Результат=Форма1.ОткрытьМодально();
		_ОбработкаИзмененияСохраненныхВариантов(Результат,Неопределено);
	иначе 		
		ПараметрыОповещения = Новый Массив;			
		ПараметрыОповещения.Добавить("_ОбработкаИзмененияСохраненныхВариантов");    		 	 				
		ПараметрыОповещения.Добавить(ЭтаФорма);
		Форма1.ОписаниеОповещенияОЗакрытии=новый("ОписаниеОповещения",ПараметрыОповещения);
		Форма1.РежимОткрытияОкна=РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
		Форма1.Открыть();		
	КонецЕсли;	

Примечание: к сожалению, этот способ работает менее быстро, чем функция ОткрытьФорму, так как при этом работают часть обработчиков.

Операторы Выполнить/Вычислить - скрываем вызов функции от синтаксического контроля. 

Для того чтобы исключить из проверки вызов функций в старых конфигурациях, можно использовать эти операторы следующим образом (пример кода): 

	Если ((ВерсияПлатформы[1]=3 И ВерсияПлатформы[2]<6) ИЛИ ВерсияПлатформы[1]<3) Тогда 
        УдалитьФайлы(ИмяФайла);
	иначе			
			ПараметрыОповещения = Новый Массив;   			
			ПараметрыОповещения.Добавить("_УдалитьФайлыЗавершение");    		 	 				
			ПараметрыОповещения.Добавить(ЭтотОбъект);
			ПараметрыОповещения.Добавить(новый Структура); 	   			           		
			Выполнить("НачатьУдалениеФайлов(новый (""ОписаниеОповещения"",ПараметрыОповещения),ИмяФайла)");						
	КонецЕсли;	


Такой трюк возможен во всех режимах работы, за исключением следующих случаев: 

  1. WEB клиент, мобильный клиент IOS на стороне клиента.
  2. Мобильное приложение под IOS.

Если с последним вариантом, все тщетно, то первый случай небезнадежен.

Обход ограничения оператора Выполнить для WEB и Мобильного клиента 

Поскольку серверная часть одинаковая у этих типов клиентов, следовательно, возникает возможность использовать следующие приемы: 

  1. Дополнительная изолированная форма с нужным кодом. Содержит вызов нужной процедуры или функции. Управление кодом через параметры. 
  2. Реализация аналога оператора выполнить через внешнюю обработку. Это нужно, когда идет речь о выполнении кода в полноценной консоли. 

Первый способ используется следующим образом:

	Если ТипОписаниеОповещения=Неопределено Тогда
		
		//Ассинхронный режим уже не возможен - тогда производим вызов через синхронный переходник:
		Адрес="";
		Результат=ПоместитьФайл(Адрес,ИмяФильтраКакВДиалоге+"|"+"*."+Расширение , , Истина,новый УникальныйИдентификатор);
		_ПослеВыбораФайлаНаЗагрузкуWEb(Результат,Адрес,Неопределено, ДополнительныеПараметры);
		
	иначе
		
		ПараметрыОповещения = Новый Массив;
		ПараметрыОповещения.Добавить("_ПослеВыбораФайлаНаЗагрузкуWEb");	
		ПараметрыОповещения.Добавить(ЭтаФорма);
		ПараметрыОповещения.Добавить(ДополнительныеПараметры);
		//Костыль для функции НачатьПомещениеФайла для работы на платформе 8.2:
		Форма=ЭтаФорма.ОбъектФормы+"ФормаФункций83УФЗагрузкаФайла";
		ПараметрыОткрытия = новый Структура;
		ПараметрыОткрытия.Вставить("ВерсияПлатформы",ЭтаФорма.ВерсияПлатформы);
		ПараметрыОткрытия.Вставить("Расширение",ИмяФильтраКакВДиалоге+"|"+"*."+Расширение);
		ПараметрыОткрытия.Вставить("РежимДиалога","Открытие");
		Форма1=ПолучитьФорму(Форма,ПараметрыОткрытия,ЭтаФорма);
		Форма1.ПоместитьФайлАСС(Новый ("ОписаниеОповещения",ПараметрыОповещения),Расширение);
		
	КонецЕсли;

Данный код позволяет загрузить файл. В форме при этом рекомендуется оформить функцию, которая вызывается из дополнительной формы по аналогии с этим:

&НаКлиенте
Функция ПоместитьФайлАСС(Оповещение,Расширение) экспорт
	#Если ВебКлиент Тогда		
		Если (ЭтаФорма.ВерсияПлатформы[1].Значение=3
			И ЭтаФорма.ВерсияПлатформы[2].Значение<13) Тогда			
			//Для версий старше 8.3.3 - переходим на ассинхронный режим без диалога, т.к. он не задан: 			
			НачатьПомещениеФайла(Оповещение, , "*."+Расширение , Истина, Новый УникальныйИдентификатор);			
		Иначе
			//Для версий и новее 8.3.13 - переходим сразу на ассинхронный режим с диалогом, т.к. он не запрещен: 
			Режим = РежимДиалогаВыбораФайла.Открытие;
			ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
			ДиалогОткрытияФайла.Фильтр=Расширение;
			ДиалогОткрытияФайла.МножественныйВыбор=Ложь;  
			НачатьПомещениеФайла(Оповещение, , ДиалогОткрытияФайла , Истина, Новый УникальныйИдентификатор);			
		КонецЕсли;		
	#КонецЕсли	
КонецФункции

Примечание: при встраивании внутрь старых конфигураций лучше всего в такие формы ставить примечания, иначе потом легко забыть, а зачем нужна форма с ошибками!!!

Мобильное приложение под IOS

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

  1. Используем ОписаниеТипов, если нужно проверить наличие того или иного типа и устраивает значение по умолчанию. К примеру, можно получить СправочникМенеджер, и убедиться что регистров расчета нет в мобильном приложении.
  2. Сохранение промежуточных данных с сервера через XML которые можно хранить внутри базы 1С. После этого можно восстановить на сервере значение. 
  3. Сохранение произвольных значений через код ПоместитьВоВременноеХранилище(новый Структура("Т",Значение)). Структура нужна, так как иначе платформа будет ругаться на некоторые типы данных, которые не относят к пункту 2.
  4. Системные перечисления проверять через функцию ПредопределенноеЗначение.  Это позволяет в ряде случаев разветвить алгоритмы.
  5. По возможности используем синхронные функции, это тоже спасает, так как на мобильную платформу запреты на модальные окна и синхронные вызовы не наложены.

Постскриптум: 

Режим совместимости не приговор новым возможностям платформы для старых конфигураций, но требует к себе должного уважения. Также эти приемы позволяют эффективно писать независимый от режима совместимости код, который стабильно работает как на УПП, так и на ЗУП.

К статье приложены обработки: 

  1. Реализация мягкого варианта обхода ограничений для WEB и мобильного клиента - позволяет просто загрузить текст из текстового файла в поле ввода, реализована для УФ и спроектирована на поддержку функций в WEB клиенте.
  2. Полный пример удаления файлов на платформе 1С 8.х. В этой обработке приведен пример удаления файлов с учетом кода, направленного на защиту от запрета на синхронные вызовы. Этот код способен работать даже на платформе 1С 8.0, но правда для этого его надо будет упаковать в формат обработки времен 1С 8.0.

Обработки созданы для платформы 1С 8.2.9 и новее. Конфигурация не важна.

 

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 1.6, релизы 1.6.31.1
  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.323

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

См. также

Адаптация типовых решений 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

31800 руб.

29.06.2023    9510    29    15    

37

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

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

9600 руб.

17.06.2025    1478    5    0    

5

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9000 руб.

02.08.2023    6219    23    5    

39

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3500 руб.

07.02.2023    10208    99    17    

57

Адаптация типовых решений Бухгалтер 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Разработка для упрощения процедуры передачи данных о выплатах для конфигурации 1С:ЗиКГУ. Данное расширение предоставляет возможность экспортировать данные «Распоряжения» непосредственно из документа "Ведомость в банк" в формате XML.

3840 руб.

13.11.2024    2281    4    4    

4

Адаптация типовых решений Программист 1С v8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Маленькая заметка (в трех разных масштабах) для тех, кто часто видит окно при входе в ЗУП «Новые сообщения для расшифровки по 1С-Отчетность», которое появляется через 60 секунд после запуска программы, как раз когда вы уже добрались до интересующей вас формы и начали в ней что-то активно делать:

1 стартмани

17.06.2024    7503    80    Znata_PI    12    

22

Адаптация типовых решений Программист Пользователь 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    7146    dimanich70    17    

22
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Dima1205 129 15.10.25 11:04 Сейчас в теме
Статья была написана как текстовая версия доклада на конференции infostart teach event 2025 в секции "Открытый микрофон".
2. bulpi 217 15.10.25 18:56 Сейчас в теме
Статья интересная, но написана крайне неряшливо. Такое впечатление, что автор писал для себя. Мысль явно есть, но она непонятно изложена.
3. Dima1205 129 15.10.25 19:22 Сейчас в теме
(2) Статья уже не для юниоров. Это конспект и довольно краткий, а по режиму совместимости что именно не понятно?
Для отправки сообщения требуется регистрация/авторизация