Внешняя обработка сбис ошибка при вызове метода контекста

Есть внешняя обработка от СБИСа, она и подключена как внешняя обработка. Пытаюсь воспользоваться внешними функциями одной из ее форм в своей обработке и случается такая проблема:

Если я в текущей сессии открываю свою обработку и пытаюсь получить форму внешней обработки СБИСа, то получаю ошибку:

{ВнешняяОбработка.КонтрольДокументовЭДО.Форма.Форма.Форма(75)}: Ошибка при вызове метода контекста (ПолучитьФорму)

    Фрм = ПолучитьФорму(«ВнешняяОбработка.СБИС.Форма.ВнешнийИнтерфейс»);

по причине:

Неизвестное имя формы. Имя: «ВнешняяОбработка.СБИС.Форма.ВнешнийИнтерфейс»

Если я хоть раз в текущей сессии открою внешнюю обработку от СБИСа, а потом закрою ее, то обращение к функция ее формы отрабатывает без ошибок. Как правильно нужно сделать? Форму получаю вот так:

&НаКлиенте

Процедура ОтправитьЭДО(Команда)

    
    Фрм = ПолучитьФорму(«ВнешняяОбработка.СБИС.Форма.ВнешнийИнтерфейс»);

    Кэш = Фрм.сбисПодготовитьКэш();

Перейти к содержимому

Настройка 1С

Решения по использованию программ 1С. Техподдержка. Сопровождение. Услуги программистов.

Пару слов об использовании внешней обработки СБИС в тандеме с 1С. Клиент получил новую ЭП — ключ создан на сберовском токене InfoCrypt VPN-Key-TLS. Все хорошо, но обработка СБИС для 1С в упор не замечала сертификат.

При этом в КриптоПро CSP — все ок. Контейнер виден, ошибок нет, сертификат установлен.

Как настроить подобную связку

Рассмотрим возможные ошибки и варианты решений. Ну что, подправить причёски — погнали.

❃ В окне обработки СБИС не дает выбрать вход по сертификату
► Перейдите в настройки и выберите другой способ обмена. Вход по ЭП доступен в ExtSDK и SDK.


❃ СБИС не находит установленный сертификат с VPN-Key-TLS
► Закройте СБИС Плагин. В конфигурационный файл «%LocalAppData%Sbis3Pluginuser-config.ini» добавьте строки:

[Считыватели]
РежимАктивныхСчитывателейКриптоПро5=true

Повторно запустите СБИС Плагин.


❃ Ошибка при создании COM-объекта (Не зарегистрирована компонента Tensor.SbisPluginClientCOM {ВнешняяОбработка.СБИС.Форма.ExtSDK.Форма(2339)}:
Ошибка при вызове конструктора (COMОбъект):
-2147221005(0х800401F3): Недопустимая строка с указанием класса)

Ошибка при создании COM-объекта

► Причины: не запущен или не установлен СБИС Плагин. Одно из решений — установить или обновить Плагин.

В случае, если Плагин работает, но ошибка сохраняется:

  1. Переустановите СБИС Плагин вручную, указав режим полной конфигурации. Для того, чтобы подтянулся модуль для ExtSDK.
  2. Зарегистрируйте COM-объект вручную.
  3. Обновите компоненты .NET Framework и перезагрузите ПК.
  4. Выполните диагностику рабочего места.

✅ Успехов вам!

__________
Если не получается или требуется дополнительная поддержка, наши программисты 1С готовы помочь → +7-911-500-10-11

Оффлайн сообщение (13:34:27 15/01/2015) {Форма.СопоставлениеНоменклатуры_ДБФ.Форма}: Ошибка при вызове метода контекста (Open)     БД.Open(«Driver={Microsoft dBASE Driver (*.dbf)};DriverID=533;Dbq=» + ИмяКаталогаНоменклатурыПоставщика + «;»); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC dBase] Недостаточно системных ресурсов.

пичалька когда ресурсов мало..

Тэги: 1С 8

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

Похожие вопросы 1С

В этой группе 1С

Так как код самой обработки Sbis1C.epf ни при каких условиях менять нельзя, для внесения изменений под клиента предусмотрена дополнительная внешняя обработка ВнешниеФункции_Клиент.epf. Данная обработка отсутствует в стандартной поставке и создается самостоятельно с помощью конфигуратора 1С. Внешние функции пишутся при необходимости изменить выгрузку или загрузку документов, если изменения требуют определенных вычислений и нельзя обойтись простой правкой файла настроек, а также для изменения механизма работы со статусами документов и сопоставления номенклатуры.

Содержание

  • 1 Расположение файла ВнешниеФункции_Клиент.epf
  • 2 Внешние функции для выгрузки документов
    • 2.1 Внешние функции в файлах настроек
    • 2.2 Внешние функции, вызываемые из обработки
    • 2.3 Переопределяемые функции выгрузки документов
  • 3 Внешние функции для загрузки документов
    • 3.1 Внешние функции в файлах настроек
    • 3.2 Внешние функции, вызываемые из обработки
    • 3.3 Переопределяемые функции загрузки документов
  • 4 Внешние функции для работы со статусами
  • 5 Внешние функции для сопоставления номенклатуры
  • 6 Список переназначаемых функций при выгрузке и загрузке документов

Расположение файла ВнешниеФункции_Клиент.epf

Файл «ВнешниеФункции_Клиент.epf» может располагаться:

  1. В каталоге настроек обработки
  2. В 1С в справочниках «Дополнительные отчеты и обработки» или «Внешние обработки» (в зависимости от конфигурации)

При этом в случае п. 2 для обычных форм достаточно просто поместить обработку в нужный справочник.
Для управляемых же форм необходимо:

  • У ВнешниеФункции_Клиент.epf в код модуля объекта добавить:
Функция СведенияОВнешнейОбработке() Экспорт
	РегистрационныеДанные = Новый Структура;
	РегистрационныеДанные.Вставить("Наименование", "ВнешниеФункции_Клиент");
	РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
	РегистрационныеДанные.Вставить("Версия", 1);
	РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");
	РегистрационныеДанные.Вставить("Информация", "ВнешниеФункции_Клиент");
	РегистрационныеДанные.Вставить("Команды", Новый ТаблицаЗначений);
	Возврат РегистрационныеДанные;
КонецФункции
  • В свойствах записи справочника в поле «Публикация» установить «Используется»

Запись справочника "Внешние Обработки".png

Внешние функции для выгрузки документов

Внешние функции в файлах настроек

Параметры в файлах настроек могут определяться через функцию. Все функции, вызываемые из стандартных файлов настроек, описаны в форме РаботаСДокументами1С обработки Sbis1C.epf. Эти функции можно переопределить в обработке ВнешниеФункции_Клиент.epf, а также для любого параметра файла настроек написать свою функцию.

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

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

  • Создаем внешнюю обработку ВнешниеФункции_Клиент.epf в конфигураторе 1С (меню Файл/Новый/Внешняя обработка). Имя обработки так же указываем ВнешниеФункции_Клиент:
ОбработкаВнешниеФункции.png
Сохраняем файл в каталог настроек.
  • В обработке создаем форму «РаботаСДокументами1С» (название можно скопировать из основной обработки)
  • В модуле формы пишем экспортную функцию с одним параметром (для единообразия называем параметр «Контекст»)
Параметр Контекст представляет из себя структуру, поля которой соответствуют параметрам блока мФайл в файле настроек (по которому выгружается документ), а в значениях полей — уже рассчитанные значения параметров, которые определены не через функции, то есть примерно такая структура:
СтруктураКонтекстВыгрузка.png

Если параметр, который мы рассчитываем с помощью функции, лежит внутри тега мСторона или мТаблДок и других подобных, то в Контексте будет структура, соответствующая данному блоку файла настроек.

Важно! Для управляемых форм! Для ускорения процесса выгрузки необходимо минимизировать количество обращений к серверу 1С. Получение любого реквизита документа, организации, контрагента и т.д. — это обращение к серверу. Поэтому по возможности все реквизиты, которые необходимы для вычислений во внешней функции, определяем в файле настроек, чтобы все они были рассчитаны за одно обращение к серверу. В случае, если всё же нет невозможности описать обращение через инишку (лучше ещё сесть и пару раз подумать, вдруг можно), необходимо минимизировать объем данных, передаваемых на сервер. Для этого стоит сделать свою переменную, например КонтекстСервера, в которую необходимо поместить те данные, которые будут использоваться в серверной функции. Например, для получения неких данных по организации на дату документа, нет необходимости передавать весь документ. Можно взять только ссылку на организацию и дату и поместить их в контекст. Саму функцию на сервере необходимо объявлять без контекста формы, с директивой компиляции &НаСервереБезКонтекста. Директива компиляции &НаСервере используется в том случае, когда есть необходимость обратиться к данным реквизитов текущей формы (обычно это табличная часть), в большинстве остальных случаев, контекст формы на сервере вам не потребуется. Важно понимать, что в случае если директива компиляции у функции не указана, то по-умолчанию, на управляемых формах (в модуле форм) используется директива &НаСервере. На формах обычного приложения директива по-умолчанию &НаКлиенте. Так же минимизировать время обработки серверного вызова поможет, если переменную на сервер вы будете передавать по значению (ключевое слово Знач при объявлении переменной в функции). В таком случае, важно понимать принцип формирования переменных на сервере: при вызове с клиента, по-умолчанию, переменная передаётся по ссылке, т.е. целиком копируется на сервер, а после завершения серверной функции возвращается на клиент, заменяя старое значение. Так, как возвращаемая переменная является глубокой копией, то из-за этого поменяется ссылочность внутри переменной. Например, вы взяли вложение из пакета и поместили его в реквизит формы, а после передали пакет на сервер. В таком случае, по завершении серверного вызова, вложение в пакете будет уже другой переменной (пусть и с теми же данными) и при её изменении, переменная в реквизите не поменяется. Ключевое слово Знач говорит платформе о том, что переменная НЕ возвращается на клиент, в таком случае ссылочность не нарушается, исключается операция лишнего переноса данных с сервера, однако все изменения в переменной, которые были сделаны на сервере так же пропадут.

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

<СторонаНаименованиеПолное>[Сторона].НаименованиеПолное</СторонаНаименованиеПолное>
<СторонаНаименованиеСокращенное>[Сторона].НаименованиеСокращенное </СторонаНаименованиеСокращенное>
<Сторона_Наименование>{сбисНаименованиеОрганизации()}</Сторона_Наименование>

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

&НаКлиенте
Функция сбисНаименованиеОрганизации(Контекст) Экспорт
	Если ЗначениеЗаполнено(Контекст.СторонаНаименованиеПолное) Тогда
		Возврат Контекст.СторонаНаименованиеПолное;
	Иначе
		Возврат Контекст.СторонаНаименованиеСокращенное;
	КонецЕсли;
КонецФункции

Пример 2: мы пишем функцию, получающую данные организации на дату документа с сервера через сложный запрос с постобработкой самописным механизмом клиента.

&НаКлиенте
Функция сбисДанныеОрганизацииНаДатуДокумента(Контекст) Экспорт
	КонтекстСервера = Новый Структура("Организация, ДатаДокумента", Контекст.Документ.Организация, Контекст.Документ.Дата);
	Возврат сбисДанныеОрганизацииНаДатуДокумента_Сервер(КонтекстСервера);
КонецФункции

&НаСервереБезКонтекста
Функция сбисДанныеОрганизацииНаДатуДокумента_Сервер(Знач КонтекстСервера)
	Запрос = Новый Запрос('ВЫБРАТЬ
	...
	')
	Запрос.УстановитьПараметр("Организация", КонтекстСервера.Организация);
	Запрос.УстановитьПараметр("ДатаДокумента", КонтекстСервера.ДатаДокумента);
	Результат = Запрос.Выполнить().Выбрать();
	Если Результат.Следующий() Тогда
		Возврат СамописныйМодульКонфигурации.ДополнительнаяОбработкаПолученногоЗначения(Результат.ТребуемоеЗначение)
	КонецЕсли;
	Возврат Неопределено;	
КонецФункции

В примере 2 необходимо пояснить, что типом значения Контекст.Документ в функции сбисДанныеОрганизацииНаДатуДокумента является тип «Структура». Это объект, который мы собираем через ини для последующего заполнения в базу 1С. Тем не менее, обращение к значениям платформенных объектов 1С (массивы, списки значений, структуры) возможно на клиенте без ограничений. Тогда как обращение к реквизитам объектов базы данных (справочники, документы, регистры) на клиенте не возможно. Так если бы в Контекст.Документ находилась ссылка на документ РеализацияТоваровУслуг, у которого есть реквизит Организация, то обращение к этому свойству на клиенте вызвало бы ошибку.

Внешние функции, вызываемые из обработки

В стандартном механизме формирования электронного документа есть два места для «встраивания», то есть для внесения изменений в выгружаемый документ:

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

Возвращает Истину — в этом случае строка добавляется в документ, или Ложь — в этом случае строка не добавляется в документ (см. пример)
Вызывается после формирования структуры строки стандартным механизмом в форме Файл_Шаблон. Сама функция пишется в обработке ВнешниеФункции_Клиент в форме «Файл_[Формат файла]_[Версия формата файла]». Например, при формировании накладной создается форма «Файл_ЭДОНакл_3_01». Если нужно написать данную функцию для нескольких типов документов, то для каждого создается своя форма. Нельзя выносить во внешние функции форму «Файл_Шаблон»!

Параметры Функции:

  • НоваяСтрока — структура строки, которая будет добавлена в выгружаемый документ. То есть именно в нее при необходимости нужно вносить изменения.
  • Кэш — общий кэш обработки (структура)
  • Контекст — структура с данными по текущей выгрузке документов
  • Стр — структура строки, заполненная по файлу настроек

2. Функция сбисПослеФормированияДокумента(Док, Кэш, Контекст) — предназначена для внесения изменений в сформированный документ. Также используется при необходимости добавить к пакету печатную форму документа в формате pdf.

Вызывается после формирования структуры документа стандартным механизмом в форме Файл_Шаблон. Сама функция пишется в обработке ВнешниеФункции_Клиент в форме «Файл_[Формат файла]_[Версия формата файла]».

Параметры Функции:

  • Док — структура выгружаемого документа. В нее при необходимости нужно вносить изменения.
  • Кэш — общий кэш обработки (структура)
  • Контекст — структура с данными по текущей выгрузке документов

Пример кода в функции сбисПослеФормированияДокумента для добавления в пакет внешней печатной формы документа:

	Запрос = Новый Запрос;
	Запрос.Текст = 
 	   "ВЫБРАТЬ
 	   |    Справочник.ВнешниеОбработки.Ссылка КАК Объект
  	   |ИЗ
 	   |   Справочник.ВнешниеОбработки
	   |ГДЕ
           |   (Справочник.ВнешниеОбработки.Наименование = &НаимФормы)";
 
	Запрос.УстановитьПараметр("НаимФормы", "АктВодоканал");
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Количество() = 0 Тогда
		Возврат Ложь;
	КонецЕсли;
	Пока Выборка.Следующий() Цикл
		Обработка = Выборка.Объект;
		Прервать();
	КонецЦикла;

	Обработка = Обработка.ХранилищеВнешнейОбработки.Получить();
        ВремКаталог = КаталогВременныхФайлов();
	Путь = ВремКаталог+"АктВодоканал.epf"; 
	Обработка.Записать(Путь);
	Обработка = ВнешниеОбработки.Создать(Путь);	
  	Обработка.СсылкаНаОбъект = Контекст.Документ;		
	ТабДокумент = Обработка.Печать();				
	ИмяФайла = "АктВодоканал.pdf";
	ПолноеИмяФайла = ВремКаталог+ИмяФайла;
	ТабДокумент.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.pdf);
	Контекст.СоставПакета.Вложение.Добавить(Новый Структура("ПолноеИмяФайла,ИмяФайла,Название", ПолноеИмяФайла,ИмяФайла,ИмяФайла));

