Получить модуль формы 1с
В модуле объекта, в управляемой форме, есть процедура, которую мне необходимо использовать в модуле форме. Но вызвать ее никак не получается. Можно, конечно, скопировать ее в модуль формы, но . зачем . если она есть в модуле объекта. При вызове пишет что "..нет такой процедуры или функции".
Сначала надо получить объект.
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.ПроцедураМодуляОбъектаЭкспортная();
houpl; kolibrik; tol_l; Obvious; user755340; syergio; anuar_medeup; Михаська; dimisa; user841691; G_112708749323588293243; temdj; Terabaytus; provost_ua; khiliy; SeerRM; maksimus753; IgorArhangel; EVKash; shalupov61; lars-net; Coollerok; 627870; Yan_Malyakov; It-developer; METAL; KolBbl4; denmon88; adison; vakham; machneff; user895546; el-le; userzak; user590106_efimenkovladimir; Merkalov; Aggressorak; creatermc; makarovy; Katty_K; Светлый ум; user701220_andy4spam; jane_de_rio; tekit; echo77; MaximStav; Fruktoved; Jeka44; user996563; zhenianik; artspeed; Prad2002; mailrum2004; Gadzhalik; Alligator84; Spirit11; vladir; toofatalex; SurovcevD; Land1966; Mahon83; mikit; iott; ecos; nauriz_11; ekomova; rpgshnik; softgarant; kaps22; ustinov_greendale; bird21; bad_boys; freeek; Nimfetamin; user596222_dr.ti; Enziger; GH0STexe; Xershi; poyson; Serge_ASB; Gavrik; Slava282; soulsteps; cleaner_it; alk; Andrsan; Alien_job; Патриот; jkcea; OksDallas; MsDjuice; cheiser1982; DigitalMan; VNEDRON; 1108; lDenisZl; Gendelf; wolfsoft; gaglo; OStepanych; SotNick; elizarovs; Bukaska; NittenRenegade; + 104 – Ответить
Сначала надо получить объект.
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.ПроцедураМодуляОбъектаЭкспортная();
houpl; kolibrik; tol_l; Obvious; user755340; syergio; anuar_medeup; Михаська; dimisa; user841691; G_112708749323588293243; temdj; Terabaytus; provost_ua; khiliy; SeerRM; maksimus753; IgorArhangel; EVKash; shalupov61; lars-net; Coollerok; 627870; Yan_Malyakov; It-developer; METAL; KolBbl4; denmon88; adison; vakham; machneff; user895546; el-le; userzak; user590106_efimenkovladimir; Merkalov; Aggressorak; creatermc; makarovy; Katty_K; Светлый ум; user701220_andy4spam; jane_de_rio; tekit; echo77; MaximStav; Fruktoved; Jeka44; user996563; zhenianik; artspeed; Prad2002; mailrum2004; Gadzhalik; Alligator84; Spirit11; vladir; toofatalex; SurovcevD; Land1966; Mahon83; mikit; iott; ecos; nauriz_11; ekomova; rpgshnik; softgarant; kaps22; ustinov_greendale; bird21; bad_boys; freeek; Nimfetamin; user596222_dr.ti; Enziger; GH0STexe; Xershi; poyson; Serge_ASB; Gavrik; Slava282; soulsteps; cleaner_it; alk; Andrsan; Alien_job; Патриот; jkcea; OksDallas; MsDjuice; cheiser1982; DigitalMan; VNEDRON; 1108; lDenisZl; Gendelf; wolfsoft; gaglo; OStepanych; SotNick; elizarovs; Bukaska; NittenRenegade; + 104 – Ответить
(10) Дело в том, что в контексте модуля формы реквизит Объект является типом ДанныеФормыСтруктура, такой себе облегчённый вариант для работы с объектом формы. Платформа выполняет имитацию исходных объектов с помощью ДанныхФормы, которые имитируют только структуру исходных объектов.
При этом методы исходных объектов недоступны, как и модуль объекта, так как Объект тоже имитируется через ДанныеФормы. Для того чтобы обратиться к модулю объекта или к методам исходных объектов, необходимо выполнить преобразование объекта из данных формы в исходный объект. Поэтому и нужно сделать, то что написано выше.
Данная операция может быть выполнена только на сервере. После чего с помощью метода формы РеквизитФормыВЗначение(), как показано выше или с помощью глобальной команды ДанныеФормыВЗначение() можно преобразовать ДанныеФормы в исходный объект.
(7) Ответ неверный. Модуль объекта и так исполняется на сервере, а директивы компиляции там не действуют.
(6) Сама Процедура в модуле объекта Экспорт 'ная?
(9)Да, экспортная.
Все с вариантом DevilOTS получилось. Спасибо ему за это!
А то звонил франчам, по этой проблеме, но они сами не знают как решить эту проблему. Просили если найду выход позвонить им. );
Спасибо всем за участие!
Если у Вас разные объект например два документа и надо в форму одного документы вызвать процедуру из другого, то в этом случаи надо процедуру помещать в модуль менеджера и вызывать ее как документы.названиедокумента.названиепроцедура. Соответственно все вызовы на сервере.
Такой же вопрос возник по Отчету (а не по документу). Выяснил что нужно параметром указывать "Отчет".
да, а как быть если это внешняя обработка?там нет такого "поставьте компиляцию процедуры модуля объекта НаСервере." как быть?
Модуль объекта (внешняя обработка):
Процедура ЗаполнитьТЧ() Экспорт
// твой код
КонецПроцедуры
vfvava; HetLink; CratosX; METAL; tani6e4ka; vakham; divSvid; nad0_hto; wolder; iott; continental; BlackCors; jkcea; + 13 – Ответить
Сколько читаю все советуют так а вот у меня че то не выходит. В чем ошибка помогите.
(24) Геннадьевич, думаю что нет. И ещё раз нет.
У вас обращение к БД исполняются на сервере.
Соответственно Клиент делает запрос на Сервер и возвращает данные на клиента.
для такого дела ставят флажки в серверных модулях, где они компилируются: Сервер и ВызовСервера(Для обращения с клиентского компа)
Обратите внимание, что нет в свойствах модулей такого флага, как вызов клиента.
Поучите лекции Евгения Гилёва, даже там вам скажут что на клиенте можно использовать методы обращения на сервер, а вот с сервера вызывать метод обращения на клиент - ну никак))))
(59)Уверены! На какой клиент должен уйти вызов с сервера? Возможен только возврат после вызова сервера с клиента.
А теперь вопрос посложнее, господа эксперты: как вызвать процедуру модуля обработки из формы этой обработки из безконтекстной процедуры (чтобы не таскать на сервер всю форму)? Уверен - никак. И модуля менеджера у внешней обработки не существует. Остается только располагать процедуру в форме? Тоже некрасиво. Подскажите, как сделать красиво?
(27) оказалось, что и из процедуры НаСервере в модуле формы не всегда возможно вызвать функции модуля объекта - начинает сбоить РеквизитФормыВЗначение, ошибка
Т.е., например, при переходе от ПриСозданииНаСервере, где все процедуры модуля объекта видятся, к следующей процедуре НаСервере - процедура перестает "видеть" главный свой реквизит формы Объект, и уже не находит его (ссылка есть, а найти по ней - не может).
В общем, полный мрак и внешние обработки )
Для вызова такой процедуры необходимо прежде всего иметь сам объект документа, но прикладные объекты существуют только на сервере. На клиенте их нет. Поэтому поступим следующим образом.
Выполним контекстный серверный вызов. На сервере преобразуем основной реквизит формы в прикладной объект, выполним экспортируемую функцию этого объекта и преобразуем объект обратно в основной реквизит формы.
Для внешней обработки делаю так:
1. завожу реквизит обработки "Модуль"
2. в модуле объекта определяю экспортную процедуру/функцию "Процедура ПроцЭкспорт Экспорт . "
3. в теле модуля объекта делаю присваивание: "Модуль = Объект;"
4. в модуле формы делаю вызов "Объект.Модуль.ПроцЭкспорт();"
все работает
(29) slawa, А для внешнего отчета это не работает?
В 29 написано, что делал для внеш обработки. Но у меня не получилось. Не понятно реквизит обработки "Модуль" какого типа? и п.3 не совсем понял.
Может у кого-то получилось?
Что-то с отчетом совсем печально получается. Даже если его в конфигурацию засунуть, то всё равно не работает.
С документом все прошло удачно.
Как же в отчете сделать так, что бы заработало?
Когда речь идти о ссылках (любых) - в УФ 1С всегда используется тип "Произвольный".
Либо - ставить конкретный тип документов/справочников/объектов, что неприемлемо для внешних обработок.
А я вам объясню сейчас, если в 1С опять не наделали вместе с явными "перебросками" РеквизитФормыВЗначение - еще и неявное обновление/чтение объекта на форме с/через помощью обращения к этому самому объекту через реквизит (а все может быть :) ).
Ведь зачем весь этот огород городить - вызывать из модуля формы функции/процедуры модуля объекта (МО)? А так мы, с помощью МО, и за отсутствием модуля менеджера (ММ) - имитируем вызов аналогичных функций из ММ.
А зачем вообще делать функции в модуле менеджера? Они позволяют работать/обращаться к с объекту из Формы, и менять данные.
Так вот, все вот эти бесконечные "РеквизитФормыВЗначение" и "ЗначениеВРеквизитФормы" - они ж не зря используются тут. Происходит чтение актуальных данных объекта, изменение через процедуру МО, а потом - загрузка измененного объекта на форму (при конвертации в реквизит формы), т.е. актуализация для формы данных объекта.
А это как раз именно, то, что и нужно - выполняется имитация функции модуля менеджера.
А вот ваш вариант - лишь получает и выполняет функции, меняя объект, а данные объекта "на форме" - не меняются в соответствии с вашими актуальными изменениями объекта, которые, вроде бы, должны последовать после вызовов и обработки объекта из модуля формы (а иначе зачем все это) - что происходит при обратном вызове "ЗначениеВРеквизитФормы".
Вы ж только один раз читаете Объект и актуализируете данные - в самом начале. И все.
Но это все верно лишь при условии - что при обращении к реквизиту, содержащему ссылку на объект, данные объекта не "обновляются" на форме.
Присвоение делается не в теле модуля объекта, а в модуле формы, в области автовыполнения кода (это в самом конце модуля).
Или тогда надо делать это присвоение в каждой функции, использующей реквизит "Модуль".
А для УФ в МО реквизит "Объект" формы вы не увидите никак, и, соответственно, не сможете его присвоить реквизиту обработки "Модуль" )
Здравствуйте! По этому пункту непонятно, пишу в модуле объекта, в самом низу, ругается "Переменная не определена (Объект)"
(29)
Slypower; Stivens; zhivoglot; adhocprog; nnn123; Gendelf; Gang031; egorcheg1; COMPER; mad375; uri1978; ---Oleg---; softgarant; An-Aleksey; pavlo; alk; + 16 – Ответить
Продолжение вопросов из моей предыдущей темы.
Из каких модулей и как передавать значения например как перенести скажем значение переменная1 из Модуля объекта в Модуль формы или модуль менеджера и можно ли из модуля объекта/менеджера одного объекта получить значение переменной из другого модуля объекта/менеджера или для этого используется общий модуль?
2. Почему именно в модуле менеджера пишутся запросы, почему не в модуле объекта или формы?
В 1С напридумывали и не ясно что как с чем взаимодействует.
Модуль менеджера для печатной формы. Вывод на печать данных одного документа.
Задача обстоит в том плане что при данном коде он на печать выводит абсолютно все документы. Хотя.
Как вызвать модуль и передать в него значение переменной
У меня в макросе есть ссылка на другой макрос, точнее на одну из его процедур в виде: .
Обращение из простого модуля в модуль формы
Здравствуйте, когда я в модуле формы объявляю процедуру как public оно у меня не действует.
с итс, не знаю, можно ли копировать или они запрещают. знает кто?
1. Модуль объекта предназначен для реализации поведения отдельного экземпляра объекта (СправочникОбъект, ДокументОбъект и т.п.). В модуле объекта размещаются процедуры и функции, которые работают с данными объекта (ЭтотОбъект и переменные модуля объекта), в том числе когда он еще не записан в информационную базу.
Например, в модуле объекта могут размещаться:
обработчики событий объекта
процедуры заполнения экземпляра объекта.
Следует иметь в виду, что для вызова экспортных процедур и функций модуля объекта из других модулей может потребоваться предварительно получить сам экземпляр объекта из информационной базы с помощью метода ПолучитьОбъект. При этом происходит загрузка объекта из базы целиком, вместе с его табличными частями, что достаточно ресурсоемко.
См. также: Чтение отдельных реквизитов объекта из базы данных
2. Модуль менеджера объекта предназначен для размещения "статической" функциональности, которая логически неразрывно связана с объектом метаданных, но не зависит от состояния конкретного экземпляра объекта данных. Это могут быть процедуры и функции:
относящиеся не к одному, а сразу к некоторой совокупности объектов. Например, это функции для вывода на печать списка объектов; функции, возвращающие информацию, общую для всех экземпляров объекта метаданных; процедуры обновления данных информационной базы, которые связаны с объектом метаданных; и т.п.
которые работают с объектом, записанным в ИБ. В таких функциях входным параметром является ссылка на объект. Например, это функции для получения печатной формы по ссылке на объект, процедуры формирования движений по ссылке на объект и т.п.
Для выполнения функций модуля менеджера объекта не должен требоваться экземпляр объекта данных (СправочникОбъект, ДокументОбъект и т.п.).
3. Если функциональность невозможно однозначно отнести к тому или иному объекту метаданных, то она является логически общей для нескольких объектов. В этом случае ее следует размещать в общем модуле.
(5)Сваяли документ расчета процентов, теперь надо по всему периоду базы пробежаться обработкой , создать эти доки и рассчитать/провести, в ручном режиме есть волшебная кнопка ЗАПОЛНИТЬ, которая вызывает экспортную процедуру в модуле формы (((((
Поэтому возник мой вопрос в топике дабы создать обработку.
(7) makfromkz, может проще будет скопировать эту экспортную процедуру (и зависимый код) в свою обработку (в ту же форму обработки) и вызывать её без всяких проблем? Чтобы выполнить функцию формы, как уже написали, форму нужно получить. Скорее всего функция работает с данными объекта, отображенного формой, т.е. и объект надо получить. Много телодвижений, обработка будет тормозить, скорее всего.
Экспортная функция модуля формы . Можно поискать по конфигурации, как она используется. Может и вопросы сразу отпадут.
(9)Я в курсе, что лучше процедуру разместить в Общем Модуле или в Модуле Объекта Документа или в Модуле Менеджера Документа или просто скопипастить в модули своей обработки.
Мне хочется посмотреть работающий код вызова экспортной процедуры модуля формы из своей обработки, гугление к сожалению мне не помогло.
Все пишут что это ВОЗМОЖНО но очень сложно ((((
Сдается мне, что все только и пишут об этом(возможности+сложности), а те кто реально этот код могут написать поди сюда и не заходят,
а возможно есть вариант, что таки это невозможно :)
Для меня уж точно!
(10) makfromkz, там неоднозначная ситуация получается. Если делать обработку в УФ с тонким клиентом, то придется в цикле бегать с клиента на сервер и обратно. Работать будет, но сильно тормозить. Да идеологически совсем не правильно получится.
Есть вариант, обработку сделать только для Толстого клиента. Можно и не УФ. Вот пример:
(11)
Форма.НужнаяПроцедураНаФорме();
Ужас просто. У одного нашего заказчика есть подобная обработка, которая генерирует документы из dbf файла. Документы формируются получением формы, заполнением и записью. Всё на клиенте, на файловой базе, тормоза дикие.
Писал человек, который ещё никак от клюшек не избавится.
(14) Поручик, в общем то да, ужас. Но в самой постановке вопроса(структуры решения). Для тонкого клиента это совсем ужас.
Но для толстого клиента терпимо (без рефакторинга это единственный приемлемый выход).
Хотя описание в форме дока:
(7) makfromkz, Что происходит при нажатии в форме документа волшебной кнопки "Заполнить"? Наверняка идет в конечном итоге на сервер, в модуль объекта? Или у вас в корне неправильно сделано методологически, так, что серверные процедуры, занимающиеся обработками документа-объекта расположены в форме.
Или у вас в корне неправильно сделано методологически, так, что серверные процедуры, занимающиеся обработками документа-объекта расположены в форме.
Я согласен с вами.
Но задачка имеет решение?
(17) makfromkz, задачку можно решить через одно место, но только если будете работать на клиенте. В регламентом задании не сможете! Потому что там нет форм, это косяк архитектора вашей обработки!
(4) makfromkz, для этого как минимум надо получить эту форму. Но это нелогично. Для подобных случаев есть или общие модули или хотя бы модуль менеджера объекта.
Пожалуйста, приведите пример реального кода, про то, что кошернее вызывать экспортную процедуру из модуля менеджера документа или из модуля объекта- я в курсе.
(2) makfromkz, раз процедура нужна для программного вызова, то пишите её в модуле менеджере для этого он и нужен!
Резюме: вызвать экспортную серверную процедуру модуля формы документа так и не удалось,
но зато удалось в своей обработке вызвать экспортную клиентскую процедуру модуля формы документа,
для заполнения ТЧ документа.
Формы используются для удобного отображения данных базы пользователю. С формами можно работать как пользователь интерактивно, так и программист управляя поведением и внешним видом формы с помощью кода.
Типы форм
Формы делятся на два типа: обычные и управляемые, обычные формы это формы которые были в линейке 8 с самого начала и по текущий момент. Смысл этих форм заключается в том что форма в прямом смысле рисуется разработчиком, он указывает на то место (вплоть до пикселя)где будут располагаться элементы формы. Обычные формы работают только в толстом клиенте, в то время когда управляемые формы работают и в толстом и в тонком клиенте. Управляемые формы доступны в версии 1С начиная с 8.2 и выше и только когда конфигурация настроена как "Управляемое приложение". В тонком клиенте возможно использование только управляемых форм. Управляемую форму нельзя нарисовать мышкой. Элементы в ней не рисуются, а декларируются или объявляются, что накладывает некоторые ограничения. Вы можете указать что реквизиты будут группироваться горизонтально а не вертикально к примеру, но нельзя указать системе: "вон то поле ввода на 2пикселя выше пусть будет". В управляемых формах код делится строго на клиентский и серверный. В обычных формах можно встретить некоторые серверные ограничения только в режиме клиент-сервер и только для функций которые не расположены в модулях форм.
Программное открытие формы
Программно открыть форму можно с помощью метода "Открыть форму". Этот метод доступен в различных контекстах(форма может существовать и быть открыта только на клиенте) и отличается при использовании обычного и управляемого приложения(в толстом клиенте нельзя передать параметру в форму) но в целом имеет следующие основные параметры: ОткрытьФорму(, , , )
Имя формы: имя открываемой формы, так как для объекта метаданных могут быть не определены никакие формы, возможно указать просто тип формы который надо открыть, например "ФормаСписка" или "ФормаЭлемента".
Параметры - параметры передаваемые в форму, с их помощью можно управлять отборами, устанавливать строку в нужном месте, или просто передавать в форму нужные параметры.
Владелец – используется для организации подбора, обработкой результата выбора если форма открыта для подбора, будет заниматься форма или элемент указанные в этом параметре, так же есть возможность закрывать форму, если закрыта форма-владелец.
Уникальность – этот определенный ключ отвечающий за уникальность формы, если этот параметр указан, то при открытии формы будет произведен поиск формы открытой с этим ключом и если такая будет найдена, то будет активирована уже открытая форма.
Принадлежность форм
Формы могут общими(принадлежать к общим формам) или принадлежать определенному виду объектов, например справочнику номенклатура. Если формы принадлежат какому то виду объекта то они могут быть специального типа: например форма списка, эту форму можно использовать для того, что бы просмотреть список документов или форма документа, эту форму можно использовать для редактирования документа. Здесь мы говорим, «можно использовать» так как когда мы щелкаем по документу в списке или когда мы открываем список документов, будет открываться та форма, которая назначена основной. Если основная форма не назначена, при открытии форма будет сгенерирована, вне зависимости от того есть ли в списке форм, форма нужного вида. По сути форма это просто набор полей и кнопок, Форма выбора , форма списка и форма элемента могут отличаться друг от друга только основным реквизитом, который и служит идентификатором для платформы. Основными реквизитами у форм документа и у элемента справочника являются СправочникОбъект и ДокументОбъект . Для форм выбора и форм списка обычного приложения это СправочникСписок.ВидСправочника и ДокументСписок.ВидДокумента . У управляемого приложения у форм выбора и форм списка основной реквизит ДинамическийСписок . Форма выбора отличается от формы списка установленным свойством Режим выбора у основного реквизита. Если форма принадлежит справочнику\документу то для них доступны следующие типы:
Разница между элементами формы, и реквизитами объекта.
Для корректной работы с элементами формы, следует для себя четко разделить где нужно пользоваться элементами формы, а где реквизитами объекта. К примеру, Элементы.Организация Отвечает за поведение реквизита на форме, начиная от видимости, заканчивая цветом заголовка. В то время как Объект.Организация Предоставляет доступ непосредственно к данным.
Обращение к данным формы из модуля объекта.
Обратиться к реквизиту формы(не путайте с реквизитом документа\справочника) из модуля документа или справочника невозможно, потому, что модуль не может знать какая форма сейчас открыта(а их ведь может много) да и не факт, что при выполнении процедуры или функции модуля формы, какая то форма будет вообще открыта. Реквизиты формы существуют, только до тех пор, пока форма открыта.
"Толстые" объекты на управляемой форме.
Так как на тонком клиенте недостуны, данные базы данных, серверные объекты(например таблица значений) то на форме их как таковые разместить нельзя в то время, когда они как типы для реквизитов доступны. Здесь дело в том что, при добавлении на форму, добавляется не табличное поле, и не сам список элементов справочника номенклатура к примеру, а коллекция например типа ДанныеФормыКоллекция или ДанныеФормыСтруктура с урезанным функционалом, суть которой заключается в том, чтобы отображать данные таблицы значений которая является реквизитом формы или документа. Список методов, доступных для этих типов, позволяет вести комфортную работу, с данными тех объектов которые они отображают.
Преобразование Реквизит – Данные формы и обратно.
Несмотря на то, что типы ДанныеФормыКоллекция , имеют достаточно широкий функционал, иногда возникает необходимость на сервере получить, "оригинал" - тот объект который отображает форма. Особенно это актуально для реквизитов формы, ведь данные реквизитов объекта, можно получить из самого объекта. Для таких случаев существует метод РеквизитФормыВЗначение() , например:
Второй параметр необязательный.(и не совсем понятно зачем он нужен). Возможно и обратное преобразование, бывает необходимо когда полученный извне или сгенерированный объект "засунуть" в уже существующий реквизит формы, соответствующего типа для этого существует
Перезаполнение реквизитов формы в случае изменения объекта.
Бывают случаи когда объект изменяется не из формы а с помощью какой то процедуры, которая находится в модуле объекта или в любом другом месте. Если действие было инициализировано с помощью кнопки на форме, то после, например таких действий:
Вы не увидите изменений на форме, все дело в том, что форма не делает лишних вызовов к серверу без необходимости и как следствие не в курсе, что с объектом, что-то происходило. В этом случае надо перечитать данные объекта, следующим образом:
Модули служат непосредственно для хранения исполняемого кода на языке 1С предприятия. Модули как правило состоят из:
Причем разделы идут именно в таком порядке, наличие всех разделов в модуле не обязательно. При указании процедур, функций и переменных следует указывать, где они будут скомпилированы, если не указана директива компиляции, то компиляция произойдет на сервере(необязательно для толстого клиента). Некоторые модули могут компилироваться и на клиенте и на сервере, некоторые только на сервере.(здесь следует добавить примеров). При указании процедур, функций и переменных можно указать их как экспортные. Тогда эти процедуры и переменные будут доступны из вне этого модуля. Делается это с помощью ключевого слова Экспорт
Модуль приложения
Модуль приложения используется для отслеживания запуска\завершения программы. Отрабатывает только в случае если 1С запускается интерактивно, то есть показывается на экране. В 1С есть два модуля приложения один для запуска обычного приложения, второй для запуска управляемого приложения. Модуль приложения управляемого приложения компилируется на стороне клиента. То есть недоступны обращения к базе данных и прочие объекты доступные только на сервере. В модуле обычного приложения, понятно таких проблем нет. В модуле приложения могут как обычно размещаться объявления переменных, процедуры и функции, а также предопределенные обработчики событий. В модуле доступны следующие события:
ПередНачаломРаботыСистемы событие срабатывает в момент запуска системы, одним из первых, когда запуск еще не произошел. У этого события есть параметр Отказ и если его выставить в Истина , то запуск не произойдет. В этот момент окна еще нет, и взаимодействовать с пользователем, не получится.
ПриНачалеРаботыСистемы событие срабатывает когда запуск уже случился и нужно сделать какие то действия после запуска. Уже есть окно программы и можно что то спросить или сказать. Отказаться от запуска уже невозможно.
ПередЗавершениемРаботыСистемы событие по аналогии с предыдущим срабатывает когда завершение работы еще не произошло, есть параметр отказ и можно спросить пользователя, не ошибся ли он, нажав на крестик.
ПриЗавершенииРаботыСистемы событие срабатывает когда все уже произошло и надо отработать действия которые должны происходить после завершения работы системы.
ОбработкаВнешнегоСобытия вызывается когда происходит какое то событие передаваемое в систему, например вызов ридера магнитных карт или сканера штрихокда.
Если в модуле приложения объявить экспортную процедуру или функцию, то можно будет обращаться к ней напрямую без указания имени модуля, из любого другого модуля(если экспортная процедура объявлена в модуле управляемого приложения то очевидно, что она будет доступна только из клиентских модулей). По существу мы получим процедуру глобального контекста. При этом нужно понимать, что этот модуль компилируется при старте системы всегда, поэтому при наличии большого числа процедур в этом модуле будет падать скорость запуска приложения.
Модуль внешнего соединения
Модуль срабатывает в момент запуска приложения в режиме ком соединения, в этом модуле так же есть события ПриНачалеРаботыСистемы и ПриЗавершенииРаботыСистемы в этом модуле не создается окно и нет возможности взаимодействовать с пользователем . Компилируется на сервере.
Модуль сеанса
Запускается и при запуске пользователем и в случае ком соединения, его предназначение – установка параметров сеанса, в модуле сеанса есть только один обработчик УстановкаПараметровСеанса , этот обработчик вызывается первым при запуске приложения. Модуль сеанса компилируется на сервере и запускается в привилегированном режиме - без контроля прав конкретного пользователя. Так же в модуле сеанса запрещены экспортные процедуры и функции.
Внимание. Этот модуль запускается не только при старте системы, но еще и при обращении к параметрам сеанса которые не были определены. В этом случае в первом параметре процедуры УстановкаПараметровСеанса будет массив с параметрами к которым произошло обращение.
Общие модули
Общие модули служат для хранения процедур и функций, которые должны быть доступны из любого места конфигурации. Как правило в них описывают какие то общие механизмы. Количество общих модулей неограниченно. Обычно общие модули разбивают по функционалу. В отличии от предопределенных модулей, у общих модулей есть возможность указать, в каком контексте они будут скомпилированы. В общих модулях доступны только описания процедур и функций, недоступно описание переменных и раздел основной программы. При написании процедур в общих модулях необходимо учитывать место компиляции этого модуля. Есть возможность установить свойство глобальный в этом случае экспортные процедуры будут доступны без указания названий модуля. Глобальные модули компилируются при старте системы и также замедляют старт системы(особенно это плохо, когда там содержатся такие функции которые могут никогда не понадобиться или используются очень редко). Использование процедур из этих модулей может ухудшить читаемость кода. То есть строчка
Читается гораздо лучше чем просто
Галочка Привилегированный указывает на то что при обработке процедур из этого модуля система не будет обращать внимания на права пользователя, это бывает удобно при больших объемах обработки данных когда обработка должна отработать как можно быстрее и нет смысла уменьшать ее быстродействие проверкой прав или когда на время работы процедуры, необходимо дать пользователю недостающие права. Место компиляции модуля определяется с помощью установки свойств модуля. Доступные значения:
В случае если стоят все галочки, то при компиляции процедура скомпилируется и будет доступна только там где указано директивой препроцессору. Если такая директива не указана, то процедура будет скомпилирована и на сервере и на клиенте. В таком случае, необходимо придерживаться ограничений, накладываемых как на серверный контекст так и на клиентский, то есть не будут работать функции обращения к базе данных(сервер) и не будут работать функции взаимодействия с пользователем(клиент). Обращение к экспортным методам общего модуля скомпилированного на сервере, возможно в том случае если установлено свойство Вызов сервера .
Модуль формы
Формы делятся на управляемые и на обычные. В управляемых формах код делится на клиентский и серверный. В обычных формах весь код выполняется на клиенте. Модуль предназначен для обработки действий пользователя и событий формы. (Подробно о событиях выполняемых в модуле формы можно будет почитать либо по ссылке, которая будет здесь, либо события будут добавлены сюда).
Модуль объекта
В модуле объекта записывают такие обработчики как ПриЗаписи , ОбработкаПроведения . ()Суть модуля заключается в том, что события могут срабатывать, даже при программной записи объекта, открытие формы в данном случае необязательно. Также есть возможность, определить дополнительные методы для объекта, если определить их в модуле объекта с ключевым словом Экспорт .
Модуль менеджера
Модуль позволяет добавить функционал расширяющий возможности менеджера, например: В модуле менеджера справочника номенклатура можно указать:
Читайте также: