Как мы знаем, Функциональная Зависимость (потом ФЗ) есть одним из главных понятий теории реляционных БД при дискуссии неприятностей нормализации БД. Тут же мы используем терминологию ФЗ для увеличения уровня абстракции объектов Регистры в V7, связать в единое целое понятия Периодические Реквизиты, Регистры, Проведение Документов.
Итак, сущность понятия ФЗ пребывает в том, что существует особенный класс ТД, в которых значения одних реквизитов (детерминант ФЗ) определяют значения вторых (зависимая часть). До тех пор пока будем разглядывать лишь однозначные ФЗ, другими словами и такие ФЗ, при задании детерминанта которых зависимая часть принимает единственное значение. Будем применять следующий метод записи ФЗ: { Детерминант: Зависимая часть } Как детерминант, так и зависимая часть смогут складываться из нескольких полей (реквизитов). Поля детерминанта будем именовать Измерениями, поля зависимой части ? Ресурсами. Пример несложной (тривиальной) ФЗ ? несложный атрибут справочника:
{#Компания: Дата регистрации}. Тут будет уместным сообщить о необходимости расширения понятия атрибут (реквизит) в V7. Во-первых, нужно позволить в явном виде показывать вычисляемые атрибуты ? это такие атрибуты, значения которых вычисляются на базе значений вторых атрибутов (не требует пояснений). Во-вторых, по аналогии с транзитивными ФЗ, комфортно показывать транзитивные атрибуты. Как пример последнего разглядим справочник Сотрудники, имеющий реквизит Место работы (ссылка на справочник Штатное расписание). Штатное расписание имеет реквизит Подразделение. Так, место работы сотрудника конкретно определяет его подразделение (транзитивная ФЗ), исходя из этого было бы комфортно в справочнике Сотрудники завести транзитивный атрибут Подразделение=МестоРаботы.Подразделение, что разрешило бы обращаться к подразделению сотрудника конкретно: Сотрудник.Подразделение. Для ТД, отражающих ФЗ, должны быть выяснены особые классы (типы данных). Наряду с этим должны быть указаны колонки, находящиеся в собствености детерминанту ФЗ и колонки, соответствующие зависимой части (ресурсам). Колонки детерминанта являются ключом ТД, следовательно, позиционирование в ТД на каком-либо значении детерминанта дает возможность приобрести значения ресурсов ФЗ. Иначе, такую ТД возможно разглядывать как многомерный массив. Количество измерений ФЗ определяет размерность массива, а в ячейках массива сохраняются значения ресурсов ФЗ. Отметим кроме этого, что в сгруппированной ТД колонки, по которым была произведена группировка, образуют измерения детерминанта. Комплект данных. Введение понятия ФЗ потребует расширения синтаксиса языка V7. Логичным будет ввести таковой тип данных как Комплект Реквизитов (атрибутов). К данному типу принадлежат детерминант ФЗ, зависимая часть ФЗ, группировки ТД. По сути, комплект данных ? это ТД из одного кортежа. В случае если переменная setA имеет тип данных Слишком общий комплект, то допустимы присваивания
setA = ФЗ1.Детерминант; либо
setA=ФЗ1.Ресурсы. Комплект возможно кроме этого определенного типа, к примеру:
setA=СоздатьОбъект(Регистр.СкладскойУчет.Детерминант);. В этом случае типы и количество атрибутов комплекта задаются детерминантом регистра Складской учет. Значение комплекта возможно задано и в явном виде, к примеру,
setA.Значение={ТекущийТовар, ТекущийСклад}. Комплект возможно неполным, в этом случае часть значений атрибутов для того чтобы комплекта не выяснена. Базисные ФЗ На низшей ступени иерархии ТД, высказывающих ФЗ, не накладывается никаких ограничений на тип измерений либо ресурсов. Дополнительных процедур (вся функциональность простых ТД наследуется) у данного класса мало: УстановитьРесурсы(?), ПолучитьРесурсы(?). Форма записи данных процедур может варьироваться. К примеру, перед вызовом УстановитьРесурсы() возможно выяснить устанавливаемые ресурсы и детерминант ФЗ: фзПример.Детерминант=НаборИзмерений; фзПример.Ресурсы=НаборРесурсов; фзПример.УстановитьРесурсы(); а возможно передавать измерения и ресурсы в качестве параметра: фзПример.УстановитьРесурсы(НаборИзмерений, НаборРесурсов). Применение функции ПолучитьРесурсы(?) подобно. Детерминант ФЗ возможно выяснить заблаговременно, а возможно передать в качестве параметра вызова. Динамические и статические ФЗ. Все множество типов ФЗ возможно разбить на два класса: статические и динамические ФЗ. Под динамическими ФЗ мы будем осознавать такие, в которых одним из измерением детерминанта есть Время (t) либо промежуток времени (dt). К примеру:
{#Сотрудник, t: Размер оклада} либо
{#Агент, #Соглашение, t: Размер долга} либо
{#Агент, #Товар, dt: Количество реализации}. Под статическими ФЗ соответственно будут пониматься такие, в которых привязка детерминанта ко времени отсутствует. Примеров, где комфортно применять статические ФЗ, множество (в большинстве случаев это какие-нибудь справочные таблицы), а в V7 соответствующего понятия, к сожалению, нет. Потом рассматриваются свойства динамических ФЗ (ДФЗ). Для динамических ФЗ должна быть выяснена операция фиксирования времени, что-то типа ИспользоватьВремяЗаписиСчитывания() (либо ИспользоватьИнтервал()), по окончании исполнения которой с ДФЗ возможно трудиться как с простым статическим ФЗ. Детерминант образующейся ФЗ не содержит времени ? назовем таковой детерминант статическим. Приведем пример двумерной ДФЗ. Пускай некое предприятие имеет пара территориально разнесенных подразделений. Каждое подразделение в праве (и им пользуется) назначать собственные как закупочные, так и продажные стоимости, предварительно согласовав их с центром. Вопрос, как вести учет всех этих прайсов? В терминах ДФЗ все легко: {#Товар, #Подразделение: Цена приобретения, Цена продажи}. В случае если требуется вести прайсы в разрезе поставщиков/клиентов, к детерминанту добавим измерение агент. В терминах ДФЗ периодические реквизиты справочников являются одномерной ДФЗ, в которой измерением есть ссылка на элемент справочника. Учет истории ресурсов в ДФЗ ведет к появлению понятий, которые связаны с регистрацией трансформаций состояния ФЗ. Значения ресурсов ФЗ смогут изменяться лишь в следствии каких-либо событий. Проведение документа ? это и имеется фиксация/инициация для того чтобы события. Причем реквизиты документа неизменно статичны, потому, что событие жестко привязано ко времени. При проведении документа возможно указать детерминант ДФЗ и соответствующие ему значения ресурсов на момент по окончании проведения документа. Возможно допустить кроме этого ручное событие, другими словами изменение ресурсов ДФЗ интерактивно. Событие как изменение состояния ДФЗ может иметь дополнительные характеристики. Это ведет к появлению у ДФЗ реквизитов перемещения. Помимо этого, появление истории ведет к понятию изменение истории задним числом, что возможно критичным для каких-либо задач, применяющих ресурсы ДФЗ. Так, в ДФЗ должна быть предусмотрена возможность хранения последовательности записи либо, в терминах V7, границ последовательностей (ГП) для всех значений детерминантов. В случае если последовательность записи истории была нарушена, то должен быть выставлен соответствующий флаг. Вышесказанное свидетельствует, что физически ДФЗ разбивается на две связанных базисных ТД. В одной ведется учет трансформаций ресурсов, назовем ее ТД регистрации перемещений (либо легко ТД перемещений). Детерминант данной ТД (кроме фактически детерминанта ДФЗ) включает в себя измерение Время (события, проведения документа), а к ресурсам ФЗ добавлены реквизиты перемещения (необходимые реквизиты перемещения ? это идентификатор и документ строчка ТЧ документа). В второй ТД (назовем ее ТД хранения итогов) находятся актуальные (на данный момент) значения ресурсов и регистрация нарушения ГП (в случае если для ДФЗ задан учет ГП). Детерминант данной ТД есть статическим, а ресурсы расширены реквизитами учета ГП. Векторные ресурсы ДФЗ Векторными мы будем именовать такие ресурсы динамических ФЗ, для которых событие (изменение состояния ФЗ) задает не конечное значение ресурса, а только вектор его трансформации. Для таких ресурсов должна быть выяснена операция сложение ресурсов. Соответственно конечное состояние ресурса (если оно требуется) рассчитывается сложением его текущего значения (на момент события) с вектором трансформации. Вектор трансформации должен быть добавлен в качестве необходимого реквизита перемещения в ТД перемещений. Самым несложным и распространенным векторным ресурсом есть множество настоящих чисел. ДФЗ с ресурсами только векторного типа весьма близка к понятию регистров в V7. Векторные ресурсы возможно поделить на два подкласса: накопительные ресурсы ? такие, для которых имеет суть понятие значение сейчас времени и оборотные ресурсы ? имеют значение лишь на этот промежуток времени. Накопительные ресурсы в отечественном понимании смогут быть кроме этого и оборотными. Организация учета оборотов ресурсов рассматривается в следующем разделе. Для ДФЗ с накопительными ресурсами очень актуальна неприятность регистрации события задним числом (нарушения ГП). В прошлом разделе указано, что в ТД сохраняются конечные значения ресурсов ФЗ. Следовательно, в случае если регистрируется событие трансформации ресурса, имеющее более раннее время, чем хранящиеся в ТД итоги, то значения ресурсов всей последующей истории становятся неверными. Как мы знаем, чтобы не было это неприятности в V7 введено понятие периодичности хранения итогов ресурсов, другими словами одна таблица хранит итоговые значения ресурсов с заданной периодичностью, а вторая ? изменение данных итогов. При необходимости взять значение ресурса на произвольный момент времени совокупность находит ближайшие к данному моменту итоги и прибавляет к ним трансформации ресурсов за промежуток времени между границей хранения итогов и требуемым моментом времени. Преимущество для того чтобы подхода в том, что при трансформации ресурса задним числом нет необходимости пересчитывать все промежуточные итоги ресурса, достаточно только пересчитать итоги на определенные границы времени. Недочёт ? неудобство расчета итогов на произвольный момент, некая искусственность модели. Мы предлагаем второй принцип работы с накопительными ресурсами. Во-первых, в ТД перемещений должны храниться конечные значения ресурсов. В случае если нарушений последовательности ввода не было, то приобретать итоговые значения ресурсов кроме этого легко, как периодические реквизиты справочников ? они в явном виде имеется в ТД перемещений. Во-вторых, вводится особая ТД для учета перемещений (трансформации ресурсов), нарушивших последовательность ввода ? ТД корректировки итогов. Так, при трансформации состояния ресурса задним числом совокупность делает следующие действия:
- делает соответствующую запись в ТД регистрации перемещений;
- изменяет итоги ресурса для заданного детерминанта в ТД хранения итогов;
- заносит в ТД корректировки запись о том, что для заданного детерминанта, начиная с такого-то момента времени, требуется корректировка ресурсов (с регистрацией значения корректировки);
- делает отметку в ТД итогов, что требуется пересчет итогов в ТД перемещений.
Что имеем в следствии. Текущие значения итогов ресурсов (в ТД итогов) неизменно актуальны. В случае если требуется взять значения итогов на произвольный момент времени, то совокупность:
- находит соответствующее значение ресурса из ТД перемещений;
- контролирует ТД итогов на необходимость корректировки данного ресурса данного детерминанта;
- в случае если корректировка нужна, извлекает из ТД корректировки все значения трансформаций ресурсов со временем более ранним, чем требуемое и складывает их со значением ресурса, взятого из ТД перемещений.
В итоге приобретаем требуемое значение. Помимо этого, в фоновом режиме (машинально либо принудительно) совокупность обязана делать операции по очистке ТД корректировки и соответствующему трансформации итоговых значений ресурсов в ТД перемещений. Обороты векторных ресурсов Во многих задачах требуется знать не конечное значение векторного ресурса, а его суммарное изменение за определенный временной промежуток. Соответственно, для хранения оборотных итогов таких ресурсов в качестве динамического измерения обязан употребляться Промежуток времени. ДФЗ, в детерминанте которых присутствует Промежуток времени будем именовать оборотными. Практически, оборотные ДФЗ соответствуют регистрам оборотов в V7. Нас интересует, как верно должны быть устроены ТД для организации учета оборотов. Обратимся к опыту V7. В том месте при создании оборотного регистра требуется указать его расчетный период: год, квартал, месяц, семь дней. Этот период потом выступает в качестве дополнительного (скрытого) измерения регистра. Неудобство для того чтобы подхода пребывает в том, что перед извлечением итогов регистра возможно фиксировать временной промежуток лишь для того чтобы же размера, как и расчетный период. В также время частенько требуется трудиться с итогами регистра, как за месяц, так и за квартал, и за год. А в задачах меньшего временного масштаба, быть может, потребуются часы, 60 секунд а также секунды. Более эластичным (и верным) для организации оборотных ДФЗ представляется применение ТД, сгруппированных по временным промежуткам. Какие конкретно промежутки участвуют в группировке ? задается при создании оборотной ДФЗ. Так, в случае если указаны временные промежутки год, квартал, месяц ? это указывает, что ТД хранения итогов представляет собой три ТД со следующими соотношениями подчиненности: {Детерминант, Год:?}
Время перемещения | Измерение 1 | Измерение 2 | Измерение прихода 1 |
Приращение ресурса |
Конечное значение ресурса |
ИД документа | ИД строки ТЧ документа |
Структура ТД регистрации перемещений на приход
Время перемещения | Измерение 1 | Измерение 2 | Измерение расхода 1 |
Приращение ресурса |
Конечное значение ресурса |
ИД документа | ИД строки ТЧ документа |
Структура ТД регистрации перемещений на расход
Измерение 1 | Измерение 2 | Итоговое значение ресурса | Учёт границы последовательности | Учёт корректировки промежуточных итогов |
Структура ТД накопительных итогов
Измерение 1 | Измерение 2 | Время перемещения | Значение для корректировки |
Структура ТД корректировки промежуточных итогов (конечных значений) ресурса
Год | Изм1 Изм2 ИзмПрих1 |
Оботоры ресурса |
Изм2
ИзмПрих1
Изм2
ИзмПрих1
Структура ТД хранения оборотов ресурса на приход
Год | Изм1 Изм2 ИзмРасх1 |
Оботоры ресурса |
Изм2
ИзмРасх1
Изм2
ИзмРасх1
Структура ТД хранения оборотов ресурса на расход Итого взяли шесть ТД, две из которых сгруппированы по промежутку. Обрисованные параметры ДФЗ достаточно близки к понятию бухгалтерского счета. Но при моделировании последнего нужно, дабы в структуре ТД отыскал отражение тот факт, что приращение стоимостного остатка (ресурса) на одном бухгалтерском счете постоянно означает его уменьшение на втором (баланс). Другими словами два перемещения (на приход и на расход) должны быть связаны между собой. Резюме.
- Понятие регистров, периодических атрибутов справочников в V7 нужно увеличить до определения Функциональных Зависимостей (ФЗ).
- Нужным было бы определение Транзитивных Атрибутов.
- Регистры являются частным случаем динамических ФЗ, наряду с этим измерения образуют статический детерминант ФЗ, а зависимая часть ФЗ складывается из ресурсов лишь векторного типа.
- Понятие Комплект Данных облегчит применение ФЗ.
- Учет границы последовательности динамических ФЗ должен быть встроен в структуру ТД, поддерживающих ДФЗ. Для каждого значения статического детерминанта ? собственная помощь ГП.
- Для ФЗ с накопительными ресурсами понятие период хранения остатков не есть хорошим решением. Лучше применять корректировочные ТД.
- Для организации хранения итогов оборотов ресурсов нужно применять подчиненные ТД с группировкой по регламентным периодам.
- Одна динамическая ФЗ может иметь разные детерминанты для различных видов итоговых значений одного и того же ресурса.
Дмитрий Малюгин
Copyright © ITland 2002-2003
Стань специалистом
1C
Рейтинг публикаций
Цены Нативная реклама Связаться
Мнения
Клерк (1) Facebook Вконтакте
Написать собственный вывод 1 вывод
- Мне нравится
- Ответить
- #1
anonimous
- Сообщения форума
- Профиль пользователя
- Личное сообщение
- Послать email
Гениально!
Браво!
Я также думал о чем-то подобном.
В то время, когда же это будет реализовано…
В конечном счете бухитоги, регистры сведений, остатков и итогов реализуются в рамках функциональных зависимостей.
Кстати, как тебе такая идея:
{ ,t : Количество, Остаток(Количество)}
Остаток(Ресурсе) — вычислимый ресурс, вычисления производятся встроенными средствами либо же по формуле = Summ'(Ресурс) направляться (t
Т.е. остаток будет таким же ресурсом, как и ресурс количество, лишь вычислимым…
Да, все значительно упрощается… Дожить бы до этого яркого будущего…
Добавить
- Цитировать
- Ссылка на фрагмент
Люди которым это нравится
Закрыть
Семинары по теме «1C»
01 января
Учет расчетов по зарплате . Непростые вопросы, взносы и налоги, практические примеры в 1С: Управление и Зарплата Персоналом 8
19 декабря
(Он-лайн семинар) От теории к практике. УСН: подводим итоги 2017 года + практика отражения в программе 1С: Бухгалтерия 8.3
еще
Вам возможно весьма интересно:
Как строится музыка. Структура песни