1с найти по реквизиту уникальный идентификатор

&НаСервере

Функция ПодключитьБазуНаСервере(Соединение = "")

Объект.ФайловаяБазаДанных=Ложь;

Объект.Сервер="srv1с";

Объект.База="buh";

Объект.ИмяПользователя="Obmen";

Объект.Пароль="1qaz";

// Подключение к 1С

Если Объект.ФайловаяБазаДанных Тогда

СтрокаПодключения = "file='" + Объект.ПутьКБазе + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + Объект.Пароль + "';";

Иначе

СтрокаПодключения = "srvr='" + Объект.Сервер + "'; ref='" + Объект.База + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + Объект.Пароль + "';";

КонецЕсли;

Попытка

V8 = Новый COMObject("V83.COMConnector");

Соединение = V8.Connect(СтрокаПодключения);

ЕстьСоединение = Истина;

Исключение

ЕстьСоединение = Ложь;

Сообщить(ОписаниеОшибки());

КонецПопытки;

Возврат Соединение;

КонецФункции

&НаСервере

Процедура ОбновитьДанныеПлатежейНаСервере()

Соединение = ПодключитьБазуНаСервере();

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка КАК Ссылка,

|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа КАК ОснованиеПлатежа,

|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Сумма КАК Сумма

|ИЗ

|Документ.ПоступлениеБезналичныхДенежныхСредств.РасшифровкаПлатежа КАК ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа

|ГДЕ

|НЕ ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа ССЫЛКА Документ.ЗаказКлиента";

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

УИД = ВыборкаДетальныеЗаписи.Ссылка.УникальныйИдентификатор();

СсылкаНаДок = Соединение.Документы.ПоступлениеНаРасчетныйСчет.ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",Строка(УИД)));

//Сообщить(СсылкаНаДок.Номер);

Для каждого СтрокаИсточник Из СсылкаНаДок.РасшифровкаПлатежа Цикл

//Сообщить("Счет: "+Строка(СтрокаИсточник.СчетНаОплату.Номер));

УИД = Соединение.String(СтрокаИсточник.СчетНаОплату.УникальныйИдентификатор());

текДок= Документы.ЗаказКлиента.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));

Если ЗначениеЗаполнено(текДок) Тогда

Сообщить(текДок);

текОбъект=ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();

текОбъект.РасшифровкаПлатежа[0].ОснованиеПлатежа= текДок;

текОбъект.РасшифровкаПлатежа[0].Заказ= текДок;

текОбъект.Записать(РежимЗаписиДокумента.Проведение);

КонецЕсли;

КонецЦикла;

КонецЦикла;

КонецПроцедуры

&НаКлиенте

Процедура ОбновитьДанныеПлатежей(Команда)

ОбновитьДанныеПлатежейНаСервере();

КонецПроцедуры

   YF

30.06.11 — 12:07

Есть идентификатор вида : 209:971a0018f34e121411e03c1de5b80387

Хочу найти что за объект в базе ему соответствует. Как?

  

Партнерская программа EFSOL Oblako

   Amiralnar

1 — 30.06.11 — 12:09

А где ты его берешь?

   Axel2009

2 — 30.06.11 — 12:09

шерстить каждый объект отдельно

   Fragster

3 — 30.06.11 — 12:10

209 — идентификатор типа, остальное — перемиксованный объект УникальныйИдентификатор

   YF

4 — 30.06.11 — 12:10

(1) Да после обмена делаю ТИИ оно говорит:

Проверка логической целостности. Последовательность.Взаиморасчеты <Объект не найден> (209:971a0018f34e121411e03c1de5b80387)

   Неверная ссылка на регистратор.

   Рэйв

5 — 30.06.11 — 12:10

НовыйGUID = Новый УникальныйИдентификатор(ТвойГуид);

СсылкаГУИД=Документы.ВидДок.ПолучитьСсылку(НовыйGUID);

   Рэйв

6 — 30.06.11 — 12:11

(4)Если <Объект не найден> , то с чего ты взял, что ты его найдешь если база не нашла?

   YF

7 — 30.06.11 — 12:11

(5) щас попробую

   YF

8 — 30.06.11 — 12:12

(6) Ну я же на копии, у меня есть и оригинал, где обмен не запускал …

   Fragster

9 — 30.06.11 — 12:12

(5) читай ветку

(4) блииин. сделай запрос по регистру «Взаиморасчеты» примерно такой

Выбрать

 Взаиморасчеты.Регистратор

Из

 РегистрНакопления.Взаиморасчеты

Где

 Взаиморасчеты.Регистратор.Номер Есть NULL

получишь твою ссылку. потом по ней отбор набора записей и запись пустого набора

   Fragster

10 — 30.06.11 — 12:13

ну а вообще — после обмена — это нормально, если криво правила настроены, или не криво, но это заложено в логику

   Рэйв

11 — 30.06.11 — 12:14

(9)<Объект не найден>  <> NULL

   Рэйв

12 — 30.06.11 — 12:14

+ Ссылка не пустая. Она битая

   YF

13 — 30.06.11 — 12:15

(10) Самое прикольное, что это стандартный обмен БП 2.0 по организации. Там постоянно вылезают такие бяки

   Defender aka LINN

14 — 30.06.11 — 12:16

Выбрать Регистратор Из Последовательность.Взаиморасчеты где Регистратор.Ссылка есть NULL

Но что ты в базе собрался искать, если проблема как раз в том, что в базе его нет?

   Fragster

15 — 30.06.11 — 12:16

(11) я там не зря написал «.Номер»

   Defender aka LINN

16 — 30.06.11 — 12:18

(11) А не является ли «.Номер» неявным левым соединением?

Варианты ответа:

1) да, является.

2) нет, является.

   Fragster

17 — 30.06.11 — 12:19

(11) и кстати, да:

NULL <> NULL

   SalavatUlaev

18 — 30.06.11 — 12:20

раз объект не найден, то нет его нигде. Если база SQL, восстанавливай бекап, ищи в SQL таблицах средствами SQL, по таблице и поймешь что за объект

   luckyluke

19 — 30.06.11 — 12:21

(18) в копии он может и оказаться, почему же нигде?

   Defender aka LINN

20 — 30.06.11 — 12:22

(18) Ащета запрос из (9) дает тебе готовую ссылку. У которой даже и тип имеется. Для зачем что-то по таблицам SQL искать?

   YF

21 — 30.06.11 — 12:23

+(19) В том и дело, что он где-то есть: либо в базе до обмена, либо в узле откуда обмен принимали …

Вот и хочу найти что это было и почему объект удалился, а из последовательности не изьялся …

   YF

22 — 30.06.11 — 12:24

(20) В запросе (9) обращаемся к регистру накопления, но ТИИ не нашла в нем ссылок на несуществующие объекты …

   SalavatUlaev

23 — 30.06.11 — 12:24

(20) Не увидел 4 сообщение. Думал вообще ничего не известно, кроме гуида

   Fragster

24 — 30.06.11 — 12:25

(22) ну удали из последовательности

   Defender aka LINN

25 — 30.06.11 — 12:41

(22) Ну, ять, в (14) Посмотри. БОЛЬШАЯ разница, ага…

   YF

26 — 30.06.11 — 12:45

(25) Да разница-то небольшая, только что там в последовательности-то найдешь? Ну найдешь битые записи, а что за объект был все равно не известно …

   Fragster

27 — 30.06.11 — 12:53

ПЦ

   Defender aka LINN

28 — 30.06.11 — 13:23

(26) рукалицо…

   Amiralnar

29 — 30.06.11 — 13:30

(17) (NULL IS NULL) = TRUE

   Axel2009

30 — 30.06.11 — 13:51

ТЗ = ПолучитьСтруктуруХраненияБазыДанных();

   Для Каждого Строка Из ТЗ Цикл

       Если Не ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда Продолжить; КонецЕсли;

       ПозТочки = Найти(Строка.ИмяТаблицыХранения, «.»);

       Если ПозТочки > 0 Тогда

           Продолжить;

           ИмяТаблицы = Лев(Строка.ИмяТаблицыХранения, ПозТочки — 1);

       КонецЕсли;

       ИтоговоеЧисло = «»;

       Для Сч = 1 По СтрДлина(Строка.ИмяТаблицыХранения) Цикл

           Символ = Сред(Строка.ИмяТаблицыХранения, Сч, 1);

           Если Найти(«0123456789», Символ) > 0 Тогда

               ИтоговоеЧисло = ИтоговоеЧисло + Символ;

           КонецЕсли;

       КонецЦикла;

       Если ИтоговоеЧисло = «209» Тогда

           Сообщить(Строка.ИмяТаблицы);

       КонецЕсли;

   КонецЦикла;

   Defender aka LINN

31 — 30.06.11 — 13:53

(30) А что *это* делает?

   Axel2009

32 — 30.06.11 — 13:58

(30) поможет узнать имя объекта по типу 209..

   Axel2009

33 — 30.06.11 — 14:01

(31) это запустить в базе где отсутствует

(30)+

потом в базе источнике запустить

   Поз = Найти(СтрокаОбъекта, «:»);

   Тип = Лев(СтрокаОбъекта, Поз — 1);

   СтрокаУИД = Сред(СтрокаОбъекта, Поз + 1);

   СтрокаУИД = Сред(СтрокаУИД, 24, 8) + «-» + Сред(СтрокаУИД, 20, 4) + «-» + Сред(СтрокаУИД, 16, 4) + «-» + Сред(СтрокаУИД, 1, 4) + «-» + Сред(СтрокаУИД, 5, 12);

   Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД));

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

   Defender aka LINN

34 — 30.06.11 — 14:01

(32) см (14)

   Axel2009

35 — 30.06.11 — 14:03

(34) и что это покажет? что «объект не найден <209:971a0018f34e121411e03c1de5b80387>»?? а как понять что за объект конкретно?

   Fragster

36 — 30.06.11 — 14:06

(35) ссылка будет на конкретный объект метаданных

   Defender aka LINN

37 — 30.06.11 — 14:06

(35) рукалицо…

Запрос = Новый Запрос;
Запрос.Текст = "Выбрать РАЗЛИЧНЫЕ Регистратор Из Последовательность.Взаиморасчеты где Регистратор.Ссылка есть NULL";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(ТипЗнч(Выборка.Регистратор));
КонецЦикла;
   Fragster

38 — 30.06.11 — 14:06

хоть и отсутствующий

  

Axel2009

39 — 30.06.11 — 14:13

(37) был не прав.

Функция ПолучитьСсылкуПоИД(ИД, Тип = Неопределено)

Если ИД = «» и Тип <> Неопределено Тогда

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

спр = Метаданные.Справочники.Найти(Тип);

Если спр <> Неопределено Тогда

Возврат Справочники[Тип].ПустаяСсылка();

КонецЕсли;

док = Метаданные.Документы.Найти(Тип);

Если док <> Неопределено Тогда

Возврат Документы[Тип].ПустаяСсылка();

КонецЕсли;

Возврат Неопределено

КонецЕсли;

Попытка

УИД = Новый УникальныйИдентификатор(ИД);

Исключение

Возврат Неопределено

КонецПопытки;

// Если тип известен, то ищем только в одной таблице

Если Тип <> Неопределено Тогда

спр = Метаданные.Справочники.Найти(Тип);

Если спр <> Неопределено Тогда

Ссылка = Справочники[Тип].ПолучитьСсылку(УИД);

Если Не Ссылка.Пустая() и Ссылка.ПолучитьОбъект() <> Неопределено Тогда

Возврат Ссылка

КонецЕсли;

Возврат Неопределено

КонецЕсли;

док = Метаданные.Документы.Найти(Тип);

Если док <> Неопределено Тогда

Ссылка = Документы[Тип].ПолучитьСсылку(УИД);

Если Не Ссылка.Пустая() и Ссылка.ПолучитьОбъект() <> Неопределено Тогда

Возврат Ссылка

КонецЕсли;

КонецЕсли;

Возврат Неопределено

КонецЕсли;

// Если тип неизвестен, то перебираем все справочники и документы.

// Это долго. Поэтому тип очень хочется получить.

Для Каждого спр из Метаданные.Справочники Цикл

Ссылка = Справочники[спр.Имя].ПолучитьСсылку(УИД);

Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда

Возврат Ссылка

КонецЕсли;

КонецЦикла;

Для Каждого док из Метаданные.Документы Цикл

Ссылка = Документы[док.Имя].ПолучитьСсылку(УИД);

Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда

Возврат Ссылка

КонецЕсли;

КонецЦикла;

Возврат Неопределено

КонецФункции

На чтение 2 мин Просмотров 924 Опубликовано 10.03.2021

Содержание

  1. Синтаксис
  2. Параметры
  3. Возвращаемое значение
  4. Описание
  5. Доступность
  6. Пример использования

При организации обмена данными между двумя информационными базами зачастую возникает задача получения ссылки объекта по его Уникальному идентификатору (УИД).

Для поиска и получения ссылки объекта по его Уникальному идентификатору служит такая конструкция:

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

Как получить уникальный идентификатор из ссылки? При помощи свойства ссылки УникальныйИдентификатор(). Пример 1:

Уникальный идентификатор в 1С 8 имеет тип УникальныйИдентификатор, но его можно преобразовать и в строковое значение(получится строка вот такого вида: 9712e912-d0b9-11e1-b37b-0050568458ce).

Как получить ссылку имея уникальный идентификатор? При помощи метода ПолучитьСсылку( ) менеджера справочника, документа и т.п.

Пример 4 (Здесь УИН — значение типа УникальныйИдентификатор):

Пример 5(Здесь СтрокаУИН — переменная со строковым значением уникального идентификатора):

В примере 5 уникальный идентификатор получается из строкового значения при помощи конструктора Новый УникальныйИдентификатор( )

Выполняет поиск элемента списка значений по идентификатору.

Синтаксис

Метод НайтиПоИдентификатору() имеет следующий синтаксис:

А также альтернативный англоязычный синтаксис:

Параметры

Описание параметров метода НайтиПоИдентификатору() :

Имя параметра Тип Описание
Идентификатор Число Идентификатор элемента списка значений.
Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

Описание

Метод НайтиПоИдентификатору() выполняет поиск элемента списка значений по идентификатору. Если элемент с указанным идентификатором в списке отсутствует, будет возвращено значение Неопределено .

Доступность

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

Пример использования

Пример кода с использованием метода НайтиПоИдентификатору() :

  • Распечатать

Оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 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
сообщений

Понравилась статья? Поделить с друзьями:
  • 1с найти строки в табличной части по реквизиту
  • 1с обратиться к реквизиту справочника по имени
  • 1с обращение к реквизиту справочника в запросе
  • 1с общие реквизиты использование автоматически
  • 1с основной реквизит формы динамический список