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

Собственно есть такая задача. Есть обработка, в ней выбираются две компании. У этих компаний есть по 20 клиентов и соотв по одному договору в котором...
  1. Собственно есть такая задача. Есть обработка, в ней выбираются две компании.
    У этих компаний есть по 20 клиентов и соотв по одному договору в котором перечислены эти клиенты.
    Складывается ситуация, когда первая компания отдаёт половину (10 своих клиентов) второй компании.
    Проблемы не составляет из ТЧ первой компании перенести в ТЧ второй компании эти 10 абонентов. А есть проблема в пересчёте ТЧ договоров этих двух компаний, т.к. расчёт ТЧ договора вбит в процедурах модуля договора И КАК К ЭТИМ ПРОЦЕДУРАМ обратиться из обработки чтобы выполнить пересчёт ТЧ договоров обеих компаний и соответсвенно их запись.
    Может как то получать форму договора с ТЧ и программно обращаться, вообщем подскажите возможно это или нет?!


  2. AlexeyKh

    Offline

    AlexeyKh
    Опытный в 1С

    Регистрация:
    27 июл 2012
    Сообщения:
    148
    Симпатии:
    19
    Баллы:
    29

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

    в программе обработки при переборе ТЧ с Договорами, из Договора получаете объект и через точку вызываете вашу процедуру обработки.
    пример
    Для каждого Стр из ТЧ Цикл

    ДоговорОбъект = Стр.Договор.ПолучитьОбъект();
    ДоговорОбъект.ПроцедураОбработки();

    КонецЦикла;

    примерно так.

  3. а если нет варианта влезть и редактировать (дописывать экспорт) в модуль формы договора.

    а если копировать процедуры к себе в обработку, там будет страниц 10, да ещё их все перелопатить под обработку и всё равно будет обращение в них к процедурам в модуле договора и тогда их ещё копировать, и будет ппц а не обработка…(

    ещё есть какой либо путь?!

  4. А если вот так сделать??? но чёт не могу разобраться с синтаксисом, выдает ошибку..(
    договорУК1 = документы.Договор.НайтиПоРеквизиту(«КонтрАгент»,ук1выб).ПолучитьОбъект();
    ФормаДокумента = договорУК1.ПолучитьФорму();
    Формадокумента.УстановитьДействие(«ДействияТабличнаяЧастьЗаполнить()»,);

    как правильно написать УстановитьДействие??? в договоре как раз есть кнопка заполнить, которая всё пересчитает и сделает?!

    вот в модуле формы договора её описание:
    Процедура ДействияТабличнаяЧастьЗаполнить(Кнопка)

    вот такая вот ошибка:
    {Обработка.ЗаменаУК.Форма.Форма.Форма(99)}: Ошибка при вызове метода контекста (УстановитьДействие)
    Формадокумента.УстановитьДействие(«ДействияТабличнаяЧастьЗаполнить()»,);
    по причине:
    Недопустимое значение параметра (параметр номер ‘1’)


  5. uza

    Offline

    uza
    1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29

    Ну дык передайте туда параметр то. Процедура на вход просит параметры — дайте ей его. 1С не загоняет вас в стойло жесткой типизации, посему в качестве параметра можно передать даже строку например УстановитьДействие(«СНОВЫМГОДОМПОШЕЛНАФИГ»); Главное чтобы этот параметр в теле процедуры, если он там анализируется — не привел к сбою.

    Зачем вызываете «УстановитьДействие»??? Почему нельзя вызвать саму функцию/проуедура «ХрюМуЗаполнить»?

  6. потому что она не экспортная (нельзя лезть в модуль из-за поддержки).
    я так понял в полученной форме в 8-ке никак нельзя программно нажать кнопку «заполнить», чтобы без пользователя всё отработало?!


  7. uza

    Offline

    uza
    1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29

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

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

  8. ну страниц этак на 5 она и ещё в себе вызывает штуки 3 процедуры, которые в свою очередь в себе тоже вызывают какие либо процедуры или функции. и в общем итоге придётся копировать страниц 15-20 кода и их надфилем обрабатывать.

    имхо ну его нах такой подход… будут пальцем тыкать..)


  9. uza

    Offline

    uza
    1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29

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

    Практика подобных извратов еще с 1С 7.7 показывает, что перенести кусок кода из модуля формы в свою обработку, и допилить его до потребного вида занимает всего часа 4-6, учитывая что первая месага от вас поступила сегодня в 9:45, а с той поры прошло уже 9.5 часов — то засучив рукава вы бы УЖЕ сделали то, что вам нужно + осталось бы время на тестирование и поковрыться в носу почитать новости.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ну тогда кажись, да, ты прав, никак! :) просто запоминать и по номерам строк если.. полеввода1=номерстроки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) да это всё равно не то.

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

Источник

0 / 0 / 0

Регистрация: 21.12.2017

Сообщений: 15

1

Ошибка при вызове метода контекста(Добавить)

20.05.2021, 01:00. Показов 3674. Ответов 1


Здравствуйте. Необходимо было изобразить игру Сапёр в 1С, по заданию из задачника Чистова. Код ниже.

По итогу столкнулся с проблемой: {Обработка.сапер.Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (Добавить)
Группа = ЭтаФорма.Элементы.Добавить(«Ряд «+Х,Тип(«ГруппаФормы»),Элементы.ИгровоеПоле);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
Недопустимое значение параметра (параметр номер ‘1’)

как решить?

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    МиныВсего = 10;
    КолВоСтрок = 10;
    КолВоСтолбцов = 10;
    МиныОстаток = 10;
    Флаги = 0;
КонецПроцедуры
 
&НаКлиенте
Процедура НачатьИгру(Команда)
       НачатьИгруНаСервере();
       ЭтаФорма.ОбновитьОтображениеДанных(Элементы["ИгровоеПоле"]);
КонецПроцедуры
 
 
&НаСервере
Процедура НачатьИгруНаСервере()
    
        ИгровоеПоле = Элементы.Найти("ИгровоеПоле");
        Если ИгровоеПоле <> Неопределено Тогда
            ЭтаФорма.Элементы.Удалить(ИгровоеПоле);
            КонецЕсли;
    
          ИгровоеПоле = ЭтаФорма.Элементы.Добавить("ИгровоеПоле",Тип("ГруппаФормы"),ЭтаФорма);
          ИгровоеПоле.Вид = ВидГруппыФормы.ОбычнаяГруппа;
          ИгровоеПоле.Отображение = ОтображениеОбычнойГруппы.Нет;
          ИгровоеПоле.ОтображатьЗаголовок = Ложь;
          ИгровоеПоле.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
          ИгровоеПоле.РазрешитьИзменениеСостава = Истина;
          ИгровоеПоле.Видимость = Истина;
        
          Для Х = 1 По КолВоСтолбцов Цикл
              Группа = ЭтаФорма.Элементы.Добавить("Ряд "+Х,Тип("ГруппаФормы"),Элементы.ИгровоеПоле);
              Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
              Группа.ВертикальноеПоложениеВГруппе = ВертикальноеПоложениеПодчиненных;
              Группа.Видимость = Истина;
                  Для У = 1  по КолВоСтрок Цикл
                  НоваяКнопка = ЭтаФорма.Элементы.Добавить("Клетка_У "+У+"_Х "+Х,Тип("ДекорацияФормы"),Группа);
                  НоваяКнопка.Вид = ВидДекорацииФормы.Картинка;
                  НоваяКнопка.Высота = 1;
                  НоваяКнопка.Ширина = 2;
                  НоваяКнопка.Видимость = Истина;
                  НоваяКнопка.КонтекстноеМеню.Видимость = Истина;
                  НоваяКнопка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Выпуклая,3);
                  НоваяКнопка.Гиперссылка = Истина;
                  НоваяКнопка.УстановитьДействие("Нажатие","КнопкаНажатие");
                  
                  КомандаВопрос = ЭтаФорма.Элементы.Добавить("Клетка_У "+У+"_Х "+Х+"КонтекстноеМенюВопрос",
                  Тип("КнопкаФормы"),НоваяКнопка.КонтекстноеМеню);
                  КомандаВопрос.ИмяКоманды = "Вопрос1";
                  КомандаВопрос.Картинка = БиблиотекаКартинок.Справка;
                  
                  
                  КомандаМина = ЭтаФорма.Элементы.Добавить("Клетка_У "+У+"_Х "+Х+"КонтекстноеМенюМина",
                  Тип("КнопкаФормы"),НоваяКнопка.КонтекстноеМеню);
                  КомандаМина.ИмяКоманды = "ЭтоМина";
                  КомандаМина.Картинка = БиблиотекаКартинок.ОформлениеФлагКрасный;
                  
                  НастройкаПоля = НастройкиПоля.Добавить();
                  НастройкаПоля.ИмяПоля = "Клетка_У"+У+"_Х "+Х;
                  НастройкаПоля.Строка = У;
                  НастройкаПоля.Столбец = Х;
                  НастройкаПоля.МинаВЯчейке = Ложь;
                  
              КонецЦикла;
          КонецЦикла;
          
          ГенСлучЧис = Новый ГенераторСлучайныхЧисел();
          Для СлучЧис = 1 По МиныВсего Цикл
              МинаЕсть = Ложь;
              Пока Не МинаЕсть Цикл
                  ГдеМина = ГенСлучЧис.СлучайноеЧисло(0,НастройкиПоля.Количество()-1);
                  Строка = НастройкиПоля[ГдеМина];
                  Если Строка.Мина = Истина Тогда
                      Продолжить
                  КонецЕсли;
                   Строка.Мина = истина;
                   Элементы[Строка.ИмяПоля].Заголовок = "Х";
                   МинаЕсть = Истина;
               КонецЦикла;
           КонецЦикла;
           
           Для Х = 1 по КолВоСтолбцов Цикл
               Для У = 1 По КолВоСтрок Цикл
                   ИмяТекущегоЭлемента = "Клетка_У "+У+"_Х "+Х;
                   Если Элементы[ИмяТекущегоЭлемента].Заголовок = "Х" Тогда
                       Продолжить;
                   КонецЕсли;
                   МиныРядом =0;
                   
                   ИмяЭлемента = "Клетка_У"+(У-1)+"_Х "+(Х-1);
                   Если (У-1>0 и Х-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                    ИмяЭлемента = "Клетка_У"+(У-1)+"_Х "+(Х);
                   Если (У-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                   ИмяЭлемента = "Клетка_У"+(У-1)+"_Х "+(Х+1);
                   Если (У-1>0 и Х+1<=КолВоСтолбцов) И Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                   
                   ИмяЭлемента = "Клетка_У"+(У)+"_Х "+(Х-1);
                   Если (Х-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                   
                   ИмяЭлемента = "Клетка_У"+(У)+"_Х "+(Х+1);
                   Если (Х+1<=КолВоСтолбцов) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                   
                   ИмяЭлемента = "Клетка_У"+(У+1)+"_Х "+(Х-1);
                   Если (У+1<=КолВоСтрок и Х-1>0) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                   
                   ИмяЭлемента = "Клетка_У"+(У+1)+"_Х "+(Х);
                   Если (У+1<=КолВоСтрок) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                   
                   ИмяЭлемента = "Клетка_У"+(У+1)+"_Х "+(Х+1);
                   Если (У+1<=КолВоСтрок и Х+1<=КолВоСтолбцов) и Элементы[ИмяЭлемента].Заголовок = "Х" тогда
                       МиныРядом = МиныРядом+1;
                   КонецЕсли;
                   
                   Если МиныРядом > 0 Тогда
                       Элементы[ИмяТекущегоЭлемента].Заголовок = МиныРядом;
                       
                   КонецЕсли;
               КонецЦикла;
               КОнецЦикла;
 
                   
                   
          
            
    КонецПроцедуры
 
 
&НаКлиенте
    Процедура Вопрос1(Команда)
        ТекущийЭлемент.Картинка = БиблиотекаКартинок.Справка;
    КонецПроцедуры
 
&НаКлиенте
    Процедура ЭтоМина(Команда)
        ТекущийЭлемент.Картинка = БиблиотекаКартинок.ОформлениеФлагКрасный;
    КонецПроцедуры
    
    
&НаКлиенте
Процедура КнопкаНажатие(Элемент)
    Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    Если Элемент.Заголовок = "Х" Тогда
        Элемент.Картинка = библиотекаКартинок.Удалить;
        ОткрытьВсеМины();
        Предупреждение("Неудачно");
    Иначе
        Элемент.Картинка = Новый Картинка;
        Элемент.ТекстНеВыбраннойКартинки = Элемент.Заголовок;
    КонецЕсли;
    КонецПРоцедуры
 
    
&НаСервере
Процедура ОткрытьВсеМины()
    Для Х = 1 По КолВоСтолбцов Цикл
        Для У = 1 по КолВоСтрок Цикл
            ИмяТекущегоЭлемента = "Клетка_У"+У+"_ Х"+Х;
            Если Элементы[ИмяТекущегоЭлемента].Заголовок = "Х" Тогда
                Элементы[ИмяТекущегоЭлемента].Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
                Элементы[ИмяТекущегоЭлемента].Картинка = БиблиотекаКартинок.Удалить;
            КонецЕсли;
        КОнецЦикла;
    КонецЦикла;
    КонецПроцедуры

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста создать
  • Ошибка при вызове конструктора сомобъект 2147221005 0x800401f3
  • Ошибка при вызове метода контекста свойство задано неправильное имя атрибута структуры
  • Ошибка при вызове конструктора картинка
  • Ошибка при вызове метода контекста рольдоступна