1с избавиться от параметров
При печати документов, например, чеков, пользователи программы 1С 8.3 видят ошибку «Слишком много фактических параметров». При этом текст о сбое может быть дополнен другой информацией. Но часто она не является разъяснительной, а только ухудшает понимание того, что же случилось в программном продукте. И что пользователь сделал не так. Давайте подробно разберёмся с ошибкой.
Причины возникновения ошибки в 1С
Бывалые пользователи утверждают, что в новых версиях 1С подобные ошибки, к сожалению, не редкость. Некоторые из них могут и вовсе не иметь решения до тех пор, пока о них не будет написано много жалоб в поддержку. После чего её решением занимаются разработчики. Пользователь может выполнять какие-то действия в программе, которые не предназначены для подобных расчетов. В этом случае для вас будет одна рекомендация — ознакомьте лучше с платформой и загрузите соответствующую версию.
Решение ошибки
Обратите внимание еще раз на свой документ и проверьте все вводимые данные и соответствия значений. Проверьте параметры внешней обработки документа. Рассматриваемая ошибка в программе 1С может действительно означать, что вы ввели где-то больше данных, чем необходимо. Как уже было сказано, проверьте программу на другом устройстве.
Довольно часто при обновлении программы происходят сбои, вследствие чего программу сложно настроить. Если не сказать, что невозможно. Но все же мы попытаемся:
- Откройте меню программы;
- Зайдите в раздел «Продажи»;
- Откройте чеки (если это ваш случай);
- И попробуйте изменить саму фирму, через которую ведется продажа. А также пробейте чек здесь.
Но, как показывает практика, люди просто не могут подолгу концентрироваться на рутинной работе. Особенно те, кто только учится это делать. Поэтому еще раз внимательно проверьте вводимые данные и их параметры. Постарайтесь разобраться в её составляющих.
Обновление программного продукта 1С
Если у вас ничего не получилось, и вы проверили заново всю имеющуюся информацию, но ничего не изменилось, попробуйте обновить программу самостоятельно. Как и любая другая программа — 1С постоянно изменяется разработчиками. Они уделяют максимальное внимание ошибкам, которые присутствовали в предшествующих версия. А также дорабатывают другие детали, добавляя новые возможности.
1С 8.3 сама напоминает своим пользователям о том, что ей пора обновить свои базы. Вы можете использовать для этого 2 способа: через сеть и конфигуратор. Рассмотрим эти способы далее.
Обновление через конфигуратор
Рассмотрим, как обновить программу 1С 8.3 через конфигуратор:
- Для начала вы должны найти пакет с обновлениями на официальном сайте программы;
- Распакуйте и запустите скачанные файлы;
- В программе нажмите на кнопку «Конфигуратор»;
- Затем откройте пункт «Поддержка» и «Обновление конфигурации»;
- Укажите программе, где находится раздел с обновлением;
- Затем нажмите кнопку «Готово» и «Продолжить»;
- После этого вам понадобиться обновить конфигурацию БД. Откройте «Конфигурация»;
- Далее «Обновить конфигурацию БД»;
- И снова подтвердите свои действия и нажмите «Ок».
Перезагрузите компьютер и испробуйте обновленную версию программы. Таким образом вы точно сможете избавиться от ошибки «Слишком много фактических параметров» в ПО 1С 8.3, если в предыдущей версии были проблемы с программой.
Здравствуйте. Подскажите как убрать параметры в СКД. есть два стандартных видимых параметра Начала и Конец периода. но еще откуда то берутся два параметра П и П2. что за дичь. откуда они.
https://forum.infostart.ru/forum9/topic112492/
Долгая медитация и расследования привели к следующему результату.
Если коротко: Параметры для СКД устанавливать на вкладке "компоновка данных" в конструкторе запроса.
И длинно:
В конструкторе запроса на вкладке "таблицы и поля" параметру виртуальной таблицы *СрезПоследних "Период" задаем имя "&Период1". Имеются другие виртуальные таблицы с параметрами "НачалоПериода" и "КонецПериода". СКД создает параметры: "НачалоПериода" тип "дата", "КонецПериода" тип "дата" и "Период1" тип "дата" Параметр "Период" тип "СтандартныйПериод" создадим для удобства повесив Период.ДатаОкончания и Период.ДатаНачала на соответствующие параметры. При выполнении выдает ошибку примерно следующего толка: "Ошибка обработки представления "РегистрСведений.*.СрезПоследних:Несоответствие типов (Параметр номер ""1"")"ЛЕВОЕ СОЕДИНЕНИЕ >РегистрСведений.*.СрезПоследних(&П3, )"
Что за параметр П3 (пэ три)?! И именно в этот момент стоить обратить внимание вкладку "компоновка данных" в конструкторе запроса. И на ней мы обнаружим, что у параметров виртуальной таблицы нет установленных нами значений! Задаём имя параметру "период" - "&ПериодКД". Теперь на вкладке "Параметры" в СКД появится параметр ПериодКД (с типом "дата") и повесив на него Период.ДатаОкончания убедимся что все работает.
В тексте запроса это выглядит так: . РегистрСведений.*.СрезПоследних(&Период1 , ) КАК .
(4) это помогло если бы в запросе у меня отображалось что то типа Регистр***.ОстаткиИОбороты(, , Бла, бла, бла).
У меня же Стоит просто Регистр. ОстаткиИОбороты( , , Авто, , , );
Периоды вообще не указывал. регистратор указал только АВТО. Смотрел Курсы по СКД Гилева. в принципе, сделал также как у него в примерах. параметры периода не задавал. а чтоб избавиться от пустых регистраторов добавил поле ПериодСекунда. и изменил поле Регистратор на
Выбор КОГДА Регистратор = NULL ТОГДА NULL Иначе Регистратор Конец. и указал Игнорировать NULL
Но даже это не помогло. затем сохранил отчет свой и открыл через Обработку СКД для УП. В нем можно посмотреть после испольнения отчета структуру запроса. и в нем как раз таки я обнаружил эти странные два параметра П1 и П2.
Но откуда они взялись. я хз.
Может что с РегистромНакопления что-то не так. создал регистр. Указал измерения пару штук. Указал один ресурс количество. Период и Регистратор не создавал. т.к. они поумолчанию есть.
В Движениях указал только приход/расход, активность, измерения, ресурс и период. регистратор в движениях не указывал. т.к. он все равно записывается по умолчанию.
Система компоновки данных меняет запрос, который вы составили. Может, например, добавлять параметры. С точки зрения СКД нормальна ситуация, когда вы определяете свой параметр, указываете его, а система добавляет свой и использует его. Чтобы подсказать вам что-то нужно видеть внутренности вашего отчета.
Вот скрины построения отчета. везде где можно было указать параметр. у меня пусто.
В этой статье мы покажем, как взаимодействуют клиентская и серверная части платформы и какие есть особенности в использовании директив компиляции.
Это будет полезно начинающим разработчикам и тем, у кого есть пробелы в области клиент-серверного взаимодействия – всё объясним «на пальцах» :)
Клиент-серверная архитектура заложена в платформе изначально – со времен «1С:Предприятие 8.0».
Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере.
Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере – другой. Клиент и сервер «общаются» между собой с помощью серверного вызова.
Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.
Немного базовой теории
Перед тем, как перейти к содержательной части, договоримся о некоторых ограничениях:
- Мы подразумеваем, что Вы знаете о существовании четырёх директив компиляции, доступных в модулях формы: «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» и «&НаКлиентеНаСервереБезКонтекста».
- Все примеры будут опираться на работу «1С:Предприятие 8» в клиент-серверном режиме. Файловый вариант по сути является эмуляцией клиент-серверного режима, с небольшими отклонениями (для данной статьи это не критично)
- В рамках этого материала рассматривается исключительно взаимодействие клиента и сервера 1С. Работа с базой данных, преобразование данных и прочие нюансы работы системы – это темы других статей.
Далее, освежим в памяти немного теории.
Директивы, в имени которых упоминается «Клиент», устанавливают ограничение на обращение к базе данных.
Процедуры или функции, написанные под директивой «Без контекста», не имеют доступа к контексту (данным) формы. Исходя из этой информации, легко представить ограничения директив по доступу к данным в виде следующей таблицы:
Опережая вопрос «Для чего же директива с самым длинным названием, если она ограничивает и использование контекста форм, и обращения к базе данных?», напомню: любая процедура и функция поддерживает обработку информации, переданной в неё в качестве параметров.
Отсюда делаем вывод: у методов, описанных под директивой «&НаКлиентеНаСервереБезКонтекста», единственным источником данных являются эти самые переданные параметры.
Не стоит забывать и про доступность вызова одних процедур и функций из других. Для этого стоит запомнить, что можно вызывать только те процедуры и функции, которые находятся под одноимённой (с родительским методом) директивой или под директивой, находящейся ниже (чем у родительского метода) согласно списку:
- &НаКлиенте
- &НаСервере
- &НаСервереБезКонтекста
- &НаКлиентеНаСервереБезКонтекста.
То есть из метода, описанного под директивой «&НаКлиенте», можно вызывать процедуры и функции, описанные под любой директивой. А вот «из-под» директивы «&НаСервереБезКонтекста» можно вызывать только то, что описано под директивой «&НаСервереБезКонтекста» или «&НаКлиентеНаСервереБезКонтекста».
Теперь про серверный вызов
Серверный вызов – это передача какой-то информации с клиентской части «1С:Предприятие 8» на серверную часть с целью вернуть обратно некий набор данных.
Самый первый серверный вызов инициализируется в момент начала сеанса работы 1С. То есть когда пользователь выполняет вход в информационную базу:
«Оу! При чём тут Библиотека?!» – спросите Вы.
Всё очень просто:
Обратите внимание, что доступ к базе данных есть только на серверной части, а соединение между клиентом и сервером имеет ограниченную пропускную способность. Это и неудивительно – ведь соединение между клиентской и серверной частью может быть установлено даже по нестабильному низкоскоростному каналу связи (например, посредством мобильного интернета).
Кроме этого, передача данных между клиентом и сервером возможна только посредством серверного вызова.
Но, для того чтобы перейти к основной теме данной статьи, необходимо сначала разобраться – где будет выполняться программный код, написанный под определенными директивами. То есть на какой части приложения «1С:Предприятие 8» будут доступны процедуры и функции, описанные под директивами «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» и «&НаКлиентеНаСервереБезКонтекста»:
Видим, что на стороне клиента у нас будут доступны процедуры и функции, написанные под двумя директивами из четырёх, а на стороне сервера – под тремя из четырёх.
Сразу возникают вопросы: «Зачем такое многообразие и чем оно полезно?», «Как метод, описанный под директивой «&НаКлиентеНаСервереБезКонтекста» может выполняться и на клиенте, и на сервере?».
Сейчас мы постараемся понять особенности работы системы при использовании директив и почему необходимо уметь правильно использовать каждую из существующих директив компиляции.
И в этом нам помогут наши новые друзья, знакомьтесь!
Это процесс клиентской части приложения «1С:Предприятие 8». Он запускается на компьютере пользователя и сожительствует в оперативной памяти с другими процессами (38 вкладок браузера, поток аудио из социальной сети, telegram и другие). Может порождать серверный вызов.
Это процесс серверной части приложения «1С:Предприятие 8». Он существует на сервере 1С. Знает, какие клиентские сеансы в данный момент запущены, но самостоятельно не может инициировать взаимодействие с ними. Работает с клиентской частью только через полученный от неё серверный вызов.
А это серверный вызов. Как было сказано выше, он порождается процессом клиентской части и призван «прислуживать» ему. Он передает запросы со стороны клиента на сторону сервера, а также занимается транспортировкой данных с клиента на сервер и обратно.
Итак, давайте рассмотрим несколько особенностей работы программного кода в «1С:Предприятие 8», написанного под разными директивами.
Действие 1. Открытие пользователем формы с данными.
В момент нажатия Пользователем кнопки открытия формы из интерфейса, происходит передача управления на Сервер. По переданным параметрам получаются необходимые для построения данные из БД и происходит формирование контекста формы, который затем отправляется на клиентскую часть. У пользователя на экране отображается запрошенная форма.
Действие 2. Получение из открытой Пользователем формы дополнительных данных из Базы данных.
Получение этих данных может быть описано под двумя директивами – «&НаСервере» и «&НаСервереБезКонтекста». Рассмотрим оба случая.
Явление 1. Директива «&НаСервере»
При вызове процедуры или функции под директивой «&НаСервере» из формы со стороны клиента происходит «упаковка» всего контекста формы и отправка его на сторону сервера.
После выполнения метода на сервере, весь этот «пакет» транспортируется обратно. Таким образом, форма со всеми элементами и данными дважды проходит через самое узкое место системы.
Явление 2. Директива «&НаСервереБезКонтекста»
При вызове процедуры или функции под директивой «&НаСервереБезКонтекста» из формы со стороны клиента происходит передача на сторону сервера только тех данных, которые были указаны в качестве параметров. Обратно же передаётся только необходимая информация в уже подготовленном виде.
Таким образом, серверный вызов не несёт лишней нагрузки, и для передачи данных между клиентом и сервером потребуется меньше ресурсов.
Из примеров видно, что далеко не всегда оправдано указание директивы компиляции «&НаСервере» с точки зрения использования контекста (данных) формы на сервере.
Если возможно решить возникшую задачу путём отправки на сервер только определённого набора данных, то надо эту возможность использовать и описывать метод под директивой «&НаСервереБезКонтекста». Это позволит уменьшить нагрузку на серверный вызов, а также не занимать сервер обработкой и хранением ненужной в текущий момент информации.
Кстати, именно поэтому до версии платформы 8.3.7.1759 на сложных формах для управления видимостью элементов рекомендовалось использовать панели со страницами, а не свойство «Видимость». Только начиная с этого релиза отработка изменения видимости элементов стала выполняться на стороне клиента.
До этого момента при каждом изменении свойства «Видимость» происходил серверный вызов, как при использовании директивы «&НаСервере».
Но использование директивы «&НаСервереБезКонтекста» не является панацеей. Помимо нагрузки на серверный вызов, всегда необходимо задумываться ещё над одним параметром.
Действие 3. Обработка данных табличной части формы с получением дополнительной информации из Базы данных.
Явление 1. Построчная обработка табличной части на стороне клиента с организацией серверного вызова для получения дополнительной информации из базы данных.
Мы уже знаем – лучше использовать директиву «&НаСервереБезКонтекста».
При таком построении программного кода происходит множественное обращение со стороны клиента на сервер – по количеству элементов цикла, запущенного на стороне клиента.
Явление 2. Предварительная обработка табличной части на стороне клиента с целью подготовки требуемых к обработке на сервере данных и «упаковки» их в набор параметров. Затем передача этого набора на сервер для получения дополнительной информации из базы данных.
Используем всё ту же директиву «&НаСервереБезКонтекста».
В данном случае количество серверных вызовов сведено к минимуму за счёт предварительной подготовки параметров.
Большое количество текущих серверных вызовов может свидетельствовать о неоптимальном программном коде.
Избегайте создания серверных вызовов внутри цикла. Подготовьте набор параметров и единожды выполните его передачу для обработки на сервер. Если предполагается сложная обработка большого количества данных формы – передайте её полностью на сервер (при помощи директивы «&НаСервере») и выполните все действия на стороне сервера.
Если цель серверного вызова, созданного внутри цикла – получить какую-либо информацию из базы данных, то данная операция включает в себя запрос в цикле. А это очень негативно влияет на производительность всей системы в целом.
С директивой «&НаСервереБезКонтекста» вроде бы разобрались. Она нужна для того, чтобы уменьшить объем информации, передаваемой в рамках одного серверного вызова. Дополнительно разобрались с количеством текущих серверных вызовов – необходимо стремиться к их минимизации.
Давайте теперь попробуем разобраться, для чего нужна директива «&НаКлиентеНаСервереБезКонтекста».
Действие 4. Выполнение обработки данных.
Когда предполагается выполнение одной и той же обработки данных из нескольких участков программного кода, разумно этот код поместить в самостоятельную процедуру или функцию. Остаётся только решить, под какой директивой её написать.
Та-дам!
Для копирования у нас есть ксерокс. Но куда его поставить? На сторону клиента или сервера? Под какой директивой его разместить?
Как было озвучено ранее – любая процедура и функция поддерживает обработку информации, переданной в неё в качестве параметров.
Давайте для начала попробуем разместить копировальный аппарат на стороне клиента. Для этого описываем процедуру или функцию «Ксерокс» под директивой «&НаКлиенте». Тогда процесс клиентской части в любой момент сможет без проблем обратиться к ней и все действия будут выполнены в соответствии с программным кодом.
Но что произойдёт, если потребность в копировании возникнет на стороне сервера? Например, для подготовки данных, передаваемых на сторону клиента, потребуется сделать копию? Напомню – процесс серверной части не имеет возможности самостоятельно инициировать клиентские вызовы.
Получается, что использовать директиву «&НаКлиенте» неправильно, а директиву «&НаСервере», как мы изучили ранее – нежелательно. Давайте посмотрим поведение системы при использовании директивы «&НаСервереБезКонтекста».
Вроде бы результат достигнут – и с сервера, и с клиента доступно копирование. Но для того, чтобы получить копию данных, используемых на клиенте, приходится делать серверный вызов. А это опять ведет к лишней нагрузке на соединение и временным затратам.
Избавиться от излишней передачи на сервер при сохранении возможности копирования на клиенте и на сервере можно при помощи директивы «&НаКлиентеНаСервереБезКонтекста».
Не углубляясь в детали, отметим, что метод, описанный под данной директивой управления, создаётся в двух копиях – и на стороне клиента, и на стороне сервера. Это позволяет выполнить необходимые действия там, где появилась потребность в них (клиент/сервер), без лишних серверных вызовов.
Конечно, вместо того чтобы выделять повторяющийся программный код, описывать его в отдельном методе под директивой «&НаКлиентеНаСервереБезКонтекста», можно поступить по-другому. Просто взять и написать один и тот же участок кода и в клиентской, и в серверной процедуре.
С точки зрения выполнения программы результат будет одинаков. Но объяснение «почему так не надо делать» – это уже совершенно другая тема…
Вместо заключения
В данной статье мы на наглядных примерах рассмотрели влияние различных директив компиляции на такое явление системы «1С:Предприятие 8», как серверный вызов. Как видно, основная причина для выбора правильной директивы – производительность транспортировки данных между клиентской и серверной частью.
Придерживайтесь при разработке следующих правил:
- По возможности не передавайте контекст формы на сторону сервера
- Минимизируйте количество текущих серверных вызовов
- Длительные и ресурсоёмкие задачи запускайте на выполнение на стороне сервера (при возможности – в фоновом режиме).
Учитывайте потребность в доступности тех или иных видов данных, обоснованность передачи управления и не стесняйтесь при необходимости дробить процедуры и функции. И будет Вашему серверному вызову всегда легко, а Вы от пользователей Вашей программы получите «молчаливую благодарность»!
Программист Иван при доработке 1С на своём предприятии сделал ошибку в выборе директивы компиляции. Из-за неё длительность одного из серверных вызовов была больше возможной на полсекунды.
Пользователей, применяющих этот функционал, – 25 человек, и каждый из них за рабочий день в среднем совершает 110 таких операций. Всего впустую за рабочий месяц потрачено 28875 секунд (21 рабочий день * 25 человек * 110 операций * 0,5 секунды) = 8,02 часов.
Иван, каково тебе осознавать, что за месяц ты задолжал своему предприятию целый рабочий день?
Об авторе
Автор статьи – Павел Ванин
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.
Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кэш браузера или подписаться через другой браузер.
Комментарии / обсуждение (158):
Всё предельно понятно, спасибо за статью!
Хотелось бы увидеть правильные практические примеры с директивой &НаКлиентеНаСервереБезКонтекста
Добрый день, Ruby!
Много примеров использования директив находится в типовых конфигурациях.
Например, в 1С:УНФ есть вот такая функция под директивой «&НаКлиентеНаСервереБезКонтекста»:
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьЗаголовокНастроек(ТекущийРежим, НовыйЗаголовок)
Результат = “Настройки”;
Если НЕ ТекущийРежим Тогда
Результат = НовыйЗаголовок;
КонецЕсли;
C какой радости “Отсюда делаем вывод: у методов, описанных под директивой «&НаКлиентеНаСервереБезКонтекста», единственным источником данных являются эти самые переданные параметры.” ? С этой директивой можно сделать с базой все что угодно, если код реально будет выполняться в серверном контексте или в толстом клиенте. В тонком просто синтаксический контроль может не пройти. И что за 5 лет никто этого не заметил? Табличка выше этой цитаты тоже вдохновляет. База недоступна. Дальше читать не стал.
Добрый день, . Хочется вам сказать “Браво!” и поаплодировать! (сарказм)
Вы правы – технологических ограничений на доступ к базе данных при серверном исполнении процедуры или функции под директивой «&НаКлиентеНаСервереБезКонтекста» нет. Можно ли считать этот факт опровержением всей статьи? Я считаю – нет, и давайте поясню почему.
В сути данной директивы заложена возможность исполнения одного и того-же кода как на стороне клиента, так и на стороне сервера. И если мы в ней напишем, например, запрос к базе данных, то при компиляции формы возникнет ошибка. Так как со стороны клиентского экземпляра программного модуля формы доступа к базе данных нет.
Про директиву «&НаКлиентеНаСервереБезКонтекста».
Ваши оговорки про толстый клиент и возможность выполнения запроса к базе данных на сервере (игнорируя ошибки, возникающие при компиляции формы) ничто иное, как исключения из правил. Это все равно, что пассатижами гвозди заколачивать – в принципе возможно, но молотком удобнее.
Примеры про доступ к Access и COM-объектам тоже больше похожи на частный случай. Напомню – в ограничениях статьи (которые вы должны были по-идее прочитать, так как они выше описания директив приведены) указано, что рассматривается клиент-серверный вариант работы системы. А это означает, что доступность ресурсов (файлы, объекты, оборудование, …) со стороны клиента и со стороны сервера может иметь существенные отличия.
P.S.
Давайте поясню причину агрессии в своем предыдущем комментарии. Вы не удосужились прочитать статью, но повесили на нее ярлык «плохой контент». В наше время часто перед тем как читать длинный текст, люди пробегаются по комментариям – понять, стоит ли тратить свое время на материал. Увидев ваш комментарий, кто-то может засомневаться в пользе статьи и уйти со страницы. А мне, как автору материала, хотелось бы принести пользу максимальному количеству людей.
Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». В ней будут рассмотрены следующие вопросы:
- Что такое процедуры и функции и когда их нужно использовать?
- В чем отличие процедуры от функции?
- Что такое параметр процедуры (функции) и как его передать?
- В каком случае передавать параметр по ссылке, а в каком по значению?
- Как быстро посмотреть список процедур текущего модуля?
Применимость
Материал полностью актуален для платформы «1С:Предприятие 8» редакций 8.2. и 8.3.
Процедуры и функции
В отдельные процедуры и функции можно выносить общие алгоритмы. Одинаковый программный код из разных модулей (какой-то общий алгоритм) разумно выносить в процедуру или функцию какого-нибудь модуля и обращаться к ней.
При этом мы избавляемся от дублирования кода, заменив его вызовом процедуры (функции). Если возникает потребность внести изменения в алгоритм, то эти изменения будет достаточно внести в одном месте.
Кроме того, процедуры и функции повышают читаемость программного кода. Гораздо проще просмотреть, что выполняет данный код, особенно, если вызовы процедур имеют осмысленные названия.
В итоге облегчается сопровождение прикладного решения.
Следует отметить, что начинающие разработчики иногда для названия процедуры или функции пытаются использовать зарезервированное слово Выполнить.
Зарезервированные слова использовать для этих целей нельзя, и, естественно, в этом случае система будет сообщать об ошибке.
Функция, в отличии от процедуры, может иметь возвращаемое значение. В теле функции для того, чтобы вернуть значение, нужно использовать оператор Возврат и указать то значение, которое будет возвращаться.
Процедура, в отличии от функции, не может иметь возвращаемое значение. Она просто вызывается и выполняет какие-то действия.
Если функция не будет иметь ключевого слова Возврат, то она вернет несуществующее значение, т.е. значение типа данных Неопределено. Вместе с тем, ключевое слово Возврат можно использовать и в процедуре, но в этом случае возвращаемое значение не указывается, а само ключевое слово будет означать: прекратить выполнение процедуры.
Процедура или функция начинает описываться со слова Процедура (Функция). Далее следует Имя процедуры (функции). После имени обязательно указываются круглые скобки. Внутри скобок могут находиться описываемые параметры.
Данные параметры нужно будет передавать при вызове (при обращении к процедуре). После круглых скобок может стоять слово Экспорт (экспортная функция).
Потом следует тело процедуры (функции), т.е. последовательность из любого количества операторов.
В теле могут находиться вызовы других процедур и функций данного модуля или других модулей, которые доступны из текущего программного модуля. Обязательным является наличие заключительного слова КонецПроцедуры (КонецФункции).
После описания процедуры или функции точку с запятой ставить не нужно. При этом Платформа не считает ошибкой, если точка с запятой стоит после последней процедуры (функции) в модуле.
Параметры, переданные в процедуру (функцию) при ее вызове, могут быть использованы при формировании возвращаемого результата функцией или при выборе используемого алгоритма в процедуре.
При описании процедуры или функции мы можем указать, что для какого-либо параметра по умолчанию должно использоваться некоторое значение. Для этого справа от параметра через знак равенства указывается требуемое значение.
В том случае, если при вызове процедуры (функции) значение параметра будет не задано, то оно примет значение, используемое по умолчанию.
Таким образом, параметры, для которых указано значение по умолчанию, являются необязательными для указания при вызове. В описании процедуры(функции) вначале следуют обязательные параметры, а потом необязательные.
Кроме этого, существует передача параметров по ссылке и по значению. Внутри процедуры (функции) параметр может анализироваться, а также может изменяться. Все данные хранятся в оперативной памяти компьютера.
При передаче по ссылке система сообщает, что нужно обратиться к переменной, которая хранится в данной области памяти. В том случае, если значение параметра изменяется, оно меняется именно в указанной области памяти.
Т.е. при вызове процедуры (функции) мы передавали параметр с одним значением, а после отработки вызываемой процедуры (функции) значение параметра изменилось.
В случае передачи по значению указывается, что параметр нужно передавать по значению.
В этом случае вызывается новая область памяти, отличная от предыдущей, и меняется именно она. Исходное значение параметра не меняется.
По умолчанию все параметры передаются по ссылке. Чтобы передать параметр по значению, в описании процедуры перед параметром нужно поставить ключевое слово Знач.
Следует сказать, что в некоторые процедуры-обработчики передается такой параметр, как Отказ. Значение данного параметра по умолчанию – Ложь.
Если в теле процедуры-обработчика установить данному параметру значение Истина, то процедура не отработает.
Порядок следования процедур и функций в модуле 1С:Предприятие 8 значения не имеет. Из любой процедуры (функции) модуля можно вызывать любую другую процедуру или функцию данного модуля.
Чтобы обратиться к списку процедур текущего модуля в панели конфигуратора можно нажать на кнопку в виде лупы с надписью «PROC» или использовать горячие клавиши (Ctrl+Alt+P).
Откроется диалоговое окно, в котором описаны функции F(x) и процедуры P( ). К ним возможно обращаться.
Список может быть отсортирован в алфавитном порядке (для этого устанавливается галочка «Сортировка»).
При снятой галочке процедуры и функции в списке размещены в соответствии с их следованием в модуле.
Кроме процедур и функций в списке для разных модулей будут доступны разные стандартные обработчики. При выборе обработчика двойным кликом мыши в модуле создается шаблон соответствующей процедуры (обработчика события).
Если в диалоговом окне «Процедуры и функции» выбрать процедуру и нажать на кнопку Перейти, то мы окажемся в начале выбранной процедуры (функции).
Справа от кнопки с надписью «PROC» располагается поле. В этом поле указано имя текущей процедуры (функции).
Первичное знакомство с процедурами и функциями будем считать завершенным. Однако отметим, что платформа содержит множество стандартных процедур и функций, логику которых вам не нужно писать самостоятельно. Достаточно только в случае необходимости вызвать их в нужном месте вашего программного кода. Изучением этих стандартных функций мы и займемся в нашей следующей статье :)
PDF-версия статьи
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.
Функция ЗНАЧЕНИЕ - Позволяет использовать прямо в текстах запроса предопределенные в конфигураторе данные. (т.е. позволяет избавиться от необходимости передавать их параметрами к запросу). Использование предопределенных данных конфигурации
Например:
можно было бы написать в запросе:
Код 1C v 8.х
а потом передать в запрос параметр:
Код 1C v 8.х
А при помощи ЗНАЧЕНИЕ будет так:
Код 1C v 8.х
Примеры использования:
Код 1C v 8.х
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Читайте также: