Как из обычной базы сделать распределенную (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

См. также

SALE! 10%

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0. Переносятся остатки, документы и справочники

Файловый обмен (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 | Предоставляем техподдержку | Обновляем на новые релизы 1С | Перенос из 7.7 является сложным, и на рынке сложно найти специалистов 1С по "семерке" - наши сотрудники помогут вам выполнить переход в рамках техподдержки предлагаемого переноса данных!

50722 45650 руб.

26.05.2020    33919    10    67    

16

Конфигурация "Информационный киоск". Обработки выгрузки товаров для ТиС 9.2, УТ 10.3, УТ 11 (обмен данными с любой конфигурацией 1С 7.7, 8.х)

Оптовая торговля Розничная торговля Обмен между базами 1C Сканер штрих-кода Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Управленческий учет Платные (руб)

Конфигурация предназначена для организации offline доступа клиента (покупателя) к информации о товарах, услугах или дисконтных картах посредством сканирования штрих-кода. Основная цель – мгновенно предоставить наиболее актуальную информацию о цене, остатках, наименовании товара (услуги) или накоплениях, держателе, состоянии дисконтной карты.

1800 руб.

21.12.2014    59242    8    21    

20

Выгрузка данных из 1С 7.7. в формате EnterpriseData 1.6 (универсальный формат обмена) в конфигурации 8.3

Обмен между базами 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    22701    59    39    

35

Выгрузка из 1С ТиС 9.2 в 1С БП 3.0 с дополнительными фильтрами по Фирме, Складу, Контрагенту, Проекту, Автору и Юрлицу

Файловый обмен (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    8370    52    Kuzya_brаtsk    8    

11

Переход с 1С:Комплексной 7.7 на 1С:УТ 10.3

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

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

8400 руб.

17.03.2021    15535    5    13    

6

Обмен данными ЗУП 3.1 - Бухгалтерия 7.7

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

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

18000 руб.

29.09.2020    13584    2    0    

5

Конвертация данных из 1С 8.3 в 7.7 (версия КД 2.1). Перенос данных из 8.3 в 7.7. Создание в современной 1С 8.3 XML в формате КД2. Инструкции и примеры переноса данных из любой современной 1С 8.3 в устаревшую конфигурацию 1С 7.7, через Конвертацию данных 2

Обмен между базами 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    14030    ksnik    0    

15

Загрузка адресов произвольного формата (КЛАДР и нестандартных "грязных" адресов) в ФИАС современных конфигураций из 1С 7.7

Загрузка и выгрузка в 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    19263    17    ksnik    12    

8
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Вадимко 214 08.04.08 00:49 Сейчас в теме
Ни одного камента...
Тут интересом пользуются только медленно работающие желто-зеленые отчеты с большими кнопачкаме?
flex2002; +1 Ответить
2. Valet 56 08.04.08 21:48 Сейчас в теме
Задача специфическая просто. Я только пару раз так извращался и то вручную, благо при изменении базы на распределенную и создании из неё периферийной менять приходится по одной записи. А так материал полезный, особенно для тех кому надо вчера и разбираться в структуре табличек некогда или ломает.
3. Вадимко 214 09.04.08 03:14 Сейчас в теме
Трабла была специфическая, надо было ЭТО сделать имея только эл. почту и человека с удаленным доступом :)
4. Shaman100M 1150 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 1150 10.04.08 18:31 Сейчас в теме
+ (4) При восстановлении из копии другой периферийной базы, все изменения в ней сделанные должны быть предварительно выгружены в центральную.
6. Вадимко 214 10.04.08 21:16 Сейчас в теме
Зачем делать выгрузку?
В том то и прелесть что не нужно!

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

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