1с зарегистрироватьизменения недопустимое значение параметра 2

Обновлено: 04.07.2024

Также почему ошибка "Получение элемента по индексу для значения не определено" ?

И вообще какая задача? Зачем метаданные справочников перебираешь, а внутри получаешь значения справочников?

Мне нужен 1 элемент справочника, зачем все? И ошибка идет на этой строке но тут же все верно! Получаю справочник по имени. А мне пишется ошибка "Получение элемента по индексу для значения не определено" . Смотрю в отладчике там все верно!

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

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

Ты отбираешь не известно что из справочника и хочешь что-то получить в результате?

ругается вот на этом Справочники[Спр.Имя] получение элемента по индексу не определено, но тут же все верно.

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

вот пример из синтакс помощника, у меня так же, но по индексу не могу получить справочник (((

в отладчике в табло написал Справочники[Спр.Имя] пишут получение элемента по индексу не определено

так ты не индекс передаешь, посмотри в отладчике что за коллекция Метаданные.Справочники. И вообще сделай точно так как в синтаксис помощнике.

сейчас пишет метод, Выбрать не обнаружен ВыборкаСпр = Метаданные.Справочники[Спр.Имя].Выбрать(, , , );

Делаю по этому примеру. В документах все работает. В справочниках же никак не получается.

состав плана обмена посмотри. Там все справочники или не все входят?

У меня вот так работает Для каждого Спр Из Метаданные.Справочники Цикл

Проблема была в том что у меня на форме был флаг Справочники. И он перекрывал метаданные. Переименовал его во ФлагСправочники и все встало на свои места. Сейчас вопрос в ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); То что в .

все как в синтакс помощнике, но почему то параметр 2 не воспринимается ( в нем идет ссылка, все нормально вроде

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

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

ну согласен, полезная возможно проверка Но в данный момент у меня все нормально с параметрами, а ошибка выдается (

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

Это условие точно выполняется? Из СП: Объект метаданных, соответствующий данным, должен входить в состав всех планов обмена всех узлов, указанных в первом параметре.

Не жди волшебства. Если ошибка возникает, то ты её еще не нешёл.

Открыл обработку регистрация изменений для обмена, выбрал этот узел. В ней же можно это увидеть? На первый взгляд не нашел там этого справочника. А можно как то программно проверять входит ли в состав плана обмена этот объект или нет?

(34+) Если нельзя программно проверять включен объект в план обмена или нет, что бы не было ошибки, поставить тогда Исключение КонецПопытки ?

А в чем смысл перебора объектов метаданных в цикле? Не проще зарегистрировать все объекты одной строкой ПланыОбмена.ЗарегистрироватьИзменения(Узел)?

Содержит (Contains) Синтаксис: Содержит(<Метаданные>) Параметры: Объект метаданных, наличие которого необходимо проверить в составе плана обмена. Тип параметра - ОбъектМетаданных, описывающий объекты конфигурации, которые могут входит в состав плана обмена (например: ОбъектМетаданных: Справочник, ОбъектМетаданных: Документ и т.д.). Возвращаемое значение: Тип: Булево. Истина - указанный объект входит в состав плана обмена; Ложь - в противном случае. Описание: Определяет, содержит ли состав плана обмена указанный объект метаданных. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

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

Ясно! Спасибо! То есть это проверяет входит ли объект в узел обмена?

Пробую пока зависло на этой строке, стоит, и не отвисает. хоть отрабатывает.

"пока зависло на этой строке, стоит, и не отвисает. " - СП не читаем из принципиальных соображений? Если это не противоречит твоей религии, процитирую отрывок про второй параметр: ". Если указано Неопределено или не указан, то в качестве первого параметра может быть указан только одиночный узел. И в этом случае будет выполнена регистрация изменений для всех объектов, метаданные которых входят в состав плана обмена, к которому относится узел, указанный в качестве первого параметра."

Я попробовал это сделать в же верно все?! Зависло, пришлось сбрасывать процесс.

Только я один не понял для чего ТС нужны все эти манипуляции?

Смысл в том что бы проверить обмен на 1 объекте каждого вида. Ваше предложение же похоже будет перегружать всю базу. Что у меня сейчас и делается похоже (

Обмен проверить что бы. Убедиться что он выполняется без ошибок. Уже отказались от обмена по OLE, посыпал ошибками постоянно и каждый раз новыми. Делаю через файловый обмен. Нужно это для проверки обмена на всех включенных в него объектах.

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

Использовал регистрация изменений для обмена обрабюотку

Если надо зарегистрировать все элементы справочника, то есть 2 варианта 1. простой: ПланыОбмена.ЗарегистрироватьИзменения(Узел,Метаданные.Справочники[ИмяСправочника]); 2. более сложный запросом вытаскиваем выборку и в цикле по обходу ПланыОбмена.ЗарегистрироватьИзменения(Узел,Выборка.Ссылка);

Суть проблемы в следующем: Необходимо сформировать начальную выгрузку, для этого надо зарегистрировать все данные которые учавствуют в обмене, по логике программы мне необходимо выгрузить только часть записей регистра сведений, его режим записи Независимый, переодичность В пределах дня. Вот код программы регистрации: Получается ошибка: Ошибка при вызове метода контекста (ЗарегистрироватьИзменения): Недопустимое значение параметра (параметр номер "2") ПланыОбмена.ЗарегистрироватьИзменения(Узел, НаборЗаписей); Помогите пожалуйста, заклился.

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

Тогда это возможно проявляет себя глюк 12 релиза. Попробуй снять галочку из плана обмена и обновить БД. Если вылетела с ошибкой "ссылочная константа содержит недопустимую ссылку на таблицу (pos=12)" или нечто подобное, то поздравляю - у тебя глюк в базе. Есть мысль, что он проявляется только на SQL-версиях, но я не уверен. Предлагаю тебе пересоздать этот регистр (с переносом данных, конечно). Это может помочь. Но может быть такая вещь - эта ошибка переместится на другой регистр! Есть еще вариант - пересоздать план обмена. Должно помочь на 90%. Но может и не помочь. Перед пересозданием плана обмена нужно произвести последний сеанс обмена, остановить работу в базах и обновить конфигурацию БД за 2 релиза: 1-й - удаление плана обмена 2-й - создание новых планов обмена После 1-го релиза крайне рекомендуется обновить конфигурации во всех периферийных базах (если получится). После 2-го релиза периферийная база может ругаться, что принимаются изменения от неизвестной конфигурации. В этом случае ее лучше пересоздать через начальный образ или путем копирования основной базы и переустановки главного узла методом УстановитьГлавныйУзел.

Еще глюк из 12-го, я уж решил что почти ничего нет и надо переходить.

А чему равно Узел в регистрации изменений? Может он равен текущему (главному) узлу? Тогда вполне правильный глюк. Наталкивался уже. Пора уже Нуралиева бить. То на 9 релизе обмен становился невозможным по УРБД, то теперь эта хрень на 12.

В типовой УТ, кстати, часто записываются наборы по регистрам КонтактнаяИнформация, ЗначенияСвойствОбъектов, КатегорииОбъектов с отбором, не соответствующим основному отбору регистра. Будьте осторожны при ручной регистрации изменений!

Способы регистрации изменений данных в механизмах обмена данными

В платформе 1С:Предприятие 8 реализовано два механизма обмена данными: универсальный механизм обмена данными и механизм распределенной информационной базы. Оба эти механизма базируются на одних тех же технологиях. Одной из этих технологий является служба регистрации изменений данных.

Изменения данных могут регистрироваться в автоматическом режиме. Для этого необходимо при включении объекта метаданных в состав плана обмена разрешить автоматическую регистрацию: установить признак Авторегистрация в значение Разрешить .

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

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

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

Пример: регистрация изменения всех элементов справочника Номенклатура для узла Узел :

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

К объектным типам относятся справочники, документы, планы счетов, планы видов характеристик, планы расчета, бизнес-процессы, задачи. Для их регистрации необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сам объект, либо ссылку на него.

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

К таким регистрам относятся регистры сведений со свойством РежимЗаписи , установленным в значение Независимый . Для регистрации изменений наборов записей данного регистра необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей. Состав элементов отбора, при этом, должен строго соответствовать основному отбору регистра. Выбирать поля, входящие в основной отбор регистра необходимо в соответствии с логикой работы конфигурации (см. Подготовка конфигурации к работе в распределенной информационной базе).

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

Работа с неактуальными (недействительными) объектами

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

Методическая рекомендация (полезный совет)

1. Данная рекомендация действует для ситуаций, когда какой-либо объект информационной базы перестает быть актуальным – навсегда или на время (сотрудник увольняется или уходит в декретный отпуск, подразделение расформируется и т.д.). При этом удалять этот объект из базы недопустимо, чтобы не нарушать ссылочную целостность: на него должны ссылаться другие ранее созданные объекты. Например, объект типа Файл должен содержать в поле Автор ссылку на уволившегося сотрудника и после его увольнения.

2. Для запрета выбора неактуальных объектов с помощью автоподбора и быстрого выбора в полях ввода следует выбрать один из двух подходов к реализации (2.1 или 2.2). Проиллюстрируем их далее на примере пользователей информационной системы, учет которых ведется в справочнике Пользователи .

Для учета неактуальных пользователей у справочника Пользователи добавлен реквизит Недействителен ( Булево ), по умолчанию Ложь .

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

2.1.1. В модуле менеджера справочника Пользователи реализуются обработчики ОбработкаПолученияДанныхВыбора и ОбработкаПолученияФормы для установки параметров отбора. Пример реализации этих обработчиков для справочника Пользователи :

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Не Параметры.Отбор.Свойство("Недействителен") Тогда
Параметры.Отбор.Вставить("Недействителен", Ложь);
КонецЕсли;
КонецПроцедуры

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаВыбора" Тогда
ПараметрИзменен = Ложь;
Если Не Параметры.Свойство("Отбор") Тогда
Параметры.Вставить("Отбор", Новый Структура("Недействителен", Ложь));
ПараметрИзменен = Истина;
ИначеЕсли Не Параметры.Отбор.Свойство("Недействителен") Тогда
Параметры.Отбор.Вставить("Недействителен", Ложь);
ПараметрИзменен = Истина;
КонецЕсли;

// Этот код нужен, чтобы были использованы измененные нами значения параметров
Если ПараметрИзменен Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = "ФормаВыбора"; // передаем имя формы выбора
КонецЕсли;
КонецЕсли;
КонецПроцедуры

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

  • если требуется выбирать недействующих пользователей, указываем в свойстве реквизита «Параметры выбора» значение Отбор.Недействителен(Ложь) ,
  • а если не требуется ограничивать выбор вообще, то оба значения - Истина и Ложь .

2.2. Если запрет на выбор неактуальных объектов сильно зависит от контекста (сценариев работы), то не следует его устанавливать по умолчанию.

  • Модуль менеджера справочника Пользователи не реализуется.
  • В простейшем случае, во всех объектах, в которых есть реквизиты типа СправочникСсылка.Пользователи устанавливаются значения свойств «Параметры выбора» и «Связи параметров выбора» , как описано выше в пункте 2.1.2.
  • В тех случаях, когда критерий ограничения не может быть описан параметрами выбора, то реализуются обработчики формы ОбработкаПолученияДанныхВыбора , ОбработкаВыбора и ОкончаниеВводаТекста , а также разрабатывается отдельная форма выбора, в которой реализуется та же логика ограничения.

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

4. Для отображения неактуальных объектов в списках рекомендуется использовать элемент стиля ТекстЗапрещеннойЯчейкиЦвет (192,192,192).

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