Под капотом управляемых форм

25.04.17

Разработка - Механизмы платформы 1С

Управляемые формы уже давно и плотно вошли в жизнь 1С-разработчика. Однако, судя по недавним публикациям на Инфостарте, многие до сих пор мало знакомы с ними. Предлагаю разобраться с тем, что же это такое.

Введение

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

Немного истории

Исторически сложилось, что клиентское приложение 1С всегда было реализовано в виде так называемого «толстого» клиента – программы, которая сама все делает в плане обработки данных. Это создавало заметную нагрузку на сеть, а кроме того, требовало наличия мощных клиентских машин.

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

Версия 8.0 принесла нам трехзвенную архитектуру, в которой появился «сервер 1С:Предприятия» – отдельный программный компонент, который мог выполнять код бизнес-логики на специально выделенной мощной машине (сервере), тем самым, снизив объем данных, гуляющих по сети и требования к аппаратной части клиентских машин.

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

В основном, все оставалось по-старому, и клиентское приложение так и оставалось «толстым» клиентом, гоняющим сотни мегабайт по сети.

Версия 8.2 кардинально сломала устоявшийся подход к работе приложения и заставила по-новому взглянуть на архитектуру приложения. Об этом новом подходе и пойдет речь в данной статье.

Волшебный зверь Клиент-сервер

С выходом версии 8.0 все учебные курсы, книжки, статьи на ИТС и прочее, и прочее, все в один голос твердили нам – «обработка данных должна идти на сервере», «все нужно выполнять на сервере». Волшебное заклинание «на сервере» плотно забило мозг, так сильно, что на него уже никто внимания не обращал, как на информационный шум.

Опыт показывает, что рядовой программист практически никогда не знал, как нужно перенести код на сервер и что это вообще значит – «на сервер». Удивительно часто встречался код, который переносился «на сервер», но был написан с явным непониманием того, что это в итоге принесет.

На самом деле, все просто. Фраза «выполнить на сервере», означает, что ваш код будет выполнен на физически другой машине. Совсем на другом компьютере (который может располагаться на другом континенте), со всеми вытекающими эффектами. Там будет другая структура каталогов, другие права доступа и даже другая операционная система.

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

  • - Выбирается локальный файл
  • - Его путь передается на сервер
  • - Там по этому пути файл пытается открыться и падает с ошибкой «Файл не найден» (еще бы, он же остался на клиенте).

Переход на сервер

До версии 8.2 перенести исполнение кода на сервер можно было только одним способом – а именно, вызовом общего модуля с флагом «Сервер». Причем, только с этим флагом. Если помимо флага «сервер» поставить «клиент», то перехода не произойдет. По этому поводу на Инфостарте не так давно была неплохая статья про флажки в свойствах общих модулей (к сожалению, не могу найти ссылку, подскажете?).

Суть всех флагов модуля сводится к простым правилам:

  1. Флаг показывает, где будет скомпилирован код модуля (на клиенте, на сервере, во внешнем соединении)
  2. Если модуль скомпилирован в нескольких местах, то он будет виден только в соответствии с флагами. Клиентский – на клиенте, серверный на сервере. Переноса исполнения с машины на машину не будет.
  3. Перенос исполнения кода возможен только если в текущем контексте исполнения нет вызываемого модуля, но он есть в другом месте (если – модуль есть только на сервере, а на клиенте его нет, то будет сделан вызов сервера)

Флаг «Вызов сервера»

В версии 8.2 добавился флаг «вызов сервера», который помогает разрулить условия перехода на другую машину. Если модулю назначить этот флаг, то модуль будет виден с клиента, если нет – то попытка вызова с клиента приведет к ошибке. Код модуля виден не будет, как будто его нет совсем.

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

  1. Установлен флажок «Сервер»
  2. Установлен флажок «Вызов сервера»
  3. Сняты все «клиентские» флажки

Особенности перехода на сервер

Платформа заботится о том, чтобы переход исполнения кода на другую машину был как можно более незаметным. Мы вызываем функции серверного кода, передаем туда параметры, получаем возвращаемые значения, получаем изменения параметров, передаваемых по ссылке. Все выглядит так, как будто никакого сервера нет. Однако, это не так.

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

Это объясняет, почему не все объекты можно передавать на сервер. Это все потому, что не все они поддерживают сериализацию (превращение в строку и обратно). На сервер нельзя передать, например, «ДокументОбъект», т.к. у него в модуле объекта могут быть глобальные переменные, а в них записаны какие-нибудь сложные несериализуемые значения, вроде COM-объектов… Короче, ограничения по обмену с сервером понятны и обоснованны. Нужно следить за тем, что мы передаем на сервер и что возвращаем назад.

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

Мне кажется, что простота реализации серверного вызова сыграла с платформой 1С злую шутку. Серверный вызов настолько прозрачен, что его сложно заметить, сложно осознать, что вот здесь, с этого момента, мы находимся на совсем другом компьютере. В результате и получается такой код, о котором я написал выше.

Отсутствие контекста (состояния) на сервере

Существует такая модель серверных приложений, когда сервер только отвечает на запросы, но ничего не сохраняет у себя в промежутке между двумя запросами. Эта модель называется моделью «без состояния» (англ. state-less).

Все HTTP-серверы современного интернета работают именно так. Клиенты посылают запросы, сервер выдает ответ и забывает все, что получал от клиента. Разумеется, есть вариации, но общая модель именно такая: сервер отрабатывает запрос и очищает все данные.

Сервер 1С работает по такому же принципу. В общем случае, в памяти сервера нельзя сохранить промежуточные данные между вызовами. Нельзя определить переменную, которая будет хранить данные между двумя вызовами.

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

Управляемое приложение

С выходом управляемого приложения фирма «1С» поступила с клиент-серверным взаимодействием, на мой взгляд, совершенно правильно. Она не стала его прятать, наоборот, она заставила всех видеть его, тыкнула всех носом: «смотрите, тут вы пишете код для физически разных машин, думайте, что делаете».

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

Управляемые формы – это замечательный шаг вперед по сравнению со старым подходом. Все кто поработал с УФ более-менее плотно не хотят возвращаться назад, как в страшный кошмар. Управляемые формы позволили реализовать интерфейс в виде веб-страницы, причем разработчик практически не обязан думать о том, что пишет сайт. Один и тот же код работает и в браузере, и в родном клиенте. Как по мне, так это очень круто.

Тонкий клиент

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

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

Все это привело к особенностям, с которыми мы сталкиваемся при разработке управляемых форм. Ключевая особенность, в общем-то, всего одна – форма полностью отделена от данных объекта.

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

Тонкий клиент стал поистине «клиентом». Он больше не обрабатывает данные, он их показывает и позволяет редактировать. Всю обработку мы теперь явно переносим на сервер.

Устройство управляемой формы

Давайте рассмотрим, из каких частей состоит управляемая форма.

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

В панели слева размещены элементы формы. Это кнопки, поля ввода, таблицы и т.п. Основное их отличие от обычных форм в том, что они обязательно связаны с каким-либо реквизитом формы. Отдельно висящий элемент на форму поместить нельзя, он обязательно должен быть связан с данными.

Данные формы

Есть старая уже хохма про ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокументИмениНуралиеваБорисаГеоргиевича.

Управляемая форма добавляет очередного претендента на звание длинного и непонятного идентификатора: ДанныеФормыСтруктураСКоллекцией и еще ряд новых классов с именами вида «ДанныеФормы….что-то там». Давайте попробуем выяснить, что это за новые объекты.

Как уже говорилось выше, сервер предприятия не сохраняет свое состояние между двумя вызовами. Когда мы обратимся к серверу, он что-то выполнит для нас и тут же очистит все данные, созданные во время вызова. Объекты с именами «ДанныеФормы…» это как раз то место, в котором мы можем сохранять свои данные между двумя серверными вызовами. На сервере нельзя создать глобальную переменную уровня формы. Такой глобальной переменной должен быть реквизит в данных формы.

Обратите внимание, что классы данных формы любопытно называются «ДанныеФормыСтруктура» или «ДанныеФормыКоллекция». Это вообще, как мне кажется, неспроста. Эти объекты – это просто немного модифицированная стандартная Структура (или ТаблицаЗначений, соответственно).

Здесь стоит немного вспомнить обычные формы. Ведь как мы привыкли – В форме справочника достаточно присвоить переменной «Наименование» какой-то текст и этот текст попадет в СправочникОбъект, а оттуда – в информационную базу.

У управляемой форме все почти так, за исключением того, что все совсем не так :).Платформа предпринимает массу усилий, чтобы в повседневной работе программиста ему не приходилось с этим заморачиваться. Как правило, мы, как и раньше, присваиваем свойства реквизитам формы, а они попадают в СправочникОбъект, а оттуда – в ИБ.

Разница заключается в том, что теперь на клиенте не существует «СправочникОбъект». Как я уже говорил, это сложный объект, он не сериализуется, а значит, его нельзя передавать с клиента на сервер. Вместо «Объекта» на клиенте существует его упрощенный аналог – хранилище данных – объект ДанныеФормы.

Это, по сути, просто структура, у которой свойства совпадают со свойством объекта. При всей «похожести», это совсем разные объекты. Причем, не просто концептуально, это различие явное, его можно «пощупать» из кода и с этим различием приходится работать в явном виде.

Адресация данных формы

Данные формы доступны непосредственно в коде по тем именам, как они расположены в дереве реквизитов формы (в окне редактора)

Реквизиты верхнего уровня доступны сразу. Вложенные реквизиты доступны через точку. Раньше в обычной форме мы обращались к данным объекта напрямую. Мы писали «Наименование = «АААААА» и данные попадали в объект. Теперь надо писать «Объект.Наименование = «ААААА», потому, что реквизит «Наименование» вложен внутрь реквизита «Объект».

Обмен формы с сервером

Основным «двигателем» всех аспектов управляемой формы является то, что у нас state-less сервер. На нем не сохраняется ничего, никаких промежуточных данных. Всё состояние формы (текст в полях ввода, строки табличных частей и т.п.) хранится на клиенте. Вся совокупность данных формы называется контекстом формы.

Весь клиент-серверный обмен выполняется через сериализацию данных, а это, в свою очередь накладывает ограничения на те типы данных, которые можно передавать на сервер и обратно. Объект ДанныеФормыСтруктура и его «родственники» является этаким «хранилищем», которое гуляет с клиента на сервер и обратно. Только то, что хранится в данных формы, может сохраняться в промежутках между серверными вызовами.

Жизненный цикл формы объекта

Давайте рассмотрим, что происходит, когда мы открываем форму существующего элемента справочника.

  1. На клиенте вызывается метод «ОткрытьФорму» или мы просто открываем форму из какого-либо списка справочника. Начинается серверный вызов
  2. В памяти сервера создается новый СправочникОбъект, выполняется код модуля объекта (тот, что написан в самом низу модуля)
  3. Данные объекта считываются из базы данных, присваиваются значения реквизитов, наполняются табличные части объекта СправочникОбъект.
  4. В памяти сервера создается новая управляемая форма элемента
  5. Вызывается событие формы ПриЧтенииНаСервере, куда передается свежесозданный СправочникОбъект в параметре ТекущийОбъект
  6. Основной реквизит формы «Объект», тот, что в списке реквизитов выделен жирным шрифтом наполняется данными на основании данных СправочникОбъект. Здесь происходит обычное поэлементное присваивание свойствам объекта ДанныеФормы значений, записанных в одноименных свойствах объекта СправочникОбъект. По сути, происходит «ЗаполнитьЗначенияСвойств(ДанныеФормы, СправочникОбъект)
  7. СправочникОбъект уничтожается. Все его данные стираются из памяти сервера.
  8. Вызывается событие формы «ПриСозданииНаСервере», в котором мы получаем уже заполненные ДанныеФормы
  9. Данные формы сериализуются и отправляются на клиента, где форма отображается пользователю

Обратите внимание, что СправочникОбъект, к которому мы так привыкли в обычном приложении, уничтожился. Если в модуле объекта были какие-либо глобальные переменные, экспортные или не экспортные, все они стали потеряны.

Сохранить что-либо в данных объекта больше нельзя, все сохранение состояния должно выполняться в ДанныхФормы.

Теперь, давайте рассмотрим процесс записи данных справочника:

  1. Пользователь нажимает кнопку «Записать»
  2. Выполняется обработчик формы «ПередЗаписью» (на клиенте)
  3. Происходит серверный вызов
  4. В памяти сервера создается новый СправочникОбъект, он наполняется данными на основании данных текущей формы (что-то вроде ЗаполнитьЗначенияСвойств, но в обратном направлении – пишется из формы в объект)
  5. Вызывается обработчик события формы «ПередЗаписьюНаСервере», куда передается свежесозданный СправочникОбъект. С этого момента, если мы хотим что-то записать в базу данных, то менять нужно именно СправочникОбъект. Изменения данных формы не отразятся в записываемом объекте.
  6. Вызывается обработчик «ПередЗаписью» самого СправочникОбъект (в модуле объекта)
  7. Вызывается обработчик «ПриЗаписи» самого СправочникОбъект (в модуле объекта)
  8. Вызывается обработчик события формы «ПриЗаписиНаСервере», транзакция записи еще не завершена и можно отменить запись
  9. Вызывается обработчик события формы «ПослеЗаписиНаСервере», транзакция записи уже завершена
  10. СправочникОбъект уничтожается
  11. Выполняется возврат на клиента, где вызывается обработчик события формы «ПослеЗаписи»

Обратите внимание, серверное состояние восстанавливается с нуля, каждый раз создается новый СправочникОбъект. В промежутках между вызовами сервера он не сохраняется.

Конвертация данных формы

Для упрощения жизни существуют простые способы преобразования универсальных объектов «ДанныеФормы….» в привычные прикладные объекты и наоборот.

Так, например, можно получить наполненный данными СправочникОбъект на основании данных формы, если вызвать метод «РеквизитФормыВЗначение(«Объект»). При этом произойдет то, что описано выше – будет создан новый СправочникОбъект и наполнен данными из указанного реквизита данных формы.

Обратное преобразование выполняется методом «ЗначениеВРеквизитФормы». Если мы произвели какие-то действия с данными СправочникОбъект, например, очистили табличную часть, то мы должны поместить наши изменения обратно в форму, иначе будет что?

Правильно, измененный СправочникОбъект будет уничтожен при возврате на клиента, а данные формы останутся неизменными. Цикл записи объекта будет построен на старых данных формы, а стало быть, изменение табличной части просто пропадет.

Не все так плохо ;)

Все эти сложности с преобразованием данных полезно знать, однако, они совсем не обязательны. Платформа прекрасно справляется с ними сама. В большинстве случаев достаточно никогда не вспоминать про СправочникОбъект, а работать непосредственно с данными формы. Грязную работу платформа сделает сама.

Команды формы

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

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

Каждая команда может быть размещена в командной панели, подменю, или на самой форме. Создаются команды на закладке «Команды» в редакторе формы.

Параметры формы

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

Управление открытием формы

Отображение форм на экране в управляемом режиме также претерпело некоторые изменения. Прежде всего, формы получили имена, по которым к ним можно обращаться. Например, форма списка справочника  «Контрагенты» будет называться «Справочник.Контрагенты1.ФормаСписка».

Методика открытия формы теперь такова: форма должна открываться одной строчкой кода и одним вызовом сервера. Эту задачу на себя берет глобальный метод «ОткрытьФорму». В данный метод мы должны передать имя формы (см. выше), параметры формы, владельца и ключ уникальности. Все параметры, кроме имени являются необязательными.

Поскольку открытие формы это интерактивная операция, то осуществляться она может только на клиенте. Однако, создание формы, как мы видели из ее жизненного цикла, происходит на сервере. Возникает резонный вопрос, а как открыть форму одной строчкой кода, если нужно каким-то образом параметризовать ее создание, передать ей что-то, чтобы она знала, как именно ей нужно создаваться?

Для этого и нужны Параметры формы. Это структура, которую можно передать в метод «ОткрытьФорму». Переданные параметры можно проанализировать в серверном коде формы и предпринять какие-то действия на основании переданных параметров.

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

УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("ТипКонтрагента", "Поставщик");
УсловияОтбора.Вставить("Лояльность", "Надежный");

ПараметрыФормы = Новый Структура ("Отбор", УсловияОтбора);

ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы);

Существуют системные параметры, на которые реагирует сама платформа. Упомянутый параметр «Отбор» как раз является системным, если он передан форме списка, то платформа сама установит отбор на список.

Кроме того, параметры можно создавать произвольные, в редакторе формы. Более того, параметры можно передавать даже с теми именами, которые не объявлены в форме, они все равно будут видны в серверном коде формы.

Жизненный цикл параметров

Все параметры, переданные в форму в момент ее открытия видны только в процедуре «ПриСозданииНаСервере». После создания все параметры уничтожаются и более не доступны в форме.

Исключение составляют параметры, которые в редакторе формы объявлены с признаком «Ключевой параметр». Такой параметр будет существовать до тех пор, пока существует сама форма.

Процедура ПриСозданииНаСервере(Отказ)

    Если Параметры.ЗапуститьЯдерныйРеакторПриОткрытии Тогда
        УправлениеРеактором.Запустить();
    КонецЕсли;

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

Ключевые параметры определяют уникальность окна. В обычных формах был такой атрибут «Ключ уникальности». Если запрашивалась форма, то она сначала искалась в уже открытых. Ключ уникальности позволял варьировать условия при которых создавалась новая форма или возвращалась существующая. Ту же самую роль играют ключевые параметры. Если метод «ОткрытьФорму» вызван два раза подряд с одним и тем же значением ключевого параметра, то второй вызов не откроет новое окно, а активирует существующее.

Модуль формы

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

Справедливости ради стоит отметить, что они доступны не только в модулях форм, но, как правило, используются только там. Директива компиляции это строчка вида &НаКлиенте перед объявлением процедуры.

Для модуля форм возможны следующие директивы:

  • &НаКлиенте
  • &НаСервере
  • &НаСервереБезКонтекста
  • &НаКлиентеНаСервереБезКонтекста

Директива указывает компилятору, где нужно скомпилировать указанную процедуру. С директивами «НаКлиенте» и «НаСервере» все понятно, а вот с добавкой «БезКонтекста» нужно разобраться подробнее.

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

Теперь, пользователь нажимает кнопку, которая вызывает процедуру с директивой «НаСервере». Все данные формы, должны быть отправлены на сервер, чтобы там с ними можно было поработать. Процедуры «с контекстом» (НаКлиенте и НаСервере) видят контекст формы, т.е. ее данные. Когда мы вызываем сервер «с контекстом», то контекст должен быть передан на сервер, поскольку его там в данный момент просто не существует (сервер state-less).

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

Поскольку все происходит настолько для нас прозрачно, что порой кажется: «какая красота, не надо заморачиваться, можно всегда писать «НаСервере» и на сервере все будет доступно». Однако, как видно из предыдущего абзаца, такая прозрачность не бесплатна. Все данные формы должны упаковаться, отправиться на другой континент, там распаковаться, после чего должен быть выполнен серверный код, и потом обратная упаковка и возврат изменений на клиента. Понятно, что накладные расходы на передачу контекста очень высоки.

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

Для облегчения клиент-серверного обмена введено понятие серверного вызова «без контекста». Отличается он тем, что при вызове «без контекста» контекст формы не передается и в серверном коде будет недоступен. Процедура «без контекста» не видит данных формы. Фактически, это вообще не модуль формы, а некий отдельный модуль, который ничего про форму не знает.

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

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

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

Переменные уровня модуля формы

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

Причем, переменная, которая объявлена НаКлиенте, будет доступна все время жизни формы, а переменная НаСервере будет очищаться каждый раз при возврате с сервера (уничтожении данных серверного вызова).

Временное хранилище – секретное оружие

При работе с управляемыми формами быстро становится ясно, что ограничения клиент-серверного взаимодействия очень сильно сужают возможности разработчика. Поэтому, платформа 1С предоставляет хитрый секретный ход под названием «ВременноеХранилище». Эта сущность позволяет сохранить на сервере некоторое состояние между двумя серверными вызовами. Я слышу возгласы: «А кто сказал, что состояние нельзя хранить!» Справедливое замечание, состояние хранить все-таки можно, но недолго.

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

Для работы со временным хранилищем используются методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища.

С методом «Получить» все просто, он по заданному адресу возвращает значение, которое лежит в хранилище.

С методом «Поместить» несколько сложнее. Дело в том, что помещать можно в 2 разных хранилища – простое и хранилище формы. Хранилище формы живет на сервере столько, сколько живет сама форма. Простое хранилище живет ровно 2 серверных вызова. В синтакс-помощнике об этом написано целых несколько умных строк. Я никогда не понимал, что они означают. Опытным путем было установлено, что срок жизни – 2 серверных вызова.

  • Первый – мы помещаем что-то в хранилище и возвращаем адрес на клиента.
  • Клиент делает второй вызов и по этому адресу может получить данные.
  • В третьем вызове по этому адресу уже ничего не будет. Платформа очистит хранилище

