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

20.11.21

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Генератор кода предопределенного значения:
.epf 13,66Kb ver:1.0.0.0
1
1 Скачать (1 SM) Купить за 1 850 руб.

Проблема

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

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

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

См. также

SALE! %

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

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

12000 10000 руб.

02.09.2020    164801    914    402    

889

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    9806    81    35    

90

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

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

22200 руб.

06.10.2023    16225    39    9    

75

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

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

9360 руб.

17.05.2024    24899    81    48    

125

SALE! %

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

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

15000 10000 руб.

10.11.2023    11008    40    27    

66

SALE! %

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

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

4800 3840 руб.

14.01.2013    189388    1146    0    

916

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

2220 руб.

21.02.2023    8283    8    38    

24

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

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

5000 руб.

07.02.2018    103525    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. webester 26 18.07.21 12:04 Сейчас в теме
А потом пользователь возьмет и переименует элемент. И вы все очень долго будете курить проблему, почему нет движений по позиции по которой вчера еще были. А ваш код его молча создал и теперь подсовывает, совсем не тот который ожидается разработчиком. Сложно придумать, более изощрённый способ выстрелить себе в ногу. По какой причине искать но наименованию\коду не оптимально то? Нет никакой проблемы искать элемент. Есть проблема, в том, что опираться на код и наименование не надежно. И здесь эта проблема не решается. Посмотрите хотя бы здесь раз уж предлагаете менять конфигурацию, тема уже настолько заезжена, что сложно подсчитать сколько копий сломали в дебатах. В целом можно просто одним регистром с составным типом обойтись, если вдруг доп. план видов характеристик вас печалит(например режим совместимости может наложить ограничения). И повторно используемые модули можно тоже сюда прикрутить если уж хочется получить одну сотую процента оптимизации.
2. Timic 52 18.07.21 12:55 Сейчас в теме
Если уже сделали функцию, то зачем искать по наименованию? Проще и правильнее сразу найти по ГУИДу. И, развивая тему, создавать с нужным ГУИДом.
3. webester 26 18.07.21 15:00 Сейчас в теме
(2) Где гарантия, что нужный гуид не будет занят?
11. ltfriend 19.07.21 09:59 Сейчас в теме
(3) Гарантия в названии - ГЛОБАЛЬНЫЙ Уникальный ИДентификатор. У двух разных объектов, созданных в разных базах не может быть одинакового идентификатор. Это свойство, в том числе, используется при обменах между базами. Сопоставление элементов производится как раз по этому идентификатору. Если он в другой базе такой же, значит это один и тот же объект. Так что, поиск не по наименованию, а по ГУИД (соответственно и создание нового элемента с таким ГУИД в случае отсутствия) решает проблему любого изменения элемента (будь то код, наименование, родитель или любой другой реквизит) в рабочей базе по отношению к базе разработчика.
13. Xershi 1553 19.07.21 11:43 Сейчас в теме
(11) удивитесь, но это не так!
14. Timic 52 19.07.21 13:27 Сейчас в теме
(13) ценность Вашего комментария стремится к вероятности генерации одного и того же гуида в двух разных базах. Что именно не так то?
15. Xershi 1553 19.07.21 13:29 Сейчас в теме
(14) ценность такой уверенности иногда дорого стоит! И отличает профессионала от новичка.
16. Timic 52 19.07.21 13:43 Сейчас в теме
(15) пока профессионализма Вы не показали. Два комментария о ЧСВ и все. По теме можете написать развернутый ответ? Научите новичка уму разуму
17. Xershi 1553 19.07.21 13:59 Сейчас в теме
(16) посмотрите как реализовано в типовых. Есть спец регистр сведений, который эту связь настраивает. Даже если гуиды будут одинаковые, объекты могут быть разные. И коллизии не будет.
18. Timic 52 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 52 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 52 18.07.21 20:13 Сейчас в теме
(3) по определению GUID — статистически уникальный 128-битный идентификатор. Есть вероятность, что совпадает, но скорее поиск по наименованию приведет к ошибке чем ГУИД будет занят.
12. пользователь 19.07.21 10:09
Сообщение было скрыто модератором.
...
Оставьте свое сообщение