Реализация периодических характеристик для произвольных объектов

28.07.15

Задачи пользователя - Адаптация типовых решений

Все мы помним старую 7-ку, в которой периодические реквизиты были вроде как "по умолчанию". В 8-ке на смену им пришли периодические регистры сведений. Сегодня попытаюсь рассказать о том, как мы реализовали это в своей конфигурации и с какими проблемами столкнулись.

Итак, наченм:

1. Для чего это.

 Мы столкнулись с тем, что предприятие имеет множество филиалов по всей стране и каждый филиал работал в своей базе данных, начиная от Excel и заканчивая 1С8 или MS Access. Соответственно нам пришлось (как правильно выразился один из разработчиков)  "автоматизировать облако". Поэтому было решено ссоздать механизм, который позволял бы наделять некоторые объекты конфигурации произвольными свойствами, которые при необходимости можно было бы создавать или удалять, не затрагивая саму конфигурацию, так как работа была в РИБ.

2. Подробнее о реализации.

 Какие объекты были созданы в конфигурации:

2.1 План видов характеристик (ПВХ) "Периодические характеристики"

      В нем содержались следующие реквизиты:

  • Имя - имя периодического реквизита, для обращения к нему (без пробелов и спец. символов), чтобы при необходимости можно было использовать его в конфигураторе.
  • Назначение (Реквизит группы) - пустая ссылка на объект, для которого будут использоваться реквизиты из данной группы

Были также другие реквизиты, но на них не стоит заострять внимание. 

2.2 Периодический регистр сведений "Значения периодических реквизитов"

Здесь вроде все стандартно, два измерения:

  • Объект - объект, для которого назначется дополнительное свойство
  • Реквизит - ссылка на элемент ПВХ

Ресурсы:

  • Значение - характеристика ПВХ

При необходимости можно добавить что-то типа вида периодичности, чтобы определить, как часто в периоде может изменятсья ваш реквизит: раз в год, раз в месяц или вообще никогда. Ну и другие вспомогательные реквизиты типа комментарий, периоды действия и т.д.

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

Практическое применение рассмотрим на примере справочника "ДоговорыКонтрагентов".

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

{ХАРАКТЕРИСТИКИ
	ТИП(Справочник.ДоговорыКонтрагентов) 
	ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
			ПериодическиеХарактеристики.Ссылка,
			ПериодическиеХарактеристики.Наименование,
			ПериодическиеХарактеристики.ТипЗначения
		ИЗ
			ПланВидовХарактеристик.ПериодическиеХарактеристики КАК ПериодическиеХарактеристики
		ГДЕ 
			НЕ СвойстваОбъектов.ПометкаУдаления
			И НЕ ПериодическиеХарактеристики.ЭтоГруппа
			И СвойстваОбъектов.Ссылка В ИЕРАРХИИ
					(ВЫБРАТЬ
						ПериодическиеХарактеристики.Ссылка
					ИЗ
						ПланВидовХарактеристик.ПериодическиеХарактеристики КАК ПериодическиеХарактеристики
					ГДЕ
						НЕ ПериодическиеХарактеристики.ПометкаУдаления
						ПериодическиеХарактеристики.ЭтоГруппа
						И ПериодическиеХарактеристики.Назначение = Значение(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)))
	ПОЛЕКЛЮЧА Ссылка
	ПОЛЕИМЕНИ Наименование
	ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
	ЗНАЧЕНИЯХАРАКТЕРИСТИК (ВЫБРАТЬ
			ЗначенияПериодическихРеквизитовСрезПоследних.Объект,
			ЗначенияПериодическихРеквизитовСрезПоследних.Реквизит,
			ЗначенияПериодическихРеквизитовСрезПоследних.Значение
		ИЗ
			РегистрСведений.ЗначенияПериодическихРеквизитов.СрезПоследних КАК ЗначенияПериодическихРеквизитовСрезПоследних)
	ПОЛЕОБЪЕКТА Объект
	ПОЛЕВИДА Реквизит
	ПОЛЕЗНАЧЕНИЯ Значение }

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

ОСВ с периодическими характеристиками

 

В отчетах системы после выполнения макета СКД текст запроса будет выглядеть следующим образом:

ВЫБРАТЬ
    ДоговорыКонтрагентов.Ссылка КАК ДоговорКонтрагента,
    ДоговорыКонтрагентов.Представление КАК ДоговорКонтрагентаПредставление,
    ВложенныйЗапрос.Значение КАК Значение,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ВложенныйЗапрос.Значение) КАК ЗначениеПредставление
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗначенияПериодическихРеквизитовСрезПоследних.Объект КАК Объект,
            ЗначенияПериодическихРеквизитовСрезПоследних.Реквизит КАК Реквизит,
            ЗначенияПериодическихРеквизитовСрезПоследних.Значение КАК Значение
        ИЗ
            РегистрСведений.ЗначенияПериодическихРеквизитов.СрезПоследних(&Период, Объект Ссылка Справочник.ДоговорыКонтрагентов) КАК ЗначенияПериодическихРеквизитовСрезПоследних) КАК ВложенныйЗапрос
        ПО (ВложенныйЗапрос.Объект = ДоговорыКонтрагентов.Ссылка
                И ВложенныйЗапрос.Реквизит = &П)

Данная конструкция не оптимальная. Обращение к срезу последних происходило бы быстрее если оптимизировать запрос:

 

 РегистрСведений.ЗначенияПериодическихРеквизитов.СрезПоследних(&Период, Объект Ссылка Справочник.ДоговорыКонтрагентов и Реквизит = &П) КАК ЗначенияПериодическихРеквизитовСрезПоследних) КАК ВложенныйЗапрос

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

РегистрСведений.ЗначенияПериодическихРеквизитов.СрезПоследних(&Период, {(ВЫРАЗИТЬ(Объект КАК Справочник.ДоговорыКонтрагентов)).* КАК ДоговорКОнтрагента}) КАК ЗначенияПериодическихРеквизитовСрезПоследних)

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

Характеристики ПВХ Периодические План видов характеристик

См. также

Доработка визуализации ЭП для 1С:Документооборот государственного учреждения КОРП

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Бесплатно (free)

В этот раз хочу поделиться с вами решением одной практической задачи для одного из проектов Компании Омега, а именно доработки механизма визуализации электронной подписи, т.к. это потребовало проработки 3-х различных способах взаимодействия со сторонним ПО: работа с com-объектом Word (вставка в .doc), разбор структуры docx и создание картинки для дополнения ЭП и вставки этого добра в pdf.

01.12.2022    2313    zeltyr    0    

12

Корректный вывод суммы и сроков в печатной форме

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

Простой лайфхак для вывода суммы или числа дней В скобках и склоняемых единиц измерения или валюты ЗА скобками.

16.11.2022    1773    vladimir-89    0    

13

Дополнительные сведения в типовых конфигурациях 1С

Адаптация типовых решений Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

В статье рассказывается, как использование дополнительных сведений помогает расширить функциональность типовых конфигураций без «снятия с замка» и с минимумом программирования.

08.11.2022    17323    accounting_cons    21    

32

Счет на оплату покупателю с QR кодом для УТ 10.3. Генерация QR-кода в УТ 10.3 на примере внешней печатной формы "Счет на оплату" для печати из Заказа клиента

Печатные формы Оптовая торговля Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 10 Абонемент ($m)

В 1С:Управление торговлей 10.3 не предусмотрена возможность для генерации QR-кода, поэтому новая возможность для оплаты не представлена. Показываю алгоритм добавления QR-кода в УТ 10.3 в виде внешней печатной формы "Счет на оплату" для печати из Заказа клиента. Делалось и тестировалось на "Управление торговлей", редакция 10.3 (10.3.57.2) / Платформа 8.3.20.1914.

1 стартмани

07.10.2022    11750    159    Neiron_1C    38    

16

Добавляем новый документ в обработку Диадок

Файловый обмен (TXT, XML, DBF), FTP Адаптация типовых решений Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Абонемент ($m)

Добавляем новый документ для подписания и отправки в обработку Диадок (через подключаемый модуль). Отправлять его будем, как неформализованный (внешняя печатная форма в формате pdf).

2 стартмани

07.10.2022    11391    23    John_d    22    

63

Удаление дублирующихся файлов в томах на диске

Адаптация типовых решений Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Типовой механизм хранения файлов позволяет один и тот же файл прикреплять несколько раз. Это бесит наших админов, и по их просьбе был реализован следующий алгоритм.

1 стартмани

05.10.2022    5060    6    human_new    19    

29

Сжатие фотографий физических лиц в ЗУП 3.1

Адаптация типовых решений Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Сжатие фотографий физических лиц при загрузке, плюс обработка уже загруженных фото.

06.09.2022    1630    mrChOP93    5    

19
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. human_new 615 13.07.15 14:06 Сейчас в теме
Сергей, а почему нельзя было воспользоваться при разработке стандартными дополнительными реквизитами?
4. tristarr1 58 03.08.15 17:35 Сейчас в теме
(1) human_new, По причинам указанным выше, в комментарии для пользователя bforce
2. bforce 482 01.08.15 21:56 Сейчас в теме
В эту статью меня заставил заглянуть ее заголовок. Однако в содержании Вы описали обычное использование того, что в типовых называется Дополнительные сведения. Все то же самое я могу получить и путем внедрения в свою самописную конфу подсистемы Свойства Библиотеки стандартных подсистем. Не ясно, что же нового по сравнению с имеющимся предлагаете Вы? Может я что-то недопонял?
Вот, если бы показали нам настоящий пример использования периодичности дополнительных свойств, тогда это бы ценно с прикладной, а может и теоретической, точки зрения. На данный момент, я не понимаю, как пользователь может их менять, сохраняя старое значение.

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

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

Ну, и последний момент, который бросился в глаза. К сообщению я приложил два скриншота из демонстрационной базы, которую публикуют вместе с платформой. Вопрос: знаете ли для чего нужна кнопка Характеристики?
Скорее всего, нет, потому что в статье Вы пишете о том, как нужно дорабатывать все отчеты, чтобы пользователи могли в них использовать свойства. Посмотрев в демонстрационную конфигурацию, Вы узнаете, что достаточно один раз прописать в метаданных объекта использование дополнительных свойств и они всегда будут видны в отчетах, без их доработки, как реквизиты объекта.
Прикрепленные файлы:
3. tristarr1 58 02.08.15 19:19 Сейчас в теме
(2) bforce, 1. Если Вы обратили внимание, то в получении значений реквизитов используется виртуальная таблица "РегистрСведений.ЗначенияПериодическихРеквизитов.СрезПоследних" из чего можно сделать что значения хранятся в ПЕРИОДИЧЕСКОМ регистре сведений. Как их менять "сохраняя старые значения" - очень просто добавлять запись в регистр сведений с заполненным периодом, а с помощью регистратора этоо будет или независимо, уже не важно.

2. Что касается реквизита "ИмяРеквизита" для использования в конфигураторе - все очень просто. Представим себе ситуацию когда у вас очень большая РИБ в разных частях страны (а может и света) вводу разности во времени вы не имеете возможность выгонять пользоватей из базы и ждать обновления, так что неплохо бы иметь возможность обновлять конфигурацию динамически. Для этого и была реализована данная возможность. Должна это быть неотъемлемая часть объекта или нет это не принципиально данная конструкция позволяет работать с дополнительными сведениями как с полноценными реквизитами объекта. Что касается нашего случая, то был разработан механизм, который позволяет размещать дополнительные реквизиты на форме документов в режиме предприятия, как раз потому что нет возможности выгонять пользователей из 85 филиалов по всей стране.

3. Ну и по последнему пункту. Не надо утверждать что я знаю или чего не знаю это не профессионально и мы здесь не для того чтобы мериться друг с другом знаниями или опытом, а для того чтобы делиться ими. Хотелось бы в качестве приложения увидеть скрин где таблица из которой вы получаете значения характеристик была бы виртуальная таблица регистра "СрезПоследних" и все это с помощью той же кнопки "Характристики". Заранее спасибо.
AlbinaAAA; +1 Ответить
5. bforce 482 04.08.15 06:47 Сейчас в теме
(3)
1. Конечно, я приметил виртуальную таблицу. Но я ожидал, что Вы, все-таки, используете доработанный кусок БСП и надеялся, что Вы расскажете секрет о том, где и что пришлось изменить, чтобы все это заработало. БСП дает хороший инструментарий, который я бы не стал писать вручную. Речь об этом.
Что касается нашего случая, то был разработан механизм, который позволяет размещать дополнительные реквизиты на форме документов в режиме предприятия


2. Здесь сложно как-то высказываться, так как у Вас своя специфика: много баз, разные часовые пояса и прочее. Но, ведь, конфигурацию все-равно когда-то приходится обновлять? Вряд ли она у вас на замке от поставщика.

3. Вы абсолютно правы! Срез последних там не выбрать, но учитывая то, что я сказал в первом абзаце, можно легко найти выход. Первое, что приходит в голову: берем типовую подсистему Свойства, добавляем регистр История дополнительных сведений (периодический), создаем подписку на типовой регистр и записываем измененные свойства в наш регистр. При такой настройке мы имеем все возможности, которые дает БСП, а также, можем просматривать историю изменения свойств. Я так понимаю, непосредственно в логике конфигурации история изменений не нужна? Она требуется в редких случаях, когда пользователь хочет посмотреть кто и что менял? В этом случае, остается добавить отчет или команду для просмотра истории.

И это снова мое ИХМО на ту задачу, что Вы описали. Специфики я не знаю, поэтому не стану утверждать, что мое видение правильное. Решать в любом случае Вам, так как Вы ближе к проблемной области.
6. tristarr1 58 04.08.15 10:14 Сейчас в теме
(5) bforce, 3. Представьте что вам потребуется использовать эти самые реквизиты в печатной форме. И что тогда? проще обращаться в периодический регистр на дату документа, чем в зависимости от рабочей даты скакать по разным регистрам. И вообще на мой взгляд использование всякого рода "костылей" в виде подписок является плохим тоном, так как их выполнение не очевидно и проблематично в отладке.

Вообще статья не обязывает использовать описанное решение и по сути своей является интересным опытом. Тут мы можем узнать что механизм характеристик не заточен для работы с периодическим регистром сведений и это очень печально, так как текст запроса, который выдает СКД после компоновки макета далеко не оптимальный. Надеюсь разработчики платформы это исправят.
7. ukunad 1 02.05.17 16:44 Сейчас в теме
Платформа 8.3.10.2168, обе ошибки исправлены.
Оставьте свое сообщение