Меню Рубрики

Установка значений реквизитов объекта

Универсальные функции получения значений реквизитов объектов (8.2+)

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

Задача: Описать функции позволяющие получить значения реквизитов различных объектов (независимо от типа объекта). Но ограничимся объектами метаданных конфигурации, которые могут иметь ссылочный тип данных: Справочники, Документы и т.п.

Описанные далее функции желательно располагать в общем серверном модуле без возможности вызова сервера. Если будет возможность вызывать данные функции с клиента, то злоумышленник сможет получить любые данные из базы без особого труда.

Определимся с параметрами:

  1. Объект — объект, данные которого необходимо получить;
  2. ИменаРеквизитов — Список имен реквизитов, данные которых необходимо получить. Если спиок не указан, то предполагаем, что нужно получить данные всех реквизитов;
  3. ДополнительныеРеквизиты — Структура, с помошью которой можно было бы описать дополнительные данные, которые нужно получить вместе с реквизитами объекта (без использования явных соединений с другими таблицами) или выполнение каких-то действий с полями выборки на языке запросов. В ключе элемента структуры описываем имя реквизита в общем списке реквизитов объекта, в значении — поле выборки или алгоритм обработки полей выборки на языке запросов.

Функция ДанныеРеквизитовОбъекта ( Объект , ИменаРеквизитов = Неопределено,
ДополнительныеРеквизиты = Неопределено) Экспорт

Разберем, значения каких реквизитов необходимо получить из базы и приведем список имен к типу данных Массив.

СтруктураОбъекта = Новый Структура ;
МетаданныеОбъекта = Объект . Метаданные ();

Если ИменаРеквизитов = Неопределено тогда
МассивИменРеквизитов = МассивИменРеквизитовОбъекта ( Объект );
иначе
Если ТипЗнч ( ИменаРеквизитов ) = Тип ( «Массив» ) тогда
МассивИменРеквизитов = ИменаРеквизитов ;
иначеЕсли ТипЗнч ( ИменаРеквизитов ) = Тип ( «Строка» ) тогда
МассивИменРеквизитов = МассивПодстрокИзСтроки ( ИменаРеквизитов );
КонецЕсли;
КонецЕсли;

Если список имен не задан, то с помощью функции МассивИменРеквизитовОбъекта () получим массив имен всех реквизитов объекта (алгоритм этой функции смотри ниже).

Если список имен задан в виде строки разделенной запятыми, то разложим ее на подстроки с помошью функции МассивПодстрокИзСтроки () . Это не сложная задача, алгоритм этой функции разбирать не будем.

Далее с помошью функции ЭтоСсылка () определим, является ли объект ссылочным типом. Для ссылочных типов значения необходимо получить из БД, в противном случае значения реквизитов хранятся в памяти.

ЭтоСсылка = ЭтоСсылка ( Объект );
СсылкаОбъекта = ?( ЭтоСсылка , Объект , Объект . Ссылка );

ПолучитьДанныеИзОбъекта = НЕ ЭтоСсылка ;
Если ЭтоСсылка И СсылкаОбъекта . Пустая () тогда
// это пустая ссылка (данных в базе нет)
ПолучитьДанныеИзОбъекта = Истина;
КонецЕсли;

Теперь, если данные объекта хранятся в памяти — мы можем их сразу получить, в противном случае необходио подготовиться для составления запроса к БД (переведем список имен реквизитов из типа данных Массив в тип Структура).

ОсновныеРеквизиты = Новый Структура ;
Для каждого ИмяРеквизита Из МассивИменРеквизитов Цикл
Если ПолучитьДанныеИзОбъекта тогда
СтруктураОбъекта . Вставить ( ИмяРеквизита , Объект [ ИмяРеквизита ]);
иначе
ОсновныеРеквизиты . Вставить ( ИмяРеквизита );
КонецЕсли;
КонецЦикла;

Все готово к составлению запроса чтобы получить значения реквизитов если перед нами объект ссылочного типа, а так же для получения дополнительных реквизитов, описанных в 3-ем параметре функции. Но смысл всех этих действий есть, только если данный объект существует в БД (на него есть ссылка).

Для начала составим текст запроса для полей выборки поочередно обходя структуры Основных и Дополнительных реквизитов

Если НЕ СсылкаОбъекта . Пустая () тогда

// сформируем текст выборки по реквизитам
ТекстВыборкиРеквизиты = «» ;
Для индекс = 0 по 1 Цикл
СтруктураРеквизитов = ?( индекс = 0 , ОсновныеРеквизиты , ДополнительныеРеквизиты );
Если СтруктураРеквизитов = Неопределено тогда
Продолжить;
КонецЕсли;
Для каждого ЭлементСтруктуры из СтруктураРеквизитов Цикл
Если НЕ МетаданныеОбъекта . ТабличныеЧасти . Найти ( ЭлементСтруктуры . Ключ ) = Неопределено тогда
// это имя табличной части
Продолжить;
КонецЕсли;
ТекстВыборкиРеквизиты = ТекстВыборкиРеквизиты
+ ?( ПустаяСтрока ( ТекстВыборкиРеквизиты ), «» , «,» + Символы . ПС )
+ ?( ЗначениеЗаполнено ( ЭлементСтруктуры . Значение ), ЭлементСтруктуры . Значение , ЭлементСтруктуры . Ключ )
+ » КАК » + ЭлементСтруктуры . Ключ ;
КонецЦикла;
КонецЦикла;

Читайте также:  Установка pci raid контроллера

Теперь соберем текст запроса и выполним его. Результат запроса добавим в общую структуру данных объекта

// получим реквизиты одним запросом
Если НЕ ПустаяСтрока ( ТекстВыборкиРеквизиты ) тогда
Запрос = Новый Запрос ;
Запрос . Текст = «ВЫБРАТЬ
|» + ТекстВыборкиРеквизиты + »
|ИЗ
| » + МетаданныеОбъекта . ПолноеИмя () + »
|ГДЕ
| Ссылка = &Ссылка» ;
Запрос . УстановитьПараметр ( «Ссылка» , СсылкаОбъекта );
РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();
Если Выборка . Следующий () тогда
Для каждого Колонка из РезультатЗапроса . Колонки Цикл
СтруктураОбъекта . Вставить ( Колонка . Имя , Выборка [ Колонка . Имя ]);
КонецЦикла;
КонецЕсли;
КонецЕсли;

Все данные получены, можно завершать функцию

Достоинства алгоритма:

  1. Может работать с различными типами объектов конфигурации (которые могут иметь ссылки: Справочники, Документы, ПВХ и т.п.);
  2. Получение всех реквизитов за одно обращение к БД;
  3. Данные возвращаются в виде структуры, что позволяет их передать далее на клиент без преобразования;
  4. С помошью Дополнительных реквизитов можно получить вспомогательные данные (обращение к полям выборки через несколько точек) или на уровне запроса выполнить какие-то действия с данными.
  5. Наглядность кода, данные получаются одной функцией, без надобности каждый раз писать запрос к БД с обработкой результата.
  1. Не реализована возможность получения табличных частей объектов

Дополнительные функции использованные в алгоритме:

// Возвращает массив имен всех реквизитов переданного объекта
//
Функция МассивИменРеквизитовОбъекта ( Объект ) Экспорт

МассивИменРеквизитов = Новый Массив ;

Если ТипЗнч ( Объект ) = Тип ( «ОбъектМетаданных» ) тогда
МетаданныеОбъекта = Объект ;
иначе
МетаданныеОбъекта = Метаданные . НайтиПоТипу ( ТипЗнч ( Объект ));
Если МетаданныеОбъекта = Неопределено тогда
Возврат МассивИменРеквизитов ;
КонецЕсли;
КонецЕсли;

Для индекс = 0 по 1 Цикл
КоллекцияРеквизитов = ?( индекс = 0 , МетаданныеОбъекта . СтандартныеРеквизиты , МетаданныеОбъекта . Реквизиты );
Для Каждого Реквизит Из КоллекцияРеквизитов Цикл
МассивИменРеквизитов . Добавить ( Реквизит . Имя );
КонецЦикла;
КонецЦикла;
Для каждого ОбщийРеквизит Из Метаданные . ОбщиеРеквизиты Цикл
Если ИспользуетсяОбщийРеквизит ( ОбщийРеквизит , МетаданныеОбъекта ) тогда
МассивИменРеквизитов . Добавить ( ОбщийРеквизит . Имя );
КонецЕсли;
КонецЦикла;

// Проверяет используется ли в Объекте указанный общий реквизит
//
Функция ИспользуетсяОбщийРеквизит ( ОбщийРеквизит , Объект ) Экспорт

Если ТипЗнч ( Объект ) = Тип ( «ОбъектМетаданных» ) тогда
МетаданныеОбъекта = Объект ;
иначе
МетаданныеОбъекта = Метаданные . НайтиПоТипу ( ТипЗнч ( Объект ));
Если МетаданныеОбъекта = Неопределено тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;

Если ТипЗнч ( ОбщийРеквизит ) = Тип ( «ОбъектМетаданных» ) тогда
МетаданныеОбщегоРеквизита = ОбщийРеквизит ;
иначе
МетаданныеОбщегоРеквизита = Метаданные . ОбщиеРеквизиты . Найти ( ОбщийРеквизит );
Если МетаданныеОбщегоРеквизита = Неопределено тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;

ЭлементСостава = МетаданныеОбщегоРеквизита . Состав . Найти ( МетаданныеОбъекта );
Если ЭлементСостава = Неопределено тогда
Возврат Ложь;
КонецЕсли;

пИспользованиеОбщегоРеквизита = Метаданные . СвойстваОбъектов . ИспользованиеОбщегоРеквизита ;
Если ЭлементСостава . Использование = пИспользованиеОбщегоРеквизита . Использовать тогда
Возврат Истина;
иначеЕсли ЭлементСостава . Использование = пИспользованиеОбщегоРеквизита . НеИспользовать тогда
Возврат Ложь;
иначе
пАвтоИспользованиеОбщегоРеквизита = Метаданные . СвойстваОбъектов . АвтоИспользованиеОбщегоРеквизита ;
Если МетаданныеОбщегоРеквизита . АвтоИспользование = пАвтоИспользованиеОбщегоРеквизита . Использовать тогда
Возврат Истина;
иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;

источник

Установка значений реквизитов объектов c поддержкой выражений на встроенном языке для универсальной обработки подбора объектов.

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

Для использования добавить файл обработки к файлам, взятым из папки \1CIts\EXE\EXTREPS\UNIPROCS диска ИТС.

Чтобы задать выражение, нужно нажать кнопку Установить выражение (выражение указывать без квадратных скобок). Можно обращаться к изменяемому объекту, используя имя Объект, как показано в примере, отображенном на скриншоте.

Скачать файлы

Специальные предложения

Новый вопрос

См. также

Производственный календарь для 1С 7.7

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно — для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

Читайте также:  Установка контроллера домена сети

Универсальный подбор и обработка объектов для 1С: Предприятия 7.7 «UChoice.ert»

Универсальная обработка 7.7, представленная здесь, до сих пор почему-то по функционалу гораздо беднее, чем общеизвестная типовая «Универсальный подбор и обработка объектов» (UNIREPS82\UniversalSelection) 8.2-8.3″, мне не хватило возможности выполнить произвольный код обработчика объектов. Данная обработка «UChoice.ert» является полным аналогом «UniversalSelection», представляет собой консоль выполнения произвольного кода, позволяет делать с объектами информационной базы 1С 7.7 абсолютно все, что угодно, а не узкий, сложно настраиваемый набор команд, на мой взгляд, она существенно превосходит имеющиеся аналоги, поэтому ничем другим кроме нее я не пользуюсь.

Чтение и изменение csv файлов

Обработка позволяет изменять csv файлы.

26.02.2019 3133 1 Slypower 0

Онлайн-курс «Автоматизация процессов управления МТО: методика сбора и формализации требований» с 1 апреля по 13 мая 2020 года. Промо

Цель курса — повысить полноту и качество сбора и формализации требований к автоматизации процессов управления материально-техническим обеспечением. Курс основан на процессном подходе, позволяет в полном объеме выявить и учесть все факторы, влияющие на специфику процессов управления МТО. Участники курса получают теоретические знания в области организации процессов управления МТО и готовый инструментарий для сбора и формализации требований по автоматизации этих процессов (шаблоны, опросники, модели).

Перевод из рублей в USD и EUR. 1C: 7.7

Менеджеру нужно было получать валюты из 1С, для этого была написана данная обработка. Тестировалось на 1C: 7.7 Торговля и Склад.

03.03.2018 5341 1 user840355 3

Сохранение любой печатной формы в формате xlsx, xls, pdf, jpg, png, bmp

Внешняя обработка, позволяющая без труда сохранять в форматах xlsx, xls, pdf, jpg, png, bmp любую печатную форму.

