Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Синхронизация плана счетов (число прочтений - 3953 )
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Синхронизация плана счетов
28. Сентября 2006 :: 03:43
Печать  
Как можно синхронизировать 2 плана счетов м/у двумя конфигурациями?
Я имею ввиду, такие поля как ID и тп.
пробовал топорный метод: удалить все из одной из 1SACCS, и в ставка туда из др.1SACCS. Открываю 1С, план счетов - нет ни одного счета. Хотя на самом деле записи в таблице 1SACCS есть.
  
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Синхронизация плана счетов
Ответ #1 - 28. Сентября 2006 :: 04:17
Печать  
1) попробуй перестрой индексы
2) в таблице 1suidctl нужно тоже установить значение max ID для плана счетов, как и в исходной базе
3) может еще чего...  Улыбка
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Синхронизация плана счетов
Ответ #2 - 28. Сентября 2006 :: 18:11
Печать  
Советую заглянуть в 1цв7.дд по поводу 1SACCS.DBF, ты будешь неприятно удивлен:
1) в твоей БД все проводки используют ссылки на счета по ключу из колонки ID этой ДБФ-ки
кроме того
2) конфигурация (MD-шник) ссылается на эти счета по ключу в колонке MDID (то есть для счетов заведенных в конфе - если ты меняешь их настройки - Конфигуратор ищет их в ДБФ по этому ключу) (после удаления 1saccs, он будет восстановлен из МД, однако про содержимое колонки ID не скажу)
3) колонка PLANID тоже содержит ключик - план счетов.

Для близкородственных конф п.3 вряд ли актуален, ПС обычно один.
А п.1 и 2 - тебе сначала нужно как-то задать соответствие
БД1.idX <--> БД2.idY
А потом либо эту таблицу использовать, либо сделать глобальную замену в одной из БД по ВСЕМ таблицам, где этот ИД используется.
Про MD не знаю (знает ли он ID или ему ведом лишь MDID).
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Синхронизация плана счетов
Ответ #3 - 29. Сентября 2006 :: 00:11
Печать  
спасибо ответимшим.
2 dnp:
1.пункт первый меня в принцыпе не волнует, т.к. синхронизировать табл. мне нужно с пустой ещё пока бозой, т.е. проводок пока нет.
2. по втрому пункту: может быть тогда удалить все счета в конфигураторе, а потом заполнить табл. Инсертом?
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Синхронизация плана счетов
Ответ #4 - 29. Сентября 2006 :: 01:06
Печать  
все оказалось давольно просто:
Код
Выбрать все
	ЗапросУ="
	|DELETE
	|FROM 1SACCS
	|";  

	Стр=ЗначениеВСтрокуВнутр(ПланыСчетов.Основной);
	Поз=Найти(Стр," ");
	КодПлана=Прав(_IdToStr(Число(СокрЛП(Сред(Стр,Поз,10)))),4);
	ЗапросИ="
	|INSERT INTO 1SACCS
	|SELECT
	|	ACTIVE,VERSTAMP
	|FROM "+ПутьБД+"1SACCS
	|";

	клКоманда.Выполнитьинструкцию(ЗапросУ);
	клКоманда.Выполнитьинструкцию(ЗапросИ);
 

  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Синхронизация плана счетов
Ответ #5 - 29. Сентября 2006 :: 10:39
Печать  
А ТИИ после этого проходит? Или у тебя все счета созданы в режиме предприятия (MDID = 0)?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Синхронизация плана счетов
Ответ #6 - 09. Октября 2006 :: 05:29
Печать  
ТИИ не проходила... но можно так:
Код
Выбрать все
Функция клСинхронизироватьПланСчетов() Экспорт

	ПутьБД=ПутьКБД();
	Если ПутьБД="" тогда
		Предупреждение("Не заполнена константа 'Путь к базе бухгалтерии'");
		Возврат 0;
	КонецЕсли;
	//*
	ИмяФ = 0;
	Для Сч=1 По 100 Цикл
		ВремИмяФ = КаталогИБ()+"tmp"+Строка(Сч)+".dbf";
		Если ФС.СуществуетФайл(ВремИмяФ)=0 Тогда
			ИмяФ = "tmp"+Строка(Сч);
			Прервать;
		КонецЕсли;
	КонецЦикла;
	Если ИмяФ=0 Тогда
		Предупреждение("Не удалось получить имя тмп-файла!");
		Возврат 0;
	КонецЕсли;
	//*
	Попытка
		МетаИнфоОЛЕ=клОЛЕ.CreateObject("MetaDataWork");
	Исключение                                        
		Если клОЛЕ.ExecuteBatch("ЗагрузитьВнешнююКомпоненту("""+КаталогИБ()+"1CPP.DLL"")")=0 Тогда
			Возврат 0;
		КонецЕсли;
		МетаИнфоОЛЕ=клОЛЕ.CreateObject("MetaDataWork");
	КонецПопытки;
	//*
	//*************************
	Запрос="
	|SELECT
	|	PLANID,SCHKOD,MDID
	|FROM 1SACCS
	|INTO TABLE "+ИмяФ+"
	|";
	клКоманда.Выполнитьинструкцию(Запрос);
	//*************************
	Запрос="
	|DELETE FROM 1SACCS
	|";
	клКоманда.Выполнитьинструкцию(Запрос);
	//*************************

	MDID="IIF(ISNULL(СвСчт.MDID), '   0', СвСчт.MDID)";
	//
	МатаДатаОЛЕ=клОЛЕ.Metadata;
	Для счПлан=1 по МатаДатаОЛЕ.ПланСчетов() цикл

		ИдПлана=МатаДатаОЛЕ.ПланСчетов(счПлан).Идентификатор;

		Попытка
			PLANID=Right(_IdToStr(МетаИнфо.ИДОбъекта(Metadata.ПланСчетов(ИдПлана))),4);
		Исключение
			Сообщить("План счетов бухгалтерии "+ИдПлана+" не создан в текущей БД!","!");
			Продолжить;
		КонецПопытки;

		лана))),4);


		Запрос="
		|INSERT INTO 1SACCS
		|SELECT
		|	ACCSOLE.ID,
		|	'"+PLANID+"',
		|	ACCSOLE.SCHKOD,
		|	ACCSOLE.SCHIM,
		|	ACCSOLE.SCHV,
		|	ACCSOLE.SCHKOL,
		|	ACCSOLE.SCHSINGLE,
		|	ACCSOLE.ISFOLDER,
		|	ACCSOLE.ISMARK,
		|	ACCSOLE.LEVEL,
		|	"+MDID+",
		|	ACCSOLE.ACTIVE,
		|	ACCSOLE.VERSTAMP
		|FROM
		|	"+ПутьБД+"1SACCS ACCSOLE
		|LEFT JOIN
		|	"+ИмяФ+" СвСчт ON ACCSOLE.SCHKOD=СвСчт.SCHKOD
		|				  AND СвСчт.PLANID='"+PLANID+"'
		|				  AND ACCSOLE.PLANID='"+PLANID_OLE+"'
		|";
		//
		клКоманда.Выполнитьинструкцию(Запрос);
	КонецЦикла;

	вОЗВРАТ 1;
КонецФункции
 

  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать