1с не редактируется модуль

Обновлено: 07.07.2024

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

А если подробнее, то изменять вы можете любые модули, кроме модулей обычных форм:

  • Общие модули;
  • Модули объектов (модуль объекта, модуль менеджера и т.п.) для всех типов объектов;
  • Модуль сеанса;
  • Модуль управляемого приложения;
  • Модуль внешнего соединения;
  • Модули команд;
  • Модули форм;
  • и т.д.

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

Здесь и дальше, чтобы вам было проще читать, вместо словосочетания «процедура/функция» мы будем использовать слово «метод». Итак, все изменения, которые вы можете выполнять в модулях, можно разделить на 4 группы:

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

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

Собственные модули
Вы можете создавать в расширении собственные общие модули.

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

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

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

Перехват вызовов методов

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

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


Аннотация &Перед("Процедура1") означает, что перехватывается типовая процедура с именем Процедура1. Имя аннотации Перед означает, что сначала будет выполнена ваша процедура-перехватчик Расш_Проц1(), а затем - типовая Процедура1().

В настоящий момент мы добавили в платформу три возможных имени аннотаций.

Аннотация &Перед

Аннотация с таким именем означает, что ваш перехватчик будет выполнен до того, как начнётся выполнение типового метода.

На схеме типовой и расширяющий модули показаны прямоугольниками, а стрелка показывает последовательность исполнения встроенного языка.


Аннотация &После

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


Аннотация &Вместо

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


На одну и ту же типовую процедуру вы можете установить в своём расширении одну из следующих комбинаций перехватчиков:

  • &Перед;
  • &После;
  • &Вместо;
  • &Перед и &После.

Последняя комбинация перехватчиков (&Перед и &После) будет исполняться следующим образом:


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

Вызов метода, перекрытого аннотацией &Вместо

Получается некоторая несправедливость. Процедуру вы можете перекрыть или обрамить. А функцию – только полностью перекрыть.

Чтобы избавиться от этой несправедливости, мы реализовали во встроенном языке новый метод – ПродолжитьВызов(). Если вы вызовете этот метод внутри своей функции-перехватчика, то исполнится та функция, которую вы перекрыли, после чего исполнение кода вернётся в ваш перехватчик:


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


Таким образом, ваша функция-перехватчик разбивается на две части. Ту часть, которая исполняется перед исполнением типовой функции, и ту, которая исполняется после типовой.

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


Что лучше, &Перед, &После или &Вместо?

Когда вы перехватываете методы типовой конфигурации, всегда полезно помнить о двух вещах:

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

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

Также вполне приемлемым является использование перехватчика &Вместо и метода ПродолжитьВызов(). Однако тут у вас появляется возможность и соблазн вызывать типовой метод не всегда, а в зависимости от каких-то своих собственных условий. К этому нужно подходить осторожно и помнить, что в тот момент, когда вы отказываетесь от вызова типового метода, вы отказываетесь от вызова не только того метода, который есть в конфигурации сейчас, но и от всех его вариантов, которые появятся в будущем. А в будущем, например, в нём могут появиться важные и полезные изменения.

И, наконец, самый «нехороший» вариант – это полное перекрытие типового метода перехватчиком &Вместо. В этом случае типовой обработчик безусловно не будет выполняться ни сейчас, ни в будущих версиях. То есть всю ответственность за работу будущих версий конфигурации вы берёте на себя, на своё расширение. Наверняка есть ситуации, когда такое полное перекрытие необходимо, но мы призываем вас подходить к его использованию очень взвешенно и осторожно.

Последовательность вызовов при перехвате методов

Здесь, прежде чем рассказывать, необходимо сделать небольшое пояснение. Важной, можно сказать, «идеологической» характеристикой расширений является их автономность. То есть расширения должны проектироваться так, чтобы не зависеть друг от друга.

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

Когда вы подключаете расширения к типовой конфигурации, образуется «многослойный пирог». В основании этого пирога находится типовая конфигурация, а на его вершине – последнее подключенное расширение.

Что в конфигураторе, что в режиме 1С:Предприятие, последнее подключенное расширение находится в списке последним.


Таким образом, в этом примере внизу находится типовая, наверху находится Расширение2, а между ними – Расширение1. Каждое следующее расширение перехватывает (расширяет) то, что находится под ним.

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

Пример 1

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


  • Сначала будет вызван перехватчик из Расширения2, потому что оно сверху. Это будет перехватчик &Перед, потому что у него такая аннотация;
  • Затем будет вызван перехватчик из Расширения1, потому что оно следующее в пироге. Это будет снова &Перед, потому что у него такая аннотация;
  • После этого будет вызван типовой метод, потому что больше нет перехватчиков, препятствующих его исполнению;
  • Затем, в обратной последовательности «пирога», будут вызваны перехватчик &После из Расширения1 и перехватчик &После из Расширения2.

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

Пример 2

Если в перехватчиках используется метод ПродолжитьВызов(), то действует тот же самый принцип «пирога».


  • Сначала будет вызван перехватчик из Расширения3, потому что оно сверху. Это будет перехватчик &Вместо, потому что у него такая аннотация;
  • При попытке вызвать типовой метод, будет анализироваться оставшийся «пирог». Анализироваться он будет точно таким же образом, как было описано в предыдущем примере;
  • В результате исполнение кода вернётся в перехватчик &Вместо, а по его завершении – в типовую конфигурацию.

Пример 3

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


В этом примере будет выполнен только перехватчик &Вместо из Расширения2. Потому что он перекрывает собой типовой метод, то есть весь «пирог», который находится под ним.

Пример 4

Это, по сути, вариация на тему второго примера, но когда под верхним расширением находится расширение, также «прокидывающее» вниз вызов типовой процедуры.


По сути, он просто лишний раз визуализирует тот факт, что вызов типового метода относится ко всему «пирогу», находящемуся под расширением. Именно поэтому после вызова перехватчика из Расширения2, будет вызван перехватчик из Расширения1. Потому что в оставшемся «пироге» именно он перекрывает вызов типового метода, до которого хочется «дотянуться» Расширение2.

Перехват обработчиков событий и собственные обработчики в модулях объектов, менеджеров и т.п.

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

Во-первых, в качестве имени перехватываемого метода указывается имя события. Например, ПередЗаписью:


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

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


Перехват обработчиков событий и собственные обработчики в модулях форм

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

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

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


То есть аннотация не используется, а тип перехватчика указывается в палитре свойств. Делается это довольно просто. При создании в расширении обработчика по кнопке «лупа» открывается диалог. Он позволяет вам, помимо контекста, указать тип перехватчика (Перед, После или Вместо).


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


Если вы перекрываете типовой обработчик (Вместо), то это будет просто точка.

Если вы создаёте перехватчик Перед или После, то это будет точка рядом с вертикальной чертой. Местонахождение точки, перед или после черты, обозначает тип перехватчика. А кроме этого в палитре свойств появляется второе (пустое) поле рядом с этим событием. С его помощью вы можете задать парный перехватчик, если есть необходимость обрамить типовой обработчик парой Перед - После.

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

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

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

Общие модули

В расширении вы можете создавать любые собственные общие модули. Существует только два ограничения:

  • Они не должны быть глобальными серверными;
  • Они не должны быть привилегированными.

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

  • Нельзя заимствовать глобальные серверные модули;
  • Код из вашего расширения будет исполняться только в непривилегированном режиме (если иное не разрешено в профиле безопасности).

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

Серверные методы расширяются не всегда

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

Если прикладное решение работает в файловом варианте или в клиент-серверном варианте без профилей безопасности, то при подключении вашего расширения:

  • В обычном режиме исполнения встроенного языка - будут расширяться все методы типового решения, и клиентские, и серверные;
  • В безопасном режиме исполнения встроенного языка - будут расширяться только клиентские методы и серверные обработчики форм. К остальным серверным процедурам / функциями расширение применяться не будет.

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

Для этого в профиль безопасности мы добавили несколько новых свойств.


Самое простое из них – это флажок к расширению всех модулей в группе Разрешен полный доступ. Он «одним махом» разрешает расширение серверного контекста.

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