С хранилищем формы ситуация более интересная. Если вторым параметром метода «ПоместитьВоВременноеХранилище» передать идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные в хранилище будут привязаны к сроку жизни формы и не будут удалятся ни в первых, ни во вторых, ни во всех прочих вызовах сервера.

Таким образом, временное хранилище, это еще одно место, в котором (помимо реквизитов формы) можно сохранять состояние на сервере. Причем, в хранилище можно хранить даже данные, которые на клиенте недоступны, а стало быть, в реквизитах формы их разместить нельзя.

Особенности временного хранилища

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

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

Как примерно работает временное хранилище:

  • Данные помещаются в ВХ
  • Управление возвращается на клиента
  • Клиент делает повторный серверный вызов
  • Менеджер кластера переключает вызов на другую машину из кластера (не ту, что помещала данные в хранилище)
  • И вот тут, если данные в хранилище были сериализуемые, то все отлично, мы получим их даже на другой машине кластера.
  • Если данные не были сериализуемые (СправочникОбъект, COM-объект, что-то еще), то они просто пропадут, ибо нефиг.

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

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

Если тип данных, помещенных в хранилище не поддерживал сериализацию, то данные просто уничтожаются.

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

Массив = Новый Массив; Массив.Добавить("Привет");

Адрес = ПоместитьВоВременноеХранилище(Массив);

Массив.Добавить("До свидания");

МассивИзХранилища = ПолучитьИзВременногоХранилища(Адрес);

Сообщить(Массив = МассивИзХранилища); // Истина

Сообщить(МассивИзХранилища.Количество()); // 2 элемента

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

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

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

Краткий итог

  • - Взаимодействие с сервером теперь не спрятано от разработчика. Наоборот, оно каждую минуту напоминает о себе. И это хорошо.
  • - Сервер 1С не сохраняет данные между обращениями клиента к серверу. Нужно проектировать взаимодействие с учетом этой особенности
  • - Временное хранилище – мощное средство, которое нивелирует сложности state-less взаимодействия и позволяет строить сложные схемы серверных вызовов.
  • - У формы есть контекст, который передается с клиента на сервер и обратно при каждом контекстном вызове сервера. Для несложных вызовов, где не требуется вся форма целиком, следует использовать внеконтекстные вызовы.

Заключение

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

Понятно, что в рамках одной статьи нельзя описать все аспекты управляемых форм. Например, я совсем не затронул принципы размещения элементов на форме, группировку полей, команд и пр. Считаю, что на этот счет имеется достаточно литературы и пересказывать книжки просто неэффективно.

Литература к прочтению

Новичкам однозначно нужно прочитать книжку Максима Радченко «Разработка управляемого интерфейса». На старости лет мог напутать с точным названием, извиняйте. Книжка зеленоватая такая.

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

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

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

Удачи вам в разработке управляемых форм. Если вы дочитали до конца, значит, вам было что узнать. Скорее ставьте плюсик :)

управляемые формы

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4470    dsdred    53    

70

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5280    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6396    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18465    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12077    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8802    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6273    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15972    SeiOkami    31    

103
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
95. Sirruf 192 04.10.13 14:50 Сейчас в теме
Вообще понятно, что ком-объеты лучше не использовать в принципе. Хочу реализовать через веб-сервисы, но это не так быстро сделать. Поэтому думаю как бы мне сейчас перейти на 8.3
96. Evil Beaver 8107 04.10.13 15:12 Сейчас в теме
(95) Sirruf, внешняя компонента, либо TRex от Орефкова (есть на Инфостарте)
97. Sirruf 192 04.10.13 15:16 Сейчас в теме
(96) Что это за зверь TRex? Не могу найти
98. Evil Beaver 8107 04.10.13 15:45 Сейчас в теме
(97) Sirruf, RexV8, попутал название.
http://infostart.ru/public/183084/

Я не пользовался, если вдруг не работает, пишите автору.
99. Sirruf 192 04.10.13 16:22 Сейчас в теме
100. EmpireSer 10.10.13 13:53 Сейчас в теме
Спасибо! Классная статья.
Но я не разделяю эту радость от управляемых форм. Мне больше хотелось видеть больше возможностей на стороне клиента. Ну например:
1) Зачем ограничения сериализацией? Если бы оставался контекст и на сервере, то для не поддерживаемых типов можно организовать было что-то типа "проксирование" (Remoting, RMI). Ведь "невидимый" вызов производится, если на клиенте обратится к какой-то ссылке через точку, типа такой же "фокус" можно было делать и тут.
Я согласен, что возможность распределять нагрузку в кластере - это хорошо, но, как я помню, даже в Oracle Weblogic есть возможность и держать северный контекст и даже запретить ему распределять его в кластере.
2) Что за странное ограничения на работу с таблицей значений?
3) Особенно огорчило отсутствие метода "СоздатьКолонки", т.к. нет возможности сгеренировать правильно столбцы для системных таблиц (например КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор)
4) Почему обработка СКД выполняется на сервере? А может я хочу поработать только с набором данных "объект" и просто его по особенному "обработать" (наложить сложные отборы, использовать вычисляемые поля)

Вместе с правильными новшествами были принесены ограничения "высосанные из пальца"...
bulpi; Cthulhu; frost_a; nemo888; ZVN; user_2010; prodines; bidond; al_antonov; Rabot; Maximysis; RvvRvv; krendel; svetanik; nazareth; adhocprog; Evgen.Ponomarenko; ixijixi; +18 Ответить
102. Sofi975 19.12.13 12:35 Сейчас в теме
Очень полезнное сообщение.
Теперь можно залезть и в код
103. Bukaska 140 19.12.13 15:33 Сейчас в теме
Я лично наоборот скоро забуду обычные формы. как-то уже привыкла сидеть с управляемыми, несмотря на то, что ещё досконально чего-то не знаешь
104. kote 536 23.12.13 13:09 Сейчас в теме
Работаю с управляемыми формами уже давно, года 2 точно.. Но чем дальше - тем меньше оно все радует, т.к. шаг вправо/влево - и все, ничего не работает..

А после того, как стал интересоваться другими подходами (web-разработка на RubyOnRails, Node.js, Django на Pithon`e) - стало копиться какое-то раздражение на предлагаемые в 1С реализации и подходы.. и вообще - язык 1С - это по сути DSL..

.. ау, проджект Доминикана? Может проще запилить альтернативный интерпретатор 1С скриптов на то же Ruby, например? Не уж-то никому еще не приходили подобные мысли?
Cthulhu; Synoecium; talych; +3 Ответить
105. Evil Beaver 8107 23.12.13 14:08 Сейчас в теме
(104) kote,
альтернативный интерпретатор 1С скриптов на то же Ruby


Ну допустим запилили. И что это решает? Только конкретно - мол, решает проблемы а, б, в, г?
106. EmpireSer 30.12.13 14:51 Сейчас в теме
(104) kote,
Вообще-то уже запилил кто-то, создав свою 1С. Мой коллега как-то рассказывал, но я забыл название продукта.

(105)
1) Все возможности стороннего языка доступны, а так же их дополнения. Т.е. не нужно создавать COM/Native обёртки
2) Учитывая (1) мы получаем свободу способа создания форм, а так же применяя ООП более гибкое их "встраивание"
3) ... да кучи всего можем исправить...

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

P.S. Но это мечты... Кроме Google и Microsoft не найти компаний, готовых милионы просаживать в "возможную трубу" (если смотреть в сторону возврата инвестиций).
107. Evil Beaver 8107 30.12.13 16:06 Сейчас в теме
(106) EmpireSer, 1,2,3,4,5 - это все вода, да и не в тему немного.
Я просил назвать конкретные прикладные проблемы разработки, которые решит переход на Руби/Питон/Ваш любимый язык. Т.е. я спрашивал сугубо про интерпретатор и возможности языка. Сравнение IDE в мой вопрос не входило.

А по поводу "свободы способа создания форм" то есть обычные формы - относительная свобода, есть веб-интеграция, а в 8.3 так обещают и вообще REST-API из коробки. Берете HTML+Руби/Питон/Ваш любимый язык и делаете свой интерфейс, какой захотите. Полная свобода.
А теперь считаем трудозатраты и скорость разработки веб-морды на управляемых формах и на Руби с аналогичным функционалом (моксель, СКД, формы объектов, ввод по строке и т.п.)...
Писать на Руби уже не так экономически эффективно, правда?
Redokov; Bukaska; +2 Ответить
108. EmpireSer 31.12.13 14:22 Сейчас в теме
(107)
Вообще-то формы Windows Form на C# так же быстро собираются. А если использовать WPF то и Web поддержку сразу получаешь. При этом наследовать формы ни кто не запрещает. Если грамотно разрабатывать формы, то возможность их доработки "наследованием" снимает неудобства их обновления.

В формах 1С мне не нравится отсутствие возможности наследования, а в управляемых формах, в добавок, бесит отсудствия доступа к форме минуя 1С. Т.е. под уф стоит то же HTML + JavaScript, но, например, элементарное наложение компонентов друг на друга сделать не могу...
109. Evil Beaver 8107 31.12.13 17:38 Сейчас в теме
(108) EmpireSer, ну во-первых, у WPF веб-поддержка очень ограничена, насколько мне известно. К тому же, работает только в IE. Возможно, ошибаюсь, спорить не буду.

Ну а "доступ к форме, минуя 1С" - это как вообще? есть абстракция "форма 1С". Ее нельзя миновать, в веб она превращается в HTML+Ajax, в тонком клиенте - в отрисовку средствами ОС. Что вы миновать предлагаете - непонятно...

Я не спорю, что другие технологии разработки, тот же WPF или Ruby очень интересны, однако, в 1С вы получаете инструмент решения бизнес-задачи, а не универсальное средство построения любых приложений. Фреймворк 1С из коробки дает вам сразу подавляющее большинство элементов бизнес-приложения - ORM, Абстракцию от СУБД, RAD-подход, Reporting, автоматический веб-клиент (без отдельной HTML ветки разработки), распределенные базы, отказоустойчивый кластер серверов, SOAP/REST (на 8.3), доступ к разным non-text носителям, вроде DBF и FastInfoset, плюс возможность расширения внешними компонентами.

Какой фреймворк бизнес-разработки дает столько же всего сразу? Какова его стоимость?

Не будем далеко ходить. Возьмем очень простое 1С-приложение (http://platform.demo.1c.ru/demo83/ru_RU/)
Оцените, пожалуйста, сколько времени/денег у вас займет реализация такого же, но на любом другом средстве разработки?
110. EmpireSer 31.12.13 23:23 Сейчас в теме
(109)
Ну для Oracle WebLogic мы тоже быстро создавали формы и HTML+Ajax "из коробки". И ORM с абстрагированием от базы данных и т.п.

Я "доступ к управ. форме" в 1С - это я про доступ к приложении, которое "воспроизводит" форму (как в объекте "HTML документа", где есть доступ к "Документ").
Кстати, я Вас поправлю: в тонком клиенте, под Windows, используется тот же IE, только подключен он через COM.

Мне 1С нравится, но очень "достаёт", что они столько искусственных ограничений накладывают. Зато радуют обычные программисты - сколько идей, что бы обойти эти ограничения :-)
112. Evil Beaver 8107 01.01.14 17:27 Сейчас в теме
(110) EmpireSer, сдается мне, что это не искусственные ограничения, а необходимость. Дай вам доступ к COM и вы налепите приложений, а они потом на линуксе работать не станут. Тут вся фишка в абстракции от СУБД, инструментария GUI и ОС. Да, это привносит ограничения, но мне они кажутся оправданными.

И вопрос такой про Oracle и абстракцию от СУБД.. Что, правда инструмент в названии которого есть слово Oracle, может работать с MS SQL Server или IBM DB2?
113. EmpireSer 01.01.14 22:14 Сейчас в теме
(112)
А какой тогда смысл девать возможность создавать внешние компоненты, если так же нельзя гарантировать работу и на Windows и на Linux. И какой смысл тогда открывать доступ к объекту в компоненте "HTML документ" и не открывать в объекте управляемой формы?

А абстракция от СУБД у Oracle это: JDBC + ORM JPA. При этом нет ограничений программисту: хочешь напрямую работай с БД, хочешь через ORM.
114. Evil Beaver 8107 02.01.14 20:27 Сейчас в теме
(113) EmpireSer, ну а СУБД- Oracle, или любая?
115. EmpireSer 03.01.14 02:58 Сейчас в теме
(114)
СУБД - любая, что поддерживает JDBC. Среди них IBM, MS SQL, Oracle, MySQL, PostgreSQL, MS Access и т.д.

А вот быстрая разработка Ajax форм основана на технологии Oracle ADF (Servlet -> JSP -> JSF -> Trinidat -> ADF). IDE Oracle JDeveloper её позволяет использовать полноценно, если система подключена к СУБД Oracle, но есть хитрость: разработать приложение можно с СУБД Oracle, а потом можно поменять на любую, т.к. сама технология универсальная (просто в IDE ограничения встроены)

P.S. Кстати вспомнил странное ограничение в управ. формах - не поддерживается "Выполнить", хотя "Вычислить" поддерживается.
У меня из-за этого ограничения не работает система динамической подмены событий у управ. форм, т.к. я не могу вызвать оригинальную процедуру, если она с директивой "НаКлиенте".
116. Evil Beaver 8107 04.01.14 10:54 Сейчас в теме
(115) EmpireSer, ну так а нафига вам вся эта 1С с ее ограничениями, раз вы все равно делаете "как в Oracle". Почему тогда не Oracle? Почему пытаетесь подменять что-то в формах 1С?
118. EmpireSer 04.01.14 23:14 Сейчас в теме
(116)
Oracle для Российского рынка - дорого. Даже если взять только Java EE + Oracle ADF - то на одни лицензии уйму денег уйдёт.
1С как раз то, что может себе позволить Российский рынок.
Я 1С ругаю только за то, что они специально не дают доступа к многим механизмам. И они это не скрывают.

(117) scape,
Вот странно, что компания 1С в конфигурации БСП не создали модули, которые "сгладили" бы это неудобство.
121. kote 536 13.01.14 05:47 Сейчас в теме
(107)
Я наверное Вас расстрою, но 1С имеет преимущество только в небольших приложениях. Считаю, что тотальный ООП подход (как, например, в Ruby) позволил бы на 50% уменьшить код конфигураций.. а может и меньше..

Я участвовал на День программиста на хакатоне - HackDay 28.. и то, что я там увидел - вселило в меня сомнения на предмет удачности и скорости разработки в 1С - я говорю о web-морде 1С на управляемых формах..

А то, что в 1С отсутствует асинхронная обработка событий (правда разработчики платформы уже предложили оооочень геморройный способ разработки для поддержки ассинхронности - см. заметки из Зазеркалья) - отбрасывает её по юзабельности на последние места.. рядом с web-гонокдерами, не знающих о call-бэках и замыканиях.. а кстати - почему этого нет в 1С.. ну хотя бы первого?

Ну и web-сервисы можно упомянуть - ну где вы увидите больший геморр при работе с ними?

Так что - я бы так сказал - любой из перечисленных мной языков позволяет даже простое web-приложение разработать с такими качествами, которые на 1С дадутся Вам очень большой кровью.. ИМХО.
122. Поручик 4670 13.01.14 07:45 Сейчас в теме
(121) Я тоже не знаю о call-бэках и замыканиях. Вернее знаю, что есть такие штуки, но где их приспособить, ума не приложу. Хотя веб-программированием занимаюсь тринадцать лет, как и с 1С.
123. Evil Beaver 8107 13.01.14 10:13 Сейчас в теме
(121) kote, я и не говорю, что 1С - лучшая в мире платформа бизнес разработки. Я говорю о том, что за цену Х вы получаете наибольшее количество инструментов и технологий бизнес-разработки, чем в прочих аналогичных фреймворках.
Т.е, обсуждая достоинства платформ, не забывайте включать в аргументацию их стоимость, а также стоимость поддержки и сопровождения.
124. kote 536 13.01.14 11:39 Сейчас в теме
(123) (122) Поручик

.. не холивара ради, но погружаясь в тему web-разработки (Ruby, Python, node.js) - обнаруживаешь, что за цену 0 получаешь кучу плюшек.. в частности - ОТКРЫТЫЕ фреймворки на любой вкус с широкими возможностями. Эти обеспечиваются (назову так) "идеологией" пакетной сборки проектов.. Посмотрите сами - RubyOnRails, Django, Express и примочки к ним.. там свободно-доступные репозитории на github`е и ресурсы, где они упорядоченно хранятся для каждого языка..

Единственное, что не дотягивает до 1С - это специфические штуки, типа сложных 1С объектов - например, аналогов регистров бухгалтерии и расчета - тут 1С впереди..

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

Вспомогательных же пакетов для генерации отчетов и выгрузки их в эксель или pdf - везде предостаточно.

В части же мастеров и построителей - не знаю, как Вы - но через несколько лет работы на 1С у мне потребность во всем, кроме построителей запросов и СКД практически сошла на нет.. как то проще взять пустую форму и нуля.

Ну а дальше - если касаться поддержки, сопровождения и быстроты разработки - тут я бы не был столь уверенным. Как сказал - если речь о простеньких решениях - может быть да, 1С будет иметь где-то преимущество.. но по мере усложнения - 1С (да и те же SAPы, axapt`ы и т.п.) будут терять свои преимущества. В силу того, что языки этих систем "плоские", не поддерживающие ни ООП, ни функциональный подход.

Про call-беки/замыкания.. ну, лучше всего посмотреть какая идеология заложена в node.js, что бы понять, что это дает и как это реализовывается. Эта платформа - "однопоточная", но способна обрабатывать большее количество одновременных запросов, т.к. получив запрос - связывает запрос и функцию, которая должна обработать этот запрос - и переходит с следующей строке кода.. т.е. она не ждет завершения обработки запроса - функция отработав сама ассинхронно возвратит результат пользователю..

вот этого в 1С сильно нехватает - и разработчики платформы это уже осознали.. но решение, которое предлагается (т.н. технология отказа от модальности) - это откровенная халтура, ИМХО, т.к. сильно загаживает код.. Вот ссылка, убедитесь сами - http://v8.1c.ru/o7/201312ref/index.htm

Хотя то, что об этом задумались - уже хороший знак. Значит, что-то будет меняться. Главное - чтоб не через "одно место".
Cthulhu; DiegoLidabo; +2 Ответить
125. Evil Beaver 8107 13.01.14 12:28 Сейчас в теме
(124) kote,
Единственное, что не дотягивает до 1С - это специфические штуки, типа сложных 1С объектов - например, аналогов регистров бухгалтерии и расчета - тут 1С впереди..

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

потребность во всем, кроме построителей запросов и СКД практически сошла на нет

Вот-вот... покажите мне бесплатный (или примерно равный по цене) инструмент для reporting хотя-бы немного близкий по функционалу к СКД.

Платформа однопоточная, асинка там пока нет. Но она изначально такой никогда не была и от нее этого не требовалось. Сейчас эти требования возникли, 1С их реализует. Думаю, что через год-другой в платформе появится много плюшек на тему веб-интеграции.
126. mymyka 13.01.14 13:41 Сейчас в теме
(124)Асинхронность тяжелых вычислений в 1С едва ли не с 8.1 реализована через фоновые задания.
Приведите, пожалуйста, пример алгоритма, в котором можно продолжать выполнение кода, например, без результатов запроса(наиболее емкая операция в 1С).
127. Evil Beaver 8107 13.01.14 14:04 Сейчас в теме
(126) mymyka, ну асинхронность через фоновые задания и нормальная асинхронность, о которой говорил kote, это, мягко говоря, сильно разные вещи. Кажется, что вы немного не в теме беседы.
128. mymyka 13.01.14 14:50 Сейчас в теме
(127)я поэтому и попросил пример алгоритма, использующего "реальную" асинхронность. Т.к. слабо себе представляю, какая вообще от нее может быть выгода.
129. Evil Beaver 8107 13.01.14 19:44 Сейчас в теме
(128) mymyka, ну примеров очень много.
Основная суть такая: Вы просите сервер выполнить долгую операцию. Когда она завершится, сервер САМ позовет ваш код для обработки результата.
Сейчас даже если запустить фоновое задание, то приходится по таймеру опрашивать его состояние, формируя кучу серверных вызовов.
130. kote 536 15.01.14 03:09 Сейчас в теме
(128) mymyka,
.. выше Evil Beaver описал недостатки работы с фоновыми заданиями, но самое главное - они не обладают методами возврата результатов (точнее - единственный способ возвратить результат - вызвать ошибку и в её описании возвратить какой-то результат - т.е. это "костыль", придуманный 1С-никами обход проблемы)

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

Сейчас пользователи вынуждены открывать новый сеанс работы с базой для этого. И если в случае толстого клиента - это означает только лишь лишнее потребление ресурсов, то в случае вэб-доступа - еще и ЛИШНИЕ ЛИЦЕНЗИИ занимаются. А вот это уже совсем неправильно, не так ли?
131. Evil Beaver 8107 15.01.14 09:42 Сейчас в теме
(130) kote, вернуть результат можно через временное хранилище. Но это точно такой же костыль.
132. kote 536 16.01.14 03:23 Сейчас в теме
(131)
.. ну можно и через хранилище значений.. регистр там организовать - типа очереди сообщений и может еще что придумать - но такие костыли еще больше усложняют разработку и снижают производительность (хотя могут обеспечить доп. защиту от сбоев) - в общем, их совсем не хочется рассматривать..

Основная причина снижения производительности при них - то, что передача данных происходит с участием HDD или с доп. преобразованиями данных.. в случае же передачи "по ошибке" - все в в пределах оперативной памяти, ИМХО
133. Evil Beaver 8107 16.01.14 10:04 Сейчас в теме
(132) kote, не через "ХранилищеЗначений", а через "Временное хранилище". То, которое с адресами. Как раз в "оперативной памяти", без HDD.
135. kote 536 19.01.14 16:54 Сейчас в теме
(133)
ага, понятно.. победил ;)
Надо бы попробовать.. А что можешь сказать, насколько шустро это работает с встроенными типами данных?
Я через него только файлы передавал с сервера и обратно.. ну и ассоциация укрепилась - где файлы, там и диски.
136. Evil Beaver 8107 19.01.14 22:11 Сейчас в теме
(135) kote, шустрота как бы не имеет значения, вот почему:
Получить из фонового сеанса через временное хранилище какой-либо результат можно только после его завершения. Когда оно завершится, можно по адресу забрать результат. Работает быстро, по отношению ко времени работы самого задания.
Если хочется следить за работой задания до его завершения, то единственное, что можно придумать это сообщения пользователю и метод "ПолучитьСообщенияПользователю". Разумеется, это дикий костыль, но он работает, я проверял :)
137. kote 536 24.01.14 17:04 Сейчас в теме
(136)

Это все понятно.. если фоновый процесс работает долго - то таки да.. а если мне надо интерфейсную логику перенести на сервер? Что-то типа MVC-паттерна сделать - а Модель - на сервере держать, скажем.. некоторые приложения на nodejs, например, допускают указывать, где и что будет обсчитываться, или даже - держать копию модели как на сервере, так и на клиенте.. ну и в случае краха клиента - ничего не теряется, все состояние его рабочее восстанавливается - ну удобно же? Но для этого как раз и нужно, чтоб скорость была адекватная..
138. Evil Beaver 8107 24.01.14 19:02 Сейчас в теме
(137) kote, ну node.js, вообще другая технология вроде как... Даже фреймворком бизнес-приложений назвать трудно.
227. kote 536 21.09.15 12:12 Сейчас в теме
(107)

А теперь считаем трудозатраты и скорость разработки веб-морды на управляемых формах и на Руби с аналогичным функционалом (моксель, СКД, формы объектов, ввод по строке и т.п.)...
Писать на Руби уже не так экономически эффективно, правда?


У Рубистов есть фреймворк RubyOnRails и куча гемов к нему - в т.ч. решающих проблемы учёта и движения товаров - для интернет магазинов.. с бухгалтерией связанного ничего не видел - но и не искал.

В общем и целом - на счёт экономической эффективности разработки на RoR & Ruby Вы сильно заблуждаетесь - был на Хакатоне в 2013 году.
За 2 суток люди поднимали проекты и с приличным UX и бизнеслогикой.. А если еще принять во внимание модель лицензирования - то вообще аут, ИМХО. Никакой REST-API не изменит этого. Да и REST API, говорят, не очень гибкое у 1С (ссылка ниже, где об этом пишут и предлагают альтернативное решение)


Да и потом - сделать на 1С то же, что и на Ruby - порой будет гораздо дороже или вовсе невозможно..


===
И Ваш скепсис тоже не совсем понятен - люди таки занимаются и что-то пытаются допилить в 1С.. близко к теме - посмотрите наработки вот тут https://github.com/oknosoft/metadata.js и http://www.oknosoft.ru/metadata/
Оцените скорость работы этого по сравнению с управляемыми формами в вэб_морде 1С.

Ну как?
Cthulhu; DiegoLidabo; +2 Ответить
228. Evil Beaver 8107 21.09.15 13:18 Сейчас в теме
(227) kote, хорошо, все соскакиваем с 1С и переходим на руби.
229. unpete 577 12.10.15 21:37 Сейчас в теме
(227) kote, Evil Beaver
хорошо, все соскакиваем с 1С и переходим на руби
В решениях на Ruby, SAP UI5, Java или традиционном 1С проблемы будут совершенно одинаковыми.
В силу исторических причин, идеологи большинства фреймворков, рассматривают front-end лишь как средство отобразить данные и принять ввод пользователя.
Тонкий и веб-клиенты 1С, вместе с интернет-магазинами и платежными системами, справедливо названы и являются "мордами", а не клиентскими приложениями.

Фундаментальное отличие metadata.js - данные на клиенте. С настоящей ссылочной типизацией и настоящим SQL на клиенте. Полноценный ДокументОбъект или СправочникОбъект, а не убогая ДанныеФормыСтруктура. Короткие справочники (до 30 тысяч записей) рекомендуется кешировать целиком не задумываясь. Они займут в javascript-массивах лишь несколько десятков мегабайт. Документы, регистры и длинные справочники лучше оставить на сервере и получать на клиента по необходимости. Клиентский SQL к некешируемым объектам работать не будет - только серверный, но в остальном, некешируемые объекты ведут себя точно так же, как кешируемые. Работает ссылочная типизация и разыменование.
231. Evil Beaver 8107 13.10.15 10:47 Сейчас в теме
(229) unpete, Обязательно поймаю Вас на Инфостарте 2015 и порасспрашиваю о деталях! :)
117. scape 282 04.01.14 22:45 Сейчас в теме
Как не выпендривайся, а без говнокода на управляемых формах (клиент-сервер) не обойтись.
И зачем было это изобретать. Можно же было сделать "тонкое" управление взаимодействием клиента и сервера программистом там, где это действительно нужно, а не заставлять писать, например, говнофункцию возвращающую значение на клиент потому что функция платформы, которая возвращает это значение, работает только на сервере.

Современные стандарты языков программирования стремятся к облегчению жизни программиста, 1с похоже доставляет садистское удовольствие издеваться таким изощренным способом. Противно это все...
bulpi; Cthulhu; GetNight; Mixei; Arc; talych; Krio2; prodines; uri1978; User80; ixijixi; +11 Ответить
119. rayastar 1459 09.01.14 14:53 Сейчас в теме
Производительность с УФ упала на 40-45%. Теперь клиентов ставлю в осведомление, что если будем внедррять ПП на УФ, то цена работы возрастает на 30% минимум. Все прекрасно соглашаются на обычные и их все устраивает
prodines; +1 Ответить
120. Evil Beaver 8107 09.01.14 15:29 Сейчас в теме
(119) rayastar, 40-50%?! Где-то вы что-то не то делаете, при разработке, имхо. Мои исследования говорят о примерно равной или ~10% худшей производительности УФ на хорошем канале связи. На плохом канале обычные формы вообще не работают, это не их случай. УФ - кое-как могут пыхтеть.
Никто не запрещает делать на обычных формах, хозяин-барин, но 50% ухудшение это, скорее всего, косяк разработчика.
139. j3d 34 06.03.14 12:54 Сейчас в теме
Не знаю, писал ли кто нить тут выше, но выскажусь тоже.
Работа в толстом клиенте конечно примитивна и не столь гибка как в клиент серверном варианте.
тут я с вами согласен.
Но я пишу софт более 10 лет (из них, 6 лет в 1С:Предпиятии) и скажу вам вот что:
УФ афигеннейший инструмент для оптимизации клиент серверных процессов и уменьшения нагрузки на локальные машины.
Столкнулся сам, и не раз, при автоматизации крупных предприятий от 200 рабочих мест.

Но 95% всей моей клиентуры (как я думаю и в общей картине по России и СНГ) это небольшие конторки в стиле "бухгалтер<->директор<->оператор.менеджер<->зав.склада"
т.е. компании до 5 рабочих мест.
и как ни странно именно они кормят большинство 1С-ников потому как на всех 1С-ников крупных предприятий не напасешься.
а в этих мелких конторках, когда бухгалтеру необходимо добавить кнопочку в документ дабы автоматически создавать какое-нить пакетное начисление авансов и т.п. он зовет программиста 1С.
и раньше, любой мог напрямую с толстого клиента написать модуль обработки и взять за это с не очень то и богатой мелкой конторки какие то час или два.
Нынче же чтобы написать эту же кнопку приходится прыгать с бубном изгаляясь как бы передать те или иные данные с сервера на клиент. И счет тому же бухгалтеру приходится выставлять на порядок выше.
Само собой методом простой калькуляции все эти 95% клиентов посылают новомодную конфигурацию на УФ в .... и возвращаются к старой учетной системе.
Только в 2013 году я заработал кучу денег на клиентах которые просили перевести их с УТ11 на УТ10.3
(Это не значит, что я не пытался увещевать их и доказать что УТ11 лучше и более гибкая. Просто желание клиента все равно остается при нем) Писал правила конвертации, собственные обработки переноса и пр.
А все почему?
потому что ОЧЕНЬ МНОГИМ КЛИЕНТАМ УФ НА Х... НЕ СДАЛИСЬ. При всей их удобности и прочих плюшках.
Клиенты рассматривают управляемый интерфейс как очень хитрый способ компании 1С увеличить мзду с работы специалиста.


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

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

Это все равно что при сексе вместо того чтобы наслаждаться процессом ты будешь вынужден (по новым правилам, утвержденным Министерством половых связей) держать вытянутым мизинец на правой ноге, причем так чтобы он не опускался ниже уровня 12 см от кромки матраца. Причем министерство будет убеждать вас что именно при таком методе достигается максимальная оптимизированность процесса и наименьшая нагрузка на позвоночник.
И все как бы правильно. И есть уже даже люди, которые по другому уже и не умеют.
Но, называйте меня ретроградом, даун-шифтером и пр. я все равно за старый добрый процесс программирования в толстом клиенте.

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

Просьба не кидать гнилые помидоры и постараться понять это крик души )))
bulpi; Cthulhu; DiegoLidabo; selus; GetNight; lap_soft; Mixei; manserg; music-wizard; mlv84; Famza; ice-net; DAnry; RomanRomans; succub1_5; lsv; ingrit; levi25; Aparatus; Android1234; warpath; bonnybrowns; desarz; 7OH; Adeptus; ketr; Sup4ik; chudnovsky; kiros; poritskiy; User202; tormozit; Yimaida; assa; frost_a; sashapere; Rodnaya; Deletex; d_bat; ccserg; ZVN; Kirich2; Arc; meuses; talych; vlad636; dobro7; SGordon1; vtatarskih; tezin; Atatator; ЧИА; landrev; Nandarou; v0vjik; ekomova; Uncore; alek-sand-er; zsergey_; ivprovotorov; Krio2; shalimski; ogonek!; Катя84; kansler; VooDOOPRo; DoctorRoza; Azamat1c; maksi_ko; Kuein; Windsor77; Tokyo Marui; prodines; MaiorovYury; anatolly; Eremita; AlexB.; surikateg; virdg; fokses; orfos; MOHCTP; gigapevt; sbcode; TuneSoft; Yakud3a; strelez; primara; Glavdir.1C; e-aleks; BolshoySmal; it@contlog.ru; andreydmv; vovant; dr2c; imxored; vadimusimus; bidond; BBons; AlexFierst; okami; Serg548; RadoLex; Poison Angel; Rabot; m.s.moiseev; Fominro; needmic; NovSL; DenisF8; bankir1982; abcelektronic; medovich; NeFarT; Bambini23; t278; jobkostya1c_ERP; simich; sir.wbg; Death_eye; DenP2010; Maximysis; PythonJ; thevist; ЖУДА; depresnjak; uri1978; RvvRvv; monkbest; Manticor; AllexSoft; Bukaska; krendel; serg1974; ediks; Morales; Zemlyak; Дмитрий74Чел; PONOM; ansonat; User80; svetanik; ckopn72; +143 5 Ответить
140. Evil Beaver 8107 06.03.14 13:16 Сейчас в теме
(139) j3d, Спасибо за искренность.
Я на УФ с самого момента их появления, еще с бета-версии. Ни разу не испытал проблем с "ублажением" среды разработки. Решение задачи выполняется так же, как и раньше. Более того, если надо в середину большой формы добавить какой-нибудь флажочек, то делается это элементарно. На надо долбаться со сдвиганием элементов и последующей перенастройкой привязок.

Короче говоря, каждый делает, как хочет. Я не хочу обратно на обычные формы. А вы - дело ваше.
RomanRomans; +1 Ответить
142. Farpost 116 22.03.14 16:47 Сейчас в теме
(140) Ну а Вам, я могу ответить только одно - каждому своё... но после сравнения только по времени открытия приложений (БП 3 и БП 2) на обычных формах и управляемых, не говоря уже о том что писал выше, у меня стойкая неприязнь к УФ... придётся конечно осваивать и их, никуда не денешься, но если бы фирма 1С хотя бы давала выбор между обычным приложением и управляемым, то было бы гораздо лучше и легче... в той же БП есть очень большой смысл использовать и УФ и обычные... вот тогда была бы гибкость и в работе юзеров и в программировании
141. Farpost 116 22.03.14 16:42 Сейчас в теме
(139) Полностью с Вами согласен...
Я вообще не понимаю столь полярного разделения - всё с нового года мы будем жить только с УФ... Ура товарищи...
В 90% вся 1Сина крутится на локальной машине, и там УФ вообще нужны как собаке 5 лапа... ну а "удобств" особенно с написанием простеньких или непростеньких обработок и разного рода фичей, УФ приносят столько, что кроме матов в адрес 1С с её политикой больше ничего на язык не приходит...
143. Evil Beaver 8107 22.03.14 17:31 Сейчас в теме
(141) Farpost, а можете привести пример распространенной задачи, которая на обычных формах решается в два счета, а на управляемых - только с матом?
Уговор - приводить в пример COM контролы на 1С-ных формах нельзя.
148. Пан 7 27.05.14 21:39 Сейчас в теме
(139) неплохо вы на клиентов навешиваете собственную неграмотность в отношении УФ) все задачи, которые вы решаете на обычных формах за один-два часа, решаются на УФ как минимум в те же сроки) а то что Вам приходится пыхтеть, узнавая передовые технологии, так клиент не виноват же)) и как раз из за тех, кто за четыре строчки передачи управления с клиента на сервер, помимо повышения прайса еще и бухтит при этом как все плохо, клиенты посылают УФ))
TreeDogNight; Archange1; Redokov; +3 1 Ответить
150. AllexSoft 28.05.14 15:39 Сейчас в теме
(139) j3d, у меня было примерно такое же мнение о УФ когда они появились и я не знал что с этим всем делать.. но понял что вещь хорошая, довольно быстро.. решил что нужно учится, записался на курсы в 1С, неделя интенсивного обучения и все стало ясно как божий день.. огромный плюс в УФ для меня что там доступна БСП. А что прайс накручивать просто вы не понимаете клиент-серверную модель это точно не вина клиентов, это вы лишку дали.. с таким же успехом можно было на 7.7 сидеть до сих пор. Как писали выше могу отметить что моделирование форм особенно сложных становится очень простым и формы очень функциональные изначально, много чего что делалось раньше кодом сейчас делается через условное оформление формы..
Единственное что меня еще напрягает в УФ это "перлы от 1С" типа функций РеквизитФормыВЗначение()...
TreeDogNight; Puk2; Bukaska; +3 Ответить
154. prolog 13.06.14 09:14 Сейчас в теме
(139) j3d, За статью спасибо. Ещё не раз её перечитаю.
Есть желание ЗДЕСЬ высказаться по поводу доработок типовых конфигураций "добавить КНОПОЧКУ". 75% пользователей программ 1С работают на ЧИСТО типовых конфигурациях и правильно делают. Они не ищут приключений на своё одно место. Обновления у них проходят без всяких проблем и без лишних расходов. Кроме того и с версии на версию они переходят практически безболезненно.
Из остальных 25% клиентов не многим повезло. Хорошо если они напали на Программиста, который прежде чем что то менять в типовой, сто раз подумает, не вылезет ли это потом ему и клиенту боком. Потом Программист постарается сделать всё так, чтобы даже при его уходе от клиента, сопровождение конфигурации не вызывало проблем.
И совсем не повезло тем бухгалтерам, которым установили КНОПОЧКУ по двум тривиальным причинам:
1. по требованию бухгалтера переделать типовую конфигурацию только потому, что сам бухгалтер с нею не знаком
2. есть программист, которому надо заработать. Для этого надо что то поменять в типовой, ведь просто так деньги не возьмёшь. Предлагается первая пришедшая на ум КНОПОЧКА. Всем нравиться.

Выполняется изменение, оплачивается работа и ... проблемы начинают накручиваться и расти как снежный ком(падает производительность системы, долго и нудно выполняются обновления и так далее). Решение их связано с большими финансовыми затратами. Да и часть отрицательных эмоций этой темы тоже связаны с решением аналогичных, высосанных из пальца проблем.
Archange1; Bukaska; +2 Ответить
222. Мастер1С 780 11.06.15 16:59 Сейчас в теме
(139) j3d, По моим наблюдениям, переход с УТ11 на УТ10.3 не связан с УФ, а скорее с новой методологией, с изменениями терминов, изменением работы в программе. Это напрягает.

Что же касается сложности разработки. Когда-то в начале программирования на УФ я бы с вами согласился, но не теперь. Некоторые вещи безусловно сложнее, но что б в разы... нет.
292. starik-2005 3033 22.03.24 10:01 Сейчас в теме
(139)
А все почему?
Прошло 10 лет...
144. v.hitrin 04.04.14 16:05 Сейчас в теме
А как же движение вперед? Попробуйте через обычные формы реализовать веб-интерфейс... не получается?
Скажете, да кому нужны эти веб-клиенты?
А кому тогда нужны эти сложные иномарки? Давайте будем и дальше делать "девятки", "четырки", ведь они такие простые и понятные, можно любой косячек починить с помощью молотка и благого мата ("полностью отдаться решению поставленной клиентом задачи"). Большинство пользователей "девяток" (читай "обычных форм") всегда довольны тем, что у них есть, и искренне не понимают, зачем хоть что-менять в их привычном мире, кому это надо вообще.
А есть задачи и цели, которые можно достичь только новыми подходами, и хвала Нуралиеву (может быть тут перегнул палку), что он, несмотря на такой вот мелькающий негатив, стремиться к созданию своего, отечественного БМВ.
А УФ нормально программируются, если не лениться, почитать хотя бы "Разработка управляемого интерфейса" (250 руб.) и приятно для себя подтянуть знания по 1С, которая развивается. И дальше, как и привычно "полностью отдаться решению поставленной клиентом задачи".
ПС: в машинах абсолютно не разбираюсь, просто попытался провести понятную (надеюсь) аналогию.
Lo1jke; igo1; TreeDogNight; Redokov; Bukaska; teflon; +6 Ответить
147. Bukaska 140 19.05.14 15:24 Сейчас в теме
(144) v.hitrin,
если не лениться, почитать хотя бы "Разработка управляемого интерфейса" (250 руб.)


Но цену -то вы назвали партнерскую))) а розничная - в два раза дороже)))
145. non1ka 30 16.05.14 16:54 Сейчас в теме
Всем доброго времени суток. Если не сложно, помогите решить проблему, озвученную здесь: http://forum.infostart.ru/forum14/topic30548/
Тема: Передача параметров из фонового задания (работа с временным хранилищем). Особенная просьба к автору статьи)
146. Evil Beaver 8107 19.05.14 14:06 Сейчас в теме
Дайте пожалуйста весь связанный код. Например, откуда вызывается ПолучитьСлово(), где вы пытаетесь достаеть результат?
Короче, сможете сделать конкретный пример воспроизведения в виде обработки, чтобы не тратить время на подготовку к поиску проблемы?
151. Puk2 187 31.05.14 22:44 Сейчас в теме
Отличная статья! Всё никак не перейду на активное практическое использование УФ, но стараюсь поглядывать код и смотреть демки новых конфигураций. Ещё в 2008 году для высоконагруженной базы переносили многие сложные процедуры и функции, обрабатывающие большие объемы данных на сервер, да и просто чтоб снизить объем передаваемой туда-сюда информации. "Ошибка: Попытка передачи с клиента на сервер мутабельного значения".

Все комментарии читать смысла не увидел, но пробежался по некоторым и понял, что спор по поводу обычных и управляемых форм ещё долго не утихнет. Призывая фирму 1С сохранить обычные формы, не забывайте, что фирма 1С создана для получения прибыли, содержать штат поддерживающий много различных версий и вариаций конфигураций - это слишком затратный подход. В их подходе есть свои причины, когда ты создаешь новые конфигурации, которые по сути подходят и малым и средним и крупным(? рассчитывают по крайней мере) предприятиям, и тем кто хочет разместить данные в облаке, и тем кто локально, и тем кто на Linux, и тем кто на Windows, и тем у кого мощные клиентские машины и тем у кого "тонкие" клиенты. Если посмотреть интервью Бориса Нуралиева, то он выделяет для критерия успеха фирмы 1С:
1) большая партнерская сеть благодаря выгодным условиям
2) ориентация на массовый рынок (т.е. "в среднем" подходит всем)

есть ещё неофициальное мнение, что сейчас фирма 1С своей политикой пытается поднять рейтинг СПЕЦИАЛИСТОВ и серьёзных партнёров (считай, убрать с рынка "неугодных", дискредитирующих фирму 1С и её разработки своим непрофессионализмом)
152. Bukaska 140 02.06.14 10:10 Сейчас в теме
(151) Puk2,
"Ошибка: Попытка передачи с клиента на сервер мутабельного значения".

Общие модули???.. если у вас общий модуль серверный, то ошибка такая может быть)))
Поставьте галочку в свойствах общего модуля ещё и "ВызовСервера" - и тогда можно будет к нему обращаться с клиента, все будет ок)
153. Puk2 187 05.06.14 12:51 Сейчас в теме
(152) Bukaska, да это из воспоминаний первых попыток на 8.1, насколько помню, там в свойствах не было "вызов сервера". Да и дело не в этом, просто нельзя было передавать данные типа "табличная часть" "документОбъект" и т.п. Смысл почти тот же, что сейчас в управляемом интерфейсе.
155. SunShinne 633 13.06.14 14:10 Сейчас в теме
Спасибо автору за статью. 1С крайне редко занимаюсь, но если для себя что-либо сделать, то не ленюсь. А управляемые формы все ж таки много нюансов в себе несут, нашел в статье очень важную для себя фичу.
156. Styvi 6 26.06.14 18:04 Сейчас в теме
Благодарности автору. За расшифровку понятия ВременногоХранилища, точнее - его двух вариантов...
157. Evil Beaver 8107 28.06.14 20:00 Сейчас в теме
(156) Styvi, каких таких "двух" вариантов? У него нет вариантов, оно одно вроде как...
158. monkbest 115 29.06.14 10:09 Сейчас в теме
Вот и от меня порция какашек в сторону УФ. Когда такие статьи, рекламные проспекты все в один голос твердят, что УФ работают быстро, нагрузка меньше... я в это как дурак верю, убеждаю в этом клиента... начинаем внедрение...
ВНИМАНИЕ:
открываем форму списка с пользователем (любую, например справочник номенклатуры, контрагентов) где много-много записей и считаем до 10 (иногда до 30, но мгновенно не открывается ни одна форма списка), пользователь поворачивается ко мне и спрашивает:
"Сколько по твоему я буду набивать накладную из 10 строк?" (Кладовщик)
"Сколько приказов о приеме на работу я смогу оформить в день?" (Кадровик)
"Я каждый раз так по долгу буду вносить одну сраную проводку?" (Бухгалтер)
"Во сколько раз увеличится мой штат сотрудников после внедрения?" (Директор)

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

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

но в УФ от 8.3 никто ничего хорошего не видит

стремно говорить о распределении нагрузок, когда клиент написанный на УФ тормозит и жутко лагает, а на сервере в диспетчере задач - тишина, там процессор вообще не работает, там MS SQL на 1% жрет скорость жесткого диска и процесс 1С сервера просто потихонечку пухнет съедая по паре килобайт в минуту, не напрягая ни сеть ни процессор ни жесткий диск. Такое ощущение, что серверу кроме оперативной памяти ничего и не нужно, а заказчик купил духпроцессорный сервак с 8 ядрами каждый, а он простаивает
bulpi; Cthulhu; DiegoLidabo; prodines; Maximysis; +5 Ответить
159. EmpireSer 01.07.14 18:30 Сейчас в теме
(158) monkbest,
Зачем всё валить на УФ???
В 8.3 файловом работает ещё и фоновый процесс для рег./фон задач. Можно просто произвести отключение не нужных рег. задач (типа обновление индекса ППД, которым ни один наш клиент не пользуется). Скорость вырастит в разы. Это можно сделать и в клиент-серверном варианте.
Не забывает, что УФ (тонкий клиент) в видне - это IE, а IE нужны обновления винды и он зависит от оптимальности настройки. Если винду настроил хорошо и она обновляется, то IE тоже начинает "полётывать".

P.S. Вам не хватает знаний ХОРОШЕГО системного администратора и знаний работы 1С "за кадром". Знания работы HDD (чтение/запись данных на "блины" или правила работы SDD (работа контролера при перемагничивании)), работы ОС с разделами (смещение, размеры кластеров и т.п.), знаний в работе файловых систем (индексирование, журнал транзакций, файловые потоки, фрагментация). Плюсом идут специфики работы СУБД разных производителей и разных версий.

Тут всё накладывается так или иначе. А если ставите на "то, что есть", то ни кто Вам не гарантирует, что это вообще будет работать (рекомендуемые параметры системы - это для "идеального мира")
TreeDogNight; +1 Ответить
162. RomanRomans 03.08.14 12:21 Сейчас в теме
(159) Уважаемый EmpireSer, вы верно заметили, что регламентная задача "Обновление индекса ПДД" потребляет много ресурсов.
До последнего времени ее отключение было нормой.

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

Нововведение от 1С о котором идет речь, обсуждается в статье http://infostart.ru/public/292828/
164. monkbest 115 09.10.14 12:22 Сейчас в теме
(159) EmpireSer, Вы пытаетесь свести проблему тормозов к плохо настроенной винде, или к излишним задачам, которые на 1С повешены.
Ну начнем с того, что типовые конфигурации пишутся той же конторой, что и платформа. Я понимаю, что это разные команды разработчиков, но никто им не мешает общаться и обсуждать использование тех или иных приемов. Если в конфе задумана индексация ПП, то пусть индексирует. Мне обещали быструю работу программы, а в ответ они на якобы более быстрой платформе запускают функционал, который делает новую систему более медленной, чем систему двумя поколениями старше. ЗУП 3.0 - провал 1С. Они там такое нахреновертили, что лагает просто до невозможного. Видимо, они тестировали производительность на одном сотруднике, в реальности - лагает все.

Второе - не надо для установки системы делать шаманство. Запусти сетуп и начал работать. Все настройки и конфиги - от лукавого, я допускаю такое только для бесплатного ПО. Если Вы говорите, что для 1С нужен обновленный IE (в чем я сомневаюсь), то пусть они сами проверяют версию IE и его настройку при запуске или установке. телепатов.net
Cthulhu; v3132; +2 Ответить
160. AllexSoft 01.07.14 18:41 Сейчас в теме
(158) monkbest, от части ты прав.. той невиданной скорости от переписывания кода на УФ - думаю никто не заметил.. по поводу тормозов то они как правило не связаны с платформой, хотя и такие случаи бывали... тормоза от кривого кода и кучи ненужных никому колонок в динамических списках например, сначала напридумывают "а вот хочу чтобы рядом с контрагентом в списке появлялась его контактная информация, телефон и почта, а еще рядом колонка с остатками по взаиморасчетам на текущий момент" .. как минимум инфа будет доставаться из 3х таблиц в таком случае, сами понимаете почему оно будет тормозить... да и плюс нельзя использовать пакеты запросов, которые помогли бы оптимизировать скажем параметры виртуальных таблиц в таких запросах
161. EmpireSer 01.07.14 19:13 Сейчас в теме
Кстати тут кто-то писал про callback-и с сервера на клиент. Они ведь "внутри" реализованы как открытие и на сервере и на клиенте какого-то клиента и сервера (например TCP). И получается сервер просто передаёт специальный пакет клиенту с данными.
Ну если кто-то знает как создать сервер приёма TCP сообщений на JavaScript, то можно подумать как "это" заставить крутиться на клиенте и принимать вызовы с сервера 1С.
163. SemenovaMarinaV 08.10.14 16:37 Сейчас в теме
Начинаю только знакомиться с управляемыми формами.
Супер интересно.
165. Evil Beaver 8107 09.10.14 12:48 Сейчас в теме
Все настройки и конфиги - от лукавого, я допускаю такое только для бесплатного ПО


Мир UNIX смотрит на Вас с недоумением. И допускает конфиги для платного ПО, независимо от того, что Вы такого не допускаете. А так - гнев насчет УПП понятен)
166. monkbest 115 14.10.14 15:14 Сейчас в теме
(165) я уже довольно давно в 1С франчайзи (8 лет), но "Мир UNIX" пока мне не ведом. Были прецеденты, люди ставили сервера на якобы бесплатном ПО, а потом платили "одаренным" системщикам, которые им пророчили халяву стабильную ЗП за написание конфигов. Но большинство контор платят один раз за ПО и потом просто живут с ним. Мне то, как 1Снику, до лампочки на чем крутится платформа, моя задача закодить функционал, для автоматизации бизнес-процессов.
167. Evil Beaver 8107 14.10.14 15:28 Сейчас в теме
(166) monkbest, всякое бывает. Я вот например сейчас знакомым привожу в порядок самописную конфу, которую один такой вот, которому "лишь бы закодить", такое позакодил, что у меня волосы на заднице шевелятся. А тоже з/п получал и с умным видом к ним приходил лапшу навешивать. В 1С всегда открыт набор персонала, отправляйте резюме и учите их там уму-разуму, как будто кто-то мешает, в самом деле)
168. monkbest 115 15.10.14 11:22 Сейчас в теме
(167) ну грубо говоря Вы поддерживаете меня в том, что решение должно быть из коробки, чтобы потом никто нигде не лазил ни в коде, ни в конфигах :)
170. Evil Beaver 8107 15.10.14 12:01 Сейчас в теме
(168) monkbest, чтобы прямо вот нигде и никто - нет, не поддерживаю. Но в том, что настроек должен быть минимум, а не на каждый чих - да, конечно. Но найти баланс между этими крайностями - задачка похитрее филосовского камня, имхо.
monkbest; +1 Ответить
169. AllexSoft 15.10.14 11:41 Сейчас в теме
(167)
Я вот например сейчас знакомым привожу в порядок самописную конфу, которую один такой вот, которому "лишь бы закодить", такое позакодил, что у меня волосы на заднице шевелятся.

ох как верно сказано.. занимался на прошлой работе вот таким ( да и сейчас кусками.. благо сейчас имею возможность полностью выкинуть написаное через жо (потому что база еще не работает) и написать с нуля по нормальному.

Второе - не надо для установки системы делать шаманство. Запусти сетуп и начал работать. Все настройки и конфиги - от лукавого, я допускаю такое только для бесплатного ПО.

а как же быть скажем с разным аппаратно-программным обеспечением сервера скажем.. у одного пользователя сервер это простой комп с 8гб оперативы и PostGreSQL, а у другого 128Гб оперативы и SaaS диски.. вы им предлагаете одинаковые конфигурации SQL-сервера лепить? да и от специфики работы баз очень много что зависит.. какие запросы, какая база, количество операций записи\чтения, количество юзеров и тд и тп.. как без тонкой настройки то?
171. monkbest 115 15.10.14 14:58 Сейчас в теме
(169) AllexSoft,
а как же быть скажем с разным аппаратно-программным обеспечением сервера скажем.. у одного пользователя сервер это простой комп с 8гб оперативы и PostGreSQL, а у другого 128Гб оперативы и SaaS диски.. вы им предлагаете одинаковые конфигурации SQL-сервера лепить

ммм, а скуль сам не видит сколько оперативы? скока подкачки? каков объем базы? скорость работы дисков? он сам не может выбрать оптимальный режим работы?
кажись, что может
а вот Постгре - бесплатный, так к нему и претензий нет
172. Pasha1st 837 04.11.14 12:04 Сейчас в теме
В принципе понятно зачем УФ взялись - для полноценного тонкого клиента и для интерфейса, создаваемого под нужды конкретного клиента - будь то родное приложение или браузер. И 1С проделала огромную работу чтобы это хозяйство таки взлетело. Но и разработка под УФ ИМХО заметно усложнилась за счет наложенных ограничений, что клиент "отощал". Печаль в том что в это светлое будущее нас тянут за уши. А ведь при необходимости вычислительную логику и выборки данных можно в толстом клиенте на сервер отправлять.
Повышение уровня разработчиков вряд ли произойдет - ну только если самые бестолковые отсеются, а индусский код как писали так и будут писать. Тем более что в части составления запросов чистые 1С-ники будут лажать намного чаще чем специалисты, знакомые с SQL в принципе.
prodines; +1 Ответить
173. monkbest 115 05.11.14 17:16 Сейчас в теме
(172) Pasha1st, что такое чистый 1С-ник? и почему он всегда будет лажать?
175. Pasha1st 837 06.11.14 20:31 Сейчас в теме
(173) monkbest, который учился сразу на 1С. Если программист имеет работы с другими языками и средами, с базами данных, т.е. прошел более высокий порог вхождения, то и результат у него будет в среднем лучше. ИМХО, разумеется.
Ситуация как с бейсиком или PHP - языки изначально имеют низкий порог вхождения, и на них пишется много фигни. При этом и классный код на них тоже пишут.
178. monkbest 115 25.11.14 08:24 Сейчас в теме
(175) Pasha1st, понятно, просто у меня другое понятие "чистого 1С`ника". По Вашему определению я - "грязный" 1С`ник, т.к. перед карьерой в 1С сфере получил высшее ИТ образование, где узнал много про все, кроме 1С, другие среды и технологии, поработал в другой сфере (сайтостроения), а потом попал в 1С и понеслось:)
Но по своему самоопределению, я "чистый" 1С`ник, т.к. уже давно работаю в 1С, достиг в нем определенного уровня и ничем другим пока заниматься не собираюсь.
174. scarfase 05.11.14 22:58 Сейчас в теме
Спасибо за статью, написано понятным языком
176. kudim 13.11.14 12:35 Сейчас в теме
Спасибо! несколько моментов разъяснили простым языком, без тонн справочной информации в подарок.
Печально что куча написанных обработок под толстый клиент в новых конфигурациях только на управляемых формах для обычного пользователя, который не умеет переключать режим запуска стали недоступны.
Может существует какой-то конвертер перехода с неуправляемых форм на УФ?
177. Sholl 105 18.11.14 22:23 Сейчас в теме
Очень полезно. Спасибо
179. Serg548 26.11.14 10:32 Сейчас в теме
180. RomanBor 116 04.12.14 09:02 Сейчас в теме
Подход к Самим УФ то от 1С более менее нормальный и понятный, но что мне лично не нравится, так это обилие объектов 1С например на фига делать "таблицу значений", "массив", "список значений", если в принципе это практически один и тот же объект можно же было его объединить в один типа навороченного многомерного массива с отборами и прочем.
И притом они еще и не структуированны грамотно, где нормальная конвертация, особенно это видно в объектах для работы с СКД.
Где нормальная классовая структура с абстракцией чтобы большинство объектов имели во первых нормально перегруженные операторы присвоения, чтобы во всех объектов метод получить был получить, а не так что тут получить тут квадратные скобки в других найти

На месте 1С я вообще бы не стал плодить объекты типа обработка, отчет если в принципе это одно и тоже.
Когда же 1С будут улучшать на свистелки и перделки интерфейсные а среду разработки, когда наконец то сделают в запросах нормальный ltrim(rtrim), самое смешное что в практически любом полноценном SQL это есть, где конвертация в запросах строки в число и наоборот.

Кстате про УФ можно было модули разделить на блоки вот блок для сервера, это для клиента а не пихать все в одну кучу, когда грамотный отлатчик чтобы посмотреть стек вызовов функций, где нормальный intelisearch, блин в телепате для 7.7 это реализовано а в 8.х нормально до сих пор не сделано

ЗЫ: И Самое обидное что раньше чем 1с 9 и более: нормально структуированного интуитивно понятного языка мы не получим, а скорее всего вообще некогда :(
181. sergey_irk 19.12.14 00:10 Сейчас в теме
Начал знакомиться с УФ. Понравилась статья. Особенно без нудных разъяснений и комментариев, довольно сжато и практично. Кое что уяснил для себя. Особенно про конвертацию данных
182. dmitry-gr 25.12.14 13:43 Сейчас в теме
Управляемые формы это некоторый промежуточный этап между двумя крайностями - толстым клиентом, работающим непосредственно с базой данных и легким (web) клиентом работающим с api сервера приложений.
Переходить о толстого к тонкому клиенту так же психологически сложно как с процедурного языка переходить на объектный. Вроде бы все то же самое, а проектировать код надо по другому.
Следующий разрыв шаблона будет если в 1С надумают внедрять асинхронный принцип работы с сервером.
183. quick 583 27.12.14 01:39 Сейчас в теме
Все кто поработал с УФ более-менее плотно не хотят возвращаться назад, как в страшный кошмар

У меня ощущения с точностью до наоборот.
184. crazy.admin91119 15.01.15 10:06 Сейчас в теме
мне как новичку в этом деле была очень интересна эта статья
185. Olga_Programmer89 3 02.02.15 11:13 Сейчас в теме
Благодарю автора за статью! На некоторое время станет хорошей памяткой на моем рабочем столе
186. TreeDogNight 22 11.03.15 08:11 Сейчас в теме
Первые полгода работал на обычных формах, потом пришлось перейти на управляемые. Первое время было жутко непонятно и неудобно, но потом постепенно привык, и теперь возвращаться на обычные, нету никакого желания..
grand.pers; Evil Beaver; +2 Ответить
187. AlexO 135 16.03.15 10:48 Сейчас в теме
Опыт показывает, что рядовой программист практически никогда не знал, как нужно перенести код на сервер и что это вообще значит – «на сервер».
Все бы ничего, но и сейчас в УФ программист не знает, где исполняется код. Лишь платформа ему вырисовывает "НаСервере" - "не смей использовать инструкции клиента!" Или "НаКлиенте" - "не смей использовать инструкции сервера!" Это тот самый "клиент-сервер по 1С", разделение инструкций которого 1С могла беспрепятственно разделять сама и автоматически в платформе, без участия программиста.
Т.е. 1С нам что-то сообщает, а что реализовано на самом деле - это искусственное разделение на уровне платформы (а не клиента-сервера), и, как и ранее, код как исполнялся "везде и всюду", так и исполняется "везде и всюду". Отсюда, кстати, и тормоза на формах УФ в 8.3 под всякими "тонкими клиентами".
Так что все остальные построения "от клиента-сервера" рассыпаются в самом начале.
Cthulhu; DrSender; Идальго; +3 Ответить
188. Evil Beaver 8107 16.03.15 12:00 Сейчас в теме
(187) AlexO,
Это тот самый "клиент-сервер по 1С", разделение инструкций которого 1С могла беспрепятственно разделять сама и автоматически в платформе, без участия программиста.
Т.е. 1С нам что-то сообщает, а что реализовано на самом деле - это искусственное разделение на уровне платформы (а не клиента-сервера), и, как и ранее, код как исполнялся "везде и всюду", так и исполняется "везде и всюду"


лолшто?
minimajack; +1 Ответить
189. AlexO 135 16.03.15 13:04 Сейчас в теме
(188) "лолништо".
Не агитки читайте, а конфигуратор откройте, и подумайте над вопросом - а почему то-то и то-то, и работает именно вот так-то.
190. AlexO 135 16.03.15 13:06 Сейчас в теме
(188) не работают, получается, дружище, твои "УФ", "на сервере или на клиенте", а сугубо только платформа тебе имитирует "показывает" сервер-клиент при написании кода.
191. Evil Beaver 8107 16.03.15 18:30 Сейчас в теме
(190) AlexO, дружище, если бы я не знал, что ты знаменитый местный тролль, то, наверное, попытался бы выяснить, что ты хочешь сказать.
193. AlexO 135 20.04.15 14:08 Сейчас в теме
(191)
если бы я не знал
Обычно тролли называют троллями - других. Чтобы их не было видно на фоне.
А если не знаешь про УФ, и знать не хочешь - то к кому вопросы?
Оставьте свое сообщение