Ожидается имя формального параметра

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

Внимание! Материал данной статьи устарел. Рекомендуется использовать документацию к платформе «1С:Предприятие 8».

Встроенный язык 1С:Предприятия поддерживает два способа передачи параметров в процедуры и функции: передача параметров по ссылке и передача параметров по значению.

Передача параметров по ссылке

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

Передача параметров по значению


Особенности передачи переменных различных типов данных по значению

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

Рассмотрим в качестве примера ситуацию, когда параметром процедуры, передаваемым по значению, является таблица значений. Внутри вызываемой процедуры СвернутьТаблицу() таблица значений, переданная в качестве параметра при вызове процедуры, сворачивается:

Схематично изобразить происходящее при вызове процедуры СвернутьТаблицу(Тз) можно следующим образом:

Ожидается имя формального параметра. Смотреть фото Ожидается имя формального параметра. Смотреть картинку Ожидается имя формального параметра. Картинка про Ожидается имя формального параметра. Фото Ожидается имя формального параметра

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

Источник

Параметры процедур и функций в 1С

Ожидается имя формального параметра. Смотреть фото Ожидается имя формального параметра. Смотреть картинку Ожидается имя формального параметра. Картинка про Ожидается имя формального параметра. Фото Ожидается имя формального параметра

Передача параметров в процедуры и функции

С помощью параметров можно передавать в процедуру или функцию входные данные. Например:

Функция СуммаЧисел принимает 2 параметра и возвращает сумму этих параметров. При вызове функции параметры передаются по позиции. Слагаемое1 = 2, Слагаемое2 = 3, что соответствует позиции параметров при вызове функции.

Значения, которые передаются в функцию (в данном примере числа 2 и 3) называются аргументами функции. Часто используют такие понятия, как формальные и фактические параметры. Формальные параметры — это параметры процедуры или функции (в данном примере Слагаемое1 и Слагаемое2). Фактические параметры — это значения, которые передаются в процедуру или функцию (в данном примере это числа 2 и 3). То есть фактические параметры и аргументы это одно и то же.

В качестве параметров можно передавать литералы примитивных типов, переменные, сложные выражения:

Значения параметров по умолчанию

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

Пропущенные и опущенные параметры

Пропущенный параметр — когда при вызове процедуры или функции не указывается его значение и нет значения по умолчанию. В этом случае параметр будет равен Неопределено.

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

Передача параметров по ссылке и по значению

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

Чтобы передать параметр по значению в описании процедуры или функции до имени параметра нужно добавить ключевое слово Знач. В этом случае фактический параметр будет скопирован. Изменение формального параметра в процедуре или функции не повлечет за собой изменение фактического параметра.

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

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

Если две переменные ссылаются на один массив и обе переменные передать в процедуру по ссылке и изменить там, то они по прежнему будут ссылаться на один и тот же массив.

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

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

Сериализация параметров

Сериализация ‑ это процесс преобразования объекта в поток байтов для сохранения или передачи в память, в базу данных или в файл. Эта операция предназначена для того, чтобы сохранить состояние объекта для последующего воссоздания при необходимости. Обратный процесс называется десериализацией.

Платформа для внутренних нужд всегда использует XDTO-сериализацию в формат XML.

Этапы сериализации параметров при серверном вызове:

Источник

Прочитать xml файл в 1С

Помогите пожалуйста прочитать ошибки

Данный код должен позволять читать xml файла данного вида

<Справочник.Поставщики.Форма.Поставщики.Форма(142,22)>: Ожидается имя формального параметра
Процедура ПрочестьИз( >\D:\Work\User\Desktop\postav.xml\) (Проверка: Сервер)
<Справочник.Поставщики.Форма.Поставщики.Форма(142,22)>: Ожидается имя формального параметра
Процедура ПрочестьИз( >\D:\Work\User\Desktop\postav.xml\) (Проверка: Тонкий клиент)

(3) Переменная Contr нигде не определяется.

(25) Можно вытащить на форму реквизит с типом Справочник.Поставщики и выбрать группу там (так надежнее) или сделать так:

(2)
Я сделал так: Процедура ПрочестьИз(ПутьКФайлу)

пошли такие ошибки, подскажите пожалуйста, где их определять нужно?

<Справочник.Поставщики.Форма.Поставщики.Форма(159,24)>: Переменная не определена (Contr)
Название = >Contr.Атрибуты.ПолучитьИменованныйЭлемент(«SNAME»); (Проверка: Сервер)
<Справочник.Поставщики.Форма.Поставщики.Форма(164,27)>: Переменная не определена (Contr)
Численность = >Contr.Атрибуты.ПолучитьИменованныйЭлемент(«INN»); (Проверка: Сервер)
<Справочник.Поставщики.Форма.Поставщики.Форма(169,19)>: Переменная не определена (Contr)
КПП = >Contr.Атрибуты.ПолучитьИменованныйЭлемент(«KPP»); (Проверка: Сервер)
<Справочник.Поставщики.Форма.Поставщики.Форма(165,18)>: Переменная не определена (ИНН)
Если >ИНН <> Неопределено Тогда (Проверка: Сервер)
<Справочник.Поставщики.Форма.Поставщики.Форма(166,36)>: Переменная не определена (ИНН)
Сообщить(«INN: » + >ИНН.Значение); (Проверка: Сервер)

(3) Переменная Contr нигде не определяется.

(7) А если записать теперь в справочник нужно сделать так?

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

(12) Ну что вы, я только учусь)

А сделать если Contr.INN = с тем что есть в справочнике, то его не добавлять.

(19)Последнее, тут при экспорте код работает все нормально, но даже при работе просто так выдает ошибку

А вот ошибка:
<Справочник.Поставщики.Форма.Поставщики.Форма(90,12)>: Переменная не определена (Справочники)
Выборка = >Справочники.Поставщики.Выбрать(); (Проверка: Тонкий клиент)
<Справочник.Поставщики.Форма.Поставщики.Форма(167,12)>: Переменная не определена (Справочники)
Выборка = >Справочники.Поставщики.Выбрать(); (Проверка: Тонкий клиент)

(25) Можно вытащить на форму реквизит с типом Справочник.Поставщики и выбрать группу там (так надежнее) или сделать так:

(30) Просто напиши возможно ли такое вообще, задача жесткая.

Источник

Параметры процедур и функций

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

2. Не следует использовать вместо параметров функций другие средства конфигурирования (переменные модулей, реквизиты формы и т.п.)

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

правильно сначала расположить основные параметры ДокументОбъект и Форма :

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

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

При необходимости передавать в функцию большое число параметров рекомендуется:

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

Другой пример. Неправильно:

Правильно сгруппировать параметры, описывающие значения реквизитов номенклатуры, в структуру ЗначенияРеквизитов :

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

6.1. Не рекомендуется при передаче параметров в одну функцию применять вложенные вызовы других функций.
Неправильно:

Правильно разбивать такие вызовы на отдельные операторы с помощью вспомогательных локальных переменных:

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

Например, для вызова процедуры

Процедура ПоменятьЦветПоляФормы(Форма, ИмяПоля, Цвет)

Источник

&ИзменениеИКонтроль в расширениях 1С

Ожидается имя формального параметра. Смотреть фото Ожидается имя формального параметра. Смотреть картинку Ожидается имя формального параметра. Картинка про Ожидается имя формального параметра. Фото Ожидается имя формального параметра

Начиная с версии платформы 8.3.15 в расширениях можно использовать аннотацию &ИзменениеИКонтроль. При этом важна именно версия платформы, а не режим совместимости. То есть, если у Вас платформа 8.3.15, а режим совместимости установлен 8.3.12, то аннотация &ИзменениеИКонтроль будет работать.

На платформе младше 8.3.15 будет ошибка: «Ожидается оператор препроцессора # >Вставка»:

Ожидается имя формального параметра. Смотреть фото Ожидается имя формального параметра. Смотреть картинку Ожидается имя формального параметра. Картинка про Ожидается имя формального параметра. Фото Ожидается имя формального параметра

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

Создадим новое расширение, назовем его «ИзменениеИКонтроль» и добавим в него процедуру ИзменениеИКонтроль() из модуля формы обработки. Аннотацию выберем «Вызывать вместо (с контролем)»:

Ожидается имя формального параметра. Смотреть фото Ожидается имя формального параметра. Смотреть картинку Ожидается имя формального параметра. Картинка про Ожидается имя формального параметра. Фото Ожидается имя формального параметра

Теперь сделаем так, чтобы в сообщениях было только сообщение о самой сумме, без слов «Сумма равна». Для этого внесем следующие изменения в процедуру:

Здесь мы использовали инструкции препроцессора #Удаление — #КонецУдаления. Код находящийся между ними будет удален из результирующего модуля. В результате, при нажатии на кнопку будет выведено только сообщение с числом 3. Если у Вас сообщение «Сумма равна» все равно выводится, проверьте снята ли галка «Безопасный режим» в списке расширений:

Ожидается имя формального параметра. Смотреть фото Ожидается имя формального параметра. Смотреть картинку Ожидается имя формального параметра. Картинка про Ожидается имя формального параметра. Фото Ожидается имя формального параметра

Теперь добавим, чтобы выводилось сообщение «Сумма из расширения равна»:

Здесь мы использовали инструкции препроцессора #Вставка — #КонецВставки. Код расположенный между ними будет добавлен в результирующий модуль.

Если сейчас в исходном модуле (не в расширении) изменить значение переменной «а» на 11:

И нажать на кнопку на форме обработки, то снова будет выведено «Сумма равна» и число 13 (сумма изменилась, так как мы изменили значение одного из слагаемых).

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

Если в конфигураторе в списке расширений выделить расширение и выполнить команду Конфигурация — Проверка возможности применения, то выйдет ошибка о невозможности применения расширения:

Ожидается имя формального параметра. Смотреть фото Ожидается имя формального параметра. Смотреть картинку Ожидается имя формального параметра. Картинка про Ожидается имя формального параметра. Фото Ожидается имя формального параметра

Это позволит избежать ошибок, когда после обновления конфигурации был изменен модуль, для которого в расширении была использована аннотация &Вместо.

Автоматическое обновление модуля в расширении можно выполнить только если настроено сравнение/объединение с помощью внешних программ.

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

Но если бы наша процедура была клиентской, то расширение бы все равно применилось, несмотря на то что отличается текст процедуры.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *