Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Свертка файловой ПУБ с использованием 1sqlite (число прочтений - 11506 )
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Свертка файловой ПУБ с использованием 1sqlite
27. Декабря 2011 :: 09:04
Печать  
Приступаю к свертке конфы на основе ПУБ.
С регистрами все просто. Итоги запросом + Ввод остатков.
А как поступать с бухгалтерскими итогами и расчетом?
Чем получить итоги на момент свертки и чем их ввести в качестве начальных остатков?

Мне кажется, что быстрее всего свертку сделать переносом данных в пустую базу. Сначала вводятся остатки на момент свертки, а затем скопировать доки за тот период, который не сворачивается, создавая их в календарном порядке с одновременным проведением, что позволит избежать удаления и перепроведения. Я прав?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #1 - 27. Декабря 2011 :: 10:22
Печать  
а 1sqlite к этому какое отношение имеет ?
Улыбка
разве что итоги поиметь не на дату ТА..

А так, ввел ручные операции - в них загнал сальдо и привет.
Как режется расчет - хз, никогда не интересовался.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #2 - 27. Декабря 2011 :: 10:23
Печать  
а ты уверен, что у тебя не было критичных изменений в логике проведения документов?

Если доки переносить - то переносить прямо вместе с движениями.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #3 - 27. Декабря 2011 :: 10:27
Печать  
могу дать струмент для переноса..создание клона объекта в сторонней базе для файлового варианта
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #4 - 28. Декабря 2011 :: 01:19
Печать  
Satans Claws писал(а) 27. Декабря 2011 :: 10:23:
а ты уверен, что у тебя не было критичных изменений в логике проведения документов?
Если доки переносить - то переносить прямо вместе с движениями.
Точно знаю, что были, однако перепроведение документов после момента свертки уже проверялось. Вывод: все проблемы остались до момента свертки.
Однако, возможна накладка, т.к. есть доки, где движения зависят от структуры документов, которая перенесена полностью не будет. Отсюда вопрос: как перенести и движения документа? Пока в голову приходит только создание универсального документа, который способен делать любые движения. Есть путь проще?
Eprst писал(а) 27. Декабря 2011 :: 10:22:
а 1sqlite к этому какое отношение имеет ?
Улыбка
разве что итоги поиметь не на дату ТА..
Вот в этом и вопрос: как получить ВСЕ итоги запросом?
Eprst писал(а) 27. Декабря 2011 :: 10:27:
могу дать струмент для переноса..создание клона объекта в сторонней базе для файлового варианта
Буду сказать большую спасибу!
« Последняя редакция: 28. Декабря 2011 :: 02:53 - Dmitry The Wing »  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #5 - 28. Декабря 2011 :: 05:38
Печать  
Итоги чего получить то надо ? Регистров ? Или сальдо по счетам ?
  

Cloning_of_objects.ert ( 272 KB | Загрузки )
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #6 - 28. Декабря 2011 :: 05:41
Печать  
Eprst писал(а) 28. Декабря 2011 :: 05:38:
Итоги чего получить то надо ? Регистров ? Или сальдо по счетам ?
Для регистров я функцию написал, которая по метаданным строит запрос для получения остатков на любую дату. А вот как получить сразу сальдо по ВСЕМ счетам?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #7 - 28. Декабря 2011 :: 05:47
Печать  
Ну, самое примитивное - сделать штатным способом: тупо вырезать создание операций по счетам из wrap.ert
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #8 - 28. Декабря 2011 :: 06:03
Печать  
Я надеялся, что есть способ прямее  Плачущий
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #9 - 28. Декабря 2011 :: 07:06
Печать  
Обработка супер!
Возник только один вопрос: она же не будет двигать границу последовательности? Если так, то потом все равно придется перепроводить...
Или можно сначала создать последний документ, привести к нему границу, а потом заклонировать предыдущие? Насколько это грамотно?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #10 - 28. Декабря 2011 :: 17:40
Печать  
там итоги только пересчитать надо будет.. и..всё вроде, это ежели с движениями клонировать.
Можно и без них - так быстрее, и без периодики.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #11 - 10. Января 2012 :: 04:45
Печать  
Движения, операции и периодику доков копировать мне просто необходимо. Вопрос вызывают только ссылки на некопируемые доки (обрезаемые), но это надо еще обдумывать.
Для себя добавил возможность выбора всех документов за период
Код
Выбрать все
Процедура ДобавитьДокументы()
 	  Сз = СоздатьОбъект("СписокЗначений");
	Для ы = 1 по Метаданные.Документ() Цикл
		Сз.ДобавитьЗначение(Метаданные.Документ(ы).Идентификатор, Метаданные.Документ(ы).Синоним);
	КонецЦикла;
	ВидДок = "";
	Выбор = Сз.ВыбратьЗначение(ВидДок, "Выберите вид документа",,, 0);
	Если Выбор = 1 Тогда
		Запрос = глОлеДБ.СоздатьКоманду();
		ТекстЗапроса = "
		|select
		|    Жур.iddoc as [Док $Документ." + ВидДок + "]
		|from 1sjourn Жур
		|where Жур.iddocdef = $ВидДокумента." + ВидДок + "
		|and (dtos(Жур.date)+Жур.time+Жур.iddoc between dtos(:НачДата~~)+'	'+'	   ' and dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ')
		|";
		Если ВклПроведенныеВсе > 1 Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|and " + ?(ВклПроведенныеВсе = 2, "Жур.Closed>0", "Жур.Closed=0");
		КонецЕсли;
		Если ВклПомеч > 1 Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|and " + ?(ВклПомеч = 2, "Жур.ismark=''", "Жур.ismark='*'");
		КонецЕсли;
		ТекстЗапроса = ТекстЗапроса + " order by Жур.date, Жур.time, Жур.iddoc";
		Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
		Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
		Счетчик = 100;
		Т = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
		Т.ВыбратьСтроки();
		Пока Т.ПолучитьСтроку() = 1 Цикл
			Если Счетчик = 0 Тогда
				Обновить = 1;
				Счетчик = 100;
			Иначе
				Счетчик = Счетчик - 1;
				Обновить = 0;
			КонецЕсли;
			Если ДобавлятьСсылки = 1 Тогда
				ДобавитьОбъектСВложеннымиДанными(Т.Док, 12, Обновить);
			Иначе
				ДобавитьОбъектСПроверкой(Т.Док, 12, Обновить);
			КонецЕсли;
		КонецЦикла;
		ТабПоле.ОбновитьСтроки();
	Иначе
		//Переспросить о выгрузке всех доков
		Если Вопрос("Отказаться от добавления документов?
		|Нет = Выбрать все", 4, 180) = 7
		Тогда
			Запрос = глОлеДБ.СоздатьКоманду();
			ТекстЗапроса = "
			|select
			|    Жур.iddocdef + Жур.iddoc as [Док $Документ]
			|from 1sjourn Жур
			|where (dtos(Жур.date)+Жур.time+Жур.iddoc between dtos(:НачДата~~)+'	'+'	   ' and dtos(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ')
			|";
			Если ВклПроведенныеВсе > 1 Тогда
				ТекстЗапроса = ТекстЗапроса + "
				|and " + ?(ВклПроведенныеВсе = 2, "Жур.Closed>0", "Жур.Closed=0");
			КонецЕсли;
			Если ВклПомеч > 1 Тогда
				ТекстЗапроса = ТекстЗапроса + "
				|and " + ?(ВклПомеч = 2, "Жур.ismark=''", "Жур.ismark='*'");
			КонецЕсли;
			ТекстЗапроса = ТекстЗапроса + " order by Жур.date, Жур.time, Жур.iddoc";
			Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
			Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
			Счетчик = 100;
			Т = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
			Т.ВыбратьСтроки();
			Пока Т.ПолучитьСтроку() = 1 Цикл
			Если Счетчик = 0 Тогда
				Обновить = 1;
				Счетчик = 100;
			Иначе
				Счетчик = Счетчик - 1;
				Обновить = 0;
			КонецЕсли;
				Если ДобавлятьСсылки = 1 Тогда
					ДобавитьОбъектСВложеннымиДанными(Т.Док, 12, Обновить);
				Иначе
					ДобавитьОбъектСПроверкой(Т.Док, 12, Обновить);
				КонецЕсли;
			КонецЦикла;
			ТабПоле.ОбновитьСтроки();
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры // ДобавитьДокументы 

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


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Групповая обработка в 1sqlite
Ответ #12 - 13. Января 2012 :: 01:58
Печать  
Предыдущее сообщение можно игнорировать. Анализ логики показал, что ее можно сильно упросить, совсем уйдя от переборов.
Точнее не так: переборы будут нужны только для формирования sql-запросов, которые уже будут проводить и анализ зависимостей и сам перенос.

Но возникает вопрос: Как в 1sqlite выполнить несколько insert'ов для одной строки select'а?

Вопрос звучит не совсем понятно. Хочу сделать что-то аналогичное FireBird'ному "for select", т.е. что-то типа
Код
Выбрать все
declare variable f1 varchar(9);
declare variable f2 varchar(9);
for select f1, f2 from t0 into f1, f2 do begin
insert into t1 values(f1);
insert into t1 values(f2);
end 

Поясню, что я хочу добиться: при помощи 1sqlite я получаю идентификаторы всех доков, на которые есть ссылки в переносимых в другую базу. И когда в таблице всего одно поле ссылается на документ, тогда эта логика не важна, но если полей несколько, то приходится повторять почти одинаковый запрос несколько раз ... если описаная проблема решаема, то можно будет одним запросом получить сразу все поля ссылок на доки.

P.S.: Думаю, не надо пояснять, почему именно 1sqlite, а не OLEDBData с VFPOLEDB: индексы 1С такие "умные", что задача построения запроса с попаданием на них с учетом наличия пустых полей и полей с нефильтруемыми значениями для меня оказалась слишком сложной.
Самый простой пример: запрос переноса непериодических констант выполняется 2 минуты, а запрос переноса всей периодики, включая константы, - чуть более 10 секунд, а причина в том, что в первом случае нет условия на дату (пробовал ставить < и is null, но это не повлияло), и дополнительно есть условие IN, которого нет во втором случае.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
1С выпадает в осадок при попытке выполнения запроса 1sqlite
Ответ #13 - 13. Января 2012 :: 03:55
Печать  
Очередная проблема: 1С выпадает в осадок при попытке выполнения запроса
Код
Выбрать все
INSERT INTO tmp_docs(dt,dc)
SELECT SUBSTR(о.Заказ,1,4), SUBSTR(о.Заказ,5,9)
FROM [Регистр.ВозвратныеОтходы] о
INNER JOIN [Журнал] ж ON ж.iddoc = о.iddoc
AND ((ж.date = :ДатаСвертки0 AND ж.time >= id2str(863990000, 6)) OR (ж.date >= :ДатаСвертки))
INNER JOIN [Журнал] жж ON жж.iddoc = SUBSTR(о.Заказ,5,9)
AND ((жж.date = :ДатаСвертки0 AND жж.time < id2str(863990000, 6)) OR (жж.date < :ДатаСвертки)) 

Предварительно был выполнен запрос: "CREATE TEMP TABLE tmp_docs(dt varchar(4), dc varchar(9))".
Выборка без вставки проходит на ура. Проблема именно при вставке ... помогите вылечить!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #14 - 13. Января 2012 :: 04:41
Печать  
Не ясно только, как тебе вообще 1sqlite для этой цели поможет - он ведь умеет инсертить только в свои таблички, созданные в sqllite базе.

http://www.sqlite.org/lang_insert.html
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать