Генератор кода предопределенного значения или что делать, если нет возможности добавить предопределенные значения

20.11.21

Разработка - Инструментарий разработчика

Обработка сэкономит время при разработке программного заполнения справочников и документов.

Скачать исходный код

Наименование Файл Версия Размер
Генератор кода предопределенного значения:
.epf 13,66Kb
1
.epf 1.0.0.0 13,66Kb 1 Скачать

Проблема

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

Запрос.УстановитьПараметр("ТараИУпаковка",Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Тара и упаковка"));

Ну или при создании нового документа в режиме 1С предприятия нужно, чтобы при определённых условиях подставлялся именно этот элемент справочника.

оДок = Документы.ПоступлениеБезналичныхДенежныхСредств.СоздатьДокумент(); 
оДок.НаправлениеДеятельности = Справочники.НаправленияДеятельности.НайтиПоНаименованию("Валютные операции",Истина);

В этих примерах напрашивается создать предопределенный элемент. Ведь как-то “НайтиПоКоду” или “НайтиПоНаименованию” - выглядит не очень оптимально. Но, к сожалению, в расширении с режимом совместимости 8.3.14 нет возможности создать или добавить свой предопределенный элемент у заимствованных объектов метаданных.

Решение

Я предлагаю решать эту проблему следующим образом:
В расширении добавить новый общий модуль повторного использования. Обычно, в конце имён таких модулей добавляют “ПовтИсп”.

 
 Общий модуль повторгого использования

Внутри модуля создать все необходимые функции для получения ссылки на нужный элемент справочника или ПВХ.

 
 Функция получения/создания элемента справочника

Теперь платформа будет искать по наименованию только 1 раз за сеанс, а при повторных вызовах - использовать значение в кэше. Кроме того, если элемента нет - то создаст его!

Это очень полезно использовать. Ведь обычно разработка ведётся в копии базы. Разработчик создаст там новый элемент для подстановки и после тестирования конфигурацию загрузит в рабочую базу. Когда пользователь рабочей базы воспользуется алгоритмом, то и в его рабочей базе автоматически создастся такой-же элемент справочника и данные заполнятся корректно.

Ну а теперь я представляю вам то, ради чего писалась вся эта статья.
Создание таких функций, которые сначала ищут, а если не находят - создают, дело довольно хлопотное. Нужно программно заполнять все необходимые реквизиты создаваемого элемента, чтобы он работал корректно. И, обычно, программист понимает, что нужно бы так сделать, но не делает, потому что лень. Ну ведь написать “НайтиПоКоду” ведь куда быстрее, ага? Только, вот беда, потом придётся пользователю объяснять, что для того, чтобы программа корректно заработала, то не соизволит ли пользователь сначала создать вот такой-то элемент вот с такими-то галочками…  Нет уж, решил я, на пользователей надеяться нельзя. Вдруг, чего перепутают. Лучше буду использовать модуль ПовтИсп. И для ускорения создания функций получения “предопределённых” моих элементов я написал обработку, которая генерирует сам код поиска и создания таких элементов.

Возможности обработки

  1. Запускается в обычных и управляемых формах
  2. Распознаёт предопределенные элементы значений, которыми нужно заполнить указанный элемент, в случае его отсутствия
  3. Распознает тип “ОписаниеТипов” для оформления новых элементов ПВХ.
  4. Генерирует алгоритм для всех заполненных табличных частей справочника.

Информация о совместимости

Обработка тестировалась на платформе 8.3.18.1563 и конфигурации 1С:Комплексная автоматизация 2 (2.4.13.170). Но это не значит, что работать будет только там. Работать будет и в других типовых/доработанных конфигурациях, где есть общий модуль “ОбщегоНазначения”. Пробуйте.

генератор автозаполнение заполнение предопределенный

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    125056    683    389    

732

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7792    24    6    

42

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4296    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178679    1084    0    

862

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99649    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18407    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23863    16    15    

33

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28331    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. webester 26 18.07.21 12:04 Сейчас в теме
А потом пользователь возьмет и переименует элемент. И вы все очень долго будете курить проблему, почему нет движений по позиции по которой вчера еще были. А ваш код его молча создал и теперь подсовывает, совсем не тот который ожидается разработчиком. Сложно придумать, более изощрённый способ выстрелить себе в ногу. По какой причине искать но наименованию\коду не оптимально то? Нет никакой проблемы искать элемент. Есть проблема, в том, что опираться на код и наименование не надежно. И здесь эта проблема не решается. Посмотрите хотя бы здесь раз уж предлагаете менять конфигурацию, тема уже настолько заезжена, что сложно подсчитать сколько копий сломали в дебатах. В целом можно просто одним регистром с составным типом обойтись, если вдруг доп. план видов характеристик вас печалит(например режим совместимости может наложить ограничения). И повторно используемые модули можно тоже сюда прикрутить если уж хочется получить одну сотую процента оптимизации.
2. Timic 50 18.07.21 12:55 Сейчас в теме
Если уже сделали функцию, то зачем искать по наименованию? Проще и правильнее сразу найти по ГУИДу. И, развивая тему, создавать с нужным ГУИДом.
3. webester 26 18.07.21 15:00 Сейчас в теме
(2) Где гарантия, что нужный гуид не будет занят?
11. ltfriend 962 19.07.21 09:59 Сейчас в теме
(3) Гарантия в названии - ГЛОБАЛЬНЫЙ Уникальный ИДентификатор. У двух разных объектов, созданных в разных базах не может быть одинакового идентификатор. Это свойство, в том числе, используется при обменах между базами. Сопоставление элементов производится как раз по этому идентификатору. Если он в другой базе такой же, значит это один и тот же объект. Так что, поиск не по наименованию, а по ГУИД (соответственно и создание нового элемента с таким ГУИД в случае отсутствия) решает проблему любого изменения элемента (будь то код, наименование, родитель или любой другой реквизит) в рабочей базе по отношению к базе разработчика.
13. Xershi 1484 19.07.21 11:43 Сейчас в теме
(11) удивитесь, но это не так!
14. Timic 50 19.07.21 13:27 Сейчас в теме
(13) ценность Вашего комментария стремится к вероятности генерации одного и того же гуида в двух разных базах. Что именно не так то?
15. Xershi 1484 19.07.21 13:29 Сейчас в теме
(14) ценность такой уверенности иногда дорого стоит! И отличает профессионала от новичка.
16. Timic 50 19.07.21 13:43 Сейчас в теме
(15) пока профессионализма Вы не показали. Два комментария о ЧСВ и все. По теме можете написать развернутый ответ? Научите новичка уму разуму
17. Xershi 1484 19.07.21 13:59 Сейчас в теме
(16) посмотрите как реализовано в типовых. Есть спец регистр сведений, который эту связь настраивает. Даже если гуиды будут одинаковые, объекты могут быть разные. И коллизии не будет.
18. Timic 50 19.07.21 14:03 Сейчас в теме
(17) Спасибо, теперь я понял, что вы имели ввиду. Вопросов больше нет.
19. webester 26 19.07.21 15:33 Сейчас в теме
(11)
ГЛОБАЛЬНЫЙ Уникальный ИДентификатор. У двух разных объектов, созданных в разных базах не может быть одинаково
Что если вы поднимете глаза и увидите, что предлагается создавать тот гуид который удобно, для того объекта который надо? То есть у любого нового объекта, может быть любой гуид.
Прикрепленные файлы:
4. davdykin 25 18.07.21 17:32 Сейчас в теме
На самом деле, если на элементы завязаны какие-то механизмы, проще добавить свой справочник с предопределенными элементами, где указать ссылки на "нужные" элементы. Если нет такой возможности в расширении, то добавить в обычную конфу, обновлению новый справочник не будет сильно мешать.
5. EvgeTrofi 127 18.07.21 18:51 Сейчас в теме
Суть статьи не в том как искать: по гуиду или по наименованию. Хоть запрос пишите любой сложности. Моя обработка помогает создать код создания нового элемента, необходимого для правильного функционирования вашей программы. Чтобы не писать его вручную. Понимаете?
8. Timic 50 18.07.21 20:20 Сейчас в теме
(5) тут вопросов нет. Наверное, действительно больше придирки к реализации функции поиска элемента, а не к самой обработке. Сама концепция мне лично близка. Хотя я простой выгрузкой загрузкой xml пользуюсь.
6. EvgeTrofi 127 18.07.21 18:54 Сейчас в теме
У вас ненаполненная (пустая) база. И нужно чтобы сразу после наката вашей конфигурации всё сразу заработало. Как ещё понятней сказать?
9. webester 26 19.07.21 02:26 Сейчас в теме
(6) Может стоить подумать о механизмах которых выполнятся только один раз после, того как накатились изменения? И не перемешивать эту логику с логикой получения элементов из базы по определенному ключу?
10. EvgeTrofi 127 19.07.21 05:57 Сейчас в теме
(9) Я понимаю о чём Вы говорите. ПриНачалеРаботыСистемы() проверять, изменилась ли версия расширения на нужную и если изменилась то выполнить операции по предварительному заполнению базы (пожалуй, стоит на эту тему написать отдельную статью). Так и работают типовые конфигурации. Но я - нет. И сейчас объясню почему.
Как правило, разработчики-доработчики используют кейсовый подход. Заказчик захотел пятое колесо к своей конфигурации - пришем блок модулей, форм, объектов для пятого колса. Заказчик захотел приделать хвост - пишем модули и отдельные блоки для хвоста.
А теперь другой заказчик тоже захотел себе пятое колесо. Что мы делаем? Правильно! Берём все объекты касающиеся пятого колеса и внедряем в другую систему. И для того, чтобы не запутаться для какого кейса какой элемент справочника нужен был - их поиск и создание уже включено в кейс.
Мне просто так удобнее.

А Ваше предложение тоже имеет место в моей жизни. Обычно я так делаю, когда один тот же заказчик постепенно наращивает и реструктурезирует свою конфигурацию. Например, до определённого релиза хранились данные в регистре сведений. Но после определённого релиза - каждая запись РС должна превратиться в документ. И по условию договора - программиста в боевую базу не пускают. Вот тогда то и прегаждается Ваш метод. Программа проверяет релиз и если он сменился на нужный - фигачим...
Процедура ВыполнитьОбновлениеРасширения(СтруктураПараметров, АдресВремХранилища = "") Экспорт
	ИмяРасширения = "РасширениеРС_ИмяВашегоРасширения";
	ВерсияРасширения = РасширенияКонфигурации.Получить(Новый Структура("Имя", ИмяРасширения))[0].Версия;
	ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИмяРасширения);
	ВесРасширения = ОбновлениеИнформационнойБазыСлужебный.ВесВерсии(ВерсияРасширения);
	ВесИБ = ОбновлениеИнформационнойБазыСлужебный.ВесВерсии(ВерсияИБ);
	СтруктураОтвета = Новый Структура("ПротоколОбновления","");
	Отказ = Ложь;
	ОбновлениеВерсииВыполнено = Ложь;
	
	Если ВесИБ < ОбновлениеИнформационнойБазыСлужебный.ВесВерсии("1.1.4.0") Тогда
		ОбновлениеДоВерсии_1_1_4_0(ИмяРасширения, СтруктураОтвета, Отказ, ОбновлениеВерсииВыполнено);
	КонецЕсли;
	
	Если НЕ Отказ Тогда
		Если НЕ ОбновлениеВерсииВыполнено Тогда
			ОбновлениеИнформационнойБазыСлужебный.УстановитьВерсиюИБ(ИмяРасширения, ВерсияРасширения, Ложь);
			ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления(ИмяРасширения);
		КонецЕсли;
		ДополнитьПротокол(СтруктураОтвета, "Выполнено обновление расширения до версии "+ВерсияРасширения);
	КонецЕсли;
	ПоместитьВоВременноеХранилище(СтруктураОтвета, АдресВремХранилища);
КонецПроцедуры
Показать
7. Timic 50 18.07.21 20:13 Сейчас в теме
(3) по определению GUID — статистически уникальный 128-битный идентификатор. Есть вероятность, что совпадает, но скорее поиск по наименованию приведет к ошибке чем ГУИД будет занят.
12. пользователь 19.07.21 10:09
Сообщение было скрыто модератором.
...
Оставьте свое сообщение