Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как перенести проводки из одной базы в другую? (число прочтений - 8370 )
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Как перенести проводки из одной базы в другую?
03. Декабря 2007 :: 06:36
Печать  
Как перенести проводки из одной базы в другую?

Выполняю такие действия:

Запрос=СоздатьОбъект("ODBCRecordSet");
ИБ=СоздатьОбъект("ODBCDataBase");

СтрокаПодключения = "Driver={SQL Server};Server=server1c;Database=MyBase;Uid=user;Pwd=12345;";

ИБ.ПрисоединитьИБ(КатИБ,Пользователь1С,Пароль1С,СтрокаПодключения);

Запрос.УстБД(ИБ);

ТекстЗапроса="
      |SELECT
      |     Проводки.ACCDTID [Дебет $Счет.Основной]
      |    ,Проводки.DTSC0 [СубконтоДт1 $Субконто]
      |    ,Проводки.VDTSC0 AS СубконтоДт1_вид
      |    ,Проводки.ACCKTID [Кредит $Счет.Основной]
      |    ,Проводки.KTSC0 [СубконтоКт1 $Субконто]
      |    ,Проводки.VKTSC0 AS СубконтоКт1_вид
      |    ,Проводки.AMOUNT AS Количество
      |    ,Проводки.SUM_ AS Сумма
      |FROM
      |    _1SENTRY AS Проводки
      |WHERE
      |              (Проводки.ACTIVE = ' ')
      |    AND ((Проводки.PROVKIND = ' ') OR (Проводки.CORNO > 0))
      |    AND (Проводки.DATE_TIME_DOCID Between :НачДата AND :КонДата~)";

Запрос.УстановитьТекстовыйПараметр("НачДата",Дата1);
Запрос.УстановитьТекстовыйПараметр("КонДата",Дата2);

ТЗ=Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();

В ТЗ получаю у всех субконто <Объект не найден...>.

Понятно, что не совпадают ID в базах. Но как выполнить синхронизацию хотябы по коду? Ситуация осложняется еще и наличием в субконто не только справочников, но перечислений.

Заранее спасибо.


  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #1 - 03. Декабря 2007 :: 06:43
Печать  
У тебя это разовый перенос, или будешь постоянно делать?
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #2 - 03. Декабря 2007 :: 06:49
Печать  
Nick писал(а) 03. Декабря 2007 :: 06:43:
У тебя это разовый перенос, или будешь постоянно делать?


Постоянно, что-то вроде робота, который ежемесячно будет собирать проводки из разных баз.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #3 - 03. Декабря 2007 :: 06:57
Печать  
Тогда начинай с начала, т.е.  с синхронизации справочников которые будут использоваться и заданий соответствий перечислений.
у тебя базы на одном сервере или на разных?
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #4 - 03. Декабря 2007 :: 07:00
Печать  
Nick писал(а) 03. Декабря 2007 :: 06:57:
Тогда начинай с начала, т.е.  с синхронизации справочников которые будут использоваться и заданий соответствий перечислений.
у тебя базы на одном сервере или на разных?


Базы (точнее их копии) сложены все в одном месте. Вообще они все УРИБовские, т.е. планы счетов и перечисления имеют одинаковые ID за исключением элементов справочников.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #5 - 03. Декабря 2007 :: 07:08
Печать  
bobank писал(а) 03. Декабря 2007 :: 07:00:
Nick писал(а) 03. Декабря 2007 :: 06:57:
Тогда начинай с начала, т.е.  с синхронизации справочников которые будут использоваться и заданий соответствий перечислений.
у тебя базы на одном сервере или на разных?


Базы (точнее их копии) сложены все в одном месте. Вообще они все УРИБовские, т.е. планы счетов и перечисления имеют одинаковые ID за исключением элементов справочников.


Т.е. справочники синхронизируются УРБД?
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #6 - 03. Декабря 2007 :: 07:10
Печать  
Нет
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #7 - 03. Декабря 2007 :: 07:16
Печать  
bobank писал(а) 03. Декабря 2007 :: 07:10:
Нет


Значит для начала сделай механизм синхронизации общих справочников
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #8 - 03. Декабря 2007 :: 07:36
Печать  
Т.е. типизация не позволяет представлять не только как ссылку на объект, а скажем код или наименование справочника ? Что-то вроде:

...
Проводки.DTSC0 [СубконтоДт1 $Субконто.Код]
Проводки.VDTSC0 AS СубконтоДт1_вид
...

  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #9 - 03. Декабря 2007 :: 07:43
Печать  
bobank писал(а) 03. Декабря 2007 :: 07:36:
Т.е. типизация не позволяет представлять не только как ссылку на объект, а скажем код или наименование справочника ? Что-то вроде:

...
Проводки.DTSC0 [СубконтоДт1 $Субконто.Код]
Проводки.VDTSC0 AS СубконтоДт1_вид
...



Нет, тебе нужно для этого связаться с табличкой справочника в котором хранится это субконто
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #10 - 03. Декабря 2007 :: 07:51
Печать  
Nick писал(а) 03. Декабря 2007 :: 07:43:
bobank писал(а) 03. Декабря 2007 :: 07:36:
Т.е. типизация не позволяет представлять не только как ссылку на объект, а скажем код или наименование справочника ? Что-то вроде:

...
Проводки.DTSC0 [СубконтоДт1 $Субконто.Код]
Проводки.VDTSC0 AS СубконтоДт1_вид
...



Нет, тебе нужно для этого связаться с табличкой справочника в котором хранится это субконто


Это понятно, но как мне узнать имя таблички справочника, если оно прописано у вида субконто, которое хранится в МД-шнике, а не в SQL-базе. Т.е. в запрос я вписать его не смогу. По-этому я и предпологал, что процесс типизации может предоставить любой реквизит, ведь ссылку на элемент справочника он дает, значит имя таблички справочника ему известно.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #11 - 03. Декабря 2007 :: 08:02
Печать  
Ну в 1с ты можешь узнать тип субконто, а там читай про "Получение имен таблиц" в справке по 1с++
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #12 - 03. Декабря 2007 :: 08:07
Печать  
А инсертом слабо?  Подмигивание
В общем сделай таблицу соответсвий для перечислений двух баз наверное
А справочники - левое соединение по коду

Код
Выбрать все
		|SELECT DISTINCT CAST(LEFT((ЖурналРозн.Date_Time_IDDoc),8) as DateTime) ДатаДок
		|     , МестаХраненияСпрРозн.ID МестоХранения
		|     , АдресДоставкиСпр.ID [АдресДоставки $Справочник.АдресаДоставки]
		|FROM " + БазаРозн + ".dbo._1SJOURN AS ЖурналРозн WITH (NOLOCK)
		|LEFT OUTER JOIN " + БазаРозн + ".dbo.SC10237 AS МестаХраненияСпрРозн WITH (NOLOCK) ON МестаХраненияСпрРозн.ID = ЖурналРозн.SP10479
		|LEFT OUTER JOIN $Справочник.АдресаДоставки AS АдресДоставкиСпр WITH (NOLOCK) ON $АдресДоставкиСпр.КодУпр = МестаХраненияСпрРозн.CODE

 

  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #13 - 03. Декабря 2007 :: 08:10
Печать  
Цитата:
А инсертом слабо?  Подмигивание
В общем сделай таблицу соответсвий для перечислений двух баз наверное
А справочники - левое соединение по коду

Код
Выбрать все
		|SELECT DISTINCT CAST(LEFT((ЖурналРозн.Date_Time_IDDoc),8) as DateTime) ДатаДок
		|     , МестаХраненияСпрРозн.ID МестоХранения
		|     , АдресДоставкиСпр.ID [АдресДоставки $Справочник.АдресаДоставки]
		|FROM " + БазаРозн + ".dbo._1SJOURN AS ЖурналРозн WITH (NOLOCK)
		|LEFT OUTER JOIN " + БазаРозн + ".dbo.SC10237 AS МестаХраненияСпрРозн WITH (NOLOCK) ON МестаХраненияСпрРозн.ID = ЖурналРозн.SP10479
		|LEFT OUTER JOIN $Справочник.АдресаДоставки AS АдресДоставкиСпр WITH (NOLOCK) ON $АдресДоставкиСпр.КодУпр = МестаХраненияСпрРозн.CODE

 



А где сказано что код одинаковый?
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #14 - 03. Декабря 2007 :: 08:13
Печать  
1. Да, коды совпадают.

2. Т.е., у меня ~150 справочников в системе и все их прописывать в левое соединение?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #15 - 03. Декабря 2007 :: 08:15
Печать  
bobank писал(а) 03. Декабря 2007 :: 08:13:
Т.е., у меня ~150 справочников в системе и все их прописывать в левое соединение?


Что все 150 используются в проводках?  Ужас
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #16 - 03. Декабря 2007 :: 08:18
Печать  
2(Nick) А где сказано что код одинаковый?
См. сабж "Но как выполнить синхронизацию хотябы по коду?"
2(bobank) Может тогда воспользоваться типовыми вещами от 1С с диска ИТС (через текст, Конвертация данных) или типа "Универсала 2.6"?
У меня есть приблуда, но она недоделана Печаль
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #17 - 03. Декабря 2007 :: 08:18
Печать  
Глубоко не анализировал, но половина точно.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #18 - 03. Декабря 2007 :: 08:20
Печать  
bobank писал(а) 03. Декабря 2007 :: 08:18:
Глубоко не анализировал, но половина точно.


В таком случае ищи готовое решение, потому как создать своё с такими возможностями очень не простая задача. И стоимость будет больше
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #19 - 03. Декабря 2007 :: 09:23
Печать  
На ум пришло довольно тривиальное решение, может кому пригодится:

Объект1С=СоздатьОбъект("V77.Application");
РезультатПодключения=Объект1С.Initialize(Объект1С.RMTrade
                                                             ," /d"+КатИБ
                                                            +" /n"+Пользователь1С
                                                            +" /p"+Пароль1С
                                                                      ,"NO_SPLASH_SHOW");
Если РезультатПодключения = 0 Тогда
   Предупреждение("Не удалось подключится к базе.");
   Возврат;
КонецЕсли;

ТекстЗапроса="
      |SELECT
      |     Проводки.ACCDTID [Дебет $Счет.Основной]
      |    ,Проводки.DTSC0 [СубконтоДт1 $Субконто]
      |    ,Проводки.VDTSC0 AS СубконтоДт1_вид
      |    ,Проводки.ACCKTID [Кредит $Счет.Основной]
      |    ,Проводки.KTSC0 [СубконтоКт1 $Субконто]
      |    ,Проводки.VKTSC0 AS СубконтоКт1_вид
      |    ,Проводки.AMOUNT AS Количество
      |    ,Проводки.SUM_ AS Сумма
      |FROM
      |    _1SENTRY AS Проводки
      |WHERE
      |              (Проводки.ACTIVE = ' ')
      |    AND ((Проводки.PROVKIND = ' ') OR (Проводки.CORNO > 0))
      |    AND (Проводки.DATE_TIME_DOCID Between :НачДата AND :КонДата~)";

           


//использую первые попавшиеся глобальные переменные в открытой базе
// глРасшифровка и глТаблица

Объект1С.глРасшифровка=Объект1С.CreateObject("ODBCRecordSet");

Объект1С.глРасшифровка.УстановитьТекстовыйПараметр("НачДата",Дата1);
Объект1С.глРасшифровка.УстановитьТекстовыйПараметр("КонДата",Дата2);

Объект1С.глТаблица=Объект1С.глРасшифровка.ВыполнитьИнструкцию(ТекстЗапроса);

Ну а дальше, как говорится, получай хоть код, хоть наименование.

Всем спасибо за внимание.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #20 - 03. Декабря 2007 :: 09:36
Печать  
Тогда зачем тебе прямые запросы? Делай всё через OLE
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #21 - 03. Декабря 2007 :: 09:44
Печать  
Nick писал(а) 03. Декабря 2007 :: 09:36:
Тогда зачем тебе прямые запросы? Делай всё через OLE


А ты когда нибудь пробовал выбрать 130000!!! с различными условиями и с развернутыми оборотами по указанным субконо, а не по всем, стандартными средствами 1С? Попробуй, уходит на это примерно 2-2,5 часа, а 1С++ - секунд 20-30. Есть разница?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #22 - 03. Декабря 2007 :: 09:56
Печать  
bobank писал(а) 03. Декабря 2007 :: 09:44:
Nick писал(а) 03. Декабря 2007 :: 09:36:
Тогда зачем тебе прямые запросы? Делай всё через OLE


А ты когда нибудь пробовал выбрать 130000!!! с различными условиями и с развернутыми оборотами по указанным субконо, а не по всем, стандартными средствами 1С? Попробуй, уходит на это примерно 2-2,5 часа, а 1С++ - секунд 20-30. Есть разница?


Т.е. выборку ты делаешь прямым запросом а синхронизацию через OLE.
  
Наверх
ICQ  
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #23 - 03. Декабря 2007 :: 10:00
Печать  
ДА.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как перенести проводки из одной базы в другую?
Ответ #24 - 03. Декабря 2007 :: 12:24
Печать  
Панятна... т.е. тут 2 часа терять категорически не согласен... а с последующими часами готов мириться... Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
bobank
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Зарегистрирован: 03. Октября 2007
Re: Как перенести проводки из одной базы в другую?
Ответ #25 - 03. Декабря 2007 :: 12:30
Печать  
Цитата:
Панятна... т.е. тут 2 часа терять категорически не согласен... а с последующими часами готов мириться... Улыбка


Если имеешь ввиду последующую загрузку выбранных проводок, то да.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать