Как из обычной базы сделать распределенную (SQL)?

29.05.13

Интеграция - Перенос данных 1C

Базу в которой уже работали необходимо сделать периферийной и включить в обмен?
Каким-то странным образом повредились/исчезли служебные таблицы?
Нет возможности сделать выгрузку-загрузку большой базы при создании периферийной РБД?

Эта статья поможет решить данные проблемы!
Приведу просто скрипт с комментариями, который необходимо выполнить в QA

 

use MyFuckingBase 
--
название SQL базы
,
в которой создается РБД

if OBJECT_ID
(
'_1SUPDTS'
)
is not null drop table _1SUPDTS
go
if OBJECT_ID
(
'_1SDBSET'
)
is not null drop table _1SDBSET
go
if OBJECT_ID
(
'_1SDWNLDS'
)
is not null drop table _1SDWNLDS
go

Create table _1SUPDTS 
(
DBSIGN CHAR
( 3 ) NOT
NULL
,
TYPEID INTEGER 
NOT
NULL
,
OBJID CHAR
( 9 ) NOT
NULL
,
DELETED CHAR
( 1 ) NOT
NULL
,
DWNLDID CHAR
( 9 ) NOT
NULL 
)
go
If
not exists 
(
select 
*
from sysindexes where name
=
'PK__1SUPDTS' and id
=
object_id
(
'_1SUPDTS'
))
Alter table _1SUPDTS add constraint PK__1SUPDTS PRIMARY KEY CLUSTERED
(
DBSIGN
,
TYPEID
,
OBJID
)
go
If
not exists 
(
select 
*
from sysindexes where name
=
'DID' and id
=
object_id
(
'_1SUPDTS'
) )
Create UNIQUE index DID  on _1SUPDTS 
(
DWNLDID
,
DBSIGN
,
TYPEID
,
OBJID
)
go

Create table _1SDBSET 
(
DBSIGN CHAR
( 3 ) NOT
NULL
,
DBDESCR CHAR
( 40 ) NOT
NULL
,
DBSTATUS CHAR
( 1 ) NOT
NULL
,
DBUUID CHAR
( 36 ) NOT
NULL
,
DBFMODE TINYINT 
NOT
NULL
,
DBFNCP CHAR
( 64 ) NOT
NULL
,
DBFNPC CHAR
( 64 ) NOT
NULL
,
DBFAUTO TINYINT 
NOT
NULL
,
DBRECPT TINYINT 
NOT
NULL
,
EMAILFLGS TINYINT 
NOT
NULL
,
EMAIL CHAR
( 64 ) NOT
NULL
,
PSW CHAR
( 32 ) NOT
NULL 
)
go
If
not exists 
(
select 
*
from sysindexes where name
=
'PK__1SDBSET' and id
=
object_id
(
'_1SDBSET'
))
Alter table _1SDBSET add constraint PK__1SDBSET PRIMARY KEY CLUSTERED
(
DBSIGN
)
go
If
not exists 
(
select 
*
from sysindexes where name
=
'IDBSTATUS' and id
=
object_id
(
'_1SDBSET'
) )
Create UNIQUE index IDBSTATUS  on _1SDBSET 
(
DBSTATUS
,
DBSIGN
)
go

Create table _1SDWNLDS 
(
DWNLDID CHAR
( 9 ) NOT
NULL
,
DBSIGN CHAR
( 3 ) NOT
NULL
,
DIRECT CHAR
( 1 ) NOT
NULL
,
ACKNOWL CHAR
( 1 ) NOT
NULL 
)
go
If
not exists 
(
select 
*
from sysindexes where name
=
'PK__1SDWNLDS' and id
=
object_id
(
'_1SDWNLDS'
))
Alter table _1SDWNLDS add constraint PK__1SDWNLDS PRIMARY KEY CLUSTERED
(
DWNLDID
)
go
If
not exists 
(
select 
*
from sysindexes where name
=
'IDBSIGN' and id
=
object_id
(
'_1SDWNLDS'
) )
Create UNIQUE index IDBSIGN  on _1SDWNLDS 
(
DBSIGN
,
DWNLDID
)
go

If
exists 
(
select 
*
from sysobjects where id 
=
object_id
(
'_1sp_RegisterUpdate'
)
and sysstat 
& 0
xf 
= 4)
Drop procedure _1sp_RegisterUpdate
go
Create procedure _1sp_RegisterUpdate
(
@p1 CHAR
(3),
@p2 INTEGER
,
@p3 CHAR
(9),
@p4 CHAR
(1))
AS
set nocount on update _1SUPDTS set DELETED
=
@p4
,
DWNLDID
=
'         ' where DBSIGN
=
@p1 and TYPEID
=
@p2 and OBJID
=
@p3 if @@ROWCOUNT
=0
insert into _1SUPDTS values
(
@p1
,
@p2
,
@p3
,
@p4
,
'         '
)
go

If
exists 
(
select 
*
from sysobjects where id 
=
object_id
(
'_1sp__1SDBSET_TLock'
)
and sysstat 
& 0
xf 
= 4)
Drop procedure _1sp__1SDBSET_TLock
go
Create procedure _1sp__1SDBSET_TLock AS
set nocount on declare @i integer select @i
=1
from _1SDBSET
(
TABLOCK HOLDLOCK
)
where 
0=1
go

If
exists 
(
select 
*
from sysobjects where id 
=
object_id
(
'_1sp__1SUPDTS_TLock'
)
and sysstat 
& 0
xf 
= 4)
Drop procedure _1sp__1SUPDTS_TLock
go
Create procedure _1sp__1SUPDTS_TLock AS
set nocount on declare @i integer select @i
=1
from _1SUPDTS
(
TABLOCK HOLDLOCK
)
where 
0=1
go

If
exists 
(
select 
*
from sysobjects where id 
=
object_id
(
'_1sp__1SDWNLDS_TLock'
)
and sysstat 
& 0
xf 
= 4)
Drop procedure _1sp__1SDWNLDS_TLock
go
Create procedure _1sp__1SDWNLDS_TLock AS
set nocount on declare @i integer select @i
=1
from _1SDWNLDS
(
TABLOCK HOLDLOCK
)
where 
0=1
go

--
далее идет пример с данными 
НЕ
ДЛЯ ВАШЕЙ базы
,
в комментариях написано где их взять
--
пример составлен для периф
.
базы со статусом 
"не только получатель"
и автонумерацией пакетов

Update _1SSYSTEM
Set DBSIGN 
=
'П35'					
--
код базы
,
находится в списке баз центра
,
_1SDBSET поле DBSIGN
,
DBSETUUID 
=
'EDB286ED
-4
E93
-49
CD
-9
CF5
-
E5F8D1F6BE21'	
--
уид
,
находится в центральной базе
,
_1SSYSTEM поле DBSETUUID
go

Insert into _1SDBSET values 
(
'П35'
, --
код периф
.
базы
'Магазин № 
35,
Минск
,
ул
.
Ленина
, 10
'
, --
название периф
.
базы
'M'
, --
статус
'A73535C6
-2
D44
-484
C
-
B64F
-048
A4779CB44'
, --
уид периф
.
базы 
(
центральная база
,
_1SDBSET поле DBSETUUID соответсвующей базы
) 3, --
режим
'P358
.
zip'
, --
имя файла обмена 
(
посмотреть в настройках центра или в _1SDBSET
)
'P359
.
zip'
, --
имя файла обмена
0, 0, 0,
''
,
''
)
go

Insert into _1SDBSET values 
(
'ЦБ1'
, --
код центральной базы
'Центральная база'
, --
название центральной базы
'P'
, --
статус
'
0349
D130
-87
F6
-43
F0
-
A94D
-61
E46D176F5D'
, --
уид центральной базы 
(
центральная база
,
_1SDBSET поле DBSETUUID центральной базы
) 0, --
режим
''
,
''
, 0, 0, 0,
''
,
''
)
go

--
в случае если обмены уже производились
,
но данные потеряны
,
выполняем следующее:

Insert into _1SDWNLDS values 
(
'  
1
UBRП35'
, --
открыть в последнем пакете
,
который ушел из периф
.
базы
,
файл 
1
cv77Dld
.
id 
		
--
и взять последнее значение файла 
(
число перед чертой
),
затем перевести  в строку функцией _IdToStr
(), --
в данном случае 
85959
|П35
.
обязательны лидирурующие пробелы
,
общая длина 
9
символов 
(
!
) --
посмотреть можно и в таблице _1SDWNLDS центральной базы 
(
select 
*
from _1SDWNLDS where dbsign 
=
'П35' and direct 
=
'I'
)
'ЦБ1'
, --
код центральной базы
'O'
, --
направление
''
)
go


 



Если данную задачу самостоятельно выполнить не удалось - пишите письма
Комментарии и отзывы приветствуются

Оригинал статьи
http://1c911.by/stati_1s/statya-kak-iz-obychnoy-bazy-sdelat-raspredelennuyu-sql.htm
Изменения и новые публикации смотрите на http://1c911.by/stati-1s.htm

См. также

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Оперативный учет 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

Переносится из типовой конфигурации «Торговля и Склад», реакции 9.2 платформы «1С:Предприятие 7.7» в типовую конфигурацию «Бухгалтерия предприятия», редакции 3.0 платформы «1С: Предприятие 8.3» следующие документы и их операции (с соблюдением всех соответствующих проводок): Поступления товаров и услуг (в т.ч. комиссия), Реализации товаров и услуг (в т.ч. комиссия), ПКО и РКО, выписки банка, счета фактуры (выданные и полученный), Возвраты от покупателей и поставщику, Заявка Покупателя, Инвентаризация и другие (всего 28 видов документов, смотрите описание, приложенное к обработке)

13188 руб.

30.06.2014    65704    108    100    

116

Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обработка позволяет выгружать данные из ТиС 7.7 в конфигурации 8.3 для сдачи отчетности, для переноса данных при переходе на 8.3, для организации обмена внутри компании при использовании разных версий 1С в структурных подразделениях или формирования отгрузочных накладных для клиентов.

6000 руб.

18.05.2020    23876    70    39    

42

Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Оперативный учет 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 Бухгалтерский учет Управленческий учет Абонемент ($m)

Обработка и правила обмена данными для выгрузки документов и всех связанных с ними справочников из 1С7.7 ТиС 9.2 в 1С8.3 БП 3.0 через файл XML. В типовых конфигурациях уже есть такое решение. Это немного доработанные правила и сама обработка выгрузки, добавлена возможность устанавливать отбор по выгружаемым документам по Фирме, Контрагенту, Складу, Проекту, Автору, ЮрЛицу. А также это внешняя обработка, что даёт возможность адаптировать её под нетиповую ТиС. Обработка и правила тестировались на платформах: 1С: Предприятие 7.7 и 1С: Предприятие 8.3.18.1334. На типовых конфигурациях: «Торговля + склад», редакция 9.2 (7.70 1004) и «Бухгалтерия предприятия» редакция 3.0 (3.0.96.30).

1 стартмани

13.08.2021    9408    60    Kuzya_brаtsk    8    

11

Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 1С:Управление торговлей 10 1С:Комплексная 7.7 Россия Управленческий учет Платные (руб)

Начните вести учет в УТ 10.3! Перенесите все свои данные в УТ 10.3 в любом месяце года и продолжите вести учет! Программа перенесёт любое количество баз с документами и остатками в больших количествах. Обработка выгрузки выполнит проверку исходных данных и сформирует отчет о найденных ошибках в справочниках и документах. Партии переносятся с себестоимостью. Штрихкоды номенклатуры загружаются. Цена переносится. Автор консультирует.

8400 руб.

17.03.2021    16086    5    13    

6

Зарплата Перенос данных 1C Программист Бухгалтер Бухгалтерский учет 7.7 Сложные периодические расчеты 1С:Бухгалтерия 7.7 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Как известно, Бухгалтерия 7.7 не имеет штатной возможности для обмена с ЗУП 3.1. Данная разработка пригодится тем, кто перешел с ЗиК 2.3 на ЗУП 3.1, но вынужден по каким-то своим причинам оставаться на Бухгалтерии 7.7.

18000 руб.

29.09.2020    13907    2    0    

5

SALE! 10%

Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Бухгалтерия 7.7 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0 | Продукт является развитием и исправлением ошибок стандартной обработки для выгрузки данных из 1С Бухгалтерии 7.7 в Бухгалтерию 3.0 | Перенос из 7.7 является сложным, и на рынке сложно найти специалистов 1С по "семерке" - сотрудники помогут вам выполнить переход в рамках техподдержки предлагаемого переноса данных!

55778 50200 руб.

26.05.2020    35316    10    74    

16

Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Конвертация данных Бесплатно (free)

При переходе на новую версию 1С в период параллельной эксплуатации может возникнуть необходимость обратной конвертации данных (по правилам КД версии 2.1) из 1С:Предприятие 8.3 в 1С:Предприятие 7.7 для переноса данных из 1С:Предприятие 8.3 в 7.7. Сделать это поможет следующая инструкция по КД2 о том, как создать новую конвертацию из 8.3 в 7.7, сохранить модуль и правила загрузки данных, сделать загрузку данных. КД2.

17.10.2019    15530    ksnik    0    

16

Загрузка и выгрузка в Excel Перенос данных 1C Программист Пользователь Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 1С:ERP Управление предприятием 2 Абонемент ($m)

Описание технологии загрузки любых адресов из 1С 7.7 с разложением по ФИАС в современные конфигурации 1C 8.3 на примере ERP. Предлагаемый способ просто чудо, он гарантирует результат, он очень простой и качественный! Моя обработка является синтаксическим анализатором, который подставляет в строку грязного адреса выражение "Дом №" и "Корпус", благодаря чему грязные адреса 7.7 сами очень хорошо раскладываются по значимым полям ФИАС - заполняется область, город, улица, дом, корпус.. все раскладывается само с помощью встроенного механизма современных конфигураций 1С 8.3, который написали сами сотрудники фирмы 1С!

1 стартмани

16.08.2019    19726    19    ksnik    12    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Вадимко 156 08.04.08 00:49 Сейчас в теме
Ни одного камента...
Тут интересом пользуются только медленно работающие желто-зеленые отчеты с большими кнопачкаме?
flex2002; +1 Ответить
2. Valet 56 08.04.08 21:48 Сейчас в теме
Задача специфическая просто. Я только пару раз так извращался и то вручную, благо при изменении базы на распределенную и создании из неё периферийной менять приходится по одной записи. А так материал полезный, особенно для тех кому надо вчера и разбираться в структуре табличек некогда или ломает.
3. Вадимко 156 09.04.08 03:14 Сейчас в теме
Трабла была специфическая, надо было ЭТО сделать имея только эл. почту и человека с удаленным доступом :)
4. Shaman100M 1151 10.04.08 18:27 Сейчас в теме
Методологию, все-таки можно было изложить кроме самих скриптов, ведь она действительно быстрее реализуется, чем с созданием новой "периферийки" в http://www.infostart.ru/blogs/236/
Причем, восстановить испорченную периферийную базу можно из другой подобной периферийной.
Метод немного отличается от статейного в части синхронизации выгрузок, - сам хотел выложить в качестве статьи, но автор оказался быстрее. :)

1. Делаем копию из центральной/периферийной работоспособной базы.
2. Заменяем файлы/правим таблицы 1sdbset и 1ssystem в соответствии с настройками восстанавливаемой периферийной БД
3. Удаляем файлы/очищаем таблицы 1sdwnlds и 1supdts
4. "Синхронизируем" выгрузку-загрузку данных, для этого:
4.1. При восстановлении из копии центральной БД:
4.1.1. Делаем выгрузку из центральной БД в нашу восстанавливаемую периферийную БД (запись-то по "периферийке" осталась)
4.1.2. Перед загрузкой в нашу "периферийку" немного откорректируем файл 1cv77Chs.dat из поставляемого архива, заменив кусок текста с данными (начинается от строки " {"Constants... и до конца файла) на "блок-пустышку", для оперативного учета:

{"Constants"},
{"References"},
{"Documents"},
{"Deleted References"},
{"Deleted Documents"}}

4.2. При восстановлении из копии другой периферийной БД придется вставить не "пустышку", а текстовый блок с данными обмена для другой периферийной БД, из которой делалась копия. Т.е. из центральной БД в таком случае делаем выгрузку для двух периферийных БД: для оригинала и клона.
4.3. Загружаем архив с модифицированным1cv77Chs.dat в восстановленную периферийную БД.
5. Готово.
5. Shaman100M 1151 10.04.08 18:31 Сейчас в теме
+ (4) При восстановлении из копии другой периферийной базы, все изменения в ней сделанные должны быть предварительно выгружены в центральную.
6. Вадимко 156 10.04.08 21:16 Сейчас в теме
Зачем делать выгрузку?
В том то и прелесть что не нужно!

1. Создаем в центре базу
2. Делаем копию базы (можно скулевскими способами)
3. Выполняем скрипт в копии, подсматривая значения которые появились в центральной

Вот и все
8. Shaman100M 1151 11.04.08 09:45 Сейчас в теме
(6) Ну, она же не первичная, должна быть быстрая и не большая.
7. Вадимко 156 10.04.08 21:18 Сейчас в теме
Думаю что основное время уйдет на копирование mdf :)
Ну и тщательный подсмотр значений...
К тому же объем может быть очень большой и необходимо колдовство... а тут все по-честному
Оставьте свое сообщение