Серверные вызовы, которые нельзя вызывать
Разработка - Механизмы платформы 1С
Встречали ли такое? Создаёшь себе событие у таблицы формы. Никого не трогаешь.

А тут бац - нельзя создать процедуру на сервере. Неожиданно

Почему? Можно, конечно, почитать в Синтаксис Помощнике... Но зачем? Опять, небось, платформа косячит! Поэтому часто разработчики пытаются её перехитрить:
Выбирают создание "на сервере без контекста"

и удаляют текст "БезКонтекста"

Платформа не ругается, проверки синтаксиса проходят. Profit!!!
В действительности же, так делать не есть хорошо и может привести к неожиданным последствиям. Вплоть до падения платформы.
Обратимся всё же к Синтаксис Помощнику:

Как видим, сразу пишут о том, что так делать нельзя.
Более того:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
Что это значит? Что в ПриАктивацииСтроки() нельзя изменять Заголовок, Доступность, Подсказку и т.д. Проверить это легко:

Так а почему? Самый быстрый пример:

Изменение заголовка колонки приводит к обращению к серверу. На этой гифке можно лицезреть результат - бесконечный цикл платформы:

Как это работает? Событие ПриАктивацииСтроки изменяет свойство, которое выполняет обращение к серверу, что снова вызывает событие ПриАктивизацииСтроки. И так до бесконечности (или же до падения платформы).
А вот ещё одно интересное поведение. Допустим, в ПриАктивацииСтроки() код выпал в ошибку:

Если это произойдёт в клиентском методе, то всё хорошо. Пользователь закроет окошко с ошибкой и продолжит работать:

То же произойдёт в методе НаСервереБезКонтекста

Но стоит применить директиву &НаСервере, как будет интересное поведение.

Теперь ошибка будет повторяться бесконечно. И ничего, кроме завершения работы сеанса, не поможет пользователю избавиться от неё.

Вот такая незадача.
Но проблема не только в ПриАктивацииСтроки(). Есть и другие методы, например, ПередНачаломИзменения(). В каждом из таких методов будет описан соответствующий комментарий в Синтаксис Помощнике. Что будет, если нарушить его указания?
Вот такое поведение нам удалось поймать на "продуктиве".
Суть кода: ПередНачаломИзменения() код обращается на сервер, делает запрос и получает строку, которую нужно присвоить в свойство поля формы "ПодсказкаВвода".
Мы же для примера приведем упрощенную реализацию без запроса.
В нашей тестовой обработке ПередНачаломИзменения() у нас срабатывает процедура:


Далее: в обработке имеется ОбязательнаяКолонка. И, если её не заполнить, произойдёт такое:

Ничего не обычного, всё работает. Но! Если вдруг пользователь откроет обработку и, не кликая на таблицу, нажмёт на кнопку проверки, то произойдёт падение с записью дампа:

Такое необычное поведение встретилось у нас на работе в продуктивной базе в форме документа. Представляете, как были недовольны пользователи, которые периодически натыкались на падающую от записи документа платформу?)
Всякие необычные проблемы могут возникать в самых неожиданных местах. И что же с этим делать, если наткнулись на такое? Как исправить свою формочку, чтобы она не приводила пользователей в бешенство?
1. Не обращаемся к серверу
Часто разработчики делают то, что им не нужно (или так, как нет нужды). Далеко не всегда нужно обращаться на сервер. И далеко не всегда нужно производить действия, которые к этому приведут. Можно пересмотреть код в таких событиях. Например, в нашей ситуации с бесконечным изменением заголовка группы формы, можно воспользоваться свойством "ПутьКДаннымЗаголовка".
Для этого добавляем строковый реквизит:

А в свойствах группы указываем его:

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

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

4. Обработчик ожидания
Можно использовать обработчик ожидания. Например, в ПриАктивацииСтроки() не выполнять серверный код напрямую, а выполнять одноразовое выполнение обработчика ожидания, в котором уже происходят нужные действия.

Однако, как показывает практика, не во всех ситуациях использование обработчика ожидания позволяет избежать зацикливания. Поэтому, лучше всего этот метод использовать вместе с проверкой на повторную обработку строки. А ещё лучше комбинировать все методы, чтобы добиться наиболее оптимального результата.
Выводы
При разработке, старайтесь внимательно читать СП\ИТС и следовать рекомендациям. Можно, конечно, следовать принципу "главное работает". А в какой-то момент столкнуться с неожиданным поведением платформы. Потому что, в описанных нами примерах, ошибки могут вылезти в самый неожиданный момент. И уже на продуктиве =)
P.S.: А вообще, раз уж описан такой запрет в СП, то почему бы не сделать его на уровне проверки синтаксиса платформы? ¯\_(-_-)_/¯
Понравилась статья?
Не будьте равнодушными! Поставьте лайк плюс и переходите к другим статьям:
Вступайте в нашу телеграмм-группу Инфостарт
код ПриАктивацииСтроки уф сп баг цикл ошибка
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Механизмы платформы 1С Разработчик Бесплатно (free)
Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?
16.07.2025 45555 TitanLuchs 109
Работа с интерфейсом WEB-интеграция Механизмы платформы 1С Бесплатно (free)
Веб-интерфейсы повышают качество внешнего вида приложений 1С, предсказуемы с точки зрения верстки, позволяют организовать удобные и высокопроизводительные рабочие места для пользователей. Расскажем об особенностях разработки веб-интерфейсов на React внутри 1С, двустороннем взаимодействии 1С и JavaScript, а также сборке веб-приложения в одностраничный файл.
19.06.2025 18585 zeegin 15
Механизмы платформы 1С Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).
03.02.2025 25967 bayselonarrend 127
Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)
В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.
30.01.2025 33174 user2122906 10
Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 Бесплатно (free)
Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.
17.01.2025 55539 user2122906 13
Механизмы платформы 1С WEB-интеграция Разработчик 1С:Предприятие 8 Бесплатно (free)
В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.
14.01.2025 46680 dsdred 110
Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)
Особенности "Знач" и разбор документации к нему.
10.01.2025 26377 VAAngelov 60
Механизмы платформы 1С Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.
23.06.2024 40362 bayselonarrend 24
хочу спросить про старую публикацию: Вася в конце концов дописал свою универсальную процедуру или нет?
ТЕПЕРЬ БУДУ ЗНАТЬ!
Статья МАСТ РИД всем!
Решал ранее переменной флагом мТакоеТоСобытиеВызвано - когда обработчик вызывался первый раз - флаг выставлял и выполнял серверный вызов - когда второй раз - сбрасывал флаг и выходил из обработчика.
Кстати в статье тут единственное место - к чему я бы придрался - плохо описано в п.3 применение переменной "ТекущаяСтрока" - надо было указать что это глобальная переменная моудля формы (или реквизит формы) и если это переменная то правильно было назвать её с префиксом м "мТекущаяСтрока" - но это мелочи.
Вот бы ещё проблему ошибки "Неизвестный идентификатор формы" побороть, когда после некоторых серверных вызовов при очередном серверном вызове возникает такая ошибка (встречал частенько в разных управляемых формах)
Вот этот, последний, случай возникает при применении общей типовой формы отчета в ЗУП 3.1 во внешнем отчёта (сначала формирую отчет с одним вариантом, а затем переключаю на другой - и ошибка):
Неизвестный идентификатор формы
{ОбщаяФорма.ФормаОтчета.Форма(886)}: ЗагрузитьВариант(ВариантФормы.КлючВарианта);
по причине:
Неизвестный идентификатор формы
Повторное формирование отчета уже закрывает форму с ошибкой
Информация для технической поддержки |
|---|
| Платформа: 1С:Предприятие 8.3 (8.3.15.1830)
Конфигурация: Зарплата и управление персоналом, редакция 3.1 (3.1.13.188) ( Copyright © ООО "1С-Софт", 2010 - 2020. Все права защищены ( Расширения конфигурации: - Прямые выплаты сотрудникам старше 65 лет (1.0.2.25) - Оформление пропусков на время карантина COVID-19 (1.0.0.12) Режим: Серверный (сжатие: усиленное) Приложение: Тонкий клиент Локализация: Информационная база: русский (Россия), Сеанс: русский Вариант интерфейса: Такси Ошибки: -------------------------------------------------------------------------------- 12.05.2020 9:35:00 Ошибка создания источника доступных настроек компоновки данных e3d0252c-bb72-46f3-b1c3-11f5f681cd00 -------------------------------------------------------------------------------- 12.05.2020 9:33:33 Неизвестный идентификатор формы {ОбщаяФорма.ФормаОтчета.Форма(979)}: Результат = РезультатФормированияОтчета(ФормированиеПриОткрытии, НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный); {ОбщаяФорма.ФормаОтчета.Форма(692)}: Сформировать(); по причине: Неизвестный идентификатор формы |
Причём когда сделал свою форму с таким вот обработчиков формирования (из общей формы)
&НаКлиенте
Процедура Сформировать()
ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров);
Если ВыполнятьЗамеры Тогда
Комментарий = НастройкиОтчета.ПрефиксЗамеров + "; " + НСтр("ru = 'Непосредственно:'") + " " + Строка(Непосредственно);
МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент");
ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени(
НастройкиОтчета.КлючЗамеров + ".Формирование",
Ложь, Ложь);
МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, Комментарий);
КонецЕсли;
Результат = РезультатФормированияОтчета(ФормированиеПриОткрытии, НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный);
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус <> "Выполняется" Тогда
ПослеФормирования(Результат, Ложь);
Возврат;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ПослеФормирования", ЭтотОбъект, Истина);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, Обработчик, ПараметрыОжидания);
КонецПроцедуры ПоказатьПроблема сохоранилась (и кстати, обработчики объекта отчета "ПриКомрпоновкеРезультат" вообще не запускался.
Решил только переходом на классическое формирование отчета через встроенную команду формы "Сформировать" (ну или через программный вызов метода формирования у формы).
Но эта проблему у меня возникала и в других формах, в совершенно разных случаях. Там уже не помню как решал - как-то перестраивал вызовы обработчиков событий. Не понимаю корня проблемы.
Конечно - это может быть другая проблема не правильной работы в управляемых формах, достойная отдельной статьи, а может быть и следствием проблемы не правильного вызова обработчиков событий. Но тогда как она проявляется в типовой общей форме, ведь я в ней ничего не трогал, а просто применил в своё внешнем отчёте (причём неявно - просто как форму по умолчанию)
Да, натыкался на этот баг. Даже где-то себе сохранил заметку с небольшим исследованием. Нужно будет вернуться и разобраться в ситуации подробнее. Спасибо за наводку 👍
Информация для технического специалиста |
|---|
| Платформа: 1С:Предприятие 8.3 (8.3.16.1063)
Конфигурация: Зарплата и управление персоналом, редакция 3.1 (3.1.13.146) ( Copyright © ООО "1С-Софт", 2010 - 2020. Все права защищены ( Режим: Файловый (без сжатия) Приложение: Тонкий клиент Локализация: Информационная база: русский (Россия), Сеанс: русский Вариант интерфейса: Такси Ошибки: -------------------------------------------------------------------------------- 12.05.2020 17:08:11 Ошибка создания источника доступных настроек компоновки данных 3b18ba0c-f880-4583-97ea-31e5df489e33 -------------------------------------------------------------------------------- |
И сеанс закрывается!
Перед этим ещё и слетает настройка параметров отчета СКД.
Что-то со значением параметра - я в список добавил значение перечисления
Во-первых, эта ошибка проявляется только из под отладки
Во-вторых, я взял предыдущую версию отчета (где проблемы нет) - сохранил её в отдельный файл (без изменений) и в нём эта проблема ПОЯВИЛАСЬ!
Причём пробовал на нескольких релизах - последний, который удалось скачать 8.3.16.1224 для windows - та же фигня (достаточно один раз сформировать отчёт из формы настроек, при повторном формировании - ошибка):
Платформа: 1С:Предприятие 8.3 (8.3.16.1224)
Конфигурация: Зарплата и управление персоналом, редакция 3.1 (3.1.13.146) (
Copyright © ООО "1С-Софт", 2010 - 2020. Все права защищены
(
Режим: Файловый (без сжатия)
Приложение: Тонкий клиент
Локализация: Информационная база: русский (Россия), Сеанс: русский
Вариант интерфейса: Такси
Ошибки:
--------------------------------------------------------------------------------
13.05.2020 18:33:46
Ошибка создания источника доступных настроек компоновки данных
397873d4-1833-4fd3-a7cf-29c08d162916
И настройки СКД слетают
(кстати, а что там с релизами - скачивая архивы с более поздними релизами получают какую-то лабуду внутри архивов - какие-то JAVA пакеты утилиты Ring, причём архивы дистрибутивов весят по пол гига, а 7zip показывает что внутри всего 12 мегабайт)!
Заодно понял что проблема связана была с тем, что при возврате из типовой формы настроек в типовую (копию) форму отчёта запускался встроенный в неё алгоритм формирования отчёта
Процедура Сформировать() |
|---|
&НаКлиенте
Процедура Сформировать()
ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров);
Если ВыполнятьЗамеры Тогда
Комментарий = НастройкиОтчета.ПрефиксЗамеров + "; " + НСтр("ru = 'Непосредственно:'") + " " + Строка(Непосредственно);
МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент");
ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени(
НастройкиОтчета.КлючЗамеров + ".Формирование",
Ложь, Ложь);
МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, Комментарий);
КонецЕсли;
Результат = РезультатФормированияОтчета(ФормированиеПриОткрытии, НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный);
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус <> "Выполняется" Тогда
ПослеФормирования(Результат, Ложь);
Возврат;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ПослеФормирования", ЭтотОбъект, Истина);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, Обработчик, ПараметрыОжидания);
КонецПроцедуры Показать |
- а он, по непонятным пока мне причинам, выводит мой отчёт из строя.
Поэтому заменил его вот таким кодом (вызываю из начала вышеназванной процедуры и выхожу из неё)
Процедура СформироватьСервер() |
|---|
&НаСервере
Процедура СформироватьСервер()
ОтчетТабличныйДокумент.Очистить();
Если ЗначениеЗаполнено(ОтчетДанныеРасшифровки) И ЭтоАдресВременногоХранилища(ОтчетДанныеРасшифровки) Тогда
УдалитьИзВременногоХранилища(ОтчетДанныеРасшифровки);
КонецЕсли;
ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(неопределено, УникальныйИдентификатор);
СкомпоноватьРезультат();
КонецПроцедуры
Показать |
Но не могу понять почему работает предыдущая версия отчёта! И почему она перестаёт работать если её просто сохранить в новый файл.
Могут только предположить, что тут что-то связано с системой учета вариантов отчётов в БСП. В отчёте есть два встроенных варианта (иные не используются), правда в отчёте есть алгоритм, запускаемый после загрузки варианта, на севере, меняющий в нём настройки параметров на фиксированные. Но при закрытии окна настроек (сохранить и сформировать) этот алгоритм не запускается.
Не могу понять - что такого трансендентного у меня в отчёте сделано!
&НаКлиенте
Процедура Пинг()
ПингСервер();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПингСервер()
Жив=Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("Пинг", 60, Ложь);
КонецПроцедуры
ПоказатьПравда перед этим ещё рабочая старая копия, таки, тоже перестала работать :-( хотя я её не трогал а ранее она точно работала - вообще мистика!
Предыдущая копия тоже перестала работ как внешний отчёт.
Но, будучи, вставленным в конфигурацию - отчет таких ошибок не выдаёт, варианты СКД подключились и тоже работают!
Но почему не работает внешний отчёт (именно указанный типовой код)?
Не... ну могут тоже попробовать сам что-нибудь переместить во временное хранилище и просмотреть что будет дальше с внешним отчётом и вне данного типового кода....
Я же писал, при отсутствии серверных вызовов какое-то время, может "забыть" эту форму. Время забытия зависит от многих факторов и 1С их не документирует. Основное скорее всего наличие свободной памяти. В общем это как с повторно возвращаемыми значениями, никто не знает сколько они будут жить. В вашем случае в форме вариантов отчетов скорее всего разворачиваются настройки схемы компоновки, что достаточно затратно по памяти
Во-первых, как уже писал, проблема проявляется и под файловой базой.
Во-вторых, как уже писал, проблема проявляется только из под отладки (а сейчас уточняю - сама отладка оказалась не причём - проблема возникает только если 1С: Предприятие запускается с параметром (аргументом командной строки) "РежимОтладки" - т.е. в типовых алгоритмах формирования отчёта (см мой пост (3))) что-то отрабатывает по-разному (возможно разница в том, что в режиме "РежимОтладки" не используются фоновые задания).
В-третьих, проблема возникает только в типовом коде из поста (3), когда меняю на свой - проблемы нет
В-четвёртых, у Вас в посте (13) идёт пинг сервера каждые 60 - мне чтобы дажды сформировать отчёт хватает и 30 секунд - проблема успевают возникнуть
В-пятых, я применил Ваш код из (13) и даже уменьшил период опроса до 5 секунд - проблема ОСТАЛАСЬ!
В-шестых, памяти на компьютере у меня доффига - схема СКД не такая уж большая и данные в ней тоже занимают не много (там нет больших таблиц в параметрах и отборах)
// Запустить выполнение функции в фоновом задании, если это возможно.
//
// При выполнении любого из следующих условий запуск выполняется не в фоне, а сразу в основном потоке:
// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя;
// * если выполняется функция модуля внешней обработки или внешнего отчета.
//
// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание.
// Может применяться совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение.
Показать&НаКлиенте
...
ДанныеСтроки = Элементы.Список.ТекущиеДанные;При использовании свойства ТекущиеДанные выполняется неявный серверный вызов, что может приводить к неожиданному поведению формы. В моей практике были регулярные падения клиентских процессов при выполнении такой строки кода.
Существуют как минимум 2 альтернативных способа получить данные строки списка на клиенте, без серверного вызова.
а) поиском нужной строки в таблице (реквизит)
ТекущиеДанные = КроссТаблица.НайтиПоИдентификатору(Элементы.КроссТаблица.ТекущаяСтрока);б) методом ДанныеСтроки таблицы формы (элемент)
ТекущиеДанные = Элементы.Зарплата.ДанныеСтроки(Элементы.Зарплата.ТекущаяСтрока);ТекущиеДанные = КроссТаблица.НайтиПоИдентификатору(Элементы.КроссТаблица.ТекущаяСтрока);
и все стало просто летать по сравнению с тем, что было до этого.
В 1С:Бухгалтерия 3.0 Элементы.Список.ТекущиеДанные на клиенте вызывается в куче мест, например, ОбщаяФорма.НалогиИОтчеты.Форма.Модуль
&НаКлиенте
Процедура ВопросПередСменойОрганизации
Никто из нас с этим "сакральным знанием" не родился. Когда у меня падали клиентские процессы, разобраться в причине помог отдел ЦКТП 1С. В большинстве случаев этот код работает нормально. Но при каких-то условиях "что-то идет не так".
Виталий, не было выявлено каких-то явных особенностей, которые позволили бы воспроизвести проблему.
Код был в Процедуре ПриАктивацииСтроки()
стрПлатежнаяЗаявка = Элементы.Список.ТекущиеДанные;'У нескольких пользователей (из общего числа около 1000), аварийно завершались клиентские процессы десятки раз в день. Воспроизвести ситуацию не удавалось. Отправлял дампы упавших процессов в ЦКТП 1С.
И никаких серверных вызовов в замере производительности или счетчике вызовов.
8.3.15.1830
Всё же отвечу:
Информация из переписки с сотрудниками ЦКТП 1С при расследовании инцидента.
Цитата из письма:
вызываемого из подписки на событие ПриАктивизацииСтроки()
стрПлатежнаяЗаявка = Элементы.Список.ТекущиеДанные;'
Код небезопасен тк делает неявные серверные вызовы в Элементы.Список.ТекущиеДанные.
В отладке с включенным замером производительности у меня отображались эти серверные вызовы. Но, что интересно, не всегда. Предположу, что это связано с состоянием закешированных данных формы и/или другими факторами.
Еще одна цитата из той же переписки, в ответ на вопрос "что влияет":
Могу предположить что пользователи у которых "падало" занимались активной работой в данной форме.
Платформа, на которой проявлялась проблема - 8.3.10.2561. На других не проверял.
.ТекущиеДанные - 14575
Элементы.Список.ТекущиеДанные - 380
.НайтиПоИдентификатору( - 834
.ДанныеСтроки( - 103
1С использует все 3 способа получения данных строки. ТекущиеДанные используется, похоже, чаще других способов.
Возможно, есть ошибка платформы. Поэтому я буду стараться обходиться без использования ТекущиеДанные.
ТекущаяСтрока = Элемент.ТекущиеДанные;
Если ТекущаяСтрока.ЭтоГруппа Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = НСтр("ru = 'Выбор группы запрещен.'");
Сообщение.Сообщить();
Возврат;
КонецЕсли;Вроде как разрешенная штука:
&НаСервереБезКонтекста
Процедура Реквизит1ПриАктивизацииСтрокиНаСервере()
// Вставить содержимое обработчика.
КонецПроцедуры
&НаКлиенте
Процедура Реквизит1ПриАктивизацииСтроки(Элемент)
Реквизит1ПриАктивизацииСтрокиНаСервере();
КонецПроцедуры
ПоказатьТем не менее, как минимум на 8.3.12..8.3.14 вызов Реквизит1ПриАктивизацииСтрокиНаСервере() поломает множественный выбор строк.
Точнее, выделить-то можно будет, а вот отменить выбор одной строки...
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1225834
Создание 12.05.20 09:00
Обновление 12.05.20 09:00
Просмотры 31561
Загрузки 0
Рейтинг
180
Комментарии 39
Код открыт Да
Рубрики Механизмы платформы 1С
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)