Обработка позволяет узнать ID в базе SQL конкретного агрегатного объекта конфигурации (метаданных) 1С 7.7.
Иногда бывает необходимость исключить или наоборот включить какой — либо элемент справочника в запрос, по наименованию или коду это сделать можно, но будет крайне не надежно, а вот по идентификатору — самое оно, его вручную простой пользователь не сможет изменить.
В обработке выбираем тип метаданных, с которым работаем (например, справочник), далее выбираем конкретный агрегатный объект (элемент) справочника, и в результате получаем его SQL ID. Остается только добавить лидирующие пробелы и можно использовать в запросах.
Обработка позволяет узнать ID в базе SQL конкретного агрегатного объекта конфигурации (метаданных) 1С 7.7.
Перейти к публикации
(0) можно поподробнее про практическую ценность обработки расписать, где применять и в каких случаях?
В обработке выбираем тип метОданных с которым работаем — поправь 🙂
Поправить орфографическую ошибку в описании не сложно — а так же потом ждать пока промодерируют (проверят публикацию, некоторое время данная публикация будет недоступна).
Думаю не будет сильно критичным если пока останется так ?!
Если есть замечания по функционалу я с удовольствием выслушаю.
Отвечу Вам так, если вы программист — вам будет полезна данная обработка для отладки и для написания запросов.
Если вы обычный пользователь — то думаю Вам она не понадобится.
Для программиста:
Практическая ценность данной обработки в написании запросов на языке sql, к примеру когда нет возможности использовать метапарсер любезно предоставленный 1c++ библиотекой (1cpp.dll), а нужно напрямую взять данные из соседней базы исключив определенной значение. Вот как раз Id этого значения вы можете получить с помощью данной обработки. Мне часто помогает в 1с 7.7 или SQL Server Management Studio при написании запросов использование данной обработки.
Думаю что программистам 1с, которые пишут частенько для версии 7.7 — тоже будет полезна обработка.
(2) почему только SQL ???
Вот ето работает для любой базы:
Показать
причем адаптировано (как видно) и для объектов полученных по OLE.
(1) fishca,
с моей точки зрения,
основная практическая значимость — синхронизация объектов в разных базах по внутренним идентификаторам
(а не по кодам и номерам, доступных юзерам для изменения).
(2)
Писать запросы, используя внутренние 1с-овские имена таблиц и полей — это ЖЕСТЬ!
Склоняю голову пред вашим усердием!
:))))))))))
А что за проблемы с 1с++ ???
(4) а внутренние идентификаторы в разных базах разве могут быть гарантированно одинаковые для двух элементов справочника?
(5) yuraos,
Я пользуюсь метапарсером, любезно предоставленным 1с++, но иногда возникает нужда заглянуть в до базу, а то и в 3-4 базы (разные БД SQL 1с 7.7) и проверить некоторые данные. Как Вам будет известно уважаемый «yuraos», в 3х базах в обработке вызываемой в 1й бд 1с, невозможно использовать метапарсер, или что то поменялось и Вы можете использовать метапарсер используя 2 и более разных баз SQL в одном запросе? в вызываемой обработке в 1(первой бд 1с) ?? о_О
Простейший пример, для наглядности (основной запрос на метапарсере, а вот ид (скриншот №2 »
Работа со справочником») и название таблицы в условие из др базы получен обработкой в топике)
тз = rs1c.ВыполнитьИнструкцию(»
Select
Ном.id [$Справочник.Номенклатура]
From $Справочник.Номенклатура Ном (nolock)
Where Ном.Descr = (Select N.descr From ‘Путь до др бд ‘.SC84 N (nolock) where N.id = ‘ 2КАЙ ‘)
«);
(6) fishca, Нет в каждой бд — иды уникальны в рамках этой бд ! Для этого и обработка, что бы посмотреть в конкретной (в которой запускаете обработку) бд — ид того или иного элемента, а также название таблицы!
(8) спасибо.
(9) fishca, На здоровье!
(6) fishca,
в 1С-7.7 (в отличии от 1С-8.х)
поле ID уникально в рамках одной БД и одной таблицы данных (одного справочника).
В других базах и таблицах справочников значения ID естественно могут повторяться.
Тем не менее эти значения ID можно использовать для синхронизации объектов разных баз,
сохраняя его в реквизите синхронизуемого объекта,
а лутше в реквизите специального справочника
( регистра сведений, если синхронизуются объекты из базы 1С-8.х с базой 1С-7.7 )
хранящего соответствие ссылок на объектов в базе с объектами других баз.
PS
В 1С-8.x в качестве значений полей ID используются значения GUID (128-битные случайные числа).
Соответственно их уникальность определяется уникальностью этих GUID.
Как говорят, если генирить GUID раз в секунду,
то СРЕДНЕСТАТИСТИЧЕСКИ они станут повторяться где-то через миллион лет.
Хотя 100% гарантии уникальности GUID нет (вероятность повторения хоть очень мала но отлична от нуля)
они активно использяются в базах данных для генерации уникальных идентификаторов.
—
Вот будет прикольно при, если кому-то здорово не повезет
и у него будет два разных объекта с одним значением ссылки в восьмерошной базе.
:)))
(7) ну ты крут!!!
;)))
Кстати, если метапарсер не нужен (в запросах использованы только внутренние имена)
прямые запросы к другим БД можно делать не через 1с++, а через ADO.
ЗЫ:
Правда это все равно ЖЕСТЬ!
Добавил справочник или константу и
с большой вероятностью внутренние имена используемые
в запросе уже изменятся при реорганизации данных.
(7) слушай …
…а запросы к итогам по регистрам ты тоже через внутренние имена делаешь
(когда их надо цапнуть из другой базы) ???
С регистрами из др базы не приходилось работать. А в той базе, где запускали обработку или различные процедуры надобность было сделать — писал через метапарсер 1с++.
Проблемы работы с регистрами и в др базе, если взять с помощью этой обработки названия таблиц и прочее не вижу…
Я пользуюсь Айди объекта для восстановления Объектов которые непосредственно удалили.http://infostart.ru/public/104414/
Теоретически конечно можно и перекачки прямыми реализовать. Все возможно теперь в 1с77, благодаря формекс, 1с++.
Да уж.. Это означает всего лишь, что вы не знакомы с всеми возможностями 1срр
И никакой трудности в использовании метапарсера в запросе к сторонней базе нет, что в SQL , что DBF варианте ИБ.
Он прекрасно работает, более того, его можно использовать для запросов, которые обращаются одновременно к табличкам из разных баз.
Так что, ценность вашей поделки минимальна, тем более, баян про ЗначениеВСтрокуВнутр и получение ИД, которое еще с незапамятных времён валялось на синьёре
http://my1c-archive.narod.ru/knowhow/get_id.html
(16) Ёпрст, Уважаемый, вы бы выложили полноценный пример с базами и продемонстрировали свои знания. А так я вижу лишь пример кода, к тому же написанный не Вами.
И к тому же, никто не заставляет Вас пользоваться чем то чужим, напишите свое — лучше, и выложите в сеть,а мы оценим ).
(17) Если вы чего то не знаете, то это не означает, что этого нет.
http://www.1cpp.ru/forum/YaBB.pl?board=query рулит
Примеры к запросам в сторонней базе я неоднократно выкладывал на других ресурсах.
Да и поиск по форуму
А код получения ИД с синьёры я привёл в качестве бояна, который известен еще с начала зарождения семёрки
Вот пример для дбф базы — получает клиентосов в сторонней базе с синхронизацией по коду:
Для скуля всё гораздо проще.
1) После запуска вашей обработки:
глОлеДБ = СоздатьОбъект(«OLEDBData»);
{C:\_ЗАПРОСКВНЕШНЕЙБАЗЕСИНХРОНИЗАЦИЯПОКОДУ.ERT(40)}: Неудачная попытка создания объекта (OLEDBData)
2) Даже исправив ошибку обработка не позволила ОДНОВРЕМЕННО (акцент на одновременно) использовать метапарсер в нескольких разных бд sql.
3) Если Вам что то не нравится — это Ваша личная беда. 🙂
(20) читаем вниматочно:
«пример для дбф базы «
для скуля всего лишь нужно ПрисоединитьИБ + ПрисоединитьМД использовать
(23) Какая нах разница ?!
формат ИБ не имеет никакого отношения к получению ИД объекта и уж темболее, к выполнению запрроса к сторонней базе с использованием метапарсера.
И уж подавно, имена табличек никто руками не пишет.
Разве что запрос в адо или руками пишется текст хранимки (хотя его проще с помощью той же 1cpp написать)
(25) Ёпрст, Уважаемый ! Речь идет о SQL БД + 1с 7.7 в данной публикации.
А вы говорите совершенно про др вещи.
В прочем. Это все го лишь Ваш спам ). Если у вас будут адекватные пожелания и предложения — я с удовольствием их выслушаю, а обсуждать бредятину — уж увольте, тратить время свое нет не желания, ни смысла.
Всего Вам хорошего. С уважением автор публикации.
ПС: Прошу не выражаться нецензурными выражениями (что вы выше ругаетесь ) и соблюдать порядок — это Вас не красит, а весьма негативное впечатление складывается о Вас, как о человеке и разработчике .
Ну че тут сказать, раз ты не в силе осмыслить работу с методом ПрисоединитьМД+ОбрМетаSQL
то селяви — дураков учитьт — только портить
Можешь и дальше мои сообщения в спам отправлять
Мне лень пример для скуля писать
(27) Ёпрст, Уважаемый, вы даже не показали на метапарсере простейший пример обращения к неск базам sql одновременно в подтверждение своих слов. Думаю тут и так понятно что вы не отвечаете за свои слова. В прочем действительно — что вас учить :). Всего доброго ).
На, только не плачь
И это — RTFM
Показать
(29) Ёпрст, Если у тебя будет более 2х то получается так же не совсем удобно….
(30) Что именно не удобно ?!
смотрим пример в (19) .. оборачиваем пример в (29) в функцию по-аналогии и хоть 100 баз в одном тексте запроса.
И НИГДЕ имена табличек и полей в явном виде не указываются.
Тем самым достигается максимальная универсиализация..
А твой код в любой другой базе можно в топку выкинуть — имена полей то руктями заданы.
В общем — прошлый век и времена забытого ado
(31) Ёпрст, Если вам потребуется в других нескольких баз исключить по иду элементы в выборке, что вы будите делать? Вот как раз к этой обработке же и обратитесь что бы посмотреть ид элемента.
Да код в др базе не будет работать — потому как явно указываются иды элементов. Так это пишется по конкретно свою бд обычно, а никто не говорил про универсальность — универсальность это сама обработка которая будет работать в любой sql бд и показывать иды интересующих объектов.
(32) :))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Ну ясно, с 1cpp ты вообще не знаком.
Соберу их в список значений и установлю в качестве параметра запроса.
Более того, сделаю МФ прямо на форме.
И будет фиолетово, объект какой базы будет в этом МФ.
И уж поверь мне, знать id элемента справочника (или iddoc документа) и тем более, прописывать его явно в коде даже в голову не взбредёт.
(34) Ёпрст, Ну парься таким образом, а вот мне когда нужно исключить пару объектов, или условия поставить ( а базы у нас не меняются хД) то проще по быстрому ид узнать — намного по времени быстрее будет.
Твой пример заслуживает внимания. Но в маштабах единого предприятия с несколькими базами — твоя идея пуста.
А пользоваться или нет обработкой — так тебя никто не заставляет. Так что СеЛяви.
Слив засчитан
(36) Ёпрст, Да мне как то пофиг на «твои сливы», не нравится не пользуйся (тебе еще в начале об этом писалось) — люди +ют значит востребовано!
Дурилка, тебя всего лишь ткнули носом в твоё не знание возможностей компоненты 1cpp.dll
с помощью которой отсутствует необходимость получения имён полей руктями, ибо всё это делает метапарсер.
Вот и учи вас потом опосля этого.
Хорошая обработка, плюсую..