Обновлял измененную конфигурацию УПП 1.3. Сравнивались объекты, нажал фильтр = > Показать дважды измененные, проанализировал как обычно и обновил.

НО! Изменились некоторые модули, которые не были дважды измененными, и платформа сама должна их правильно обновить, но не тут-то было. Изменились измененные модули, причем на этих измененных модулях стояло правило поддержки "Не редактируется". Так вот они стали типовыми.

Как так-то? и Как это обойти?

УПП 1.3.67.1 - 1.3.67.3
1С:Предприятие 8.3 (8.3.5.1248)
Windows Server 2008 R2 Standart
MS SQL

(1) Ну что тут скажешь? Тщательнее надо смотреть. Фокусов типа "Не хотел а оно само как-то обновилось" не бывает.

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

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

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

Я так понимаю, если указать измененному модулю признак "Не редактируется", то при обновлении платформа автоматически принимает решение взять ее из новой конфигурации (3) Объект не редактируется - это значит что программист не может туда внести изменения.
Наверно замечал, что на всех объектах типовых конфигураций стоит признак "Не редактируется".
Но это не мешает платформе изменять объекты при обновлении
Что бы объект не обновлялся его надо снять с поддержки или в процессе обновления снимать галочку вручную. Это понятно. Видимо кто-то изменил модуль, а потом поставил на него "не редактируется"

(5) Вопрос "кто-то изменил" конечно интересный.
Разрешение редактирования, как и запрет можно устанавливать если в этом есть смысл.
По идее, если вы как программист взяли конфигурацию на обслуживание, то самым первым делом надо понять что это за кот "в мешке".

Сделайте сравнение с конфигурацией поставщика.
Выясните какие объекты изменены.

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

PS.: Решение найдено.
При добавлении расширения необходимо снять галочку "Безопасный режим, имя профиля безопасности" . После этого расширение функций директива &Вместо (и прочие) будут работать.

Jesdva; Zlaya-Ferio; krovohlebka; r.pronin; ДимокШ; pepper62; Bespechnii_kot; EVKash; cleaner_it; resonance; Nat_S; Vorkuev; Leon29; Millir; gorin; Crazy_kz; acanta; swimdog; zakiap; Actgal; hostguy; user705522_constantin_h; + 22 – Ответить (1) Предполагаю что вопрос уже неактуален, но всё же для тех, кого поиск приведет сюда:
В приведенном фрагменте кода не хватает директивы компиляции "&НаКлиенте"
Судя по параметру расширяемой процедуры (Команда) - это клиентская процедура.
А переопределенная - компилируется на сервере (по-умолчанию, если нет директивы)
Вот так должно работать:
Zlaya-Ferio; user1517843; _Vovik; Klainor; Alister; dozy82; Rastopchinss; pepper62; EVKash; Bespechnii_kot; kaliuzhnyi; user613307_bolotnikoff.a; debuger; Aspire1C; user651247_kovd; helenoc; infostartuser1; rintik; cyclov; ivan_luzinov; xamass; TManukovskaya; acanta; swimdog; KolBbl4; artem_savonin; Dmitryiv; denmon88; Apo; GAS.tlt; jane_de_rio; IvanVL; metakot; maxil; GIZmo; + 35 – Ответить (8) ух ты. завтра проверю. тема-то актуальна. не думал, что директиву контекста выполнения нужно явно указывать. если заработает, с меня +1$m

(1)сегодня как раз занимался этим. Изменил процудуру модуля формы документа
Создал процедуру ПриОткрытии через конструктор Рис1.
Процедура создалась, &Вместо("ПриОткрытии") отсутсвтует, создает так Рис2)
Все отработало

Если что можно почитать ТУТ

А безопасный режим в расширении конфигурации выключен? (2) Естественно. Говорю же в общем модуле работает. В модуле формы - нет.

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

К слову перехват методов модулей объектов и общих модулей работает.
Может быть когда-нибудь и до модулей форм дело дойдет, но пока - не работает.

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

Редактор текстов и модулей предоставляет пользователю все основные функции, необходимые при редактировании как простых текстов, так и текстов программных модулей. Конфигуратор 1С:Предприятия 8 использует этот редактор в двух режимах:
  • для редактирования текстовых документов;
  • для редактирования текстов модулей (как составную часть редактора формы).

Редактирование текстовых документов

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

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

Редактор текста и модуля

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

Редактор текста и модуля

Редактирование текстов модулей

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

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

Выделение цветом синтаксических конструкций

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

Редактор текста и модуля

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

Редактор текста и модуля

Группировка

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

Редактор текста и модуля

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

Редактор текста и модуля

Разработчику предоставляется возможность настраивать режим группировки, указывая, какие синтаксические конструкции могут группироваться, и каким должно быть исходное состояние группировки (свернутая или развернутая) при открытии документа. Таким образом, он может настроить, например, использование группировок «по максимуму»:

Редактор текста и модуля

Области

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

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

Редактор текста и модуля

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

Операции с блоками

Редактор позволяет выполнять ряд операций над выделенными блоками текста модуля: автоматическое форматирование, изменение отступа, добавление/удаление комментариев и переносов строк.

Редактор текста и модуля

Форматирование модуля

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

Редактор текста и модуля

Результат автоматического форматирования:

Редактор текста и модуля

Увеличение/уменьшение отступа

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

Это облегчает ручное форматирование больших фрагментов кода.

Добавление/удаление комментариев

Также редактор содержит очень удобную для разработчика функцию автоматической (одним нажатием мыши) установки и снятия комментариев на выделенный текст. Такая возможность часто используется при отладке модулей:

Редактор текста и модуля

Добавление/удаление переноса строки

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

Таким образом, отладив запрос в консоли запросов, разработчик может просто скопировать текст запроса из консоли, вставить его в модуль и одним движением добавить перенос строки ко всем строкам текста запроса:

Редактор текста и модуля

Переход по процедурам и функциям

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

Редактор текста и модуля

Редактор текста и модуля

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

Переход к определению процедур и функций

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

Редактор текста и модуля

Контекстная подсказка

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

Редактор текста и модуля

Контекстная подсказка также работает и для параметров некоторых методов, если эти параметры задаются строковыми литералами.

Редактор текста и модуля

Копирование имен объектов и реквизитов

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

Редактор текста и модуля

Проверка модуля

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

Редактор текста и модуля

Кроме этого конфигуратор поддерживает выполнение полной проверки всех модулей, содержащихся в прикладном решении.

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

Ограничение доступа к модулю

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

Редактор текста и модуля

Использование шаблонов

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

Работаю с 1С: Предприятие 8.3 Практическое пособие разработчика. Только начинаю изучение этой программы и этого странного языка. Возникла такая проблема (до этого тоже возникало куча проблем и несовпадений кода из пособия и действительности, но до сих пор получалось все исправлять) - 1 модуль на скриншоте почему то не работает, хотя второй почему то да. Задача: при изменении пункта Цена или Количество в Документах изменять Сумму по формуле "Цена * Количество = Сумма". Второй модуль на скриншоте был создан раньше и, возможно, проблема в этом, но почему то думается, что дело не в этом. Помогите решить эту проблему, а так же можете дать мне советы о том, что мне нужно знать об языке 1С. Ответы со скриншотами, пожалуйста.

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

У документа должна быть определена "Форма документа" - проверьте, если она не создана, то создайте и выберите ее по умолчанию (у меня на скрине их две, у вас возможно будет одна "ФормаДокумента"). Т.е. мы говорим 1с какую форму хотим показывать пользователю.

На форме документа (та которую выбрали по умолчанию) расположена табличная часть "Материалы", в которой есть колонки "Количество", "Цена" и т.д. Проверьте свойство "ПриИзменении" для каждой колонки (Количество и Цена). В этом свойстве указывается какая процедура будет вызвана при изменении значения.

введите сюда описание изображения

Например для колонки "Цена" должно быть так:

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

введите сюда описание изображения

Еще проверь свойство общего модуля РаботаСДокументами

Если предложенное решение Вам помогло, то отметьте его галочкой пожалуйста. Таким образом Вы повысите свою и мою репутацию на сайте. Это даст нам больше возможностей. Спасибо.

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