02.03.2018 8457 32 botman4 10

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) — автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Работа с акцизными марками ЕГАИС для любых конфигураций 1С 8.1, 8.2, 8.3 и 7.7(с 15.01.2018 в ресторанах, барах, кафе) ПОДДЕРЖКА ВЕРСИИ 3 ФОРМАТА ОБМЕНА С УТМ

С 15 января 2018 года в заведениях Общепита (ресторанах, барах, кафе) необходимо отражать вскрытие тары с обязательным считыванием акцизной марки. Не обязательно переходить на новые программы, где реализована интеграция с ЕГАИС. Можно продолжать работать на старой программе, используя внешнюю обработку для работы с акцизными марками. Доработки ваших программ не требуются, просто открываем внешнюю обработку и сканируем акцизные марки при вскрытии. Информация о считанных марках будет сохраняться в текстовые файлы за каждый день, также туда будет сохраняться код алкогольной продукции, полученный из акцизной марки.

15.01.2018 7749 2 customerdisplay 2

Проверка БСО через сервис АС БДБ: blank.bisc.by

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

Читайте также:  Установка загрузчика из консоли

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Загрузка картинок с FTP (конвертация в jpg)

Обработка загрузки картинок с FTP (конвертация в jpg) для 1С 7.7.

Групповая обработка документов и справочников v.7.7

1. Обработка позволяет совершать следующие действия над объектами: а. СПРАВОЧНИКИ: удаление; пометка на удаление; снятие пометки на удаление. б. ДОКУМЕНТЫ: удаление; пометка на удаление; снятие пометки на удаление; проведение; отмена проведения; выключить проводки; включить проводки. 2. Действия могут быть ограничены некоторыми условиями. 3. Существует отбор по видам объектов. 4. Есть возможность обработать подчиненные справочники.

Новый раздел на Инфостарте — Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Журнал продаж из ЛК ЕГАИС

Вашему вниманию предлагается обработка для получения журнала продаж алкогольной продукции из ЛК ЕГАИС (http://egais.ru/).

17.01.2017 10900 21 knstanta 18

Конвертер / Оптимизатор таблиц печатных форм для 1С: 7.7

Конвертер, оптимизатор печатных таблиц форм для 1С: 7.7. Несмотря на то, что 1С: 7.7, несомненно, устарела, она все еще используется и будет использоваться! Однако законы все время меняются, и печатные формы тоже.

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Автосписание остатков по ЕГАИС в 0 или как нужно

Независимая от конфигурации 1С обработка по получению и последующему списанию остатков ЕГАИС из 1-ого регистра. Сохранение файлов с актами списания, тикетов и остатков в каталог на диске. Может использоваться как заготовка для своей обработки.

27.12.2016 9343 4 serg_info 6

Универсальные обработки документов и справочников для 1С: Предприятие 7.7

Обработки можно использовать в любой конфигурации 1С-Предприятия 7.7. Обработки позволяют просмотреть/изменить значения любого реквизита документов/справочников, существующих в базе. В обработках реализован множественный отбор по значениям реквизитов (для табличной части документов тоже). В обработке документов реализованы следующие действия: Перенумерация; проведение; отмена проведения; пометка на удаление; непосредственное удаление; снятие пометки удаления; изменение реквизитов; очистка реквизитов; удаление строк табличной части; вывод на печать и в файлы *.xls,*.csv,*.dbf,*.xml реквизитов шапки и табличной части. В обработке справочников реализованы следующие действия: Перенумерация; пометка на удаление; непосредственное удаление; снятие пометки удаления; изменение реквизитов; очистка реквизитов; очистка истории значений периодического реквизита; перенос справочника в другую базу подобной конфигурации по OLE; вывод на печать реквизитов и истории значений периодических реквизитов; вывод реквизитов в файлы *.xls,*.csv,*.dbf,*.xml; отчет по структуре справочников, вывод и обработка ссылок на выбранные элементы.

23.11.2016 20719 144 SanchoD 15

Екатеринбург.Online: Голосование продолжается Промо

Продолжается голосование за доклады на INFOSTART MEETUP Екатеринбург.Online! Лучшие из них попадут в окончательную программу онлайн-митапа! Присоединяйтесь к голосованию и покупайте билеты — 3 000 рублей за 8 часов продуктивной пятницы!

источник

Добавить комментарий