Переопределяемые функции выгрузки документов

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

  • В обработке ВнешниеФункции_Клиент создаем форму «Файл_[Формат файла]_[Версия формата файла]»
  • Переносим в нее функции ПолучитьДанныеИзДокумента1С(Кэш,Контекст) и ПолучитьТабличнуюЧастьДокумента1С(Кэш,Контекст) из формы Файл_Шаблон и пишем в этих функциях свой код формирования структуры документа.

Параметры Функций:

  • Кэш — общий кэш обработки (структура)
  • Контекст — структура с данными по текущей выгрузке документов

Не забываем в конце добавить свое вложение в состав пакета:

Контекст.СоставПакета.Вложение.Добавить(Вложение);

Так же есть возможность полностью переопределить отправку документов из определенного реестра. Для этого:

  • В обработке ВнешниеФункции_Клиент создаем форму «Документ_[тип документа 1С]»
  • Переносим в нее функцию ОтправитьДокументы(Кэш,МассивСтрок) из формы Документ_Шаблон и пишем свой код.

Параметры Функции:

  • Кэш — общий кэш обработки (структура)
  • МассивСтрок — список отмеченных строк таблицы документов, которые необходимо отправить

Внешние функции для загрузки документов

Внешние функции в файлах настроек

Если какой-то реквизит документа 1С при загрузке нужно заполнить с помощью функции, то данная функция указывается в атрибуте «Вычислить»

Чтобы заполнить реквизит документа 1С через клиентскую функцию:

  • Создаем внешнюю обработку ВнешниеФункции_Клиент.epf в конфигураторе 1С
  • В обработке создаем форму «РаботаСДокументами1С»
  • В модуле формы пишем экспортную функцию с одним параметром (для единообразия называем параметр «Контекст»)
Контекст — структура с полями:

  • Ини — структура файла настроек, по которому идет загрузка
  • Документ — структура документа 1С, который будет загружен
  • СтрТабл — структура текущей строки табличной части создаваемого документа
  • СтруктураФайла — структура файла, на основании которого создается документ
  • СтрокаФайла — текущая строка файла, на основании которой заполняется текущая строка документа
  • СоставПакета — структура, содержащая полный состав загружаемого пакета

Внешние функции, вызываемые из обработки

После того, как документ 1С создан стандартным механизмом, есть возможность внести в него изменения. Для этого предназначена функция ДопРасчетыПриЗагрузке(Документ1С, Контекст), вызываемая из формы Документ_Шаблон.

Функция пишется в обработке ВнешниеФункции_Клиент в форме «Документ_[Тип документа 1С]». Например, при загрузке документа ПоступлениеТоваровУслуг создается форма «Документ_ПоступлениеТоваровУслуг». Если нужно написать данную функцию для нескольких типов документов, то для каждого создается своя форма. Нельзя выносить во внешние функции форму «Документ_Шаблон»!

Параметры Функции:

  • Документ1С — Загруженный документ 1С
  • Контекст — структура с полями СтруктураФайла — структура загружаемого файла, СоставПакета — структура загружаемого пакета документов

Когда удобно использовать данную функцию. Например, при ручном вводе документа в 1С при выборе контрагента автоматически заполняются еще несколько реквизитов (договор, соглашение, ответственный и др.). Чтобы не писать для каждого реквизита отдельную функцию в файле настроек, мы можем написать одну функцию ДопРасчетыПриЗагрузке и из нее вызвать стандартный механизм из модуля формы документа, который реагирует на изменение контрагента — все зависимые от него реквизиты заполнятся автоматически. Не забываем сохранить результат (методом документа Записать)

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

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

  • В обработке ВнешниеФункции_Клиент создаем форму «Документ_[Тип документа 1С]»
  • Переносим в нее функцию СоздатьДокумент из формы Документ_Шаблон и пишем свой код загрузки документа.

Внешние функции для работы со статусами

В обработке присутствуют две стандартные формы работы со статусами документов: Статусы_Регистры и Статусы_ДБФ. В процессе работы используется одна из них, указанная в файле настроек конфигурации. При необходимости изменения механизма работы со статусами выносим используемую форму во ВнешниеФункции_Клиент.epf и выносим функции данной формы, которые необходимо переопределить.

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

Внешние функции для сопоставления номенклатуры

В обработке присутствуют несколько стандартных форм работы с сопоставлением номенклатуры (название формы начинается с «СопоставлениеНоменклатуры_»). В процессе работы используется одна из них, указанная в файле настроек конфигурации. При необходимости изменения механизма работы с сопоставлением номенклатуры выносим используемую форму во ВнешниеФункции_Клиент.epf и выносим функции данной формы, которые необходимо переопределить.

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

Список переназначаемых функций при выгрузке и загрузке документов

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

Список функций при создании контрагента (ФормаСозданияКонтрагента)

  • ЗаполнитьЮрФизЛицо — Функция определяет тип контрагента — юридический/фактический по длине ИНН на форме
  • ЗаполнитьЮридическоеФизическоеЛицоУП — Функция заполняет тип контрагента (для конфигураций с перечислениями ЮридическоеФизическоеЛицо)
  • ЗаполнитьВидКонтрагента — Функция возвращает вид контрагента — физлицо/организация
  • ЗаполнитьАдресУП — Функция заполняет адрес, хранящийся в табличной части справочника Контрагенты
  • ЗаполнитьБанкУП — Функция возвращает банк по БИК
  • ЗаполнитьВалютуУП — Функция возвращает ссылку на валюту — рубль
  • ЗаполнитьРегионПоКоду — Функция возвращает название региона по его коду
  • ЗаполнитьБанковскийСчетБГУ — Функция создает и заполняет банковский счет контрагента (для бух. гос. уч.) возвращает ссылку на созданный счет.
  • ЗаполнитьБанковскийСчет — Функция создает и заполняет банковский счет контрагента возвращает ссылку на созданный счет.
  • сбисЗаполнитьБанкСчет — Функция возвращает ссылку на банковский счет по номеру

Список функций пи работе с документами (РаботаСДокументами1С)

Список функций работы с шапкой документа:

  • ЗаполнитьВалюту — Функция возвращает валюту по коду в загружаемых документах
  • ЗаполнитьВалютуУНФ — Функция возвращает валюту по коду в загружаемых документах
  • ЗаполнитьДоговор — Функция заполняет договор в загружаемых документах
  • ЗаполнитьДоговорУНФ — Функция возвращает ссылку на договор в загружаемых документах
  • ЗаполнитьДоговорУТ11 — Функция возвращает договор на закупку по умолчанию для конфигурации УТ11
  • ЗаполнитьЕдиницуИзмеренияНовойНоменклатуры — Функция ищет по коду единицу измерения
  • ЗаполнитьПриложениеКО — Функция возвращает список приложения в приходных/расходных ордерах
  • ЗаполнитьСоглашениеУТ11 — Функция возвращает соглашение в загружаемых документах для конфигурации УТ11 и аналогичных. Берётся значение по-умолчанию.
  • ЗаполнитьМенеджераУТ11 — Функция возвращает ссылку на пользователя по текущему пользователю ИБ для конфигурации УТ11
  • ЗаполнитьСоглашениеСКлиентомУТ11 — Функция возвращает соглашение в загружаемых заказах для конфигурации УТ11
  • ЗаполнитьДоговорСКлиентомУТ11 — Функция возвращает договор в загружаемых заказах для конфигурации УТ11
  • ЗаполнитьФизическоеЛицо — Функция возвращает ссылку на справочник физических лиц по наименованию в загружаемых документах
  • ИмяТЧАктаСверки — Функция определяет название табличной части акта сверки, в которую нужно загружать данные
  • ИмяТЧВзаиморасчетов — Функция возвращает название табличной части акта сверки, в которую нужно загружать данные (для УТ11)
  • ПолучитьКассу — Функция возвращает валюту по наименованию в загружаемых документах
  • ПолучитьКассуККМ — Функция возвращает ссылку на кассу ККМ по серийному номеру, либо частичному совпадению названия
  • ПолучитьСклад — Функция возвращает значение основного склада по-умолчанию
  • ПолучитьСкладТекущегоПользователя — Функция возвращает значение основного склада по-умолчанию для текущего пользователя
  • ПолучитьСкладТекущегоПользователяРОЗН — Функция возвращает значение основного склада по-умолчанию для текущего пользователя в конфигурации розница и схожих
  • ПолучитьСкладУНФ — Функция возвращает ссылку на значение склада по-умолчанию для текущего пользователя
  • ПолучитьТекущуюДату — Функция возвращает текущую
  • ПолучитьХозрасчетныйСчетПоКоду — Функция возвращает счет по коду
  • сбисЗаполнитьВидОперации — Функция возвращает значение перечисления ВидОперации в полученных корректировочных документах
  • сбисЗаполнитьВидХозяйственнойОперации — Функция заполняет ВидОперации в полученных корректировочных документах
  • сбисЗаполнитьДанныеНоменклатуры — Функция возвращает структуру с ссылкой на номенклатуру и характеристику, которую ищет по идентификатору (Разделение GUID через спец.символ «#», либо «:» для кодов)
  • сбисЗаполнитьДанныеИсходногоДокумента — Функция заполняет ДокументПоступления в загружаемых документах
  • сбисИмяТЧ — Функция возвращает название табличной части документа поступления, в которую нужно загружать данные
  • сбисИмяТЧ_УНФ — Функция определяет название табличной части документа поступления, в которую нужно загружать данные
  • СуммаВключаетНДС_УНФ — Функция определяет наличие НДС в сумме документа
  • УчитыватьНДС — Функция определяет необходимость учитывать НДС в загружаемых документах
  • УчитыватьНДС_УНФ — Функция определяет необходимость учитывать НДС в загружаемых документах

Список функций работы с табличной частью документа:

  • ЗаполнитьСтавкуНДС — Функция заполняет ставку НДС в загружаемых документах
  • ЗаполнитьСтавкуНДСИзСправочника — Функция заполняет ставку НДС в загружаемых документах если это справочник со значениями ставок
  • ЗаполнитьЕдиницуИзмерения — Функция возвращает единицу измерения для номенклатуры в загружаемом документе (для конфигураций БУХ)
  • ЗаполнитьEDIТЧ — Функция заполняет данные дополнительных свойств для номенклатуры табличной части
  • сбисРассчитатьЦену — Функция рассчитывает цену из суммы и количества
  • сбисНоменклатураУслуга — Функция возвращает признак номенклатуры услуга по данным файла
  • сбисНоменклатураВид — Функция возвращает вид номенклатуры по признаку услуги позиции
  • сбисПроверитьЗаполнитьШтрихкод — Функция записывает штрихкод номенклатуре с предварительной проверкой

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

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

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


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

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


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

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

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Понравилась статья? Поделить с друзьями:
  • Внешняя наружность ее была вполне привлекательна ошибка
  • Внешний модуль вернул код ошибки 39 321
  • Внешний модуль vpnkey tls вернул код ошибки 852
  • Внешний модуль vpnkey tls вернул код ошибки 700
  • Внешний ключ ссылается на недопустимую таблицу ошибка