1с получить список реквизитов документа

Обновлено: 06.07.2024

Про реквизит Ссылка

Введение

При изучении запросов ученики часто спрашивают про реквизит Ссылка, который есть, например, у справочников и документов.

Давайте зайдём в базу Гастроном и откроем данные справочника Цвета:

Здесь нажмём на кнопку "Стандартные реквизиты":

Вот она наша Ссылка. Это стандартный реквизит и он есть у многих прикладных типов данных.

Вот примеры его значений:
0xA9BA005056C0000811EAA968D227F09E
0xA9BA005056C0000811EAA968D8B6ACBD
0xA9BA005056C0000811EAA968D8B6ACBE
0xA9BA005056C0000811EAA96D0BC160C1

Вся прелесть этого реквизита в том, что его значение формируется платформой 1С автоматически в момент записи нового объекта в базу данных и является уникальным в пределах прикладного типа, к которому этот реквизит относится.

То есть, например, в справочнике Цвета не может быть двух элементов с одинаковым значением реквизита Ссылка.

А раз так, то значение реквизит Ссылка может использоваться для того, чтобы ссылаться на объект, которому оно принадлежит.

Пример

Представим, что мы создали новый элемент справочника Цвета со следующими значениями реквизитов:

РеквизитЗначениеПояснение
НаименованиеКрасныйзначение этого реквизита указали мы сами при создании элемента
Ссылка0xA9BA005056C0000811EAA968D227F09Cзначение этого реквизита платформа сформировала сама при записи нового элемента в базу данных

А далее мы создали новый элемент справочника Клиенты со следующими реквизитами:

РеквизитЗначениеПояснение
НаименованиеАндрейзначение этого реквизита указали мы сами при создании элемента
ПолМужскойзначение этого реквизита указали мы сами при создании элемента
Ссылка0xA9BA005056C0000811EAA96D0BC160C0значение этого реквизита платформа сформировала сама при записи нового элемента в базу данных

А теперь самое интересное. У элемента справочника Клиенты есть реквизит ЛюбимыйЦвет, который указывает (ссылается) на элемент справочника Цвета.

Как вы думаете, какое именно значение мы должны записать в реквизит ЛюбимыйЦвет, чтобы он указывал на созданный нами ранее элемент справочника Цвета с наименованием "Красный"?

Верно, в этот реквизит мы должны записать значение реквизита Ссылка этого самого элемента (с наименованием "Красный").

То есть будет вот так:

РеквизитЗначениеПояснение
ЛюбимыйЦвет0xA9BA005056C0000811EAA968D227F09C

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

Пример 1

Как мы уже выяснили, значение поля Ссылка уникально в пределах прикладного типа, к которому оно относится.

А значит мы можем использовать эту особенность, например, для подсчёта количества элементов в справочнике:

Пример 2

Давайте напишем очень глупый запрос, который тем не менее продемонстрирует нам, что в реквизит ЛюбимыйЦвет записывается именно значение реквизита Ссылка элемента, на который он ссылается:

Обратите внимание, как выглядит строковое значение реквизита ЛюбимыйЦвет и Ссылка.

Платформа 1С не вывела нам его настоящее значение (например, 0xA9BA005056C0000811EAA968D227F09C).

Вместо этого она определила, что это значение указывает на элемент справочника "Цвета" с наименованием "Красный" и вывела нам слово "Красный" в качестве представления этого элемента.

Это стандартное поведение платформы, просто так мы никогда и нигде не увидим "сырое" представление реквизита Ссылка.

Пример 3

Наконец, значение поля Ссылка можно использовать для так называемого разыменования через точку для получения значений реквизитов объекта, которому принадлежит поле Ссылка.

К примеру, если мы знаем, что реквизит ЛюбимыйЦвет указывает на элемент справочника Цвета, то мы можем путём разыменования через точку получить любой другой реквизит этого элемента.

