Коллеги, привет!

Сегодняшний текст – вводная часть к последующей серии постов по работе с данными 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 Коннектору от коллег.