1с md файл это
Смысл моей реализации – выполнение структурных изменений в базе SQL средствами самого SQL сервера с последующей заменой файлов 1cv7.md и 1cv7.dds в рабочей базе. Причем так, чтобы 1С не «догадалась», что эти изменения сделала не она сама.
Опытным путем можно проверить, что, например, изменение интерфейсов, прав, перечислений – не являются, по сути, структурными изменениями. Поэтому в данном случае достаточно просто подменить 1cv7.md.
Совсем по другому дело обстоит со справочниками, документами, регистрами и т.п.
Предупреждение: все алгоритмы проверяйте на тестовых базах и не забывайте про бэкап.
Помните: drop table и truncate table выполняются очень быстро
Все скрипты приведены для MS SQL версии 2005 и выше. Для версии 2000 будут некоторые отличия в синтаксисе.
Итак, начнем. Будем двигаться от простого к сложному.
После каждого шага Вы можете подменять файлы md и dds в базе Тест и проверять работоспособность.
Для начала создадим самую простую конфигурацию (на sql сервере назовем ее Test). Это будет «рабочая база». Заполним ее немного данными.
Выгрузку конфигурации до изменений и после всех изменений, при желании, можно скачать в приложенном файле.
Через выгрузку-загрузку (для быстроты) создадим еще одну базу (на sql сервере назовем ее Test2). Это будет «копия». Причем копию при реальной работе можно и нужно делать без данных: т.е. просто скопировать 1cv7.md в пустую папку и запустить конфигуратор. Так изменения будут сохранятся гораздо быстрее.
Теперь наши изменения: в конфигураторе изменения вносим в базе Тест2, скрипты выполняем в контексте базы Тест.
1. Добавление признака «Отбор для реквизита» для реквизита «Вес» справочника Номенклатура.
В зависимости от наличия владельца и/или родителя в этом случае могут быть созданы 1 или 2 индекса. В нашем случае создался один индекс «VI14» с полями «Вес», «Наименование» и «row_id».
Сравнение файлов dds до и после изменений:
Задача самая простая: создать такой же индекс в рабочей базе. Предварительно проверяем его существование и удаляем, если он есть.
В этом, и некоторых последующих случаях, можно попросить SSMS сделать скрипт за нас. В нем будет много относительно лишнего кода – я постараюсь лишнее удалять, чтобы не путать.
USE Test
GO
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[SC12]') AND name = N'VI14')
DROP INDEX [VI14] ON [dbo].[SC12]
GO
CREATE UNIQUE NONCLUSTERED INDEX [VI14] ON [dbo].[SC12] ([SP14] ASC, [DESCR] ASC, [ROW_ID] ASC)
2. Добавление колонки «Поставщик» (Строка (50)) в справочник Номенклатура.
Здесь мы рассматриваем добавление колонки в существующий справочник, в котором уже есть данные.
Основной нюанс здесь в том, что 1С 7.7 не допускает хранение NULL в колонках таблицы. Поэтому создавая колонку, необходимо указать дефолтовое значение для добавляемой колонки.
В нашем случае это будет пустая строка: ‘’. Если бы тип данных был «Число», то пустое значение было бы 0.
У агрегатных объектов, например, если бы колонка была типа «Справочник.Контрагенты» - пустое значение было бы ‘ 0 ’, если просто «Справочник» - то ‘ 0 0 ’ и т.д.
Сохраним изменения в базе Тест2:
Посмотрим отличия в DDS:
Дам некоторые пояснения по скрипту. В MS SQL указание значения по умолчанию – это создание объекта constraint в таблице.
Мой совет: чтобы данный скрипт можно было выполнить несколько раз в одной базе (например, в случае какого-либо сбоя) лучше давать констрейтантам явные имена. Если написать просто:
alter table SC12 add sp26 char(50) not null default ''
то констрейнт будет иметь сгенерированное имя, причем при каждом удалении и создании колонки имя констрейнта будет меняться.
Перед удалением колонки нужно удалять все объекты, в которых данная колонка задействована (кроме таблиц конечно), в т.ч. констрейнты (вот здесь и понадобится имя), индексы и т.п.
В нашем случае индексов по колонке нет, поэтому удаляем констрейнт, затем саму колонку (если они есть) и создаем новую колонку нужного типа.
Текст скрипта:
use Test
go
if exists(select 1 from sys.objects where name = 'df_sc12_sp26' AND parent_object_id = OBJECT_ID('dbo.SC12'))
alter table SC12 drop constraint df_sc12_sp26
go
if exists (select 1 from sys.columns where name = 'sp26' AND object_id = OBJECT_ID('dbo.SC12'))
alter table SC12 drop column sp26
go
alter table SC12 add sp26 char(50) not null constraint df_sc12_sp26 default ''
3. Изменение типа колонки «Поставщик» справочника Номенклатура
При изменении типа колонки, например изменении длины поля типа «строка», или изменение разрядности «числа», можно воспользоваться скриптом, приведенным ниже.
Поменяем длину поля Поставщик с 50 на 10 символов.
Обратите внимание: если в таблице уже есть строки больше 10 символов – преобразование на SQL из 50 в 10 не будет выполнено:
То же произойдет, если попытаться преобразовать колонку типа «Строка» в «Число» при наличии записей, которые не приводятся безусловно к типу число:
Если какая-то колонка не используется и Вы хотите задействовать ее под новые данные, то ее предварительно нужно удалить и создать новую с тем же идентификатором и в том же порядковом месте. Это будет рассматриваться при описании документов в следующей части статьи.
В скрипте проверяем наличие колонки и меняем тип.
use Test
go
if exists (select 1 from sys.columns where name = 'sp26' AND object_id = OBJECT_ID('dbo.SC12'))
alter table SC12 alter column sp26 char(10) not null
go
4. Добавление справочника «Контрагенты»
И последний на сегодня пример: добавление справочника в конфигурацию. Добавляем справочник Контрагенты с одним реквизитом «ИНН».
Изменений в DDS гораздо больше:
Здесь помимо создания самой таблицы в SQL, необходимо создать соответствующие индексы и процедуры.
В общем случае, достаточно создать только таблицу, подменить md и запустить базу монопольно – 1С остальное сделает сама. Но наши цели: 1. Понимание процесса; 2. Возможность запуска без монопольного режима.
При создании скриптов (в т.ч. получения текста сгенерированных процедур) удобно использовать функции SSMS, как это описано в шаге 1.
По самому скрипту: как обычно – проверяем наличие объекта, если есть удаляем, создаем объект. Проверку наличия индексов не проверяем, т.к. при удалении таблицы – индексы также удаляются.
use Test
go
--Таблицы
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo.SC27'))
drop table dbo.sc27
go
create table dbo.SC27(
[ROW_ID] [int] IDENTITY(1,1) NOT NULL,
[ID] [char](9) NOT NULL,
[CODE] [char](5) NOT NULL,
[DESCR] [char](25) NOT NULL,
[ISMARK] [bit] NOT NULL,
[VERSTAMP] [int] NOT NULL,
[SP29] [char](12) NOT NULL,
constraint [PK_SC27] primary key clustered ([ROW_ID] asc)
go
--Индексы
create unique nonclustered index CODE on dbo.SC27 (CODE ASC, ROW_ID ASC)
go
create unique nonclustered index DESCR on dbo.SC27 (DESCR ASC, ROW_ID ASC)
go
create unique nonclustered index IDD on dbo.SC27 (ID ASC)
go
--Процедуры
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo._1sp_SC27_ByID'))
drop procedure [dbo].[_1sp_SC27_ByID]
go
create procedure dbo._1sp_SC27_ByID (@id CHAR(9)) AS
select * from SC27 with (nolock) where >
go
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo._1sp_SC27_MaxID'))
drop procedure dbo._1sp_SC27_MaxID
go
create procedure dbo._1sp_SC27_MaxID (@id CHAR(9) OUTPUT) AS
set nocount on select @id=MAX(ID) from SC27 with (nolock) if @id is null select @id=' '
go
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo._1sp_SC27_MaxRowID'))
drop procedure dbo._1sp_SC27_MaxRowID
go
create procedure dbo._1sp_SC27_MaxRowID (@i int OUTPUT) AS
set nocount on select @i=MAX(ROW_ID) from SC27 with (nolock) if @i is null select @i=0
go
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo._1sp_SC27_TLock'))
drop procedure dbo._1sp_SC27_TLock
go
create procedure dbo._1sp_SC27_TLock AS
set nocount on declare @i int select @i=1 from SC27 with (tablock, holdlock) where 0=1
go
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo._1sp_SC27_TLockX'))
drop procedure dbo._1sp_SC27_TLockX
go
create procedure dbo._1sp_SC27_TLockX AS
set nocount on declare @i int select @i=1 from SC27 with (tablockx, holdlock) where 0=1
В этой публикации я не буду обосновывать необходимость (нужность, востребованность) подобного решения: будем считать, что мною движет исключительно стремление удовлетворить собственное любопытство. В качестве тестовых примеров будут использоваться комплексные конфигурации для версий 7.5 и 7.7.
Итак, постановка задачи: получить возможность доступа к данным V7, точнее к объектам хранения данных (справочникам, регистрам, перечислениям и т.д.). Решение (технология) должно поддерживать как версию 7.7, так и версию 7.5. Никакие компоненты V7 использоваться не должны: только *.dbf и 1cv7.md.
Исследуем MD
Самым известным инструментом для этой работы является FAR DocFile Browser Plugin by Igor Pavlov.
В последнее время появилось несколько новых инструментов, ориентированных не на абстрактный , а конкретно на 1cv7.md (compound.dll by Kostya Volkov, MD Editor by Павел Бычковяк, Visual MD Editor by Sergey Belov, и другие).
Мы будем использовать Compound Extractor by Denis Abrosimov. Тому, кто захочет узнать подробности об этой программе или пожелает заточить её под себя, необходимо обратиться к главе II, написанной Денисом (в ней меня особенно умиляют упоминания «поделок от Микрософт» Денис, кстати сказать, один из авторов описываемой технологии, видел софт от 1С только издали (ближе мы его не подпускаем, бережём
Внутри 1cv7.md нас будет интересовать исключительно файл Main Metadata Stream (далее просто MMS) из папки . В зависимости от версии 1С, его кодировка либо OEM (для 7.5), либо ANSI (для 7.7).
Для извлечения MMS из мы воспользуемся командой
compound_extr.exe 1cv7.md "\metadata\main metadata stream"
Compound Extractor создаст файл с аналогичным именем, который мы и будем анализировать в дальнейшем.
MMS изнутри
Даже поверхностный взгляд на MMS позволяет определить, что этот файл имеет регулярную структуру: группы символов в двойных кавычках (chr(34)), разделенные запятыми и ограниченные фигурными скобками (chr(123) и chr(125)). Подобные структуры часто встречаются в разных местах V7: файл выгрузки данных, файл и практически всё, что записано в файле метаданных.
Естественно, что такая структура может быть легко представлена и обработана программой.
Психология
Философия
Фантастика
Помощь студенту
Гостевая книга
Ссылки
Волшебство программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 54 / 15.04.2004
Конфигурация "Управление производственным предприятием" является комплексным решением, охватывающим основные контуры управления и учета на производственном предприятии. Оно позволяет организовать единую информационную систему для управления различными аспектами деятельности предприятия:
управление персоналом, включая расчет заработной платы.Учет финансово-хозяйственной деятельности предприятия ведется по российским и международным стандартам, обеспечивая:
Описание выпуска рассылки
Сегодня вашему вниманию предлагается несколько полезных инструментов для работы с файлами конфигурации на платформе 1С:Предприятие 7.7. Многие знают, что md-файл представляет собой Compund-файл, состоящий из файлов и каталогов. Но немногие знают, что есть инструмент для извлечения потоков md-файла в отдельные текстовые файлы и обратной сборки md-файла из текстовых файлов. Этот инструмент называется GComp и доступен для скачивания ниже. Обратите внимание, что его исходники также открыты и кроме интерфейса командной строки в последней версии есть интерфейс для визуального задания ключей этой утилиты.
В данном выпуске рассылки вы можете погрузиться в мир 1С++, что является реализацией полноценного объектно-ориентированного программирования на платформе 7.7. А также есть возможность расширения функциональности конфигуратора с помощью плагинов, о чем можно узнать из проекта "Открытый конфигуратор".
-
раздела. (Updated 13.04.2004) в групповую разработку. , предшественники и идейные вдохновители. (Updated 11.03.2004) --> . Краткий обзор. . Что нового? (Updated 13.04.2004) раздела. (Updated 15.03.2004) ->> в заключение. (Updated 11.03.2004) -->
1C++, Объектно-ориентированное программирование, XP - экстремальное программирование
*.cf - файл содержит только конфигурацию(код и структура) без пользовательских данных. Создаётся из конфигуратора 1С 8.х: «Конфигурация -> Сохранить конфигурацию в файл» или «Конфигурация -> Поставка конфигурации -> Создать файл поставки и обновление конфигурации -> признак «Создать файл поставки»».
*.cfu - файл содержит только обновление конфигурации. Например файл 1cv8.cfu. Создать конфигурацию из этого файла невозможно, так как он содержит в себе только отличия новой конфигурации от предыдущей. Создаётся из конфигуратора 1С 8.х: «Конфигурация -> Поставка конфигурации -> Создать файл поставки и обновление конфигурации -> признак «Создать файл обновления конфигурации»».
*.cfe - файл-расширение, предназначенный для доработки конфигурации без её изменения. При использовании расширений 1С (*.cfe) - доработанная конфигурация может полноценно обновляться и с поддержки не снимается.
*.dt - файл содержит конфигурацию вместе с пользовательской базой данных. Это специализированный формат архива 1С 8. Создаётся из конфигуратора 1С 8.х: «Администрирование -> Выгрузить информационную базу».
*.epf (*.erf) – файл внешней обработки (отчёта). Любую обработку (отчёт) из конфигурации можно сохранить внешней. Создаётся из конфигуратора 1С 8.х: «Конфигурация -> Открыть конфигурацию -> становимся на нужную обработку (отчёт) -> выделяем правой кнопкой мыши -> Сохранить как внешнюю обработку, отчёт…».
*.1cd – файл полноценной базы данных. Представление имени по умолчанию: 1Cv8.1CD. Включает в себя конфигурацию, базу данных, пользовательские настройки. Открывается платформой 1С 8.x. Создаётся для разработки новой конфигурации автоматически по кнопке «Добавить» при выборе пункта «Создание новой информационной базы».
*.log, *.lgf, *.lgp, *.elf - лог файлы, которые собирают информацию (регистрируют данные) в 1С 8.0 8.1, 8.2, 8.3. Например, файл 1Cv8.lgf (в каталоге 1Cv8Log ) содержит информацию журнала регистрации.
*. cdn - файл с таким расширением ( 1Cv8.cdn) служит для ручной или автоматической блокировки базы данных 1С Предприятия восьмой версии .
*.mxl - файлы печатных форм используются, в том числе и в 1С. Являются как печатными формами документов, справочников, отчётов, так и различными накопителями данных для различных классификаторов. Открывается через Конфигуратор или в режиме 1С:Предприятии через «файл -> открыть». Создаётся точно так же: в режиме Конфигуратор или в 1С:Предприятии через «файл -> новый». Так же файлы с такими расширениями могут служить правилами переноса, например, из 1С 7.7 в 8.2 ( acc77_82.xml и вспомогательная обработка exp77_82.ert) - находятся они обычно в папке ExtForms.
*.efd - это архивный файл 1С, используется для установки конфигурации. Содержит или конфигурацию 1с или обновление к ней. Запускается с помощью вспомогательного исполняющего файла setup.exe (должен находиться в одной папке).
*.mft – вспомогательный файл для создания конфигурации из шаблона. Содержит информацию о конфигурации, описание, пути, название. Используется непосредственно самой платформой при создании информационной базы 1С из шаблона.
*.grs - файлы графических схем в специализированном формате 1С. Открывается через Конфигуратор или в режиме 1С:Предприятии через «файл -> открыть». Создаётся точно так же: в режиме Конфигуратор или в 1С:Предприятии через «файл -> новый».
*.geo - файлы географических схем в специализированном формате 1С. Открывается через Конфигуратор или в режиме 1С:Предприятии через «файл -> открыть». Создаётся точно так же: в режиме Конфигуратор или в 1С:Предприятии через «файл -> новый».
*.st - файлы шаблонов текстов. Используются в основном 1С разработчиками.
*.pff - файл с сохраненными замерами производительности. Используются системными администраторами и специалистами 1С.
*.pfl - файл содержащий различные параметры для старта и работы с 1С:
. 1Cv8.pfl - параметры для компьютера/информационной базы/пользователя (в т.ч. пароли пользователей, настройки текстового редактора, настройки глобального поиска по текстам конфигурации, список переменных для быстрого просмотра в отладчике ). Настройки модулей в конфигураторе хранятся в файле 1Cv8.pfl . Этот файл обычно находится в каталоге настроек пользователя C:\Users\<ИмяПользователя>\AppData\Roaming\1C\1cv8.
Читайте также: