|
Ошибка на процедуре ЗарегистрироватьИзменения | ☑ | ||
---|---|---|---|---|
0
falselight
30.01.17
✎
05:50
|
Почему возникает ошибка? Вторым параметром я передаю ссылку на справочник.
{ВнешняяОбработка.ЗарегистрироватьИзменения.Форма.Форма.Форма(9)}: Ошибка при вызове метода контекста (ЗарегистрироватьИзменения) ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); по причине: Недопустимое значение параметра (параметр номер '2') Для каждого Спр Из Метаданные.Справочники Цикл ВыборкаСпр = Справочники[Спр.Имя].Выбрать(, , , ); ВыборкаСпр.Следующий(); ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); Сообщить(Спр.Имя); Сообщить(ВыборкаСпр.Ссылка); КонецЦикла; |
|||
1
falselight
30.01.17
✎
06:08
|
Также почему ошибка "Получение элемента по индексу для значения не определено" ?
Для каждого Спр Из Метаданные.Справочники Цикл ВыборкаСпр = Справочники[Спр.Имя].Выбрать(, , , ); |
|||
2
AneJIbcuH
30.01.17
✎
06:24
|
Для каждого Спр Из Метаданные.Справочники Цикл
ВыборкаСпр = Справочники[Спр.Имя].Выбрать(, , , ); Пока ВыборкаСпр.Следующий() Цикл ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); Сообщить(Спр.Имя); Сообщить(ВыборкаСпр.Ссылка); КонецЦикла; КонецЦикла; |
|||
3
AneJIbcuH
30.01.17
✎
06:26
|
И вообще какая задача? Зачем метаданные справочников перебираешь, а внутри получаешь значения справочников?
|
|||
4
falselight
30.01.17
✎
06:39
|
(2) Мне нужен 1 элемент справочника, зачем все?
И ошибка идет на этой строке ВыборкаСпр = Справочники[Спр.Имя].Выбрать(, , , ); но тут же все верно! Получаю справочник по имени. А мне пишется ошибка "Получение элемента по индексу для значения не определено" !!! Смотрю в отладчике там все верно! |
|||
5
falselight
30.01.17
✎
06:39
|
(3) я выбираю элемент каждого справочника и делаю его доступным для обмена.
|
|||
6
falselight
30.01.17
✎
06:59
|
почему ошибка на строке (4) ?
|
|||
7
1dvd
30.01.17
✎
06:59
|
ни на клиенте ли ты это делаешь?
|
|||
8
falselight
30.01.17
✎
07:04
|
(7) обычное приложение, обычная форма
но в конфигурации есть и обычные и управляемые формы в чем может быть подвох? |
|||
9
osa1C
30.01.17
✎
07:04
|
(4) Ты отбираешь не известно что из справочника и хочешь что-то получить в результате?
|
|||
10
falselight
30.01.17
✎
07:06
|
(9) ругается вот на этом
Справочники[Спр.Имя] получение элемента по индексу не определено, но тут же все верно!!! |
|||
11
osa1C
30.01.17
✎
07:08
|
(10) Справочники[Спр].Выбрать();
|
|||
12
falselight
30.01.17
✎
07:10
|
(11) по индексу нельзя уже получить, ещё не дошли до выбрать
|
|||
13
falselight
30.01.17
✎
07:10
|
(11) вот пример из синтакс помощника, у меня так же, но по индексу не могу получить справочник (((
Для каждого Справочник из Метаданные.Справочники Цикл ИмяСправочника = Справочник.Имя; МенеджерСправочника = Справочники[ИмяСправочника]; ВыборкаСправочника = МенеджерСправочника.Выбрать(); |
|||
14
falselight
30.01.17
✎
07:13
|
в отладчике в табло написал
Справочники[Спр.Имя] пишут получение элемента по индексу не определено |
|||
15
osa1C
30.01.17
✎
07:14
|
(14) так ты не индекс передаешь, посмотри в отладчике что за коллекция Метаданные.Справочники. И вообще сделай точно так как в синтаксис помощнике.
|
|||
16
falselight
30.01.17
✎
07:27
|
(15) вот так сработало
Метаданные.Справочники[Спр.Имя] |
|||
17
falselight
30.01.17
✎
07:31
|
сейчас пишет метод, Выбрать не обнаружен
ВыборкаСпр = Метаданные.Справочники[Спр.Имя].Выбрать(, , , ); |
|||
18
falselight
30.01.17
✎
07:35
|
Делаю по этому примеру. В документах все работает. В справочниках же никак не получается.
Если Элементыформы.Документы.Значение Тогда Для каждого Док Из Метаданные.Документы Цикл ВыборкаДок = Документы[Док.Имя].Выбрать(, , , "Дата Убыв"); ВыборкаДок.Следующий(); ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаДок.Ссылка); Сообщить(Док.Имя); Сообщить(ВыборкаДок.Ссылка); КонецЦикла; КонецЕсли; |
|||
19
h-sp
30.01.17
✎
07:38
|
(18) состав плана обмена посмотри. Там все справочники или не все входят?
|
|||
20
falselight
30.01.17
✎
07:41
|
(19) пока вопрос в (17)
Да все включены. Обмен всех данных. |
|||
21
falselight
30.01.17
✎
07:44
|
(15) так я веть точно так же и делаю
|
|||
22
1dvd
30.01.17
✎
07:47
|
У меня вот так работает
Для каждого Спр Из Метаданные.Справочники Цикл ВыборкаСпр = Справочники[Спр.Имя].Выбрать(, , , ); Сообщить(Спр.Имя); КонецЦикла; |
|||
23
falselight
30.01.17
✎
07:52
|
(22) Проблема была в том что у меня на форме был флаг Справочники. И он перекрывал метаданные. Переименовал его во ФлагСправочники и все встало на свои места.
Сейчас вопрос в ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); То что в (0). |
|||
24
falselight
30.01.17
✎
07:54
|
Стою в отладчике на строке
ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); Узел - план обмена ссылка ВыборкаСпр.Ссылка - справочник ссылка все же как нужно! Но, по проходу строки выдает ошибку: {ВнешняяОбработка.ЗарегистрироватьИзменения.Форма.Форма.Форма(10)}: Ошибка при вызове метода контекста (ЗарегистрироватьИзменения) ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); по причине: Недопустимое значение параметра (параметр номер '2') |
|||
25
falselight
30.01.17
✎
07:58
|
все как в синтакс помощнике, но почему то параметр 2 не воспринимается ( в нем идет ссылка, все нормально вроде
|
|||
26
1dvd
30.01.17
✎
07:59
|
(24) ты уверен, что справочник не пустой?
|
|||
27
falselight
30.01.17
✎
08:03
|
(26) Я же стою на точке останова на этой строке
передается 1 параметр узел ссылка второй справочник ссылка как пустой? |
|||
28
1dvd
30.01.17
✎
08:05
|
Для каждого Спр Из Метаданные.Справочники Цикл
ВыборкаСпр = Справочники[Спр.Имя].Выбрать(, , , ); Если ВыборкаСпр.Следующий() Тогда ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка); Сообщить(Спр.Имя); Сообщить(ВыборкаСпр.Ссылка); КонецЕсли; КонецЦикла; |
|||
29
falselight
30.01.17
✎
08:08
|
(28) Зачем это?
Я же смотрю в отладчике что передается, и у меня не воспринимает второй параметр, а в нем передается ссылка на элемент справочника |
|||
30
falselight
30.01.17
✎
08:08
|
(28) ну согласен, полезная возможно проверка
Но в данный момент у меня все нормально с параметрами, а ошибка выдается ( |
|||
31
1dvd
30.01.17
✎
08:12
|
(30) она у тебя, возможно не на первой итерации валится. Ты же все справочники перебираешь
|
|||
32
Redkiy
30.01.17
✎
08:13
|
Это условие точно выполняется?
Из СП: Объект метаданных, соответствующий данным, должен входить в состав всех планов обмена всех узлов, указанных в первом параметре. |
|||
33
Мимохожий Однако
30.01.17
✎
08:15
|
(30) Не жди волшебства. Если ошибка возникает, то ты её еще не нешёл.
|
|||
34
falselight
30.01.17
✎
08:18
|
(32) Открыл обработку регистрация изменений для обмена,
выбрал этот узел. В ней же можно это увидеть? На первый взгляд не нашел там этого справочника. А можно как то программно проверять входит ли в состав плана обмена этот объект или нет? |
|||
35
Lexey_
30.01.17
✎
08:19
|
(30) ставлю на (19)
|
|||
36
falselight
30.01.17
✎
08:22
|
(34+) Если нельзя программно проверять включен объект в план обмена или нет, что бы не было ошибки, поставить тогда
Попытка Исключение КонецПопытки ? |
|||
37
falselight
30.01.17
✎
08:28
|
так сделал
// Процедура КнопкаВыполнитьНажатие(Кнопка) Узел = ПланыОбмена.бит_Полный.НайтиПоКоду("СБ"); // Если ЭлементыФормы.ФлагСправочники.Значение Тогда Для каждого Спр Из Метаданные.Справочники Цикл ВыборкаСпр = Справочники[Спр.Имя].Выбрать(, , , ); Если ВыборкаСпр.Следующий() Тогда Попытка ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаСпр.Ссылка.ПолучитьОбъект()); Сообщить(Спр.Имя); Сообщить(ВыборкаСпр.Ссылка); Исключение Сообщить("--------- Исключен- " + СТРОКА(Спр.Имя)); КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; // Сообщить("-------------------------------------------------------------------------------"); // Если Элементыформы.ФлагДокументы.Значение Тогда Для каждого Док Из Метаданные.Документы Цикл ВыборкаДок = Документы[Док.Имя].Выбрать(, , , "Дата Убыв"); Если ВыборкаДок.Следующий() Тогда Попытка ПланыОбмена.ЗарегистрироватьИзменения(Узел, ВыборкаДок.Ссылка); Сообщить(Док.Имя); Сообщить(ВыборкаДок.Ссылка); Исключение Сообщить("--------- Исключен- " + СТРОКА(Док.Имя)); КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; // КонецПроцедуры // Процедура ПриОткрытии() ЭлементыФормы.ФлагСправочники.Значение = Истина; Элементыформы.ФлагДокументы.Значение = Истина; КонецПроцедуры // |
|||
38
Redkiy
30.01.17
✎
08:29
|
А в чем смысл перебора объектов метаданных в цикле?
Не проще зарегистрировать все объекты одной строкой ПланыОбмена.ЗарегистрироватьИзменения(Узел)? |
|||
39
Мимохожий Однако
30.01.17
✎
08:30
|
(34) СоставПланаОбмена (ExchangePlanContent)
Содержит (Contains) Синтаксис: Содержит(<Метаданные>) Параметры: <Метаданные> (обязательный) Объект метаданных, наличие которого необходимо проверить в составе плана обмена. Тип параметра - ОбъектМетаданных, описывающий объекты конфигурации, которые могут входит в состав плана обмена (например: ОбъектМетаданных: Справочник, ОбъектМетаданных: Документ и т.д.). Возвращаемое значение: Тип: Булево. Истина - указанный объект входит в состав плана обмена; Ложь - в противном случае. Описание: Определяет, содержит ли состав плана обмена указанный объект метаданных. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). |
|||
40
falselight
30.01.17
✎
09:14
|
(38) Так словесно была поставлена формулировка и я начал делать.
То есть (37) не имеет смысла? Если все можно сделать одной строкой на весь узел? |
|||
41
falselight
30.01.17
✎
09:14
|
(39) Ясно! Спасибо! То есть это проверяет входит ли объект в узел обмена?
|
|||
42
Lexey_
30.01.17
✎
09:18
|
(40) вся твоя тема не имеет смысла, всё можно сделать в обработке "Регистрация изменений для обмена"
|
|||
43
falselight
30.01.17
✎
09:24
|
(38) Пробую
ПланыОбмена.ЗарегистрироватьИзменения(Узел); пока зависло на этой строке, стоит, и не отвисает... (37) хоть отрабатывает. |
|||
44
Serg_1960
30.01.17
✎
09:36
|
(43) "пока зависло на этой строке, стоит, и не отвисает..." - СП не читаем из принципиальных соображений?
Если это не противоречит твоей религии, процитирую отрывок про второй параметр: "...Если указано Неопределено или не указан, то в качестве первого параметра может быть указан только одиночный узел. И в этом случае будет выполнена регистрация изменений для всех объектов, метаданные которых входят в состав плана обмена, к которому относится узел, указанный в качестве первого параметра." |
|||
45
falselight
30.01.17
✎
09:40
|
(44) Я попробовал это сделать
в (38) же верно все?! Зависло, пришлось сбрасывать процесс. |
|||
46
Мимохожий Однако
30.01.17
✎
10:27
|
Только я один не понял для чего ТС нужны все эти манипуляции?
|
|||
47
falselight
30.01.17
✎
10:47
|
(38) Смысл в том что бы проверить обмен на 1 объекте каждого вида.
Ваше предложение же похоже будет перегружать всю базу. Что у меня сейчас и делается похоже ( |
|||
48
falselight
30.01.17
✎
10:48
|
(46) Обмен проверить что бы. Убедиться что он выполняется без ошибок. Уже отказались от обмена по OLE, посыпал ошибками постоянно и каждый раз новыми. Делаю через файловый обмен. Нужно это для проверки обмена на всех включенных в него объектах.
|
|||
49
Lexey_
30.01.17
✎
10:55
|
(47) ответ был дан давным давно
|
|||
50
Lexey_
30.01.17
✎
10:55
|
||||
51
falselight
30.01.17
✎
10:55
|
подскажите как убрать регистрацию изменений со всех объектов? И долго ли это делать?
А то благодаря (38) у меня база висит выгружается. Дождаться выгрузки, когда регистрация изменения сама снимется, или можно сбросить процесс и сделать это принудительно? |
|||
52
1dvd
30.01.17
✎
11:06
|
(51) воспользуйся Инструментом разработчика (ИР)
|
|||
53
falselight
30.01.17
✎
11:12
|
(52) Использовал регистрация изменений для обмена обрабюотку
|
|||
54
falselight
30.01.17
✎
11:12
|
(52) а это где взять? ИР
|
|||
55
bodri
30.01.17
✎
12:00
|
Если надо зарегистрировать все элементы справочника, то есть 2 варианта
1. простой: ПланыОбмена.ЗарегистрироватьИзменения(Узел,Метаданные.Справочники[ИмяСправочника]); 2. более сложный запросом вытаскиваем выборку и в цикле по обходу ПланыОбмена.ЗарегистрироватьИзменения(Узел,Выборка.Ссылка); |
|||
56
1dvd
30.01.17
✎
12:11
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |