Имя: Пароль:
1C
 
Ошибка на процедуре ЗарегистрироватьИзменения
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
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.