1с получить список реквизитов документа
Про реквизит Ссылка
Введение
При изучении запросов ученики часто спрашивают про реквизит Ссылка, который есть, например, у справочников и документов.
Давайте зайдём в базу Гастроном и откроем данные справочника Цвета:
Здесь нажмём на кнопку "Стандартные реквизиты":
Вот она наша Ссылка. Это стандартный реквизит и он есть у многих прикладных типов данных.
Вот примеры его значений:
0xA9BA005056C0000811EAA968D227F09E
0xA9BA005056C0000811EAA968D8B6ACBD
0xA9BA005056C0000811EAA968D8B6ACBE
0xA9BA005056C0000811EAA96D0BC160C1
Вся прелесть этого реквизита в том, что его значение формируется платформой 1С автоматически в момент записи нового объекта в базу данных и является уникальным в пределах прикладного типа, к которому этот реквизит относится.
То есть, например, в справочнике Цвета не может быть двух элементов с одинаковым значением реквизита Ссылка.
А раз так, то значение реквизит Ссылка может использоваться для того, чтобы ссылаться на объект, которому оно принадлежит.
Пример
Представим, что мы создали новый элемент справочника Цвета со следующими значениями реквизитов:
Реквизит | Значение | Пояснение |
---|---|---|
Наименование | Красный | значение этого реквизита указали мы сами при создании элемента |
Ссылка | 0xA9BA005056C0000811EAA968D227F09C | значение этого реквизита платформа сформировала сама при записи нового элемента в базу данных |
А далее мы создали новый элемент справочника Клиенты со следующими реквизитами:
Реквизит | Значение | Пояснение |
---|---|---|
Наименование | Андрей | значение этого реквизита указали мы сами при создании элемента |
Пол | Мужской | значение этого реквизита указали мы сами при создании элемента |
Ссылка | 0xA9BA005056C0000811EAA96D0BC160C0 | значение этого реквизита платформа сформировала сама при записи нового элемента в базу данных |
А теперь самое интересное. У элемента справочника Клиенты есть реквизит ЛюбимыйЦвет, который указывает (ссылается) на элемент справочника Цвета.
Как вы думаете, какое именно значение мы должны записать в реквизит ЛюбимыйЦвет, чтобы он указывал на созданный нами ранее элемент справочника Цвета с наименованием "Красный"?
Верно, в этот реквизит мы должны записать значение реквизита Ссылка этого самого элемента (с наименованием "Красный").
То есть будет вот так:
Реквизит | Значение | Пояснение |
---|---|---|
ЛюбимыйЦвет | 0xA9BA005056C0000811EAA968D227F09C |
Примеры использования в запросах
Пример 1
Как мы уже выяснили, значение поля Ссылка уникально в пределах прикладного типа, к которому оно относится.
А значит мы можем использовать эту особенность, например, для подсчёта количества элементов в справочнике:
Пример 2
Давайте напишем очень глупый запрос, который тем не менее продемонстрирует нам, что в реквизит ЛюбимыйЦвет записывается именно значение реквизита Ссылка элемента, на который он ссылается:
Обратите внимание, как выглядит строковое значение реквизита ЛюбимыйЦвет и Ссылка.
Платформа 1С не вывела нам его настоящее значение (например, 0xA9BA005056C0000811EAA968D227F09C).
Вместо этого она определила, что это значение указывает на элемент справочника "Цвета" с наименованием "Красный" и вывела нам слово "Красный" в качестве представления этого элемента.
Это стандартное поведение платформы, просто так мы никогда и нигде не увидим "сырое" представление реквизита Ссылка.
Пример 3
Наконец, значение поля Ссылка можно использовать для так называемого разыменования через точку для получения значений реквизитов объекта, которому принадлежит поле Ссылка.
К примеру, если мы знаем, что реквизит ЛюбимыйЦвет указывает на элемент справочника Цвета, то мы можем путём разыменования через точку получить любой другой реквизит этого элемента.
Вот пример запроса, в котором мы для каждого элемента справочника Клиенты выводим значение реквизита Код элемента справочника Цвета, на который указывает реквизит ЛюбимыйЦвет.
(21) новичок185, если не хотите возиться с КД, то предлогаю использовать возможности сериализатора платформы:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("Путь к файлу обмена");
ЗаписатьXML(ЗаписьXML, ВыгружаемыйОбъект);
ЗаписьXML.Закрыть();
(26) новичок185, ну да) с загрузкой тут несколько вариантов, можно чтением xml, в цикле читать объекты, а можно средствами сериализатора платформы:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("путь к файлу");
ЧтениеXML.Прочитать();
ЗагружаемыйОбъект = ПрочитатьXML(ЧтениеXML);
ЗагружаемыйОбъект.Записать();
ЧтениеXML.Закрыть();
Но в таком случае чтения нужно чтобы объекты в базе приемнике и источники совпадали. если не совпадают то циклом, там руками делай что хошь
(24) AllexSoft, где можно почитать о сериалиазации доков 1С? ессно всех табл.частей, я так понимаю надо в запросе использовать "Метаданные. ",цель выгрузки - из полученного txt, загрузить док (должна получиться точная копия кроме номера и даты) в идентичную конфу.
Реквизит из Метаданные.Документы.ЧтоТоТам.Реквизиты Цикл
(5) Скиминок, да как-то так, тока если не трудно, можно пример запроса?Тут не нужен запрос
Для а=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Реквизит = Метаданные.ОбщийРеквизитДокумента(а).Имя;
Кудатопишем
КонецЦикла
Для а=1 По Метаданные.Документ(Док.Вид()).РеквизитШапки() Цикл
Реквизит = Метаданные.Документ(Док.Вид()).РеквизитШапки(а).Имя;
Куда то пишем
КонецЦикла
Для а=1 По Метаданные.Документ(Док.Вид()).РеквизитТабличнойЧасти() Цикл
Реквизит = Метаданные.Документ(Док.Вид()).РеквизитТабличнойЧасти(а).Имя;
Куда то пишем
(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
спрНомен = Метаданные.Справочники.Номенклатура; Сообщить(" Имя справочника " " " + спрНомен.Имя + " " " " ); Сообщить(" Комментарий " + спрНомен.Комментарий); Сообщить(" ВидИерархии " + спрНомен.ВидИерархии); Сообщить(" КоличествоУровней " + Посмотреть все в категории Метаданные
Читайте также: