Что значит экспорт в 1с
В конфигурации 1С:Фитнес Клуб КОРП по общим модулям идут вызовы функции
КодОсновногоЯзыка(). При открытии формы справочника контрагенты ругается, что метод КодОсновногоЯзыка() не обнаружен.
В самом общем модуле этой функции нет. Добавляю тело функции как:
То есть ее основной смысл - в кэшировании кода языка на клиенте для минимизации серверных вызовов.
На всякий случай сравните типовые модули с эталоном из используемой вами версии БСП.
Ошибка появлялась, потому что в своей функции вы указали директиву компиляции на сервере и в клиентскую версию модуля она не попадала. Ну а если бы убрали директиву, тогда бы уже ругнулось на невозможность обращения с тонкого клиента к метаданным :)
(17) Как какой? Восстановить тексты поломанных модулей.
Ну или можете в своей функции без директив написать Возврат "ru" (как уже советовали) и посмотреть, чего у вас там еще на очереди из поломанного :)
(1) для более точного диагностирования проблемы желательно видеть код.
Похоже, что запускаете в толстом клиенте файловой базы. Там весь код формы справочника выполняется на клиенте.
И вызывается серверный модуль, который недоступен с клиента.
Тут несколько вариантов:
1. Запускать тонкий клиент.
2. Для серверного общего модуля добавить свойство "Вызов сервера".
3. Установить сервер 1С :)
С другой стороны, если вызывается метод, которого вообще нет. может эта форма была кем-то модифицирована и вызывала метод. А при очередном обновлении этот метод убрали/перенесли.
Работа идет в тонком клиенте.
Обращения идут к общему модулю ОбщегоНазначенияКлиентСервер. У него 2 галки Клиент и Сервер. В нем этой функции вообще не было, она была в Справочнике Классификаторы. Взял оттуда и вставил в общий модуль.
(5) Очень странно. Это общий модуль БСП и там эта функция есть. Очевидно, кто-то ее удалил.
Выглядит она так:
(12) это ясно, дело в том, что появляется ошибка и справочник не открывается. А вернуть мы согласны что угодно.
(1) куда вы там чего вставляете?
данная пр-ра уже имеется. используйте
(6) откуда Вы уверены, что эта процедура имеется?
У нас как раз ошибка на том, что процедура вызывается, а в общем модуле ее нет
(7) могу предположить, что кто-то криво обновил БПО. С указанием взять из файла при обновлении. Там одноименный модуль с несколькими методами.
Проверьте весь модуль "ОбщегоНазначенияКлиентСервер". Если там мало функций/процедур, то точно при обновлении напортачили.
По разным общим модулям идет вызов КодОсновногоЯзыка()? Очень странно.
Встроенной такой функции нет, а глобальные модуля в общих недоступны.
Может, это грязные хаки внешних библиотек?
Конфа поставляется с какой-то защитой, библиотеками?
То есть ее основной смысл - в кэшировании кода языка на клиенте для минимизации серверных вызовов.
На всякий случай сравните типовые модули с эталоном из используемой вами версии БСП.
Ошибка появлялась, потому что в своей функции вы указали директиву компиляции на сервере и в клиентскую версию модуля она не попадала. Ну а если бы убрали директиву, тогда бы уже ругнулось на невозможность обращения с тонкого клиента к метаданным :)
Ключевое слово Процедура начинает секцию исходного текста, выполнение которого можно инициировать из любой точки программного модуля, просто указав Имя_процедуры со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Если в модуле обычного приложения, модуле управляемого приложения или общем программном модуле в теле описания процедуры использовано ключевое слово Экспорт , то это означает, что данная процедура является доступной из всех других программных модулей конфигурации.
При выполнении оператора Возврат процедура заканчивается и возвращает управление в точку вызова. Если в тексте процедуры не встретился оператор Возврат , то после выполнения последнего исполняемого оператора происходит выполнение неявного оператора Возврат . Конец программной секции процедуры определяется по оператору КонецПроцедуры .
Переменные, объявленные в теле процедуры в разделе Объявления локальных переменных , являются локальными переменными данной процедуры, поэтому доступны только в этой процедуре (за исключением случая передачи их как параметров при вызове других процедур, функций или методов).
Имя_проц | Назначает имя процедуры. |
Знач | Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, то есть изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра. |
Парам1 , . ПарамN | Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответствовать значениям передаваемых при вызове процедуры фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст. |
= ДефЗнач | Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров. |
Экспорт | Необязательное ключевое слово, которое указывает на то, что данная процедура является доступной из других программных модулей. |
// Объявления локальных переменных | Объявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры. |
// Операторы | Исполняемые операторы процедуры. |
Возврат | Необязательное ключевое слово, которое завершает выполнение процедуры и осуществляет возврат в точку программы, из которой было обращение к процедуре. Использование данного оператора в процедуре не обязательно. |
КонецПроцедуры | Обязательное ключевое слово, обозначающее конец исходного текста процедуры, завершение выполнения процедуры. Возврат в точку, из которой было обращение к процедуре. |
Функция
Ключевое слово Функция начинает секцию исходного текста функции, выполнение которой можно инициировать из любой точки программного модуля, просто указав Имя_функции со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Если в модуле обычного, управляемого приложения, внешнего соединения, сеанса или общем программном модуле в теле описания функции использовано ключевое слово Экспорт , то это означает, что данная функция является доступной из всех других программных модулей конфигурации.
Функции отличаются от процедур только тем, что возвращают Возвращаемое значение . Конец программной секции функции определяется по оператору КонецФункции .
Вызов любой функции в тексте программного модуля можно записывать как вызов процедуры, то есть в языке допускается не принимать от функции возвращаемое значение .
Переменные, объявленные в теле функции в разделе Объявления локальных переменных , являются локальными переменными данной функции, поэтому доступны только в этой функции (за исключением случая передачи их как параметров при вызове других процедур, функций или методов).
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: функции и процедуры в 1С часть 1
Автор уроков и преподаватель школы: Владимир Милькин
Сегодня мы приступаем к изучению того, без чего не может обойтись ни одна более менее серьезная программа - функций и процедур.
Функции и процедуры в языке 1С 8.3
Давайте я подведу вас к необходимости функций, заодно вы поймёте что это такое и почему они столь полезны для программистов.
Пусть нам требуется написать программу, которая вычисляет произведение суммы и разности двух введенных чисел. Выглядеть она будет так:
В данном случае формула вычисления результата достаточно проста, но она могла бы быть гораздо сложнее. А что если нам нужно вычислять её не один раз, а несколько? Причем в разных местах программы.
Неужели нам снова и снова придётся писать код для её вычисления:
Это никуда не годится. Нам придётся повторять один и тот же код, что приведёт к раздутости программы. И кроме того, переписывая его очередной раз мы можем допустить ошибку по невнимательности.
Вот бы придумать такое имя, которое будет связано с этой формулой и при обращении к нему мы будем обращаться ко всей этой формуле целиком. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Пусть этим именем будет ПроизведениеСуммыИРазности.
Получается теперь мы можем написать:
И всё? Нет, конечно! Ведь непонятно произведение суммы и разности каких именно чисел нужно считать. Гораздо лучше будет передать эти числа нашему имени в качестве параметров, как мы обычно делаем при вызове команды:
Это, так называемый, вызов функции. Он выглядит точно также как и вызов многих других команд компьютера, которые мы уже неоднократно делали. Только это наша собственная команда, работу которой определяем мы, а не компьютер.
Давайте, наконец, определим нашу функцию, чтобы компьютер, встретив её вызов, не растерялся, а выполнил то, что мы хотим:
Что включает в себя определение этой функции?
Прежде всего ключевое слово Функция следом за которым идёт имя, которое мы придумали сами.
Затем следуют имена параметров, заключенные в круглые скобки. Параметры - это данные, которые мы передадим в нашу функцию при её вызове. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Она с ними что-то сделает и возвратит результат. Каждый параметр имеет своё имя, которое мы также придумываем сами. Это имя можно использовать только внутри функции.
Дальше идёт тело. Это команды компьютеру, которые будут выполняться в тот момент, когда мы сделаем вызов нашей функции. Тело заканчивается ключевым словом КонецФункции.
Внутри функции могут выполняться абсолютно любые знакомые нам команды: условные операторы, циклы и прочее. Но хотя бы один раз внутри каждой функции должна присутствовать команда:
Где вместо Результат может быть любое выражение, которое вернётся из функции в качестве её результата.
Мы можем вызывать функцию столько раз в программе сколько нам потребуется.
Процедуры это те же самые функции, но они не возвращают результат и объявляются при помощи других ключевых слов: Процедура и КонецПроцедуры.
Но функции и процедуры не следует писать лишь бы где! Для определения наших функций мы будем использовать новый модуль. Чтобы его добавить следуйте инструкциям ниже.
1. Раскройте список "Общие" в дереве конфигурации.
2. Найдите в нём пункт "Общие модули" и нажмите на нём правой кнопкой мыши. Выберите "Добавить".
3. Добавился модуль. В правой части окна конфигуратора задайте его имя и свойства, как показано ниже.
Внимание! Пожалуйста, ещё раз убедитесь, что вы поставили галки (Клиент, Сервер, Внешнее соединение) также, как на рисунке выше.
4. Перейдите в этот модуль. Всё! Здесь можно писать наши функции и процедуры. Напишите процедуру с именем Привет, без параметров, после вызова которой компьютер просто здоровается с нами.
Обратите внимание на ключевое слово Экспорт, которое идёт следом за круглыми скобками. Его наличие обязательно, так как мы определяем функцию в одном модуле (Уроки), а использовать будем совсем в другом (модуль управляемого приложения).
5. Теперь вернитесь в модуль управляемого приложения.
6. И сделайте вызов нашей процедуры. Так как она находится в другом модуле к её имени добавляется "Уроки.".
Форум
На практике очень часто возникает необходимость в осуществлении переноса данных из одной программы в другую. Система 1С:Предприятие предоставляет мощные механизмы для выполнения таких операций.
Для работы с файлами в системе используется специальный агрегатный тип данных – «ФС». По умолчанию в системе всегда доступен уже существующий объект с именем «ФС», к которому можно применять методы объекта типа «ФС». Кроме того, можно создать произвольное число объектов типа «ФС» при помощи функции «СоздатьОбъект(«ФС»)».
У объекта типа «ФС» имеются стандартные функции для работы с файлами: «ВыбратьФайл()» – открывает диалог выбора файла, «ВыбратьКаталог()»– открывает диалог выбора каталога, «СуществуетФайл()» – проверяет, существует ли файл с указанным именем, «КопироватьФайл()», «УдалитьФайл()», «ПереименоватьФайл()» и др.
Для работы с текстами в системе используется специальный тип данных «Текст». Средства языка позволяют выводить строк в текстовые файлы и считывать из имеющихся файлов текст с последующим разбором его по строкам.
- КоличествоСтрок() – количество строк в тексте.
- ПолучитьСтроку() – получить строку текста по номеру
Пример. Из файла «exp_imp.txt» загружается справочник номенклатуры
- ВставитьСтроку(,) – вставить строку с указанным номером.
- ЗаменитьСтроку(,) – заменить строку с указанным номером.
- УдалитьСтроку() – удалить строку с указанным номером.
- ДобавитьСтроку() – добавить строку в конец текста.
- Очистить() –удалить все строки текста.
Пример. В файл «exp_imp.txt» выгружается справочник номенклатуры
Для работы с базами данных в формате «DBF» используется объект типа «XBase». При этом надо учитывать следующие ограничения:
- Не поддерживаются поля типа memo.
- База данных открывается монопольно
- Поддерживаются только индексные файлы в формате “CDX”
Доступ к полям базы данных осуществляется через точку с именем поля.
Для запуска системы 1С:Предприятие в качестве OLE Automation сервера из внешнего приложения (например, из другой программы 1С), выполняется следующая последовательность действий:
определена в модуле документа
|
Функция Тест() Экспорт
Возврат РаботаСТорговымОборудованием.ВвестиШтрихкод();
КонецФункции
|
а вызывается в модуле формы, но не видна и выходят на неё ощибки, почему?
(4) кеш конфигурации, не та конфа, забыл обновить конфу БД, да что угодно. В исполняемом контексте данный метод отсутствует
(10)Значит нет там суслика:-)
удали базу из списка баз при старте и добавь заново. Потом попробуй снова
(17)Сделай какоенить видимое изменение на форме, обнови и посмотри изменилось ли в пользовательском режиме.
+(30) ПодборЦеныНоменклатурыПоШтрихКоду - скорее всего, произвольная форма. В ней нет объекта и твоей функций.
+к(33) Если она открывается из формы документа с указанием формы как владельца, то теоретически можно достучаться через ВладелецФормы.ЭтотОбъект.Тест()
Только имхо это неправльное проектирование. Не должна функция объекта быть необходимой в форме, не имеющей таковой объект.
На самом деле) в управляемых формах экспортная функция в модуле объекта обработке недоступна из ее формы) только что попробовал)
(37) Ты считаешь, что экспортные функции модулей объектов только для их форм? Ну с появлением модулей менеджера может и так, но с точки зрения проектирования дофига таких ситуаций.
(45) Я считаю что функции модулей объектов должны работать с самим объектом, а не быть оторванными от него. Инасе эта ф-я долждна располагаться в другом месте
(48) Ну это уже немного другая мысль, нежели в (37). Мы же не знаем, что автор будет делать в этой функции.
(51) Нет, не другая. в (37) утверждается, что если нужна ф-я из объекта, а сам объект (экземпляр его) не нужен, то это неверно.
Это означает, ф-я делает, что-то, не связанное с объектом. Мое мнение - она должна располагаться в другом месте.
Но почему на упр формах из формы обработки невидно функции из ее модуля?
Толькочто проверил.
управляемые формы - новая обработка.
Defender aka LINN
Defender aka LINN
47 - 27.03.13 - 13:53 (42) Скерали не видна?
Reset
49 - 27.03.13 - 13:55 (47) Я сказал "видна везде в обычном приложении".
Defender aka LINN
53 - 27.03.13 - 14:02 (49) Ты сказал "ЕСЛИ это обычное приложение".
----------------------
Я надеюсь, г-на "Defender aka LINN" уже отпустил вчерашний чай, и на свежую голову он пояснит, чем была вызвана столь бурная реакция на (39).
Я, как ни стараюсь, понять не могу. Фобия на слово "если"? Элементарное незнание основ?
Неприязнь ко мне лично?
А, еще можно докопаться, что я не уточнил "экпортные", а ты тонко это подметил и твоя душа не выдержала и излила чай(или что там) наружу.
Серьезно: Дружище, поясни членораздельно, что хотел сказать - то.
(53) Я так понял, объяснений загадочных фраз не будет (в очередной раз).
Спишем на необычный чаек с особенным действием.
Читайте также: