1с как получить форму на сервере
Перейти к содержимому

1с как получить форму на сервере

  • автор:

Получить форму на сервере 1с

Неужели до сих пор находятся те, кто так и не усвоил, что можно (и нужно) делать на клиенте, а что — на сервере? Имхо, это же азы.

Форма ТСу не нужна от слова совсем.

(25) хватит ныть
Если "расчет построен на реквизитах Управляемой формы", то построй свой расчет с блэкджеком и куртизанками.

(26) они ничего писать не хочет, но хочет, чтобы все было на сервере.

+(36)А ты не думал, что функции эти находятся именно в модуле форме для того, чтобы их и можно было использовать только на клиенте? Хошь использовать на сервере, используй то что модуле объекта(ну или в менеджере). Не подходит? Ну тогда переноси то что нужно в свою обработку ручками.. А то, понимаешь, хочется ему..

P.s. 1с не идеальна, но в большинстве случаев выкрутиться можно.

(37) плюсую
Может по условию задачи вообще не нужно ничего пересчитывать из форм, есть другие механизмы.

И зачем вообще что-то на формах пересчитывать так часто? Пусть бухгалтер или расчетчик кнопку "заполнить и рассчитать" нажимает сам ручками, так и было задумано. Если бы по логике работы нужно было программно создавать такие документы, то это было бы реализовано.

(37) Все, кто раньше (до ЗУП 3.0 и УТ 11) работали с типовыми так говорят. И я так говорила. Каким нужно быть недалеким человеком, чтобы делать какие-то вещи через форму?! Ну неужели сложно найти серверные процедуры и их использовать?

Потом мне понадобилось групповой обработкой пересчитать НДФЛ в начислении зарплаты ЗУП3. Я прокляла всех разработчиков типовой до 7го колена и написала как ТС — через клиент с открытием форм и вызовом их функций.

Сначала было противно. Теперь просто злость берет. Но другого пути нет. Если переписывать себе в серверную обработку функции из формы, которые используя реквизиты формы производят расчет, то в следующем релизе будешь эту обработку переписывать, т.к. процесс расчета / перерасчета поменялся.
А если открывать форму и вызывать экспортную процедуру по расчету она сама дернет нужные функции.

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

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

Для каждого СсылкаНаДокумент Из МассивДокументов Цикл
// получаем форму для доступа к модулю формы
ФормаДокумента = СсылкаНаДокумент.ПолучитьФорму("ФормаДокумента");
ФормаДокумента.ПерезаполнитьДанныеФормыНаСервере();
ФормаДокумента.Записать();
КонецЦикла;

все очень элегантно и просто, но на клиенте :/

(40) >> Очень хочется, чтобы разработчики типовых пошли падаванами на какой-нибудь большой завод и поработали там годик со своим творением

Разработчики типовых должны оринтироваться только на _собственную_ целесообразность писать код и размещать его так или иначе. То, что потом какой-то Вася, Петя или Маша захотят клиентские методы дергать на сервере — это их личные проблемы (причем кстати вполне преодолимые)
Так вся индустрия конструирования ПО устроена. По сути тебе предоставляют публичное API, которое ты можешь использовать, но нет гарантий, что это API не изменится со времением и твоя задача как разработчика подстраиваться под этим изменения, и именно этот процесс называется конструированием ПО, а ты в результате называешься программистом, очень неожиданно да?

Сразу допишу к (45) для эстетов что правильней было бы

ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
ФормаДокумента = ПолучитьФорму("Документ.НачислениеЗарплаты.Форма.ФормаДокумента",ПараметрыФормы);

(46) в корне не согласен
"Разработчики типовых должны оринтироваться только на _собственную_ целесообразность писать код " начиная с версий конфигураций на управляемых формах они просто пожинают плоды доминации на рынке, решения в корне провальные которые вытягиваются за счет нас с Вами, если бы была конкуренция эти решения провалились бы. Кто внимательно следит за УТ 11, ERP и ЗУП и внедряет их решения, тот прекрасно понимает какой пласт проблем разработчики намеренно оставляют в прошлом релизе так как их не реально исправить и переосмысливают в новом релизе не совместимом со старыми, пример ERP 2.0 -> 2.1 -> 2.2 совершенно изменные концепции, а такие конфигурации внедряются и дорабатываются годами, провальная УТ 11.0 ЗУП 3.0 — работать стала только с 3.1.1

"По сути тебе предоставляют публичное API, которое ты можешь использовать, но нет гарантий, "
тоже не верно, разработчики не просто дают АПИ а настаивают на его использовании, без обращения напрямую к элементам конфигурации, так как много накрутили логики которую очень сложно описать, поэтому почитайте партнёрские форумы, там одни рекомендации использовать только типовые процедуры и функции для получения и обработки данных.

(49) Давай попробуем решить твою проблему забыв вообще про разработчиков типовых.

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

Экспортная процедура формы наверняка вызывает определенные методы серверных модулей — ок.

Ты писал, что сложность в том, что этим модули требуют именно реквизиты формы — ок

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

Как получить форму на сервере?

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

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

  1. Вам необходима на сервере функциональность некоторой формы — в этом случае рекомендую перенести требуемую функциональность из модуля формы в серверный модуль.
  2. Необходимо определить возможность открытия управляемой формы — сделайте это в методе ПриСозданииФормыНаСервере() в модуле формы

Если у вас другие проблемы, опишите их в комментариях. Попытаемся решить вместе)

Получить форму объекта имея ссылку (УП)

И эту ересь в УП теперь на кучу строк нужно переписать.

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

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

Не могу разобраться в получении формы по ссылке.

alexanderzhirov's user avatar

работает только на Клиенте. На Сервере какие формы? ))

Alexander Fotov's user avatar

В управляемом приложении при создании формы объект (ДокументОбъект) преобразуется в ДанныеФормыСтруктура и уничтожается. Далее объект можно получить только преобразовав реквизит формы «Объект» в значение (метод РеквизитФормыВЗначение). Тогда получим снова ДокументОбъект. Который можно модифицировать и затем преобразовать обратно в реквизит формы (метод ЗначениеВРеквизитФормы). Если открыть форму по ссылке и отдельно от формы получить объект, модифицировать и записать, то в форме уже ничего изменить не получится, т.к. версия данных объекта формы будет не совпадать с версией объекта в БД. (почитайте про объектные блокировки 1С. https://infostart.ru/public/543218/)

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.6.20.43502

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Программное открытие форм в управляемом приложении 1С

Программное открытие форм в управляемом и обычном приложении 1С сильно отличается.

Программное открытие формы в обычном приложении

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

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

При этом при получении формы будет выполняться процедура события ПриСозданииНаСервере.

Рассмотрим другие методы открытия форм в управляемом приложении 1С.

Программное открытие формы в управляемом приложении

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

Метод глобально контекста ОткрытьЗначение() показывает в диалоге переданное значение. При этом, вид диалога зависит от типа переданного значения. Поскольку в данном примере мы передаем ссылку на элемент справочника, то метод открывает основную форму справочника Номенклатура.

Как создать документ и открыть его форму?

В 1С для этих целей существует два возможных сценария работы:

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

В первом сценарии проще всего использовать метод глобального контекста ОткрытьФорму().

При этом создается новый документ и открывается для редактирования основная форма этого документа.

При необходимости можно предварительно заполнить документ начальными данными, например с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения либо в обработчике события документа ОбработкаЗаполнения.

Во втором случае можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события ОбработкаЗаполнения, записать, и передать ссылку на новый документ в метод глобального контекста ОткрытьЗначение(), который откроет форму этого документа.

Как открыть форму выбора и получить потом выбранное значение?

Для этого воспользуемся функцией ВвестиЗначение().

  • Значение — переменная, в которую будет помещено выбранное значение;
  • Подсказка — Текст заголовка окна диалога ввода значения. Может использоваться в качестве подсказки пользователю. Значение по умолчанию: Пустая строка.
  • Тип — тип вводимого значения. Если параметр не указан, используется тип параметра <Значение>. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

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

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

Функция ОткрытьФорму() в управляемом приложении 1С

Для открытия произвольной формы предназначена функция ОткрытьФорму(). Рассмотрим как она работает.

ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>);

Некоторые параметры функции:

  • ИмяФормы — полный путь к объекту метаданных Форма, тут можно выбрать либо одну из стандартных форм объекта, например, ФормаВыбора или ФормаСписка. Или конкретную, созданную разработчиками форму.
  • Параметры — позволяет передать в форму в виде структуры некоторые параметры перед ее открытием, тем самым определив выводимые данные. Параметры могут представлять собой любые данные, которые можно передавать с клиента на сервер.
  • Владелец — владелец формы — форма или элемент управления другой формы.
  • РежимОткрытияОкна— имеет 3 варианта: независимый, блокировать весь интерфейс, блокировать форму владельца.

Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.

Как программно открыть форму существующего объекта?

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

Как программно открыть форму нового объекта и заполнить ее на основании чего-либо?

В качестве параметра Основание нужно передать ссылку на объект-основание заполнения. При этом будет запущена процедура ОбработкаЗаполнения().

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

Как программно открыть форму и задать на ней отбор?

Для организации отбора, нужно передать в открываемую форму параметр Отборструктуру, ключ которой — имя поля динамического списка, а значение — искомые данные.
Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура.

Как программно открыть форму записи регистра сведений?

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *