1с 8 получить форму внешней обработки на сервере
В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.
Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:
- передать файл внешней обработки на сервер,
- подключить внешнюю обработку,
- открыть форму внешней обработки.
Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, функцией ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.
В четвертом параметре этой функции указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре функции.
При вызове функции ПоместитьФайл() первым её параметром, АдресХранилища, мы указываем пустую строку. После выполнения функции в эту переменную будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.
Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище - АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, - ИмяОбработки, - которое мы используем для того, чтобы открыть форму этой обработки.
Для открытия формы внешней обработки используется функция ОткрытьФорму(), в которую передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма". В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки - об этом рассказывается в вопросе Как получить неосновную форму обработки? .
При работе в внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.
Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации:
Подробнее об использовании функции ПоместитьФайл() можно прочитать в синтакс-помощнике:
Глобальный контекст - Процедуры и функции работы с файлами.
Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике:
Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.
Подключить(<Путь>, <Имя>, <БезопасныйРежим>)
Параметры:
Выполняет подключение внешней обработки по указанному пути.
Возвращает имя подключенной внешней обработки.
Сервер, внешнее соединение.
Я сам недавно варюсь в УФ, поэтому только предполагаю как это работает
Сначала
ОткрытьФорму("ВнешняяОбработка.ИмяМоейОбработки.Форма.ИмяМоейФормы")
(18)
ОткрытьФорму("ВнешняяОбработка.АвтоматическийЗаказ.Форма.ОпределитьДляПозицииНоменклатурыНоменклатуруПоставщика");
Как программно открыть внешнюю обработку?
В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.
Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:
Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, методом глобального контекста ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.
В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.
При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища, мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.
Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище - АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, - ИмяОбработки, - которое мы используем для того, чтобы открыть форму этой обработки.
Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму(), в который передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма". В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки - об этом рассказывается в вопросе Как получить неосновную форму обработки?.
Копировать в буфер обмена
При работе в внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.
Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика, Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы.
Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции работы с файлами.
Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.
Получается, что модуль внешней обработки компилируется каждый раз когда с клиента на сервер прилетает команда ?
То есть на сервере от внешней обработки не хранится вообще ничего ?
Просто вставил в конец модуля "Сообщить" и оно вызывается при каждом вызове сервера.
В общем, ощущение что всю систему проектировал какой-то криворукий гоблин.
Я просто очень долго пытался понять, почему реквизиты обработки теряются при каждом вызове, а потом оказалось, что теряется вообще всё.
Вопрос - зачем тогда нужны реквизиты у обработки, если они есть только в процессе вызова.
А также, получается, что при каждом вызове всё гоняется туда-обратно.
(1) Укуренных инопланетян я видел, они на такое не способны.
А это, как говорится, многоруккий шивва нижними руками, которые аккурат из того места растут, из которого не надо.
P.S. была хорошая идея, как можно всё сделать, и оказалось, что тут, в принципе, ничего сделать нельзя, так как для каждого вызова компиллять модуль .
Хотя, видимо, писал специалист по php, так как там всё именно так и работает.
Просто, когда у одной обработки две формы и обе открыты, то в каждой форме свой набор реквизитов обработки и они между собой никак не связаны.
Реально же получается, что реквизиты и табличные части обработки ни чем не отличаются от реквизитов формы, кроме сложностей с доступом к ним (приходится получать объект обработки из реквизита).
Но для меня новым оказалось, что серверная часть модуля формы перекомпилляется при каждом вызове сервера, а также что при открытии одной формы обработки из другой данные реквизитов обработки не передаются - ведь команда открытия выполняется сначала на клиенте из формы, в которой эти реквизиты заполнены.
[Я прекрасно знал, что объекты хранятся только на клиенте.] — о как! А для меня это откровение.
РеквизитФормыВЗначение(), ДанныеФормыВЗначение() зачем-то ведь придуманы, а?
(10) А где им ещё быть - данные хранятся в базе, когда что-то из базы открывается, сервер приложений считывает данные, готовит форму и отправляет всё это на клиента, после чего у него "случается амнезия" и он всё забывает.
(11) Попробуй эти функции вызвать без контекста ?
А контекст - это то, что приехало к серверному вызову с клиента - и все наши данные именно в контексте.
Проблема-то в чем? Вызвать другую форму этого же экземпляра обработки?
(15) Проблема в том, что при заполнении реквизитов объекта (не формы) в одной форме обработки другая форма видит старые значения (так как они внутри её контекста живут).
(16) то, что Сообщить вызывается 2 раза, ведь не означает, что компилируется 2 раза.
На сервере экземпляр обработки получается через Обр=РеквизитФормыВЗначение("Объект") и в этот момент компилляется модуль обработки.
(19) Как бы этот процесс не назывался - из текста модуля (скорей всего из оптимизированного двоичного представления) собирается список функций и процедур, которые в этом модуле есть.
(21) Правильно, для обслуживания нашего вызова создаётся объект "Обработка", который после выполнения нашего вызова будет разрушен.
Почитай где-нибудб про immutable-объекты и прими как данность, что они в 1С есть.
(23) Очень сложно проверить, что происходит на самом деле, так как выполнение части модуля ниже всех функций можно организовать и без повторной компиляции самого модуля, но, так как модуль нигде не хранится, то можно предположить, что он компилляется ещё раз.
(24) Получается, что объектов вообще нет - есть только имитация их существования.
Неизменяемый объект - как раз и предполагает, что он может быть один для нескольких клиентов - в 1С же мы наблюдаем, наоборот, несколько объектов для одного клиента.
И потом, если при каждом обращении к объекту, как ты говоришь в (23) вызывается конструктор - это же не говорит, что объект неизменяемый, а как раз подтверждает тот факт, что его создают только тогда, когда он нужен.
(0) Да может просто тупо так сделали просто ради того, чтобы было.
(28) На этот вопрос очень сложно ответить, так как кеш, скорей всего, хранит не скомпилированный модуль, а данные для его компилляции - так проще - кешировать то, что получается с сервера базы данных.
(27) Да нет же. Два контекста не могут сделать один объект. Или наоборот, один объект не может принадлежать двум контекстам.
(29) а я и не говорю, что он неизменяемый. Я говорю, что к нему надо относиться как будто он неизменяемый. Еще и стейтлесс.
(32) Ну да, есть объекты, называемые "Контекст" и он у каждой формы свой.
А наличие кластера серверов как раз и подтверждает тот факт, что никто модуль в памяти не хранит - ведь следующий запрос от нашей формы может уйти другому обработчику, который ещё даже и не знает, что мы форму открыли.
(34) во, ты уже начал понимать, почему у форм не может быть состояния на сервере
(35) Он реально отличается - хотя бы тем, что их два - на клиенте и на сервере, и тот, который на сервере умеет забывать всё сразу после окончания обработки вызова.
(37) Я прекрасно знал, что у форм нет состояния на сервере, так как сервер вообще не знает, что происходит с формой.
Но для меня очень удивительным оказалось, что две формы на клиенте не могут иметь общих данных.
(36) Ну это ты про Параметры сеанса - так они и в базе данных могут хранится.
(38) Можно считать, что ВМ на сервере и клиенте различные. Это не принципиально. В случае с веб исполнитель вообще javascript браузера.
(39) так если у них нет состояния, как у них могут быть какие-то общие данные?
Просто у Microsoft в его реализации COM-объектов объекты прекрасно живут на разных машинах и обмениваются данными, независимо от расположения, и всё работает.
(42) Их вообще просто нет.
Объект на сервере собирается по данным, переданным с клиента, а они живут в контексте формы.
(44) Ну, сеансы в php тоже обычно хранятся в файликах, и несколько процессов прекрасно их между собой делят - тут создатели 1С подсмотрели готовое решение.
(46) Сессии в php (и не только в php) могут храниться разными способами. Можно не пользовался встроенными и реализавать свой.
В общем случае сессия - это некий persistent-объект, в котором что-то хранится, и id которого передается при каждом вызове (обычно в куках, но необязательно).
Странно все это. Ну да УФ при вызове &НаСервере, каждый раз все что делалось на Клиенте переносит на сервер.
Таки хочется спросить, у ТС: Пиши с этим учетом, забудь про Толстый клиент и что все держалось в форме.
Коль тебе на сервер надо перекидывать какую либо Таблицу значений из реквизитов формы.
То трансформируй её в Структуру и обращайся к процедуре формы "БезКонтекста".
Старайся меньше использовать обращений к процедурам "НаСервере" :)
(48) Да, в общем-то, проблем с переносом нет.
Просто, из одной формы в другую приходится передавать все данные объекта обработки вручную.
Кстати, таблица значений прекрасно живёт в реквизитах формы, если она нужна на клиенте.
Другое дело, что когда в таблицу загрузил половину базы для проведения обработки над ней - каждый серверный вызов сразу показывает всю глупость идеи управляемых форм, так как нет возможности выбора передаваемых на сервер данных.
для таких задач придется юзать регламентое задание и выполнять всё только на сервере - а в УФ только настройки этого задания менять и логи просматривать
(51) Если бы к данным регламентного задания можно было иметь доступ в момент его исполнения - тогда да.
А так - как ни крути - ничего хорошего не выйдет.
Потому как, если что-то обрабатывается, то пользователю придётся показывать результат, а это форма.
а твоей обработке читать этот РС и показывать состояние хода выполнения?
(53) Если я что-то сохраняю в базе, то ничего не мешает и просто вызывать функции "НаСервереБезКонтекста" и работать с этими сохранёнными данными.
К сожалению, не всё можно просто и удобно сохранить в данных.
Например, любой объект (то есть не ссылку, а сам объект с данными) сохранить не получится - его придётся каждый раз создавать заново.
То, что объект может прекрасно жить в памяти модуля, исполняющего фоновое задание, не значит, что его можно увидеть пользователю.
Просто, некоторые простые вещи, которые во многих системах реализуются "из коробки" в 1С требуют очень больших танцев с бубном, и отрицательно сказываются на производительности.
Конечно задача которая в толстом клиенте решается просто теперь может потребовать разработку нового алгоритма, что раздражает и хочется сказать "УФ=УГ" - но наверное стоит присмотреться к новой философии 1С, тем более эта философия совсем не нова.
Из всего вышесказанного становится понятна рекомендация 1С не делать сильно нагруженных УФ.
(4) Это да. Для меня тоже в своё время стало открытием, что реквизиты отчетов/обработок в УФ превратились в атавизм, т.к. не являются частью сериализуемого контекста.
Честно говоря, я совсем не уверен, что выбрав stateless-модель, 1С пошла по правильному пути. Хотя, учитывая сколько боков даже в этой модели у них вылазит, может и правильно.
(58) stateful в кластере и в вебе чревато еще большими косяками
(59) Ну как бы да, с одной стороны. С другой - профит тоже есть. И потом - какой, нафиг, stateless, если состояние таки на сервере хранится? Контекст сеанса, данные форм на сервере таки удерживаются и синхронизируются с клиентом. Чего уж тут мелочиться? Можно было бы и объекты удерживать.
(58) Они сериализуемы, только вручную - то есть как раз реквизиты-то и живут в контексте, а вот самого объекта там нет, когда мы его создаём, то мы создаём его копию по данным контекста, и если данные в контекст вернуть, то всё будет прекрасно.
Вопрос же был в том, почему при открытии одной формы обработки из другой данные объекта обработки не передаются, особенно, если учитывать, что открытие вызывается с клиента.
(59) В нормальном кластере можно держать данные клиента на сервере, пока не порвётся соединение, просто тогда каждая часть кластера знает, каких клиентов она обслуживает и гонять весь набор данных от клиента к серверу и обратно можно только в момент перехода на другой участок кластера.
А когда при каждом вызове никто не знает, кто будет исполнять серверный код - это создание проблем на пустом месте.
Не забываем, также, что когда мы помещаем OLE-объект в хранилище значения, а потом это хранилище кладём в базу, то сам объект остаётся жить только в том исполнителе, где он был создан, и, если следующий участок нашего кода будет исполняться на другом участке, то объект будет разрушен, а, скорей всего, мы получим нестыковку "Заглушки" и основного объекта, что иногда кончается крахом всей подсистемы OLE и аварйным завершением процесса его вызвавшего.
Про OLE-объекты вообще лучше забыть и не использовать этот атавизм.
Короче, как я и сказал в (50) объекта "Обработка" просто вообще нет. Когда мы выполняем РеквизитФормыВЗначение("Объект") у нас создаётся объект "Обработка" по тем данным, которые были сохранены в форме (а там живут его реквизиты).
Можно считать, что вызывается конструктор с параметрами.
Теперь мы можем работать с нашим объектом.
Потом, когда мы закончиили работу, мы его должны сохранить в реквизит, чтобы данные реквизитов ему соответствовали.
То есть выполняем ЗначениеВРеквизитФормы.
В следующий раз, когда мы снова создаём объект, он создаётся в том состоянии, в котором мы его сохранили в реквизит.
В общем - как сериализация в php - прочитал, поработал - не забудь сохранить.
(66) А что делать с данными клиента, которые "держал" этот кусок кластера?
(64) Это не атавизм, это целая идеология программирования.
И от них никуда не денешься, так как эта реализация обеспечивает передачу данных между исполнителями независимо от среды. А по сути, это всего-лишь некоторая удобная надстройка над механизмом удалённого исполнения.
И потом, сами интерфейсы COM-объектов это всего лишь набор некоторых стандартных таблиц функций, которые система умеет передавать.
Никто же не говорит, что данные хранятся только на сервере - они должны быть и на сервере и на клиенте, только не надо все данные каждый раз передавать туда и обратно.
А смена исполнителя - это как раз тот момент, когда можно передать данные с клиента на сервер.
При этом, конечно, потеряются данные последнего исполнения, если на них упал участок, но, насколько я понимаю, если в 1С участок падает на исполнении, то клиент закрывается с ошибкой, так что ничего нового они не изобрели.
(68) Это атавизм хотя бы по той причине, что с кроссплатформенностью у COM всё плохо. Да и сама Microsoft почти похоронила эту технологию.
(70) ajax не предусматривает stateful бекенда. А даже наоборот, потенциально позволяет разбить бекенд на кучу относительно независимых микросервисов.
(70) Почему на первом? 1С упирает на то, что они стараются гонять не все данные, а только изменения. Правда, типа не всегда это возможно. Контекст формы кастомизируется как угодно.
(71) Ок. Какие альтернативы для доступа к внешним библиотекам из скриптовых языков?
(76) Ручным плугом пахать тоже вполне успешно получается.
(74) Ну, выходят потоками - просто для передачи потока данных как-то нужно договариваться, что там передаётся, как раз COM-подсистема и являлась тем звеном, которое скрывало от пользователя механизм договорённости.
В глубине COM-механизма лежат или WM_COPYDATA или тот же TCP-тунель, а внутри одного процесса допустимы и прямые вызовы.
Главной отличительной особенностью от всего остального является механизм разделения объектов, когда сам объект остаётся на месте, а передаётся только его интерфейс, который как раз и есть stateless.
(73) Обратно, может быть, и летят только изменения, а вот туда, всё, что есть, так как сервер-то не знает, что ему будет нужно, особенно, если модуль будет собираться уже после прихода данных.
Как программно открыть внешнюю обработку?
В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.
Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:
- Передать файл внешней обработки на сервер
- Подключить внешнюю обработку
- Открыть форму внешней обработки
Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, методом глобального контекста ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.
В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина , то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь , а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.
При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища , мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.
Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище - АдресХранилища . Возвращает этот метод имя подключенной внешней обработки, - ИмяОбработки , - которое мы используем для того, чтобы открыть форму этой обработки.
Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму() , в который передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма" . В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки - об этом рассказывается в вопросе Как получить неосновную форму обработки?.
При работе в внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.
Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика , Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы .
Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции работы с файлами.
Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.
В этой статье я разберу особенности программного открытия обработок в 1С. Мы узнаем, как открыть форму обработки, как открыть форму внешней обработки из самой внешней обработки, а также как открыть форму внешней обработки из клиентского режима платформы 1С 8.3.
Открыть форму обработки 1С
Начнем с того, что саму по себе открыть программной обработку нельзя. Можно открыть какую-либо из форм обработки. Для программного открытия управляемой формы обработки необходимо использовать метод ОткрытьФорму.
В первой статье, в которой мы начали знакомиться с обработками в 1С, я создал обработку «Обработка для примера» с формой.
В этой статье я покажу, как открыть программно форму этой обработки из другой обработки «Обработка1». Для этого у Обработки1 я создал управляемую форму и команду формы.
В клиентском обработчике команды, напишем код, который будет открывать основную форму обработки.
Какая именно форма обработки будет открыта, можно указать в контекстной подсказке, которая появляется после ввода названия обработки.
После, в результате выполнения команды, в отдельном окне будет открываться форма обработки «Обработка для примера».
Открыть форму внешней обработки 1С
Если нам необходимо, чтобы из одной формы внешней обработки открылась другая форма этой же внешней обработки, то также необходимо использовать метод ОткрытьФорму, как в примере выше, только вместо слова Обработка необходимо написать ВнешняяОбработка.
Разберем пример. Пусть, у внешней обработки будут две формы: Основная и Дополнительная.
На основной форме создадим команду «Открытие дополнительной», при выполнении которой будет открываться дополнительная форма.
У этой команды будет клиентский обработчик события, со следующим кодом:
Теперь, открыв внешнюю обработку, мы сможем из её основной формы открыть дополнительную.
Открыть внешнюю обработку 1С
Выше мы разбирали пример, когда внешняя обработка открыта, и нам нужно открыть форму внешней обработки из самой внешней обработки, но иногда возникают задачи, когда нужно открыть форму внешней обработки из какого-то другого места, зная путь к этой обработке на жестком диске, или выбрав непосредственно файл обработки.
В этой обработке создадим команду, при выполнении которой откроется форма внешней обработки.
В форме обработки напишем следующий код:
Код работает, начиная с платформы 8.3.15.
После выполнения команды, откроется окно выбора файла внешней обработки.
Если файл будет выбран, внешняя обработка откроется.
Статьи про открытие форм:
Статьи по конфигурированию в 1С:
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Читайте также: