Коллеги, привет!
Сегодняшний текст – вводная часть к последующей серии постов по работе с данными 1С в QlikView (не без нашего АТК QlikView 1C Коннектора, конечно). Но куда же мы без знания азов философии самой платформы 1С? Итак, начинаем с курицы (или яйца, тут уж кому как ближе) и обращаемся к истокам – философии платформы 1С!
Специалист подобен флюсу: полнота его односторонняя
Очень долго искал краткое описание 1С, но не в желтом стиле «Платформа 1С позволяет автоматизировать любые бизнес процессы» или «чтобы провести проводку, откройте документ и нажмите ОК», а описывающий философию «что и зачем» на уровне таблиц, позволяющему прокачанному персу уже самостоятельно разобраться с вопросом «как?» — этакий 1C one shit manual.
Описание так и не нашел, поэтому пришлось его написать самому.
С моей нубской для 1С точки зрения, коротко философию архитектуры 1С можно вместить в одно предложение: документы наполняются справочниками и двигают регистры. Всё!
В начале был Документ
Усы, лапы и хвост — вот мои документы
С точки зрения 1С документ состоит из шапки и, возможно, нескольких табличных частей. Пример объекта документ: Документы.РеализацияТоваровУслуг. В шапке содержится идентификатор документа (GUID), дата, номер, автор и т.п. Следует отметить, что номер документа не является уникальным с точки зрения 1С, поскольку нумерация некоторых документов должна начинаться заново каждый год, уникальным становится синтетика Номер + Дата (или Номер + Год).
В так называемой табличной части (а их может быть несколько) содержится ссылка на шапку документа в виде ссылки (GUID) и список строк входящих в документ. Например, Документы.РеализацияТоваровУслуг.Товары и Документы.РеализацияТоваровУслуг.Услуги. Строки содержат как ссылки на шапку документа, так и ссылки на Справочники товаров и услуг (Справочники.Номенклатура) тоже в виде GUID.
Документ имеет пару бинарных атрибутов «Помечен на удаление» и «Проведен», которые порождают 4 состояния:
ПомеченНаУдаление, Проведен — такого не должно быть.
ПомеченНаУдаление, НеПроведен — заведен черновик документа, движение по регистрам не должно возникнуть, документ помечен на удаление — при очередной сборке мусора он исчезнет.
НеПомеченНаУдаление, Проведен — обычный документ, который должен быть отражен в регистрах.
НеПомеченНаУдаление, НеПроведен — черновик документа, движение по регистрам не должно возникнуть.
Что такое регистр
Таблицы пропускаю, а в пролетарскую суть вникаю
Вообще говоря — регистры не нужны. Отчеты можно собирать и по проведенным документам, особо продвинутые программисты 1С так и делают (не могу сказать, что это хорошая практика). Но для увеличения производительности, результаты проводки документа (перевод из состояния НеПроведен в состояние Проведен) скидываются в Регистр. Проведение одного документа может породить записи в нескольких регистрах. Разные типы документов могут породить записи в разных регистрах — эти знания хранятся в мета данных конфигурации 1С.
Регистры делят на два типа РегистрыНакопления и РегистрыСведений.
РегистрНакопления правильно оптимизирован и быстро отдает агрегированные результаты. Типичный пример — ТоварыНаСкладах. Сумма по товарному запасу даст товарный остаток.
РегистрСведений правильно проиндексирован (обычно по времени) и быстро отдает результаты первый, последний (getFirst, getLast). Типичный пример — ЦеныНоменклатуры. Последнее значение даст последнюю цену нашего товара.
Справочники
Чемодан… Чебоксары… Чебуреки… Никакого Чебурашки тут нет!
Справочники нужны для нормализации базы данных 1С. Справочники используются для заполнения атрибутов документов.
Тривиальный тип справочника — Перечисление. Простая связь — код — значение. Например, Перечисление.ДниНедели содержит перечисление 7 дней недели.
Типовой справочник — Справочники.Номенклатура, содержит не только связь код — значение, но и дополнительные атрибуты ОсновнойПоставщик, СтавкаНДС и т.д.
Справочники хранят атрибут ПомеченНаУдаление. Принципиальное отличие этого атрибута в Документах в том, что документы, помеченные на удаление можно игнорировать. Элементы справочника, помеченные на удаление могут использоваться в документах и сборщик мусора не должен их дать удалить.
Значение свойств объектов
Где начало того конца которым оканчивается начало
Представим себе распределенную 1С. Если мы добавим какой-либо атрибут (поле) в Справочник, то должна запуститься полная синхронизация этого справочника, поскольку изменения коснулись каждой записи, хотя реальные данные мы еще не вводили. Иногда это требует длительного времени. Чтобы этого избежать используют промежуточный справочник, например, Справочники.ЗначенияСвойствОбъектов, в котором атрибуты хранятся в триадах Объект-Свойство-Значение. Такая триада ссылается как на объект справочника, так и на справочник свойств и содержит значение. Таким образом, в нашем примере, добавление атрибута, без заполнения данных не запустит синхронизацию всего справочника.
Отмазка
Никому нельзя верить. Мне можно.
Данный труд не претендует на точность, а выражает впечатление автора от работы с платформой 1С.
Термин «должно быть» используется с оговорками, что целостность поддерживается средствами платформы 1С, и в реальной жизни бывает по другому.
Среди поклонников 1С бытует миф о уникальности GUID: у любого элемента объекта 1С есть GUID. GUID должен быть уникален. Можно ожидать что в пределах одного объекта, одной базы 1С GUID уникален. Обычно так и бывает. Не поленитесь, проведите анализ уникальности перед началом работ. Иногда, в силу разных причин это не так.
Считается что поле Код в Справочниках уникально. Иногда это не так. При этом внутренний механизм 1С делает выборки по GUID, поэтому ошибки не возникает.
Иногда в 1С висят проведенные документы, не имеющие записей в регистрах, иногда наоборот, есть проводки в регистрах, которые ссылаются на удаленные документы. Я встречал, когда в парах Номенклатура-Характеристика, характеристики ссылались на несвязанные объекты номенклатуры.
Не полагайтесь только на 1С, проверяйте и перепроверяйте!
П.С. На этом сегодня рассказ про 1С завершен, а в следующий раз ждите посты по ATK QlikView 1C Коннектору от коллег.
Хорошая статья о свойствах структур 1С применительно к их интеграции с Кликом, но я бы все таки дополнительно рекомендовал почитать оригинальный начиная со ссылки http://www.v8.1c.ru/overview/Term_000000582.htm — Прикладные механизмы платформы. Там удобная навигация по подразделам. Главные темы, которые будут интересовать человека, который подключает Клик к 1С:
Документы
Перечисления
План видов характеристик
Регистр бухгалтерии
План счетов
Регистр накопления
Регистр сведений
Справочники
Бухгалтерские проводки
Ой. Вы явно мало работали с 1С…
Эта статья, имхо, содержит много ложных утверждений, изложение настолько поверхностно, что только остается развести руками.
Необходимо вначале посмотреть на метаданные справочника, код может быть уникален в пределах владельца только. И то, настройка может меняться после ввода системы в эксплуатацию, поэтому на счет кода так категорично говорить нельзя.
Не можно, а нужно. Это кит платформы. ГУИД в пределах одного объекта уникален. Но может быть товар и контрагент с одинаковым ГУИДом.
Ну тут не все так просто. Есть понятие составного типа. Тогда помимо ГУИДа будет поле/поля с указанием типа объекта.
У перечисления нет кода. Есть ссылка, и то она не доступна в SQL в прямом виде
Что? Мы тут про big data говорим… Пользователи часами должны ждать отчетов? Вас бы выгнали с экзамена за такие слова с вечным баном
Если он правильно проиндексирован, им правильно пользуются и понимают, что такое срез и как запрос транслируется в SQL
правильный термин — реструкторизация
Триада хранится, не в справочнике, а в одноименном регистре сведений
Это и есть примеры рук@жопства орды начинающих программистов 1С, которые не знают стандарты разработки фирмы 1С и придумывают свою «философию»
Никому нельзя верить. Даже мне!
Сергей! Искренне благодарю за комментарий!
Изложение поверхностно, чтобы коротко описать основные объекты платформы 1С в короткой заметке, дабы дать возможность разработчику Qlikа понять структуру данных 1С.
Насчет ложных утверждений, приношу извинения:
1) действительно у перечислений нет кодов
2) действительно триады хранятся в РегистрыСведений.ЗначенияСвойствОбъектов
Прочие утверждения не являются ложными для разработчика Qlik
1) Нельзя ориентироваться на уникальность поля Код в Справочниках
2) Можно ориентироваться на уникальность GUID в пределах одной базы и объекта.
3) Отчеты можно собирать по документам, а не по регистрам.
Привет, если требуется получить уникальный ГУИД в пределах базы — добавьте код метаданных, как это сделано в журнале регистрации (218:b9eb005056ac0ca011e60defb1aab3d9).
И значения, возвращаемые 1с и SQL будут отличаться, но привести их о одному формату довольно просто.
На коды ориентироваться не стоит, возможны сюрпризы, даже если их не должно быть.
1С коннектор снимет ряд проблем и сэкономит время.