Вот пример запроса, в котором мы для каждого элемента справочника Клиенты выводим значение реквизита Код элемента справочника Цвета, на который указывает реквизит ЛюбимыйЦвет.

(21) новичок185, если не хотите возиться с КД, то предлогаю использовать возможности сериализатора платформы:

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("Путь к файлу обмена");
ЗаписатьXML(ЗаписьXML, ВыгружаемыйОбъект);
ЗаписьXML.Закрыть();

(24) AllexSoft, и все? 4-мя строчками кода? а загрузить как?

(26) новичок185, ну да) с загрузкой тут несколько вариантов, можно чтением xml, в цикле читать объекты, а можно средствами сериализатора платформы:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("путь к файлу");
ЧтениеXML.Прочитать();
ЗагружаемыйОбъект = ПрочитатьXML(ЧтениеXML);
ЗагружаемыйОбъект.Записать();
ЧтениеXML.Закрыть();

Но в таком случае чтения нужно чтобы объекты в базе приемнике и источники совпадали. если не совпадают то циклом, там руками делай что хошь

(24) AllexSoft, где можно почитать о сериалиазации доков 1С? ессно всех табл.частей, я так понимаю надо в запросе использовать "Метаданные. ",
цель выгрузки - из полученного txt, загрузить док (должна получиться точная копия кроме номера и даты) в идентичную конфу.

Реквизит из Метаданные.Документы.ЧтоТоТам.Реквизиты Цикл

(5) Скиминок, да как-то так, тока если не трудно, можно пример запроса?

Тут не нужен запрос

Для а=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Реквизит = Метаданные.ОбщийРеквизитДокумента(а).Имя;
Кудатопишем
КонецЦикла

Для а=1 По Метаданные.Документ(Док.Вид()).РеквизитШапки() Цикл
Реквизит = Метаданные.Документ(Док.Вид()).РеквизитШапки(а).Имя;
Куда то пишем
КонецЦикла

Для а=1 По Метаданные.Документ(Док.Вид()).РеквизитТабличнойЧасти() Цикл
Реквизит = Метаданные.Документ(Док.Вид()).РеквизитТабличнойЧасти(а).Имя;
Куда то пишем

Да. Хороший тон =) Но список реквизитов (может быть я ошибаюсь и меня кто то поправит) запросом получить низзя (10)Не ну можно же динамически запрос собирать(я к тому что это не невозможно), вот только не надо, ибо есть метаданные.

(10) Скиминок,
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Документ.АвансовыйОтчет ГДЕ Ссылка = &Ссылка")
Результат = Запрос.Выполнить();

Список реквизитов (ну, и стандарные реквизиты, и ТЧ) - будут в коллекции Результат.Колонки.

Если данные не нужны, как выше уже говорили, сорри, то лучше через метаданные

Ааа, пардон =) Давно не 1С-л. Спасибо за пример запроса - не знал Если док с табличными частями, то цикла три - по реквизитам шапки - по табличным частям и по реквизитам каждой табличной части. Если без ТЧ - то достаточно одного да, с сериализацией все ясно, тем не менее вернусь к исх.вопросу: помогите плиз составить запрос по метаданным документа произвольного вида. На выходе надо получить "связки" реквизит - идентификатор (код/наименование) значения реквизита. Нужны все реквизиты дока, реквизиты всех ТЧ, все доп.реквизиты (если есть)

(31) новичок185, вот кусок кода который получает копию табличной части любого документа по метаданным

С реквизитами шапки документа, аналогично. из функции нужно выкинуть .ТабличныеЧасти[ТЧ]

Распечатать

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps  20
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools  50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С Предприятие что это?  11
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe  1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Посмотреть все результаты поиска похожих

Еще в этой же категории

Как программно получить Картинку из базы и сохранить ее преобразовав в другой формат?  4
//Получим и сохраним Общую картинку из библиотеку картинок конфигурации ИмяКартинки = Метаданные.ОбщиеКартинки.OutlookExpress; ВыбраннаяКартинка = БиблиотекаКартинок ; // Сохраним полученную картинку в c:temp ВыбраннаяКартинка.Записать(" c:te Получить список Справочников конфигурации  1
НаКлиенте Процедура ПоКнопкеЧтениеИзМетаданных(Команда) // Вставить содержимое обработчика. Перем СписокСправочников; СписокСправочников = Новый СписокЗначений; СписокСправочников = СправочникиИзМетаданных(); Для Сч = 0 По СписокСправочников Перебор Основных Реквизитов формы  0
//Перебор Основных Реквизитов формы Для Каждого Рек из ЭтаФорма.Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" - " +рек.Синоним+" - " +Строка(рек.Тип)); КонецЦикла; // или так Для Каждого Рек из Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" Функция устанавливает новое значение реквизита документа или справочника.  0
//функция устанавливает новое значение реквизита документа или справочника и задает вопрос, если новое значение не соответствует предыдущему Функция гЗначение(Ко,Атрибут,Значение) Экспорт Знач1=Ко.ПолучитьАтрибут(Атрибут); Знач2=Значение; //про Функция возвращает ссылку на заданный реквизит объекта метаданных Документ  0
// Документ - ссылка на документ, Реквизит - название реквизита, например " Контрагент" Функция гРеквизитДокумента(Документ,Реквизит) Экспорт Если Метаданные.Документ(Документ).РеквизитШапки(Реквизит).Выбран()=1 Тогда Возврат Метаданные.Докумен Посмотреть все в категории Метаданные

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

Ниже приведены функции позволяющие проверить наличие заданных реквизитов в объектах конфигурации:

Разместил: EMigachev  Версии: | 8.x | 8.2 УП | 8.3 |  Дата: 06.07.2015   Прочитано: 56578

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1С Предприятие что это?  11
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С  6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь= Cклонения по падежам  6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Google maps, поиск оптимального маршрута  5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне Посмотреть все результаты поиска похожих

Еще в этой же категории

Как программно получить Картинку из базы и сохранить ее преобразовав в другой формат?  4
//Получим и сохраним Общую картинку из библиотеку картинок конфигурации ИмяКартинки = Метаданные.ОбщиеКартинки.OutlookExpress; ВыбраннаяКартинка = БиблиотекаКартинок ; // Сохраним полученную картинку в c:temp ВыбраннаяКартинка.Записать(" c:te Получить список Справочников конфигурации  1
НаКлиенте Процедура ПоКнопкеЧтениеИзМетаданных(Команда) // Вставить содержимое обработчика. Перем СписокСправочников; СписокСправочников = Новый СписокЗначений; СписокСправочников = СправочникиИзМетаданных(); Для Сч = 0 По СписокСправочников Получить список Документов конфигурации  0
//ЭлементыФормы.ОбъектПоиска - Поле Выбора на форме СписокВыбора = ЭлементыФормы.ОбъектПоиска.СписокВыбора; Для Каждого Документ Из Метаданные.Документы Цикл //Проверим, есть ли права на просмотр? Да- добавляем, Нет - пропускаем Если ПравоДосту Перебор Основных Реквизитов формы  0
//Перебор Основных Реквизитов формы Для Каждого Рек из ЭтаФорма.Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" - " +рек.Синоним+" - " +Строка(рек.Тип)); КонецЦикла; // или так Для Каждого Рек из Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" Пример обращения к метаданным  0
спрНомен = Метаданные.Справочники.Номенклатура; Сообщить(" Имя справочника " " " + спрНомен.Имя + " " " " ); Сообщить(" Комментарий " + спрНомен.Комментарий); Сообщить(" ВидИерархии " + спрНомен.ВидИерархии); Сообщить(" КоличествоУровней " + Посмотреть все в категории Метаданные

Читайте также: