Заполнение дополнительных реквизитов в модуле на сервере, в правилах КД 2.0, в модуле внешней обработки

Публикация № 1188249

Разработка - БСП (Библиотека стандартных подсистем)

дополнительные реквизиты заполнение

Примеры заполнения дополнительных реквизитов.

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

В первую очередь хотелось бы заметить, что в самой БСП уже есть ряд процедур и функций которые помогают успешно работать с заполнением дополнительных реквизитов. Главное правильно их использовать. Поэтому и начну я с самого простого варианта.

  1. Заполнение доп.ревизитов в модуле на сервере.

Предыстория: в одной организации потребовался перенос данных из одной базы в другую одного из справочников. Да вот беда в базе источнике у справочника было два нужных реквизита объекта, а в базе приемнике их не было. Дабы не ломать типовую конфигурацию было принято решение в новой базе создать такое же количество реквизитов, но в качестве дополнительных. Дело оставалось за малым – поместить в эти реквизиты необходимые данные. Благо коды элементов в базе источнике и базе приёмнике были синхронизированы. Самым простым показалось выгрузить связку из трёх реквизитов (Код – Реквизит1 – Реквизит2) в обычный файл формата Excel на стороне источника и загрузить этот файл на стороне приёмника. Опуская момент выгрузки и последующей загрузки файла сразу перейду к моменту, когда файл уже загружен в базе приёмнике в таблицу значений и предстоит все эти данные разложить по нужным элементам справочника, для которого уже заведены два доп.реквизита с именами (для разработчика) «Реквизит1» и «Реквизит2». В общем-то в данном случае всё довольно таки просто. Будем использовать стандартную процедуру БСП.
 

Для Каждого ТекСтрока Из ТаблицаРеквизитовИсточника Цикл

  //Находим ССЫЛКУ на нужный нам элемент справочника
  СсылкаНаЭлемент = Справочник.НужныйНамСправочник.НайтиПоКоду(ТекСтрока.Код);

  //Находим те доп.реквизиты, которые требуются для заполнения
  СвойствоРеквизит1 = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Реквизит1");
  СвойствоРеквизит2 = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Реквизит2");
    

  //создаём массив доп.реквизитов для помещения их в нужный элемент
  МассивСтруктур = Новый Массив;
  МассивСтруктур.Добавить(Новый Структура("Свойство, Значение",СвойствоРеквизит1,ТекСтрока.Реквизит1));
  МассивСтруктур.Добавить(Новый Структура("Свойство, Значение",СвойствоРеквизит2,ТекСтрока.Реквизит2));

  //Используя стандартную процедуру БСП присваиваем значения доп.реквизитов элементу справочника
  УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаЭлемент, МассивСтруктур);

КонецЦикла;

    

Обратите внимание, что никаких получений объекта элемента справочника делать не нужно в силу того, что процедура «ЗаписатьСвойстваУОбъекта» сама получает объект и записывает его на сервере. Это удобно, но это и подводный камень о котором будет упомянуто далее.

  1. Заполнение доп.реквизитов при переносе данных с помощью КД 2.0.

Предыстория: ситуация аналогичная предыдущей. Только на этот раз для переноса данных было решено использовать не файл Excel, а правила обмена, созданные в КД 2.0. Что для этого потребовалось: два реквизита, которые должны были быть перенесены из источника в приёмник в правилах прописывались как переменные. А уже на стороне приёмника в обработчике события «ПослеЗагрузки» из данных переменных заполнялись доп.реквизиты. И тут мы и натыкаемся на подводный камень процедуры БСП. Если использовать предыдущий алгоритм, то при загрузке данных система выдаст сообщение об ошибке «Ошибка при вызове метода контекста (Записать): Данные были изменены или удалены другим пользователем». Остаётся использовать другой вариант, либо делать разные ухищрения типа правил «повторная загрузка» и передавать данные в несколько этапов. Остановимся на первом варианте.

Пропишем в параметры правил конвертации свойств «Реквизит1» и «Ревизит2» нужные нам значения из источника.

 

 

А в обработчике «После загрузки» выполним следующий алгоритм

 

//запишем объект перед тем как устанавливать доп.реквизиты
Если НЕ ОбъектНайден Тогда
	Объект.Записать(режимЗаписиДокумента.Запись);
	ОбъектМодифицирован = ЛОжь;
КонецЕсли;

//Находим те доп.реквизиты, которые требуются для заполнения
СвойствоРеквизит1 = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Реквизит1"); 
СвойствоРеквизит2 = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Реквизит2");

//На всякий случай очистим табличную часть объекта – предполагается, что мы делаем первичную загрузку
Объект.ДополнительныеРеквизиты.Очистить();

//Добавим строки в табличную часть с заполнением необходимых доп.реквизитов и их значений
НовСтр = Объект.ДополнительныеРеквизиты.Добавить();
НовСтр.Свойство = СвойствоРеквизит1;
НовСтр.Значение = ПараметрыОбъекта["Реквизит1"];
НовСтр = Объект.ДополнительныеРеквизиты.Добавить();
НовСтр.Свойство = СвойствоРеквизит2;
НовСтр.Значение = ПараметрыОбъекта["Реквизит2"];

 

Далее при записи объекта будет записана и его табличная часть и при открытии элемента справочника в базе Приёмник доп.реквизиты будут на своих местах.

  1. Заполнение доп.реквизитов в модуле внешней обработки.

Переходим к ситуации, когда для заполнения дополнительных реквизитов будет использоваться внешняя вставляемая обработка с вариантом использования «Заполнения формы». В данном случае имеется форма документа, из которой и вызывает внешняя обработка заполнения. По своему алгоритму обработка должна получить значения доп.реквизитов Реквизит1 и Реквизит2 и поместить в табличную часть документа «Дополнительные реквизиты». В данном случае при использовании типовой процедуры «УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(…)» создаст те же сложности с различными версиями одного и того же объекта как реквизита формы и находящегося на сервере: после выполнения внешней обработки записать какие-либо ещё изменения реквизитов объекта на форме не представляется возможным. В этом случае потребуется не просто заполнить доп.реквизиты, но и поместить их в тот объект, что находится на сервере. Но это ещё не вся сложность. Дело в том, что дополнительные реквизиты хранятся в объекте как табличная часть, но форме они отображаются именно как реквизиты типа «Поле ввода». По сути дела разработчики заложили в БСП возможность программно создавать набор реквизитов формы по количеству строк заполненных в табличной части «Дополнительные реквизиты» объекта и отображать в них данные из табличной части (те кто занимался этим вопросом наверняка вспомнили реквизиты с длиннющими названиями). Можно конечно пытаться удалить все эти реквизиты и команды с ними связанные (что вполне реально ведь они созданы программно) и вызывать процедуру создания их из процедуры ПриСозданииНаСервере, но есть и более простой вариант. Можно воспользоваться типовой процедурой заполняющей значения реквизитов формы из табличной части объекта УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(…) где в первом параметре передаётся сама форма, а во втором реквизит Объект этой самой формы. Важно отметить, что заполнение на форме этих реквизитов обязательно, так как если они останутся пустыми, что при закрытии формы с записью в доп.реквизиты запишутся эти самые пустые значения.

В процедуре внешней обработки заполнения требуется прописать следующий алгоритм:

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыКоманды) Экспорт
  
  //получим контекст формы для заполнения
  КонтекстФормыВызова = ПараметрыКоманды.ЭтаФорма;

  //для внесения изменения получим объект, которому принадлежит форма
  ДанныеОбъекта = КонтекстФормыВызова.Объект;

  //поместим в переменный значения, которые должны оказаться в доп.реквизитах
  Реквизит1 = «А»;
  Реквизит2 = «Б»;

  //Находим те доп.реквизиты, которые требуются для заполнения
  СвойствоРеквизит1 = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Реквизит1"); 
  СвойствоРеквизит2 = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Реквизит2");

  //далее перед заполнением нового значения доп.реквизита необходимо проверить, что его нет в табличной части
  //а если он есть заполнить новым значением
  СвойствоЕсть = Ложь;
  Для Каждого ТекСрока Из ДанныеОбъекта.ДополнительныеРеквизиты Цикл
  	Если ТекСтрока.Свойство = СвойствоРеквизит1 Тогда
	 ТекСтрока.Значение = Реквизит1;
	 СвойствоЕсть = Истина;
	КонецЕсли;
  КонецЦикла;
  Если Не СвойствоЕсть Тогда		
	НовСтр = Объект.ДополнительныеРеквизиты.Добавить();
	НовСтр.Свойство = СвойствоРеквизит1;
	НовСтр.Значение = Реквизит1;
  КонецЕсли;

  //те же действия повторит и для остальных доп.реквизитов (в данном случае для Реквизит2)
  //вполне возможно при большем значении устанавливаемых значениях доп.реквизитов код оптимизировать – в данном случае такой задачи не стоит

  //теперь необходимо поместить заполненную табличную часть в объект на сервере
  //получим объект с сервера
  ДокОбъектССервера = ДанныеОбъекта.Ссылка.ПолучитьОбъект();

  //передадим в него все доп.реквизиты с объекта на форме
  ТабДопРекв = ДанныеОбъекта.ДополнительныеРеквизиты.Выгрузить(); 	  
  ДокОбъектССервера.ДополнительныеРеквизиты.Загрузить(ТабДопРекв);

  //Запишем объект и поместим его на форму для того чтобы можно было вносить следующие изменения
  ДокОбъектССервера.Записать();
  КонтекстФормыВызова.ЗначениеВРеквизитФОрмы(ДокОбъектССервера,"Объект");
  
  //Обновим отображение значений доп.реквизитов на форме
  УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(КонтекстФормыВызова, КонтекстФормыВызова.РеквизитФормыВЗначение("Объект"));

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

 

Примечательно, что процедура «ЗаполнитьДополнительныеРеквизитыВФорме(…)» можно так же использовать и в том случае если доп.реквизиты заполняются по кнопочке из формы.

На этом завершаю рассмотрение программного заполнения доп.реквизитов и надеюсь, это поможет кому-то ускорить процесс разработки.

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

Комментарии
Избранное Подписка Сортировка: Древо
1. Megaiff 11.02.20 01:32 Сейчас в теме
Годно. Больше хитростей с КД в студию.
Оставьте свое сообщение

См. также

[БСП] Внешняя печатная форма: как перед печатью выводить форму настроек

Статья no Нет файла v8 КА2 Бесплатно (free) Печатные формы документов БСП (Библиотека стандартных подсистем)

Во внешней печатной форме перед печатью нужно выводить форму настроек. Для примера рассматриваю печатную форму "Акт сверки взаимных расчетов " .

19.12.2019    4554    1    John_d    7       

Базовый курс по управлению ИТ-проектами. Курс проходит с 26 февраля по 22 апреля 2020 года. Промо

Отличительная черта курса - органичное сочетание трех вещей: 1.Теория проектного управления (PMI®+Agile Alliance+Российские ГОСТ+Методологии от 1С); 2. Опыт внедрения продуктов 1С (опыт франчайзи и успешных компаний + тренды Infostart Event и Agile Days); 3. Разбор реальных проблем и рекомендации экспертов по проектам слушателей. Мы будем фиксироваться на тех инструментах, которые реально оказываются полезными в практике руководителей проектов внедрения. Ведущая курса - Мария Темчина.

от 11000 рублей

Реализация команды печати "Библиотека стандартных подсистем", редакция 3.1 (3.1.1.151)

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) БСП (Библиотека стандартных подсистем)

В новом релизе "БСП" произошли изменения в процедурах общих модулей, связанных с механизмом печати, и в процедурах их вызова в формах документов и в формах списков. Рассмотрим их.

12.10.2019    2694    paulis    4       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Печать БСП (Библиотека стандартных подсистем)

Постоянно приходится вспоминать, как добавить механизм печати (БСП) в новый документ. Поэтому решил написать шпаргалку.

10.10.2019    8852    John_d    14       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Подсистема "Варианты отчетов". Используете ли Вы ее правильно?

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом БСП (Библиотека стандартных подсистем)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    25812    YPermitin    51       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

CorelDRAW – пакет профессиональных инструментов для редактирования фотографий, разработки дизайна, создания макетов страниц и векторных иллюстраций

Подсистема БСП «Управление доступом», основные объекты и регистры

Статья Программист Нет файла v8 v8::УФ v8::Права 1cv8.cf Бесплатно (free) БСП (Библиотека стандартных подсистем) Роли и права

Основные принципы работы подсистемы «Управление доступом» из состава БСП. Виды доступа, ограничение доступа на уровне записей. Описание основных объектов и регистров, используемых подсистемой.

23.05.2019    13689    ids79    8       

Добавление отчетов в типовые конфигурации 1С

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем)

Описание различных способов добавления общих и контекстных отчетов в конфигурации 1С, построенные на базе БСП. Основные моменты и нюансы.

07.03.2019    36240    ids79    45       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Статья Программист Нет файла v8 v8::Права Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем) Роли и права

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    24322    ids79    9       

Добавление команд печати в конфигурациях на БСП 2.4.3 (в частности, в самописных документах в Бухгалтерии 3.0 после релиза 3.0.52.35)

Статья Программист Нет файла v8 v8::БУ БП3.0 Россия Бесплатно (free) Печатные формы документов Практика программирования БСП (Библиотека стандартных подсистем)

В статье https://infostart.ru/public/237013/ пользователя nick max рассматривался список действий для подключения команд печати в Бухгалтерии 3.0, работающей на БСП 2.3.6. В новом релизе Бухгалтерии 3.0.52.35 от 15.09.2017г. стала использоваться БСП 2.4.3, из-за чего произошли изменения в процедурах общих модулей, связанных с механизмом печати, и в процедурах их вызова в формах документов и в формах списков. Рассмотрим их.

18.09.2017    55871    bugtester    49       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

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

6500 рублей

Фоновое формирование отчета СКД на УФ средствами БСП

Статья Программист Нет файла v8::УФ v8::СКД Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем)

В узких кругах широко известна проблема, когда штатное фоновое формирование отчета СКД на управляемых формах перестает работать при выполнении нештатной компоновки (переопределении события ПриКомпоновкеРезультата). В этом случае клиент ожидает ответа сервера и сеанс 1С "висит", что жутко неудобно при формировании затратных по времени отчетов. Также нет возможности прервать такое выполнение. Когда мириться с этим стало тяжело, стал искать решения, но почему-то подходящего готового рецепта не нашел. Если плохо искал, значит, будет еще один в копилку.

16.05.2017    25042    herfis    9       

Библиотека стандартных подсистем (Механизм БСП)

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем)

Конфигурации в 1С пишутся для пользователей и по их «правилам» (клиент всегда прав), поэтому в основном все конфигурации разные, но достаточно часто в них используются одни и те же объекты, которые незначительно отличаются друг от друга. Действительно, сложно представить конфигурацию, где не фигурировали бы такие сущности как номенклатура, контрагенты, пользователи, валюта. И некоторые задачи являются типичными: возможность базового разграничения прав, работа с электронной почтой, задачи пользователям и т.д. Но...!

03.03.2017    58489    V.Stavinsky    21       

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

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

Используем механизмы обмена данными БСП для произвольного обмена

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции Внешние источники данных БСП (Библиотека стандартных подсистем)

Механизм БСП заточен на обмен XML по правилам обмена. Чтобы использовать его для любого другого обмена, коих в мире немало, требуются доработки. В статье описан вариант, как из положения выйти.

23.08.2016    30443    Патриот    28       

Отладка конвертации данных 2.1 в конфигурациях, построенных на БСП 2.1 (БП 3.0, УТ 11 etc.)

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Распределенная БД (УРИБ, УРБД) Обмен через XML БСП (Библиотека стандартных подсистем)

Отладка процесса выгрузки/загрузки данных при проведении синхронизации в новых конфигурациях 1С может вызвать (у меня вызвала) некоторые затруднения. О них и пойдёт речь.

29.10.2015    35111    NittenRenegade    19       

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

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

Обмен при помощи Библиотеки Стандартных Подсистем (БСП) конфигурации ЗУП 2.5

Статья Программист Нет файла v8 ЗУП2.5 Бесплатно (free) Перенос данных из 1C8 в 1C8 БСП (Библиотека стандартных подсистем)

Как организовать автообмен данными из базы Зарплата и Управление Персоналом 2.5? Очень просто. Кодирование нужно лишь для одной команды - всего несколько строчек кода.

17.07.2015    13134    sml    4       

Голосование за доклады на INFOSTART MEETUP Kazan - до 25 февраля. Промо

Выбирайте и голосуйте за самые интересные доклады! Лучшие из лучших попадут в окончательную программу казанского митапа. Оставить свой голос можно до 25 февраля 2020 года.

Авторегистрация внешних отчётов/обработок средствами БСП

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Администрирование данных 1С Универсальные функции

Вы сделали клиенту красивую печатную форму, или доп.обработку, или заполнение таб.части; но надо ещё зарегистрировать её. Клиенту это не всегда объяснишь, дистанционно не всегда сделаешь. А дальше её ещё обновлять каждый раз... Предлагаю код, который исключительно штатным образом "сделает всё сам".

11.02.2015    21698    Yashazz    14       

БСП: добавление нового провайдера SMS

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) SMS рассылки

Небольшая статья о том, как добавить нового провайдера SMS на примере конфигурации "Управление торговлей 11", используя библиотеку стандартных подсистем (БСП)

26.11.2014    19387    pbazeliuk    5       

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

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

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

Использование подсистемы "Управление доступом" из состава БСП версии 2.2+

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем) Роли и права

В статье описана последовательность манипуляций с подсистемой "Управление доступом" из библиотеки стандартных подсистем "1С" (БСП), результатом которых является реализация возможности настройки ограничения доступа к данным на уровне записей таблиц базы данных (RLS), применяя в качестве разграничителя доступа (критерия ограничения) любой из справочников конфигурации. Данная статья полезна для разработчиков, которые имеют дело либо с одной из типовых конфигураций "1С" (таких как "Бухгалтерия предприятие 3.0" или "Управление торговлей 11"), либо собираются внедрять (или дорабатывать) указанную выше подсистему в какую-либо другую конфигурацию.

18.11.2014    61452    Bassgood    84