&НаСервере
Функция ПодключитьБазуНаСервере(Соединение = "")
Объект.ФайловаяБазаДанных=Ложь;
Объект.Сервер="srv1с";
Объект.База="buh";
Объект.ИмяПользователя="Obmen";
Объект.Пароль="1qaz";
// Подключение к 1С
Если Объект.ФайловаяБазаДанных Тогда
СтрокаПодключения = "file='" + Объект.ПутьКБазе + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + Объект.Пароль + "';";
Иначе
СтрокаПодключения = "srvr='" + Объект.Сервер + "'; ref='" + Объект.База + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + Объект.Пароль + "';";
КонецЕсли;
Попытка
V8 = Новый COMObject("V83.COMConnector");
Соединение = V8.Connect(СтрокаПодключения);
ЕстьСоединение = Истина;
Исключение
ЕстьСоединение = Ложь;
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат Соединение;
КонецФункции
&НаСервере
Процедура ОбновитьДанныеПлатежейНаСервере()
Соединение = ПодключитьБазуНаСервере();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка КАК Ссылка,
|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа КАК ОснованиеПлатежа,
|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Сумма КАК Сумма
|ИЗ
|Документ.ПоступлениеБезналичныхДенежныхСредств.РасшифровкаПлатежа КАК ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа
|ГДЕ
|НЕ ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа ССЫЛКА Документ.ЗаказКлиента";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
УИД = ВыборкаДетальныеЗаписи.Ссылка.УникальныйИдентификатор();
СсылкаНаДок = Соединение.Документы.ПоступлениеНаРасчетныйСчет.ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",Строка(УИД)));
//Сообщить(СсылкаНаДок.Номер);
Для каждого СтрокаИсточник Из СсылкаНаДок.РасшифровкаПлатежа Цикл
//Сообщить("Счет: "+Строка(СтрокаИсточник.СчетНаОплату.Номер));
УИД = Соединение.String(СтрокаИсточник.СчетНаОплату.УникальныйИдентификатор());
текДок= Документы.ЗаказКлиента.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
Если ЗначениеЗаполнено(текДок) Тогда
Сообщить(текДок);
текОбъект=ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
текОбъект.РасшифровкаПлатежа[0].ОснованиеПлатежа= текДок;
текОбъект.РасшифровкаПлатежа[0].Заказ= текДок;
текОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьДанныеПлатежей(Команда)
ОбновитьДанныеПлатежейНаСервере();
КонецПроцедуры
30.06.11 — 12:07
Есть идентификатор вида : 209:971a0018f34e121411e03c1de5b80387
Хочу найти что за объект в базе ему соответствует. Как?
1 — 30.06.11 — 12:09
А где ты его берешь?
2 — 30.06.11 — 12:09
шерстить каждый объект отдельно
3 — 30.06.11 — 12:10
209 — идентификатор типа, остальное — перемиксованный объект УникальныйИдентификатор
4 — 30.06.11 — 12:10
(1) Да после обмена делаю ТИИ оно говорит:
Проверка логической целостности. Последовательность.Взаиморасчеты <Объект не найден> (209:971a0018f34e121411e03c1de5b80387)
Неверная ссылка на регистратор.
5 — 30.06.11 — 12:10
НовыйGUID = Новый УникальныйИдентификатор(ТвойГуид);
СсылкаГУИД=Документы.ВидДок.ПолучитьСсылку(НовыйGUID);
6 — 30.06.11 — 12:11
(4)Если <Объект не найден> , то с чего ты взял, что ты его найдешь если база не нашла?
7 — 30.06.11 — 12:11
(5) щас попробую
8 — 30.06.11 — 12:12
(6) Ну я же на копии, у меня есть и оригинал, где обмен не запускал …
9 — 30.06.11 — 12:12
(5) читай ветку
(4) блииин. сделай запрос по регистру «Взаиморасчеты» примерно такой
Выбрать
Взаиморасчеты.Регистратор
Из
РегистрНакопления.Взаиморасчеты
Где
Взаиморасчеты.Регистратор.Номер Есть NULL
получишь твою ссылку. потом по ней отбор набора записей и запись пустого набора
10 — 30.06.11 — 12:13
ну а вообще — после обмена — это нормально, если криво правила настроены, или не криво, но это заложено в логику
11 — 30.06.11 — 12:14
(9)<Объект не найден> <> NULL
12 — 30.06.11 — 12:14
+ Ссылка не пустая. Она битая
13 — 30.06.11 — 12:15
(10) Самое прикольное, что это стандартный обмен БП 2.0 по организации. Там постоянно вылезают такие бяки
14 — 30.06.11 — 12:16
Выбрать Регистратор Из Последовательность.Взаиморасчеты где Регистратор.Ссылка есть NULL
Но что ты в базе собрался искать, если проблема как раз в том, что в базе его нет?
15 — 30.06.11 — 12:16
(11) я там не зря написал «.Номер»
16 — 30.06.11 — 12:18
(11) А не является ли «.Номер» неявным левым соединением?
Варианты ответа:
1) да, является.
2) нет, является.
17 — 30.06.11 — 12:19
(11) и кстати, да:
NULL <> NULL
18 — 30.06.11 — 12:20
раз объект не найден, то нет его нигде. Если база SQL, восстанавливай бекап, ищи в SQL таблицах средствами SQL, по таблице и поймешь что за объект
19 — 30.06.11 — 12:21
(18) в копии он может и оказаться, почему же нигде?
20 — 30.06.11 — 12:22
(18) Ащета запрос из (9) дает тебе готовую ссылку. У которой даже и тип имеется. Для зачем что-то по таблицам SQL искать?
21 — 30.06.11 — 12:23
+(19) В том и дело, что он где-то есть: либо в базе до обмена, либо в узле откуда обмен принимали …
Вот и хочу найти что это было и почему объект удалился, а из последовательности не изьялся …
22 — 30.06.11 — 12:24
(20) В запросе (9) обращаемся к регистру накопления, но ТИИ не нашла в нем ссылок на несуществующие объекты …
23 — 30.06.11 — 12:24
(20) Не увидел 4 сообщение. Думал вообще ничего не известно, кроме гуида
24 — 30.06.11 — 12:25
(22) ну удали из последовательности
25 — 30.06.11 — 12:41
(22) Ну, ять, в (14) Посмотри. БОЛЬШАЯ разница, ага…
26 — 30.06.11 — 12:45
(25) Да разница-то небольшая, только что там в последовательности-то найдешь? Ну найдешь битые записи, а что за объект был все равно не известно …
27 — 30.06.11 — 12:53
ПЦ
28 — 30.06.11 — 13:23
(26) рукалицо…
29 — 30.06.11 — 13:30
(17) (NULL IS NULL) = TRUE
30 — 30.06.11 — 13:51
ТЗ = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из ТЗ Цикл
Если Не ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда Продолжить; КонецЕсли;
ПозТочки = Найти(Строка.ИмяТаблицыХранения, «.»);
Если ПозТочки > 0 Тогда
Продолжить;
ИмяТаблицы = Лев(Строка.ИмяТаблицыХранения, ПозТочки — 1);
КонецЕсли;
ИтоговоеЧисло = «»;
Для Сч = 1 По СтрДлина(Строка.ИмяТаблицыХранения) Цикл
Символ = Сред(Строка.ИмяТаблицыХранения, Сч, 1);
Если Найти(«0123456789», Символ) > 0 Тогда
ИтоговоеЧисло = ИтоговоеЧисло + Символ;
КонецЕсли;
КонецЦикла;
Если ИтоговоеЧисло = «209» Тогда
Сообщить(Строка.ИмяТаблицы);
КонецЕсли;
КонецЦикла;
31 — 30.06.11 — 13:53
(30) А что *это* делает?
32 — 30.06.11 — 13:58
(30) поможет узнать имя объекта по типу 209..
33 — 30.06.11 — 14:01
(31) это запустить в базе где отсутствует
(30)+
потом в базе источнике запустить
Поз = Найти(СтрокаОбъекта, «:»);
Тип = Лев(СтрокаОбъекта, Поз — 1);
СтрокаУИД = Сред(СтрокаОбъекта, Поз + 1);
СтрокаУИД = Сред(СтрокаУИД, 24, + «-» + Сред(СтрокаУИД, 20, 4) + «-» + Сред(СтрокаУИД, 16, 4) + «-» + Сред(СтрокаУИД, 1, 4) + «-» + Сред(СтрокаУИД, 5, 12);
Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД));
справочники.номенклатура. заменить на имятипа что покажет в обработке
34 — 30.06.11 — 14:01
(32) см (14)
35 — 30.06.11 — 14:03
(34) и что это покажет? что «объект не найден <209:971a0018f34e121411e03c1de5b80387>»?? а как понять что за объект конкретно?
36 — 30.06.11 — 14:06
(35) ссылка будет на конкретный объект метаданных
37 — 30.06.11 — 14:06
(35) рукалицо…
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать РАЗЛИЧНЫЕ Регистратор Из Последовательность.Взаиморасчеты где Регистратор.Ссылка есть NULL";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(ТипЗнч(Выборка.Регистратор));
КонецЦикла;
38 — 30.06.11 — 14:06
хоть и отсутствующий
Axel2009
39 — 30.06.11 — 14:13
(37) был не прав.
Функция ПолучитьСсылкуПоИД(ИД, Тип = Неопределено)
Если ИД = «» и Тип <> Неопределено Тогда
// Тип известен, элемент явно пустой, значит нужно вернуть пустую ссылку
спр = Метаданные.Справочники.Найти(Тип);
Если спр <> Неопределено Тогда
Возврат Справочники[Тип].ПустаяСсылка();
КонецЕсли;
док = Метаданные.Документы.Найти(Тип);
Если док <> Неопределено Тогда
Возврат Документы[Тип].ПустаяСсылка();
КонецЕсли;
Возврат Неопределено
КонецЕсли;
Попытка
УИД = Новый УникальныйИдентификатор(ИД);
Исключение
Возврат Неопределено
КонецПопытки;
// Если тип известен, то ищем только в одной таблице
Если Тип <> Неопределено Тогда
спр = Метаданные.Справочники.Найти(Тип);
Если спр <> Неопределено Тогда
Ссылка = Справочники[Тип].ПолучитьСсылку(УИД);
Если Не Ссылка.Пустая() и Ссылка.ПолучитьОбъект() <> Неопределено Тогда
Возврат Ссылка
КонецЕсли;
Возврат Неопределено
КонецЕсли;
док = Метаданные.Документы.Найти(Тип);
Если док <> Неопределено Тогда
Ссылка = Документы[Тип].ПолучитьСсылку(УИД);
Если Не Ссылка.Пустая() и Ссылка.ПолучитьОбъект() <> Неопределено Тогда
Возврат Ссылка
КонецЕсли;
КонецЕсли;
Возврат Неопределено
КонецЕсли;
// Если тип неизвестен, то перебираем все справочники и документы.
// Это долго. Поэтому тип очень хочется получить.
Для Каждого спр из Метаданные.Справочники Цикл
Ссылка = Справочники[спр.Имя].ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда
Возврат Ссылка
КонецЕсли;
КонецЦикла;
Для Каждого док из Метаданные.Документы Цикл
Ссылка = Документы[док.Имя].ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда
Возврат Ссылка
КонецЕсли;
КонецЦикла;
Возврат Неопределено
КонецФункции
На чтение 2 мин Просмотров 924 Опубликовано 10.03.2021
Содержание
- Синтаксис
- Параметры
- Возвращаемое значение
- Описание
- Доступность
- Пример использования
При организации обмена данными между двумя информационными базами зачастую возникает задача получения ссылки объекта по его Уникальному идентификатору (УИД).
Для поиска и получения ссылки объекта по его Уникальному идентификатору служит такая конструкция:
В любой конфигурации 1С 8 у каждого объекта(документа, элемента справочника, элемента плана видов характеристик и т.п.) есть уникальный идентификатор(УИН). При помощи него можно переносить объекты между базами РИБ не боясь задвоения данных, быстро находить элемент справочника или документ и т.п.
Как получить уникальный идентификатор из ссылки? При помощи свойства ссылки УникальныйИдентификатор(). Пример 1:
Уникальный идентификатор в 1С 8 имеет тип УникальныйИдентификатор, но его можно преобразовать и в строковое значение(получится строка вот такого вида: 9712e912-d0b9-11e1-b37b-0050568458ce).
Как получить ссылку имея уникальный идентификатор? При помощи метода ПолучитьСсылку( ) менеджера справочника, документа и т.п.
Пример 4 (Здесь УИН — значение типа УникальныйИдентификатор):
Пример 5(Здесь СтрокаУИН — переменная со строковым значением уникального идентификатора):
В примере 5 уникальный идентификатор получается из строкового значения при помощи конструктора Новый УникальныйИдентификатор( )
Выполняет поиск элемента списка значений по идентификатору.
Синтаксис
Метод НайтиПоИдентификатору() имеет следующий синтаксис:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров метода НайтиПоИдентификатору() :
Имя параметра | Тип | Описание |
---|---|---|
Идентификатор | Число | Идентификатор элемента списка значений. |
Жирным шрифтом выделены обязательные параметры |
Возвращаемое значение
Описание
Метод НайтиПоИдентификатору() выполняет поиск элемента списка значений по идентификатору. Если элемент с указанным идентификатором в списке отсутствует, будет возвращено значение Неопределено .
Доступность
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример использования
Пример кода с использованием метода НайтиПоИдентификатору() :
- Распечатать
Оцените статью:
- 5
- 4
- 3
- 2
- 1
(1 голос, среднее: 1 из 5)
Поделитесь с друзьями!
Пример уникального идентификатора: 4bf85396-cc7a-11ea-9ef0-c86000245adb
// //Узнать уникальный идентификатор ГУИД = КонтрагентСсылка.УникальныйИдентификатор(); //Создаём уникальный идентификатор из строки СтрокаGUID = «4bf85396-cc7a-11ea-9ef0-c86000245adb»; НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID); //Можно не указывать СтрокаGUID. Программа сгенерирует сама НовыйGUID = Новый УникальныйИдентификатор(); |
// //Получить ссылку на на объект, зная его GUID СсылкаПП = Документы.ПлатежноеПоручениеВходящее.ПолучитьСсылку(НовыйGUID); //Создать документ и присвоить ему ГУИД СтрокаGUID = «4bf85396-cc7a-11ea-9ef0-c86000245adb»; Док = Документы.ПлатежноеПоручениеВходящее.СоздатьДокумент(); СсылкаДок = Документы.ПлатежноеПоручениеВходящее.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)); Док.УстановитьСсылкуНового(СсылкаДок); |
// //Получить ГУИД из COM-объекта V83COMConnector = Новый COMОбъект(«V83.COMConnector»); БД = V83COMConnector.Connect(ПараметрыПодключения); СтрокаГУИД = БД.XMLСтрока(Док.Ссылка); |
Вариант применения в заметке «Сделать из элемента справочника группу»
Показывать по
10
20
40
сообщений
Новая тема
Ответить
Katywka
Дата регистрации: 21.01.2010
Сообщений: 155
1С 8.1<br>Как найти элемент справочника по уникальному идентификатору????<br>
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20842
Синтакс-помощником не пробовали пользоваться? <br>З,Ы,<br>СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)<br>ПолучитьСсылку (GetRef)<br>Синтаксис:<br>ПолучитьСсылку(<Уникальный идентификатор>) <br>Параметры:<br><Уникальный идентификатор> (необязательный)<br>Тип: УникальныйИдентификатор. Уникальный идентификатор, из которого будет формироваться ссылка. <br>Возвращаемое значение:<br>Тип: СправочникСсылка. <br>Описание:<br>Формирует ссылку из значения типа УникальныйИдентификатор.<br>Данный уникальный идентификатор может быть в дальнейшем получен из ссылки методом УникальныйИдентификатор. <br>Примечание:<br>Если параметр не указан, то будет сформирована новая уникальная ссылка. <br>См. также:<br>СправочникСсылка, метод УникальныйИдентификатор
Показывать по
10
20
40
сообщений