Реализация партионного учета на MS SQL

Наткнулся на отличный пост http://michaelsmirnov.blogspot.ru/2011/10/blog-post.html. Утащу его себе когда в следующий раз придется зарубиться насчет универсальности, быстроты разработки и т.п. в 1С. Элегантно, быстро, но долго и дорого это явно. А с учетом того что в типовых это уже есть и что юзера захотят понимать почему такая цена, а не другая?

Continue reading

Структура хранения метаданных в БД

Полезная статейка:

* Константы
=> _Consts содержит текущие значения всех констант, определенных в конфигурации.
=> _ConstsChangeRec — таблица регистрации изменений констант. Создается, если хотя бы одна константа участвует хотя бы в одном плане обмена.
* Планы обмена
=> _Node<n> — таблица плана обмена.
=> _Node<n>_VT<k> — табличная часть плана обмена, создается для каждой табличной части.
* Справочники
=> _Reference<n> — таблица справочника.
=> _Reference<n>_VT<k> — табличная часть справочника — для каждой табличной части.
=> _ReferenceChangeRec<n> — таблица регистрации изменений справочника. Создается, если справочник участвует хотя бы в одном плане обмена.
* Документы
=> _Document<n> — таблица документов для каждого объекта метаданных «документ».
=> _Document<n>_VT<k> — табличная часть документа — для каждой табличной части каждого документа.
=> _DocumentChangeRec<n> — таблица регистрации изменений объекта метаданных типа «документ». Создается для каждого объекта метаданных типа «документ», если он участвует хотя бы в одном плане обмена.
* Последовательности документов
=> _Sequence<n> — таблица регистрации документов — для каждой последовательности.
=> _SequenceBoundary<n> — таблица границ последовательности — для каждой последовательности.
=> _SequenceChangeRec<n> — таблица регистрации изменений последовательности. Создается для каждой последовательности, которая участвует хотя бы в одном плане обмена.
* Журналы документов.
=> _DocumentJournal<n> — таблица журнала документов, создается для каждого журнала документов.
* Перечисления
=> _Enum<n> — таблица перечисления — по одной для каждого перечисления.
* Планы видов характеристик
=> _Chrc<n> — основная таблица плана видов характеристик.
=> _Chrc<n>_VT<k> — табличная часть плана видов характеристик — для каждой табличной части.
=> _ChrcChangeRec<n> — таблица регистрации изменений плана видов характеристик. Создается, если план видов характеристик участвует хотя бы в одном плане обмена.
* Планы счетов
=> _Acc<n> — основная таблица плана счетов.
=> _Acc<n>_ExtDim<k> — таблица видов субконто плана счетов, создается для плана счетов в том случае, если максимальное количество субконто больше нуля.
=> _Acc<n>_VT<k> — табличная часть плана счетов, создается для каждой табличной части плана счетов.
=> _AccChangeRec<n> — таблица регистрации изменений плана счетов. Создается, если план счетов участвует хотя бы в одном плане обмена.
* Планы видов расчета
=> _CalcKind<n> — основная таблица плана видов расчета.
=> _CalcKind<n>_BaseCK — таблица базовых видов расчета, создается для плана видов расчета в случае, если его свойство «Зависимость от базы» имеет значение, отличное от «Не зависит».
=> _CalcKind<n>_DisplacedCK — таблица вытесняемых видов расчета, создается для плана видов расчета в случае, если у него установлен флаг «Использует период действия».
=> _CalcKind<n>_LeadingCK — таблица ведущих видов расчета — для каждого плана видов расчета.
=> _CalcKindDN<n> — вспомогательная таблица для порядка вытеснения, создается, если у плана видов расчета установлен флаг «Использует период действия».
=> _CalcKind<n>_VT<k> — табличная часть плана видов расчета, создается для каждой табличной части.
=> _CalcKindChangeRec<n> — таблица регистрации изменений плана видов расчета. Создается, если план видов расчета участвует хотя бы в одном плане обмена.
* Регистры сведений
=> _InfoReg<n> — таблица движений регистра сведений.
=> _InfoRegChangeRec<n> — таблица регистрации изменений регистра сведений. Создается, если регистр сведений участвует хотя бы в одном плане обмена.
* Регистры накопления
=> _AccumReg<n> — таблица движений регистра накопления.
=> _AccumRegTotals<n> — таблица итогов регистра накопления, если регистр поддерживает остатки.
=> _AccumRegTurnovers<n> — таблица оборотов регистра накопления, если регистр поддерживает обороты.
=> _AccumRegChangeRec<n> — таблица регистрации изменений регистра накопления. Создается, если регистр накопления участвует хотя бы в одном плане обмена.
=> _AccumRegOptions — таблица настроек хранения итогов регистров накопления одна на все регистры накопления.
* Регистры бухгалтерии
=> _AccntReg<n> — таблица движений регистра бухгалтерии.
=> _AccntRegED<n> — таблица значений субконто регистра бухгалтерии, создается в том случае, если он ссылается на план счетов, у которого максимальное количество субконто больше нуля.
=> _AccTtl0<n> — таблица итогов по счету.
=> _AccTtl<i><n> — где i от 1 до максимального количества субконто. Таблица итогов по счету с количеством видов субконто равным i.
=> _AccTtlC<n> — таблица итогов оборотов между счетами, только для регистра бухгалтерии поддерживающего корреспонденцию.
=> _AccntRegChangeRec<n> — таблица регистрации изменений регистра бухгалтерии. Создается, если регистр бухгалтерии участвует хотя бы в одном плане обмена.
=> _AccntRegOptions — таблица настроек хранения итогов одна на все регистры бухгалтерии.
* Регистры расчета
=> _CalcReg<n> — таблица движений регистра расчета.
=> _CalcRegActPer<n> — таблица фактических периодов действия для регистра расчета, создается, если у регистра расчета установлен флаг «Период действия».
=> _CalcRegChangeRec<n> — таблица регистрации изменений регистра расчета. Создается для каждого регистра расчета, участвующего хотя бы в одном плане обмена.
=> _CalcRegRecalc<n> — таблица перерасчета регистра расчета, создается для каждого перерасчета.
=> _CalcRegRecalcChangeRec<n> — таблица регистрации изменений перерасчета. Создается, если перерасчет участвует хотя бы в одном плане обмена.
* Бизнес-процессы
=> _BPRoutePoint<n> — таблица точек маршрута бизнес-процесса для каждого бизнес-процесса.
=> _BusinessProcess<n> — основная таблица бизнес-процесса.
=> _BusinessProcess<n>_VT<k> — табличная часть бизнес-процесса для каждой табличной части.
=> _BusinessProcessChangeRec<n> — таблица регистрации изменений бизнес-процесса. Создается для каждого бизнес-процесса, участвующего хотя бы в одном плане обмена.
* Задачи
=> _Task<n> — основная таблица задачи.
=> _Task<n>_VT<k> — табличная часть задачи для каждой табличной части.
=> _TaskChangeRec<n> — таблица регистрации изменений в задачах. Создается для каждого объекта метаданных типа «задача», который участвует хотя бы в одном плане обмена.

Как установить текущую строку в таблице значений?

Кидаем на форму таблицу значений, по кнопке Подбор открываем список на выбор. Дальше устанавливаем добавленную строку после подбора как текущую:

 

	Подбор = ПолучитьФорму("Справочник.Контрагенты.ФормаВыбора");
	Контрагент = Подбор.ОткрытьМодально();
	//добавим в таблицу выбранного
	НовСтрока = ТаблицаНайдено.Добавить();
	НовСтрока.Контрагент = Контрагент;
	Элементы.ТаблицаНайдено.ТекущаяСтрока = НовСтрока.ПолучитьИдентификатор();
 

Как очистить список баз?

При запуске программы пользователь должен выбрать в какую базу ему необходимо зайти. Хорошо когда у пользователя так баз немного, и плохо разработчику, который постоянно работает в 5-6 базах, и при этом успевает удалять копии, тестовые базы, и всякие временные. Чтобы дерево баз не захломлялось, его можно легко почистить этой обработкой — http://infostart.ru/public/75891/

Сама по себе обработка проста, не хватает функции удаления пустых каталогов, которые раньше содержали БД, но это можно доработать. Интересен код обработки, с точки зрения использования системных скриптов:

Процедура ПриОткрытии()
	КЧ = Новый КвалификаторыЧисла(12,2);
    ОписаниеТиповЧ = Новый ОписаниеТипов("Число",КЧ);
	ДеревоБаз.Колонки.Добавить("Name");
	ДеревоБаз.Колонки.Добавить("Connect");
	ДеревоБаз.Колонки.Добавить("ID");
	ДеревоБаз.Колонки.Добавить("OrderInList",ОписаниеТиповЧ);
	ДеревоБаз.Колонки.Добавить("Folder");
	ДеревоБаз.Колонки.Добавить("OrderInTree",ОписаниеТиповЧ);
	ДеревоБаз.Колонки.Добавить("External");
	ДеревоБаз.Колонки.Добавить("Exist"); //0 - база есть, 1 - нет файла базы, каталог не пустой, 2 - нет файла базы, каталог пустой, 3 - нет каталога
	
	WshShell=Новый COMОбъект("wscript.shell");
	ИмяОсновногоКаталога = WshShell.SpecialFolders.Item("AppData");
	//ИмяСпискаБаз = ИмяОсновногоКаталога + "1C1Cv81ibases.v8i";
	ИмяСпискаБаз = ИмяОсновногоКаталога + "1C1CEStartibases.v8i";
	КопироватьФайл(ИмяСпискаБаз,ИмяСпискаБаз+"_bak");  //сохраним предыдущий список от греха подальше.
    ПрочитатьСписокБаз();
КонецПроцедуры
 

Дальше как вы можете посмотреть идет разбор дерева. Рекомендую использовать в работе, очень облегчает жизнь.

Как файловую 1C 8.2 перевести в MS SQL 2008?

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

1. Выгружаем файловую базу (в файл с расширением .dt) и сохраняем на диске.
2. Создаем новую базу (серверную).
3. Загружаем в созданную базу 1С (изначально она будет пустой) сохраненный файл .dt.