Ошибка при вызове метода контекста установитьдействие

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

Текст ошибки:

{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(3183)}: Ошибка при вызове метода контекста (УстановитьДействие)

   ПолеВвода1.УстановитьДействие(«ПриИзменении», Д);

по причине:

Недопустимое значение параметра (параметр номер ‘2’) (Процедура, указанная в качестве обработчика события, имеет неверное количество параметров)

Вот код:

Д = Новый Действие(«ПриИзмененииПолеВвода1»);

ПолеВвода1.УстановитьДействие(«ПриИзменении», Д);

17.04.202313.05.2023Ошибки

Данная ошибка возникает при попытке установить действие для события формы или элемента управления формы, где вместо объекта Действие, Вы указываете строку:

ЭтаФорма.УстановитьДействие("ПриОткрытии", "ПриОткрытии");

Правильный синтаксис установки действия выглядит так:

ЭтаФорма.УстановитьДействие("ПриОткрытии", Новый Действие("ПриОткрытии"));

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

Поделиться страницей в соц.сетях

Метки: Метки Обычные формы

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

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

наверно наоборот надо. Типа ЭлементыФормы.ПодразделыДоговора.Колонки.Раздел.ЭлементУправления = Новый ПолеВвода; тогда не нужно задавать «Данные» и лево-право верх низ само посчитается.

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

блин ! вот это не закомментированно !!! ЭлементыФормы.ПодразделыДоговора.ТекущаяСтрока = Строка;

шутите? элементы же вот так добавляются |

это вообще мне кажется не реально счас посыплются ошибки и тд. и тп.

как вариант: Форма.ТабПоле.УстановитьДействие(«ТабПолеПриАктивизацииСтроки», Новый Действие(«ПриАктивизацииСтроки»)); …. КонецПроцедуры

Exchang скажите а а при программном переборе строк будет срабатывать процедура ТабПолеПриАктивизацииСтроки ? Так как табличная часть эта не видимая и заполняется программно, задача выводить реквизиты её строк в динамически сознаваемые поля ввода для удобства редактирования пользователя и перенос их изменений обратно…

изначально осуществляется перебор строки Тч, так что процедуру надо привязывать к Тч, я ранее с этим не сталкивался и очень плаваю счас. В все работает, но значения ставятся по последней строке это не понятно(((( веть в данные я добавляю все новые значения…

Извините, но вы вообщек не в тему, что очевидно то очевидно без таких нелепостей. А если все же проблема остается то и вопросы тоже!!!

ругается: {Документ.Договора.Форма.ФормаДокумента}: Ошибка при вызове метода контекста (УстановитьДействие): Недопустимое значение параметра (параметр номер ‘1’) ЭлементыФормы.ПодразделыДоговора.УстановитьДействие(«ПодразделыДоговораПриАктивизацииСтроки», Новый Действие(«ПриАктивизацииСтроки»));

наоборот ЭлементыФормы.ПодразделыДоговора.УстановитьДействие(«ПриАктивизацииСтроки», Новый Действие(«ПодразделыДоговораПриАктивизацииСтроки»));

ну так задачи то две: 1 — отображать данные текущей строки таб поля, 2 — при изменении значения элемента, захватывать объект и записывать. Если я правильно понял..

счас: {Документ.Договора.Форма.ФормаДокумента}: Ошибка при вызове метода контекста (УстановитьДействие): Несоответствие типов (параметр номер ‘2’) ЭлементыФормы.ПодразделыДоговора.УстановитьДействие(Новый Действие(«ПриАктивизацииСтроки»), «ПодразделыДоговораПриАктивизацииСтроки»); по причине: Несоответствие типов (параметр номер ‘2’) (

вот ошибка: {Документ.Договора.Форма.ФормаДокумента}: Ошибка при вызове метода контекста (УстановитьДействие): Недопустимое значение параметра (параметр номер ‘2’) (Процедура, указанная в качестве обработчика события, имеет неверное количество параметров) ЭлементыФормы.ПодразделыДоговора.УстановитьДействие(«ПриАктивизацииСтроки», Новый Действие(«ПодразделыДоговораПриАктивизацииСтроки»)); по причине: Недопустимое значение параметра (параметр номер ‘2’) (Процедура, указанная в качестве обработчика события, имеет неверное количество параметров)

=)))) что то я мозги тебе пудрю

было верно, а ты в разделе основной программы модуля формы описал?

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

да я писал в модуле формы

у документа одна форма, и я пишу в её модуле, до цикла | ЭлементыФормы.ПодразделыДоговора.УстановитьДействие(«ПриАктивизацииСтроки», Новый Действие(«ПодразделыДоговораПриАктивизацииСтроки»)); | ну и потом хочу описывать процедуру

тама что то про параметры пишется, может в самом деле нужен ещё параметр?

ну да, как и тут показал, скопировал из модуля

ПодразделыДоговораПриАктивизацииСтроки(элемент)

Это при объявлении самой процедуры….

ну да, только счас надо определиться что за Элемент, — ЭлементыФормы.Элемент.Значение = ЭлементыФормы.ТабПоле.ТекущаяСтрока[1]; так как я же его создавать хочу программно

элемент -это параметр.. а вот твой элемент называй по другому

то есть при переборе строк запускается процедура ПодразделыДоговораПриАктивизацииСтроки(Элемент) в ней нужно создавать программно Поле Ввода, выводить в него нужное поле строки….я правильно понимаю?

Элемент -это сама строка?

элемент.ТекущиеДанные, это строка

почему то только номер строки сразу 2 идет (((( а должен же с 0 идти !!!

не, пиши ЭлементыФормы.ПодразделыДоговоры.ТекущаяСтрока

хотя счас гляну, может у меня точка останова не там стояла…

кажется надо в начале цикла вставить вот эту строку    ЭлементыФормы.ПодразделыДоговора.ТекущаяСтрока = Строка; тогда будет вызываться процедура ПодразделыДоговораПриАктивизацииСтроки(Элемент)

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

Строка, это итератор цикла Для Каждого Строка Из ПодразделыДоговора Цикл

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

пока обнаружил что процедура ПодразделыДоговораПриАктивизацииСтроки(Элемент) вызывается при проходе строки, — ЭлементыФормы.ПодразделыДоговора.ТекущаяСтрока = Строка;

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

вот счасгеморно переписывать цикл, в то у меня все циклом шло:

это тот вариант, что не работал, загоняя в поля последнюю строку, хотя программно все нормально шли, и заносились в данные разные значения…

блин все равно ничего не работает ((((

реально это программирование с использованием методов ничего не дало ( все сводится как в переписывается все по последнему значению (

Я не могу вывести значения, ЭлементыФормы.ПодразделыДоговора.УстановитьДействие(«ПриАктивизацииСтроки», Новый Действие(«ПодразделыДоговораПриАктивизацииСтроки»)); и вызывается после строки ЭлементыФормы.ПодразделыДоговора.ТекущаяСтрока = Строка; но нифига все равно не работает, все сводится к одной последней строке((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

как мне в создаваемые поля то запихать знеачения строки???????????????????? что бы они были разные, а не переписывались под конец работы цикла на последнюю строку

| на вот это ругается так нельзя

короче переписывается на последнюю строку и все (((( | ПодразделДоговора.Данные         =    «ЭлементыФормы.ПодразделыДоговора.ТекущиеДанные.Подраздел»; | я там создаю элемент и мне надо задать значение в данные, в значение не могу, так как я не знаю название элемента, надоело мне этот велик крутить (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

моя тебя совсем не понимать, скажи по русски

ЗНАЧЕНИЯ Я ПОМЕЩАЮ ВОТ ТАК РазделДоговора.Данные         =    «ЭлементыФормы.ПодразделыДоговора.ТекущиеДанные.Раздел»; ПодразделДоговора.Данные         =    «ЭлементыФормы.ПодразделыДоговора.ТекущиеДанные.Подраздел»; ЦИКЛ ОТРАБАТЫВАЕТ И ВО ВСЕХ ПОЛЯХ ЗНАЧЕНИЯ ПОСЛЕДНЕЙ СТРОКИ ОБРАБАТЫВАЕМОЙ ТАБЛИЦЫ

так блин конечно же так не получится: РазделДоговора.Данные         =    «ЭлементыФормы.ПодразделыДоговора.ТекущиеДанные.Раздел»; он же устанавливается на текущие данные, строка поменалясь и данные тоже. храни тогда номер строки что ли.. как бы так..

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

ну а если так? Элемент.ТекущаяСтрока.Раздел или Элемент.ТекущаяСтрока.Подраздел тоже ничего не выйдет? или надо именно через ЭлементыФормы ? можно так ЭлементыФормы.ПодразделыДоговора.ТекущаяСтрока.Раздел или ЭлементыФормы.ПодразделыДоговора.ТекущаяСтрока.Подраздел вы про это говорили?

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

(+57) не так не пойдет говорит не правильный путь к данным и все по новой (((( переписывается на последнюю строку (((((

как хранить номер строки???? | и что все же задавать в РазделДоговора.Данные или в ПодразделДоговора.Данные

весь вопрос в том, что запихивать в: РазделДоговора.Данные и в ПодразделДоговора.Данные | что бы не переписывалось это на последущие строки (!

1) ты странно здесь вот так идешь: а строка на одном месте стоит.. 2) создавай реквизиты, присваивай им значения текущей строки при обходе, и присваивай данным эти реквизиты. можешь использовать свойство формы «ДополнительныеСвойства»

я вызываю ЭлементыФормы.ПодразделыДоговора.ТекущаяСтрока = Строка; что бы вызывалась процедура ПодразделыДоговораПриАктивизацииСтроки(Элемент) как иначе её вызвать? почему строка на месте стоит??? она перемещается по циклу

переменных то я могу хоть сколько получать, но в «Данные» надо указывать же путь данным !!! я не знаю названия поля и в значения не могу задавать….

сорри, я не знаю что такое «ДополнительныеСвойства»

если закоментачить эту строку | | то ПодразделыДоговораПриАктивизацииСтроки(Элемент) вообще не будет вызываться (

ПодразделыДоговора а это справочник?

короче в данные можно только так пихать ((( «ЭлементыФормы.ПодразделыДоговора.ТекущиеДанные.Раздел» иначе выдает ошибки….не правильный путь к данным там, и прочее …

это табличная часть у документа

у неё 2 поля, Раздел и Подраздел если разделы повторяются то я их пропускаю выводя один, как и в отчете ну и вывожу подразделы к каждому разделу, хочу вывести это в поля ввода что бы потом изменять , редактировать …

ну тогда кажись, да, ты прав, никак! :) просто запоминать и по номерам строк если.. полеввода1=номерстроки1,…

что запоминать то? в данные надо прописывать путь с ТекущиеДанные и в полях везде будут одинаковые значения (((( как сделать то что нужно я не понимаю (

дело в том что я эту таблицу заполняю при смене договора на форме может тогда добавить в неё поле «ИмяПоляВвода» и создавать поле на каждую строку и тогда оно его и менять будет? что то уже никак не соображаю (

так ты же хошь сразу хранить несколько ссылок, т.е. текущих данных.. а они только одни вроде в нужный момент

да я счас вообще ничего не понимаю (

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

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

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

я короче не знаю зачем тебе это нужно редактировать сразу несколько и одновременно, редактируй по отдельности каждую отдельную текущую строку, и все будет ок!

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

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

дело в том что в данные Элемента надо всегда прописывать ТекущиеДанные, это так? тогда ничего не будет работать и пытаться не стоит ((((

все будет переписываться на последнюю строку

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

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

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

не нереально потома же надо будет хранить всю эту структура а созданная программно она наверное не сохранится

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

Тэги:

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

В платформе 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С.

Содержание

  1. Как программно установить событие для элемента формы?
  2. Похожие FAQ
  3. Еще в этой же категории
  4. УстановитьДействие в расширении.
  5. Программное добавление колонки в ТЧ
  6. Привязать обработчик события к табличному полю
  7. Обработчик ПриИзменении для ячейки, созданной программно

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

Похожие FAQ

Еще в этой же категории

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

Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора

Заполнение списка значений в элементе поле выбора на форме 11
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Источник

УстановитьДействие в расширении.

Платформа: 1С:Предприятие 8.3 (8.3.12.1790)

Как программно установить действия для полей ввода (ПриИзмененииПеред, ПриИзмененииПосле, ПриИзмененииВместо) в расширении конфигурации?

По идеи должно быть что-то вроде этого

Но если бы это работало — вопроса бы не было.

(1)А так и не будет работать. Что за объект — Номенклатура?

Вот как у меня например работает

(2)Элементы.Номенклатура это поле ввода.

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

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

Или совсем по-простому: как сделать так, чтобы добиться такого-же эффекта как на скрине, пользуясь только кодом?

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

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

(4) Замечательная идея — благодарю.

Из того что я начитал везде, где только можно, вот прям как я хочу — делать нельзя.
Но ваш вариант — очень хорошая альтернатива 10/10))

словил зацикливание при таком решении. Решил дополнить

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

При создании на сервере:

//устанавливаем действие, при этом типовой код не отработает(без наших усилий в обработке действий)
Элементы.БанковскийСчет.УстановитьДействие(«ПриИзменении», «ПИК_БанковскийСчетПриИзмененииПосле»);

//Данный реквизит нужен что бы избежать зацикливания в обработке события
ДобавляемыеРеквизиты = Новый Массив;
НовыйРеквизит = Новый РеквизитФормы(«ПИК_Выполнено»,Новый ОписаниеТипов(«Булево»));
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ЭтотОбъект.ПИК_Выполнено = Ложь;

&НаКлиенте
Процедура ПИК_БанковскийСчетПриИзмененииПосле(Элемент)

имяСтароеДействие = «БанковскийСчетПриИзменении(Элемент)»;
Если Не ЭтотОбъект.ПИК_Выполнено Тогда
ЭтотОбъект.ПИК_Выполнено = Истина;
Выполнить(имяСтароеДействие);
КонецЕсли;
ЭтотОбъект.ПИК_Выполнено = Ложь;

//наше действия
НастройкаВидимостиИДоступностиПриПеремещенииВ1Организации();

Источник

Программное добавление колонки в ТЧ

(3)То что они добавляются программно как то ущемляет их права?шучу )

Расширение элементов управления принадлежащих табличному документу.УстановитьДействие (Spreadsheet document controls extension.SetAction)
Расширение элементов управления принадлежащих табличному документу (Spreadsheet document controls extension)
УстановитьДействие (SetAction)
Синтаксис:

Тип: Строка.
Имя события.
(обязательный)

Тип: Действие.
Устанавливаемое действие.
Описание:

Устанавливает новую процедуру-обработчик (действие) для указанного события.

Толстый клиент.
Примечание:

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

(4) спасибо Вам большое, буду пробовать =) То есть будет
НоваяКолонка.УстановитьДействие(«ПриИзменении»,Колво1ПриИзменении);?

Ошибка: <ОбщийМодуль.ДоработкиКлиент.Модуль(335)>: Метод объекта не обнаружен (УстановитьДействие)
НоваяКолонка.УстановитьДействие(«ПриИзменении»,ПерерасчетРазницыФактаИПлана);

переделала через элементУправления:
НоваяКолонка.ЭлементУправления.УстановитьДействие(«ПриИзменении»,ПерерасчетРазницыФактаИПлана);
Ошибка: <ОбщийМодуль.ДоработкиКлиент.Модуль(335)>: Ошибка при вызове метода контекста (УстановитьДействие)
НоваяКолонка.ЭлементУправления.УстановитьДействие(«ПриИзменении»,ПерерасчетРазницыФактаИПлана);

В обработчике ПриИзменении есть параметр Элемент(на его отсутствие ругается)

по причине:
Процедура, указанная в качестве обработчика события, имеет неверное количество параметров

Источник

Привязать обработчик события к табличному полю

Обработчик события (последняя строка в коде) не отрабатывает.
также в строке ПолеРегистра.Данные=»ВГС_ЗамечанияПоСогласованиюДокумента»; возникает ошибка, т.е. не заполняется это свойство табл.поля.

Событие «ПриНачалеРедактирования» должно содержать три параметра:

В синтаксис помощнике описано следующее:
ТабличноеПоле (TableBox)
ПриНачалеРедактирования (OnStartEdit)
Синтаксис:

Тип: Булево.
Признак редактирования новой строки. Имеет значение Истина, если строка была добавлена или скопирована.

Тип: Булево.
Если данный параметр имеет значение Истина, то выполняется копирование строки.

По факту необходимо описывать:
ПриНачалеРедактирования( , , )
где — это элемент управления, который является источником события.

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

Таким образом в модуле формы должна быть описана процедура

Что же касается строки:
ПолеРегистра.Данные=»ВГС_ЗамечанияПоСогласованиюДокумента»;
То «ВГС_ЗамечанияПоСогласованиюДокумента» должен быть реквизитом формы, либо реквизитом объекта, являющегося основным реквизитом формы, если это не так, то таких данных не существует. Но ни кто не запрещает сделать так:
ПолеРегистра.Значение = Новый (Тип(«РегистрСведенийСписок.ВГС_ЗамечанияПоСогласованиюДокумента»));
А затем далее устанавливать для этого значения отборы, обновлять и т.п., например:
ЭлементыФормы.ВГС_ЗамечанияПоСогласованиюДокумента.Значение.Обновить();

Источник

Обработчик ПриИзменении для ячейки, созданной программно

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

Я не тем путём иду?

вот код (примерно), индексы чтобы понятно было:

как сделать так, чтобы в колонке с единицей измерения при изменении в списке подбора были только те элементы справочника ЕдиницыИзмерения, у которых владелец — тот, что в нулевой колонке?

(26) Попытка номер 2.

что написано в поле «Данные» свойств табличного поля?

(30) при выборе в элементе управления, конечно, я неправильно в (24) выразился.

короче, при изменении в ячейке.

(40) хм, а в чём радость?
нужен выбор единицы измерения по владельцу при изменении именно в ячейке .ЕдиницаИзмерения

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

(43) таблица установки цен:

| Магазин 1 | Магазин 2 |
Номенклатура | Цена | Ед. изм. | Цена | Ед. изм. |
—————+——+———-+——+———-+
Marlboro | 32 | пачка | 34 | пачка |
Marlboro | 640 | блок | 680 | блок |
Яйца 1 кат. | 20 | 1 дес. | 21 | 1 дес. |
Яйца 1 кат. | 60 | 3 дес. | 63 | 3 дес. |

Нужно, чтобы когда пользователь выбирает единицу измерения в ячейке, то выбирались только те элементы справочника ЕдиницыИзмерения, у которых владелец — элемент номенклатуры в первой колонке. Т.е. чтобы для яиц не выбралась единица «блок» и т.д.

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

можно ещё сделать свои формы добавления и редактирования строки табличного поля (чтобы не прямо в поле редактировать), но тоже некрасиво

но так наверное и сделаю как ты посоветовал.

Использование:
Только чтение.
Описание:
Номер элемента объекта, с которым связано по типу поле ввода. Например, если поле ввода связано со ссылкой на счет, то номер элемента будет обозначать номер вида субконто, из которого будет взят тип для отработки связи.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Нумерация начинается с 1.

(51) да это всё равно не то.

а как по данной строке объекта ТаблицаЗначений получить соответствующую строку в объекте ТабличноеПоле?

Источник

  • Главная
  •  — 
  • Форум
  •  — 
  • ТЕХПОДДЕРЖКА
  •  — 
  • ЭКСЕЛОН — Загрузка в 1С из EXCEL
  •  — 
  • Ошибка при вызове метода контекста (Записать)
 

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

Номенклатура_СоздатьОбновить 020: {ВнешняяОбработка.APPLIX_RU_ЗагрузкаИзExcel_ЗМ.МодульОбъекта(70081)}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {Справочник.Номенклатура.МодульМенеджера(2911)}: Преобразование значения к типу Булево не может быть выполнено

 

Ошибка при попытке обновить номенклатуру

 

1С:Предприятие 8.3 (8.3.20.1674)
Управление торговлей, редакция 11 (11.5.7.336)
модуль загрузки 16.5.8

Прикрепленные файлы

 

Модуль создал номенклатуру, теперь ее невозможно открыть

ТекстыЗапросов = Новый Массив;
ПараметрыЗапроса = Новый Структура;

ИменаОбъектовМетаданных = Новый Массив;

Для Каждого СсылкиПоТипу Из СсылкиПоТипам Цикл
Тип = СсылкиПоТипу.Ключ;
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
Если ОбъектМетаданных = Неопределено Тогда
ВызватьИсключение
НСтр(«ru = ‘Неверный первый параметр Ссылки в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов:
          |- Значения массива должны быть ссылками'»);
КонецЕсли;

ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя();
ИменаОбъектовМетаданных.Добавить(ПолноеИмяОбъектаМетаданных);

Прикрепленные файлы

 

пришлите ваш файл и скриншоты всех настроек колонок

 
 
 

у нас загрузилось нормально

доступ к базе дадите? попробуем на вашей базе отладкой посмотреть что не так

 

Сергей Юданов

Пользователь

Сообщений: 23
Регистрация: 09.04.2019

#9


0
 

30.05.2022 15:03:02

Разобрались сами.

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

ПОСЛЕДНИЕ СООБЩЕНИЯ

Сейчас на форуме (гостей: 73)

Всего зарегистрированных пользователей: 2227

Приняло участие в обсуждении: 367

Всего тем: 824

Ivanich80

28.11.10 — 02:35

Прошу сильно не пинать если глупый вопрос.

Надо при начале работы запустить обработчик ожидания:

ПодключитьОбработчикОжидания(«ВыставлениеСчетов», Истина, 3);

делаю я это в МодулеУправляемогоПриложения

сама процедура ВыставлениеСчетов с параметрами &НаСервере

пишет ошибку

{МодульУправляемогоПриложения(52)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)

Недопустимое значение параметра (параметр номер ‘1’)

Почему в МодулеУправляемогоПриложения ругается на подключение обработчика ожидания даже если в нем идет ссылка на вообще пустую процедуру? Мне нужно чтобы он срабатывал ПриНачалеРаботы, как это можно сделать?

Armando

1 — 28.11.10 — 03:07

Традиционно: Продам СП!!! Оооочень дорого!!!!!

Ivanich80

2 — 28.11.10 — 15:32

Ну из справки читаем пример
Пример:

Процедура ОтчетОпродажахЗаДень() // ... 
КонецПроцедуры
 //... 
ПодключитьОбработчикОжидания("ОтчетОпродажахЗаДень", 60); 

и что я не так делаю?

Armando

3 — 28.11.10 — 15:50

(2) ну читаем выше

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

У тебя:
>> сама процедура ВыставлениеСчетов с параметрами &НаСервере
Ничего не смущает?

Ну и еще:

ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)

У тебя:
>>ПодключитьОбработчикОжидания(«ВыставлениеСчетов», Истина, 3);
Опять ничего не смущает?

Ivanich80

4 — 28.11.10 — 16:08

прикол, сделал как из справки 

в процедуру ПриНачалеРаботы 
ПодключитьОбработчикОжидания("ОтчетОпродажахЗаДень", 60); 

&НаКлиенте
Процедура ОтчетОпродажахЗаДень() // ...  
КонецПроцедуры

пишет туже ошибку, сделано по справке :), щас попробую это закинуть в собственный общий модуль

Armando

5 — 28.11.10 — 19:08

(4)

Имя ЭКСПОРТируемой процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля

не?

Ivanich80

6 — 28.11.10 — 21:44

Сделал общий модуль название «ВыставлениеСчета», у этого модуля в свойствах стоит галочка Клиент(управляемое приложение).

Допустим в данном модуле записана процедура 

Процедура ВыставлениеСчета ()
Соощить ("Обработчик ожидания сработал");
КонецПроцедуры

Там же в этом же модуле

&НаКлиенте
Процедура Сообщение () Экспорт
ПодключитьОбработчикОжидания("ВыставлениеСчета", 3);
КонецПроцедуры

В модуле управляемого приложения в процедуру ПриНачалеРаботыСистемы  вызываю обработчик ожидания
из модуля ВыставлениеСчетов

ВыставлениеСчетов.Состояние();

Пишет ту же ошибку Ошибка при вызове метода контекста (ПодключитьОбработчикОжиания), что я не так делаю?

Кто нибуть подключал его в 8.2?
Дайте пример какой нибуть, пожалуйсто

Armando

7 — 28.11.10 — 23:21

&НаКлиенте
Процедура ВыставлениеСчета() Экспорт

Ivanich80

8 — 28.11.10 — 23:28

Нет, тоже самое ругается, что такое то, как его подключить то?

Ivanich80

9 — 29.11.10 — 02:17

Проблема вот в чем, я разобрался он отрабатывает только те процедры у которых деректива &НаКлиенте, а если надо запустить процедуру у которой деректива &НаСервере он на неё будет ругаться, надо в обработчикожидания запстить процедуру с дерективой &НаСервере там в этой процедуре запрос его надо отработать при запуски системы, как тут поступить?

Armando

10 — 29.11.10 — 07:14

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

Ivanich80

11 — 29.11.10 — 07:35

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

Ivanich80

12 — 29.11.10 — 07:44

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

Armando

13 — 29.11.10 — 08:16

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

Armando

14 — 29.11.10 — 08:24

Ivanich80

15 — 29.11.10 — 09:02

Хорошо, вот моя конфигурация

http://webfile.ru/4933156
Там есть в общем модуле, мой модуль называется он «ВыставитьСчет» , в этом модуле процедура &НаСервере «ВыставитьСчет» с запросом её надо вызвать в модуле управляемого приложения с помощью обработчика одидания в процедуре ПриНачалеРаботыСистемы, не знаю не получается что то

Armando

16 — 29.11.10 — 09:59

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

  

Ivanich80

17 — 29.11.10 — 11:00

Разобрался, Armando — спасибо тебе большое!

0

04.07.2013 — 09:31


Добрый день!

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

&НаКлиенте
Процедура ОболочкаОбработчика()
ПрочитатьОтветНажатие();
КонецПроцедуры

ПодключитьОбработчикОжидания(«ОболочкаОбработчика» , 10, Ложь)

Получаю такую ошибку:

{Обработка.ЗапросКБМ.Форма.РасчетКБМ.Форма(445)**: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания(«ОболочкаОбработчика» , 10, Ложь)
по причине:
Метод недоступен на сервере

1

04.07.2013 — 09:34

Цитата:

Сообщение от raevsky Посмотреть сообщение

Метод недоступен на сервере

и чё непонятно?

2

04.07.2013 — 09:38

Непонятно каким образом Подключить Обработчик Ожидания в УФ.

3

04.07.2013 — 11:31

нужно вызвать этот метод на клиенте

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