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

28.07.15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ресурсы:

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

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

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

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

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

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4453    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2956    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

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

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

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

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

1 стартмани

27.10.2023    1995    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

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

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

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

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

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

3. Ну и по последнему пункту. Не надо утверждать что я знаю или чего не знаю это не профессионально и мы здесь не для того чтобы мериться друг с другом знаниями или опытом, а для того чтобы делиться ими. Хотелось бы в качестве приложения увидеть скрин где таблица из которой вы получаете значения характеристик была бы виртуальная таблица регистра "СрезПоследних" и все это с помощью той же кнопки "Характристики". Заранее спасибо.
AlbinaAAA; +1 Ответить
5. bforce 481 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, обе ошибки исправлены.
Оставьте свое сообщение