Имя: Пароль:
1C
1C 7.7
v7: Как восстановить периферийную базу
0 sergapt
 
29.10.12
08:21
Она сломалась, есть ее копия месячной давности и центральная база.
1 lesstat
 
29.10.12
08:23
ну создай новую периферию из центральной
2 Скользящий
 
29.10.12
08:25
Если миграция полная проще новую создать. Если нет, то все равно создать новую из сломанной перенести те документы которые не мигрируют
3 ЧеловекДуши
 
29.10.12
08:25
А как у вас настроены правила обмена?
4 sergapt
 
29.10.12
08:33
3) Правила настроены вручную, не все документы есть в периферийной, в центральной есть все.
5 Скользящий
 
29.10.12
08:41
Если в центральной все, значит новую создавай тогда.
6 sergapt
 
29.10.12
08:52
буду пытаться.
1. удалю в ЦБ в конф-ре ПБ, и создам с таким же префиксом заново
2. Выгружу.
3. Загружу в ПБ.
Правильно?

4. Посмотрю что вышло, пото если что еще вас побеспокою
7 Mikeware
 
29.10.12
08:54
Склонируй, и удали ненужное. быстрее будет
8 cw014
 
29.10.12
08:55
Дааа, помница мы с помощью таблиц УРБД, 1с++ кувалды и чьей-то матери сделали миграцию двухстороннюю 7.7->8.1
9 Скользящий
 
29.10.12
09:22
(6) С таким же нельзя. Но мне говорили как то, что правкой таблиц можно добиться того, что база будет считать себя невыгруженной и получить первичную выгрузку уже существующей базы заново... Но тебе рекомендую просто создать первичную базу с новым кодом.
10 Mikeware
 
29.10.12
09:29
(9) для генерации новой базы - как раз можно.
а в его случае - даже нужно.
11 Dolly_EV
 
30.10.12
07:44
(0) Если предполагается с поломанной потом чего-то доносить в восстановленную из Центральной, то лучше не перевыгружать а в 1DBSET на нужной периферийке поставить "N" - выгрузится с тем же ИД
(8)  cw014, можно по-подробнее? осталось чего-нить может? у меня примерно таже задача щас маячит на горизонте: Подружить самописную 7.7 и БП 8.2 на предмет постоянного корректного обмена туда-сюда
12 razlagator
 
30.10.12
07:51
(9) делал так пару месяцев назад, настучался я в бубен тогда...
13 Dolly_EV
 
30.10.12
08:16
(0)
1. Копия ЦБ (это наша будущая ПБ)

2.1 Если от побитой ПБ остался целый 1SDBSET - копируем его в "Копию ЦБ" - всё - это новая ПБ

2.2 Если не остался - открываем любым редактором дбф 1SDBSET,
удаляем все строки кроме ЦБ и нашей ПБ. В поле DBSTATUS в строке с ЦБ вместо "M" ставим "P", в строке с ПБ вместо "С" ставим "M" (все буквы - латинские)
Про структуру файлов УРБД смотреть, например здесь: http://oksla.narod.ru/urib.htm

3. остается удалить из нее "лишние" доки, которые по правилам миграции не должны попадать в нее
14 Mikeware
 
30.10.12
08:42
(11)
Примерно так:
//******************************************************************************
Процедура ИнициализацияСоответствийОбъектов() Экспорт
рс=СоздатьОбъект("ODBCRecordset");
           текстУдаленияТаблицыСоответствий="
           |
           |IF EXISTS(SELECT name FROM sysobjects WHERE name = 'СоответствияОбъектов' AND xtype='U')
           |
           |DROP TABLE [СоответствияОбъектов]
           |";
           рс.ВыполнитьСкалярный(текстУдаленияТаблицыСоответствий);
               
           текстСозданияТаблицыСоответствий="
           |
           |IF NOT EXISTS(SELECT name FROM sysobjects WHERE name = 'СоответствияОбъектов' AND xtype='U')
           |
           |CREATE TABLE [СоответствияОбъектов] (
           |    [ROW_ID] [int] IDENTITY (1, 1) NOT NULL ,
           |    [ТипОбъекта] [numeric](5, 0) NOT NULL ,
           |    [ТипОбъектаСтр] [char](35) COLLATE Cyrillic_General_CI_AS NOT NULL ,
           |    [ВидОбъектаСтр] [char] (45) COLLATE Cyrillic_General_CI_AS NOT NULL ,
           |    [ИмяТаблицы] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL ,
           |    CONSTRAINT [СоответствияОбъектов_PK] PRIMARY KEY  CLUSTERED
           |    (
           |        [ROW_ID]
           |    )  ON [PRIMARY]
           |) ON [PRIMARY]
           |";
           рс.ВыполнитьСкалярный(текстСозданияТаблицыСоответствий);

           ТекстДобавленияОписания="
           |INSERT INTO СоответствияОбъектов   (СоответствияОбъектов.ТипОбъекта, СоответствияОбъектов.ТипОбъектаСтр,СоответствияОбъектов.ВидОбъектаСтр,СоответствияОбъектов.ИмяТаблицы)
           |    VALUES ( :ТипОбъекта,:ТипОбъектаСтр, :ВидОбъектаСтр,' ')
           |";            
           Для сч=1 По Метаданные.Документ() Цикл
               ИдентСтр=Метаданные.Документ(сч).Идентификатор;
               Идент=глMDW.ИДДокумента(сч);
               рс.УстановитьТекстовыйПараметр("ТипОбъекта",Идент);
               рс.УстановитьТекстовыйПараметр("ТипОбъектаСтр","Документ");
               рс.УстановитьТекстовыйПараметр("ВидОбъектаСтр", ИдентСтр);
               рс.ВыполнитьСкалярный(ТекстДобавленияОписания);
           КонецЦикла;
           Для сч=1 По Метаданные.Справочник() Цикл
               ИдентСтр=Метаданные.Справочник(сч).Идентификатор;
               Идент=глMDW.ИДСправочника(сч);
               рс.УстановитьТекстовыйПараметр("ТипОбъекта",Идент);
               рс.УстановитьТекстовыйПараметр("ТипОбъектаСтр","Справочник");
               рс.УстановитьТекстовыйПараметр("ВидОбъектаСтр", ИдентСтр);
               рс.ВыполнитьСкалярный(ТекстДобавленияОписания);
           КонецЦикла;
КонецПроцедуры
//******************************************************************************
       
Функция ВернутьИзмененныеДокументы(ИдБазы="1C8",ТипОбъектаСтр="",ВидОбъектаСтр="",ИдОбмена="") Экспорт
рс=СоздатьОбъект("ODBCRecordset");
   ТекстЗапроса="
   |select case when Соответствия.ТипОбъектаСтр='Документ' then 'O1' else 'B1' end + dbo.convert10to36(Соответствия.ТипОбъекта)+ Изменения.objid [Объект $Неопределенный]
   |from _1supdts Изменения (nolock)
   |inner join СоответствияОбъектов Соответствия (nolock) on Изменения.typeid= Соответствия.ТипОбъекта
   |where Изменения.dbsign=:ВыбИдБазы
   |";
   Если ПустаяСтрока(ТипОбъектаСтр)=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |and (Соответствия.ТипОбъектаСтр=:ВыбТипОбъектаСтр)";
   КонецЕсли;
   Если ПустаяСтрока(ВидОбъектаСтр)=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |and (Соответствия.ВидОбъектаСтр=:ВыбВидОбъектаСтр)";
   КонецЕсли;
   Если ИдОбмена<>"" Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |and ((left(Изменения.DwnLdId,6) <= left(:ИдОбмена,6)) and (Изменения.DwnLdId<>''))";
   КонецЕсли;
рс.УстановитьТекстовыйПараметр("ВыбТипОбъектаСтр",ТипОбъектаСтр);    
рс.УстановитьТекстовыйПараметр("ВыбВидОбъектаСтр",ВидОбъектаСтр);
рс.УстановитьТекстовыйПараметр("ВыбИдБазы",ИдБазы);
рс.УстановитьТекстовыйПараметр("ИдОбмена",ИдОбмена);
ТЗОбъектов=рс.ВыполнитьИнструкцию(ТекстЗапроса);
Возврат ТЗОбъектов;
КонецФункции
//******************************************************************************
Функция ВернутьНовыйИдОбмена() Экспорт
   НовыйИд=ЗапросСКЛ.ВыполнитьСкалярный("select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (dwnldid,6)))+1)+'CB ') from _1sdwnlds where direct='O'");
   Возврат НовыйИд;
КонецФункции
//******************************************************************************
Функция ПодготовиитьКВыгрузке(ИдБазы="1C8") Экспорт
   ТекстЗапроса="
   |set nocount on
   |declare @NewId Char(9)
   |declare @DBSign Char(9)
   |Set @DBSign=:ИдБазы
   |set @NewId=(select ltrim(dbo.convert10to36long(max(dbo.convert36to10(left (dwnldid,6)))+1)+'CB ') from _1sdwnlds where direct='O')
   |INSERT INTO [Base].[dbo].[_1SDWNLDS]([DWNLDID], [DBSIGN], [DIRECT], [ACKNOWL])
   |VALUES( @NewId, @DBSign, 'O', ' ')
   |UPDATE [Base].[dbo].[_1SUPDTS]
   |SET [DWNLDID]=@NewId
   |WHERE (DBSign=@DBSign) and (DWNLDID='')
   |--select * from _1supdts where dbsign='1C8'
   |Select @NewId
   |";
   ЗапросСКЛ.УстановитьТекстовыйПараметр("ИдБазы", ИдБазы);
   НовыйИд=ЗапросСКЛ.ВыполнитьСкалярный(ТекстЗапроса);
   Возврат НовыйИд;
КонецФункции
//******************************************************************************
Функция ПодтвердитьОбмен(ИдБазы="1C8", ИдВыгрузки="") Экспорт
   ТекстЗапроса="
   |set nocount on
   |declare @SelId Char(9)
   |declare @DBSign Char(9)
   |Set @DBSign=:ИдБазы
   |set @SelId=:ИдВыгрузки
   |go
   |UPDATE [Base].[dbo].[_1SDWNLDS]([DWNLDID], [DBSIGN], [DIRECT], [ACKNOWL])
   |SET [ACKNOWL]='A'
   |WHERE [DWNLDID]=@SelId and [DBSIGN]=@DBSign
   |go
   |DELETE [Base].[dbo].[_1SUPDTS]
   |WHERE (DBSign=@DBSign)
   |and (left(DWNLDID,6) <= left(@SelId,6))
   |";
   ЗапросСКЛ.УстановитьТекстовыйПараметр("ИдБазы", ИдБазы);
   ЗапросСКЛ.УстановитьТекстовыйПараметр("ИдВыгрузки", ИдВыгрузки);
   ЗапросСКЛ.ВыполнитьСкалярный(ТекстЗапроса);
   Возврат "";
КонецФункции
15 Mikeware
 
30.10.12
08:43
(13) а в 1SSystem код базы кто менять будет? Пушкин?
16 Dolly_EV
 
30.10.12
08:48
(15) дадада! оно какбэ само-собой разумеется)))
17 Dolly_EV
 
30.10.12
08:48
(14) спасибо!
18 Dolly_EV
 
30.10.12
08:54
(11) Mikeware, можно в личку тогда уж и остальное по теме (в каком-нить виде)? а то по вырванному из контекста пинок не достаточно силен для окончательного осмысления :-(
19 Mikeware
 
30.10.12
08:55
(16)разумеется, что Пушкин? :-)
20 Mikeware
 
30.10.12
08:55
(18) а что именно?
21 Mikeware
 
30.10.12
09:00
(18) коррректируешь выгрузку в восьмерку, вместо отбора "по датам" - делаешь выборку документов нужного вида через ВернутьИзмененныеДокументы().
после этого - ПодготовитьКВыгрузке()
ну а при подтвекрждении обмена (если снеговик полностью принял обмен) - ПодтвердитьОбмен() с нужным идом.
22 Надсмотрщик
 
30.10.12
09:03
(0) И что же там "сломалось"?
23 cw014
 
30.10.12
09:05
(11) ТЗ на почту, попробую поискать
24 Dolly_EV
 
30.10.12
09:07
(19) конечно он :-) (бесит, что нельзя здесь свои посты править :-()
(18) - последовательность применения (схема),
- как обрабатывается выгрузка из 7.7 на стороне 8 (принцип , код на 8),
- ...короче разжевать и положить :-)

Из приведенного я понял, что 8-ка по отношению к 77 - "периферийка" (ИдБазы="1C8"), на сервере создается табличка "СоответствияОбъектов", с которой при каждой сессии обмена джойнится 1supdts... короче без более полноценного примера тямы не хватает :-(
25 Dolly_EV
 
30.10.12
09:11
(23) кинул
26 Mikeware
 
30.10.12
09:11
(24) скорее, просто семерка - ведущая база. оперативный учет ведется в ней. все созданные/изменные документы регистрируются урбдшкой, и отбираются для выгрузки именно не по периоду, а по регистрации в 1сапдейтсе.
см(21)
27 Mikeware
 
30.10.12
09:12
Короче, стучиь в аську, есличо®
28 Dolly_EV
 
30.10.12
09:14
(26) угу, это я понял... на 8 чего уходит в итоге? в каком виде? и как обрабатывается на входе 8-кой?... Ок, стукнусь!
29 cw014
 
30.10.12
09:15
(28) Где ТЗ то?
30 cw014
 
30.10.12
09:29
(28) Лови письмо
31 Ёпрст
 
30.10.12
09:30
(11) поставь мод.
32 Ёпрст
 
30.10.12
09:30
единственное, там реализован только односторонний обмен 7--->8

в обратную сторону написать недолго.
33 cw014
 
30.10.12
09:40
(28) поймал?