1с не найден экспортируемый метод

Обновлено: 07.07.2024

Работа с прикладными объектами средствами встроенного языка

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

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

Вид объекта Описание Типичные
свойства и методы Менеджер прикладных объектов данного типа

  • СправочникиМенеджер
  • ДокументыМенеджер
  • КонстантыМенеджер
  • РегистрыНакопленияМенеджер
  • ОтчетыМенеджер
  • ОбработкиМенеджер

Объекты данного вида обеспечивают доступ к менеджерам конкретного прикладного объекта.

Обычно доступ к таким объектам производится через свойства глобального контекста, например, Справочники.Сотрудники, Документы.Счет, РегистрыСведений.КурсыВалют и т.д.

Эти объекты являются коллекциями значений и позволяют перебрать свои элементы с помощью цикла "Для Каждого".

Свойства соответствуют именам прикладных объектов и являются объектами типа "Менеджер прикладного объекта"

Менеджер прикладного объекта

  • СправочникМенеджер
  • ДокументМенеджер
  • КонстантаМенеджер
  • РегистрНакопленияМенеджер
  • ОтчетМенеджер
  • ОбработкаМенеджер

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

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

  • <предопределенный элемент>
  • Выбрать()
  • НайтиПоКоду()
  • НайтиПоРеквизиту()
  • ПустаяСсылка()
  • СоздатьЭлемент()
  • СоздатьНаборЗаписей()
  • ПолучитьМакет()
  • ПолучитьФорму()
  • СправочникСсылка
  • ДокументСсылка
  • ПланСчетовСсылка
  • ПланВидовРасчетаСсылка

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

Ссылки хранятся в реквизитах, ссылающихся на элементы данного прикладного объекта, например, в реквизите "Сотрудник" документа "ПриемНаРаботу" хранится ссылка на конкретный элемент справочника "Сотрудники".

Заметьте, что у записей регистров нет ссылок.

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

  • <реквизит>
  • <табличная часть>
  • ПометкаУдаления
  • Дата
  • Предопределенный
  • Ссылка
  • Пустая()
  • ПолучитьОбъект()
  • ПолучитьФорму()
  • Метаданные()
  • Скопировать()
  • СправочникВыборка
  • ДокументВыборка
  • ЖурналДокументовВыборка
  • РегистрНакопленияВыборка

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

Обратите внимание, что данный объект не является коллекцией значений и, следовательно, нельзя использовать цикл " Для Каждого " для перебора элементов.

Свойства аналогичны свойствам объекта типа "Ссылка".

  • СправочникОбъект
  • ДокументОбъект
  • ПланСчетовОбъект
  • ОтчетОбъект
  • ОбработкаОбъект

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

Для отчетов и обработок через этот объект обычно осуществляется формирование отчета или выполнение обработки.

Если в модуле прикладного объекта (не путать с модулем формы) есть экспортируемые переменные модуля или процедуры/функции, то они дополняют набор свойств и методов именно этого программного объекта.

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

Свойства аналогичны свойствам объекта типа "Ссылка".

  • Записать()
  • Удалить()
  • Заблокировать()
  • Разблокировать()
  • Заблокирован()
  • Скопировать()
  • ПолучитьФорму()
  • ПолучитьМакет()
  • Метаданные()
  • СправочникСписок
  • ДокументСписок
  • ЖурналДокументовСписок
  • ПланСчетовСписок
  • РегистрНакопленияСписок
  • КритерийОтбораСписок

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

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

  • Колонки
  • Отбор
  • Порядок
  • Обновить()
  • РегистрСведенийНаборЗаписей
  • РегистрНакопленияНаборЗаписей
  • РегистрБухгалтерииНаборЗаписей
  • РегистрРасчетаНаборЗаписей
  • ПоследовательностьНаборЗаписей

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

У документов есть свойство-коллекция "Движения", которое предоставляет доступ к наборам записей по каждому регистру, отмеченному на закладке "Движения". Через это свойство обычно производится формирование движений документа при его проведении.

  • Отбор
  • ЭтотОбъект
  • Добавить()
  • Удалить()
  • Очистить()
  • Записать()
  • Прочитать()
  • Количество()
  • Выгрузить()
  • Загрузить()
  • РегистрСведенийЗапись
  • РегистрНакопленияЗапись
  • РегистрБухгалтерииЗапись
  • РегистрРасчетаЗапись

Обеспечивает доступ к одной записи из набора, для того чтобы установить ее измерения, ресурсы и т.д. Этот объект возвращается методами других объектов, например, методом Добавить у объекта типа РегистрНакопленияНаборЗаписей.

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

  • <измерение>
  • <реквизит>
  • <ресурс>
  • Активность
  • Период
  • Регистратор
  • НомерСтроки
  • ВидДвижения
  • МоментВремени()
  • РегистрСведенийКлючЗаписи
  • РегистрНакопленияКлючЗаписи
  • РегистрБухгалтерииКлючЗаписи
  • РегистрРасчетаКлючЗаписи

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

Свойства для регистра сведений:

Специфические объекты

Ниже перечислены некоторые важные объекты, которые не укладываются в приведенную выше классификацию:

Вид объекта Соответствующий
прикладной объект Описание

Менеджер записи регистра сведений

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

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

Планы счетов Применяется для работы со списком видов субконто, прикрепленных к данному счету. Регистры бухгалтерии Свойство Субконто объекта РегистрБухгалтерииЗапись является объектом именно этого типа. Данный объект является коллекцией значений и позволяет управлять значениями субконто для конкретной записи регистра бухгалтерии.

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

Менеджер внешних обработок подобен менеджерам других прикладных объектов. Его метод Создать(<имя файла>) позволяет создать объект типа "ВнешняяОбработка". Этот объект, в свою очередь, подобен объектам ОтчетОбъект и ОбработкаОбъект и предоставляет доступ к реквизитам и табличным частям внешней обработки для передачи параметров формирования отчета или выполнения обработки.

Если в модуле внешней обработки (не путать с модулем формы) есть экспортируемые переменные модуля или процедуры/функции, то они дополняют набор свойств и методов объекта "ВнешняяОбработка".

Взаимосвязь объектов

Ниже показана взаимосвязь программных объектов, характерная для объектов, имеющих ссылки (на примере справочников):


А теперь немного другая взаимосвязь, характерная для регистров (на примере регистров накопления):


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

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

Таблицы на которую ошибка ссылается:

Пути решения:

1. Сделать копию базы средствами SQL или копирование файловой базой средствами операционной системы

2. Следующие действия производить на копии базы

3. Установить последнюю версии платформы

Проверка физической целостности файла БД

4. Для файловой базы запустить chdbfl.exe в режиме исправления

5. Если ошибка не устранилась и ссылается на файлы *.pfl, произведите очистку настроек у каждого пользователя
ОчиститьНастройкиПользователя(ПользователиИнформационнойБазы.ТекущийПользователь()); //Последствие слетят настройки форм, заметно будет на обычных формах

6. Если конфигурация в режиме совместимости платформы, можно попробовать зайти под старыми стабильными платформами 8.3.6. или даже под 8.2

Скорее всего ошибка при этом не будет устранена, но пройдет выгрузка-загрузка

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

ВыгрузкаЗагрузкаДанныхXML.epf. Процесс долгий. Если база не копия: потребуется создать и настроить всех пользователей заново.

8. Средствами sql найти в и удалить ошибочную запись в Dbo.Files

DELETE FROM [имяБазы].[dbo].[Files] WHERE FileName='ИмяФайлаСОшибкой'

9. Удалить запись программой Tool_1CD

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

Есть схожая ошибка для файловых баз:

Временно помогут:

  • частичная очистка таких таблиц;
  • замена больших строковых реквизитов на ссылочные;
  • уменьшение индексов.

Можно дурачить всех все время, — при условии, что реклама ведется правильно, а расходы на нее достаточно велики.

— Джозеф Левин

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

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

Основным инструментом отказа от модальности стало ОписаниеОповещения.

Как работает ОписаниеОповещения

Для начала разберем как работает платформа с модальными окнами на примере метода Вопрос(). Напишем не хитрый код, в котором пользователю показывается диалог с вопросом и вариантами ответа Да и Нет.

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

Диалог с ОписаниеОповещения

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

Напишем аналогичный пример, но уже без модального вызова. Будем использовать метод ПоказатьВопрос(), которому передадим ОписаниеОповещения.

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

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

Описание функционала от разработчиков на ИТС

Синтаксис

Конструктор ОписаниеОповещения имеет 5 необязательных параметров:

Вызываемая процедура и её параметры

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

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

Например вызываемая процедура для обработки оповещения метода глобального контекста НачатьПомещениеФайла() должна иметь 4 параметра.

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

Выполнение обработки оповещения

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

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

Работа на сервере

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

Возможные ошибки

Не найден экспортируемый метод

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

Не найден экспортируемый метод

Количество параметров 1. Ожидаемое количество – 2

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

Количество параметров 1. Ожидаемое количество – 2

Примеры использования ОписаниеОповещения

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

Оповещение о закрытии формы

Реализуем функционал открытия формы подбора с дальнейшей обработкой результата

Ввод значений и предупреждения

Реализуем функционал ввода числа. После ввода выполним проверку на четность введенного числи, если число не четное выведем предупреждение

Проверка существования файла и передача описания оповещения через дополнительные параметры

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

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

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

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

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


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

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


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

Например, локальная команда формы, вызывающая серверную процедуру, будет выглядеть следующим образом:

Контекстная серверная функция ПересчитатьЦеныНаСервере() будет выглядеть следующим образом:

В этой функции сначала мы преобразуем данные реквизита формы Объект в прикладной объект типа ДокументОбъект.Накладная .

После этого мы вызовем экспортируемую процедуру этого прикладного объекта – НачислитьСкидку() . В результате ее работы все цены, содержащиеся в табличной части объекта, будут уменьшены на 10 %.

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

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

Читайте также: