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

26.03.26

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

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

Бесплатные

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

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

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

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

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

Схема работы режима совместимости, который появился в 1С 8.2, выглядит следующим образом:

При этом до появления 1С 8.3.3 проблем не было, поскольку управление запретом на синхронные вызовы и модальные окна не было. Однако, с появлением возможности управления этими признаками появилась и запрещенная комбинация:

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

Называется она запрещенная, потому что новые обработки не смогут запуститься, по причине явного указания типов при проверке синтаксиса, а старые обработки станут неработоспособными из-за выставленного запрета. Данная комбинация появилась, поскольку не предусмотрела связи пукнтов 1 и 2 в различных комбинациях. На практике мне встречались конфигурации - где для "модальных окон и синхронных вызовов" стояло использовать с предупреждениями.

Для защиты кода обработок от такого непредвиденного поведения, автором были найдены следующие способы адаптации кода:

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

Неявное создание типов, осуществляется специальным вариантом синтаксиса оператора "Новый":

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

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

Открытие формы через функцию "ПолучитьФорму" позволяет решить следующие проблемы:

  1. Функция "ОткрытьФорму" в 1с 8.2 и 8.3 имеет разное число параметров.
  2. Позволяет быстро настроить параметры и заполнить реквизиты перед открытием.

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

Форма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, мобильные)
    ПОповещ = Новый Массив;
    ПОповещ .Добавить("_ПослеВыбораФайлаНаЗагрузкуWEb");
    ПОповещ .Добавить(ЭтаФорма);
    ПОповещ .Добавить(ДополнительныеПараметры);
    // Спец. форма-обёртка для функции НачатьПомещениеФайла
    Форма = ЭтаФорма.ОбъектФормы + "ФормаФункций83УФЗагрузкаФайла";
    ПОткрытия= Новый Структура;
    ПОткрытия.Вставить("ВерсияПлатформы", ЭтаФорма.ВерсияПлатформы);
    ПОткрытия.Вставить("Расширение", ИмяФильтра + "|" + "*." + Расширение);
    ПОткрытия.Вставить("РежимДиалога", "Открытие");

    Форма1 = ПолучитьФорму(Форма, ПОткрытия, ЭтаФорма);
    Форма1.ПоместитьФайлАСС(Новый("ОписаниеОповещения", ПОповещ), Расширение);
КонецЕсли;

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

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

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

 

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

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

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

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

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

  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С:Управление торговлей 10 Россия Платные (руб)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf

14640 руб.

23.04.2026    3691    29    13    

31

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    2118    4    0    

5

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

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

9760 руб.

17.06.2025    4633    11    0    

11

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 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, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    14102    121    25    

77

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

Расширение, которое в форму списка и форму выбора справочника «Номенклатура» добавляет табличную часть в виде дерева, в которую выводится информация об остатках и доступности выбранной номенклатурной позиции.

6710 руб.

20.04.2026    762    1    0    

3

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

Расширение "Дополнительные документы" предназначено для создания дополнительных документов различного назначения, как форм для внесения данных так и печатных форм в расширяемой конфигурации пользовательскими средствами, без работы в конфигураторе и внесения изменений в структуру данных. Тестировалось для "1С:БП", "1С:УНФ","1С:КА"

21859 руб.

29.12.2025    1866    1    8    

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