|
v7: Вопрос по переводу dbf 7.7 на SQL | ☑ | ||
---|---|---|---|---|
0
never_sleep
28.05.13
✎
11:40
|
Есть 2 сервера:
win2003r2 и win2008r2 - оба лицензионные. 1Ска стоит на win2003 и работает на dbf базах. Нужно срочно перевести базу на SQL. win2008 сервер пока пустует. Если я поставлю sql2005 на win2003r2, то чтобы на нем заработала 1Ска придется подменять BkEnd.dll. Вопрос: Если подменю этот файлик работоспособность 1Ски под dbf базами не пострадает? Ибо на одном серванте некоторое время, пока не проверю корректность выгрузки, должны будут сосуществовать 2 базы: под скуль и под ДБФ. |
|||
1
zak555
28.05.13
✎
11:41
|
> Нужно срочно перевести базу на SQL
что за срочность ? |
|||
2
КонецЦикла
28.05.13
✎
11:43
|
нет по идее
|
|||
3
Lionee
28.05.13
✎
11:45
|
(0) sql и dbf ващеето разные каталоги баз данных
|
|||
4
Lionee
28.05.13
✎
11:45
|
так что меня что хочешь
|
|||
5
Lionee
28.05.13
✎
11:51
|
меня=меняй
|
|||
6
never_sleep
28.05.13
✎
12:03
|
(1) Всего то вес в 6 гигов у базы и под 2 гига у некоторых регистров. (параллельно пытаюсь свернуть базу).
(3) Файлик подменяется не в каталоге базы данных, а в каталоге установленной 1С. |
|||
7
never_sleep
28.05.13
✎
12:05
|
сейчас, чтобы спасти ситуацию. пытаюсь одновременно пробовать разные меры выхода из ситуации. Ибо скоро один из регистров станет 2 гига, и тогда кранты :(
|
|||
8
zak555
28.05.13
✎
12:07
|
(6) сделай копию регистров
|
|||
9
ЧеловекДуши
28.05.13
✎
12:11
|
(0) Не сци, Ставь лучше так
Вынь 2003 х64, SQL 2005 х64... и подмени файлик BkEnd.dll Так же придется переписать запросы, для обращения к подчиненным документам, системные от 1С. |
|||
10
1Сергей
28.05.13
✎
12:11
|
нормально патченный BkEnd.dll работает
|
|||
11
ЧеловекДуши
28.05.13
✎
12:12
|
+ И заменить выбор подчиненных документов на прямой запрос.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Проведен: 1 - отберать по проведенным, // 0 - не учитывать (если ""БезУдаленых = 0"", то отбераются все документы) //БезУдаленых: 1 - отбераются не помеченные на удаления, // 2 - отбираются только помеченные на удаления, 0 - не учитывать //Параметры "Проведен" и "БезУдаленых", при не нулевом значении, отрабатывают совместно по принципу "ИЛИ". // //Порядок: 0 - Сортровать по возрастанию, 1 - Сортировать по Убыванию. // //ВремяДатаТайм: 0 - Отбирать документ, как Дату и время (ИД документа не учитывается)... 1 - Учитывается еще и ИД документа Функция глВыбратьПодчиненныеДокументы(ДатаНач,ДатаКон,Док,ТипДок="",Проведен=0,БезУдаленых=0,Порядок=0,ВремяДатаТайм=1) Экспорт Перем Рез; Перем ТЗЗапрос, СкульЗапрос; Перем СтрокаДляЗапроса, НомСимв, КолСимв, СтрокПоиск,СтрокПолуч; Перем МетаНомер, ЧтоЭто; //Для локального применения //глRecord1С = СоздатьОбъект("ODBCRecordSet"); //глMeta1С = СоздатьОбъект("MetaDataWork"); Если ТипЗначенияСтр(глRecord1С) <> "ODBCRecordSet" Тогда глRecord1С = 0; глRecord1С = СоздатьОбъект("ODBCRecordSet"); КонецЕсли; Если ТипЗначенияСтр(глMeta1С) <> "MetaDataWork" Тогда глMeta1С = 0; глMeta1С = СоздатьОбъект("MetaDataWork"); КонецЕсли; Рез = 0; //Ошибка в запросе! Если ТипЗначения(Док) <> 12 Тогда //12 - агрегатный тип данных 'Документ'; Возврат Рез; ИначеЕсли ПустоеЗначение(Док) = 1 Тогда Рез = СоздатьОбъект("ТаблицаЗначений"); Рез.НоваяКолонка("Док","Документ"); Возврат Рез; КонецЕсли; Если глОтладкаSQL = 1 Тогда глRecord1С.Отладка(1); КонецЕсли; СкульЗапрос=" |SELECT | dbo.sp_tohex(TabJ.IDDOCDEF,4)+TabJ.IDDOC [Док $Документ] |FROM | _1SCRDOC As TabRod(NOLOCK) |INNER JOIN | _1SJOURN As TabJ(NOLOCK) ON (TabRod.CHILDID = TabJ.IDDOC) |WHERE | TabRod.MDID = 0 -- только документы, без граф отбора | AND TabRod.PARENTVAL = '"+глMeta1С.ЗначениеВСамуюДлиннуюСтрокуБД(Док.ТекущийДокумент())+"' |"; Если ПустоеЗначение(ДатаНач)=0 Тогда МетаНомер = ""; Если ТипЗначения(ДатаНач) = 12 Тогда //Документ Если ВремяДатаТайм = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаНач.ПолучитьПозицию()); Иначе МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаНач.ПолучитьПозицию())+глMeta1С.ЗначениеВСтрокуБД(ДатаНач.ТекущийДокумент()); КонецЕсли; ИначеЕсли ТипЗначения(ДатаНач) = 3 Тогда //3 - тип данных Дата; МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(ДатаНач); ИначеЕсли ПустоеЗначение(Дата(ДатаНач)) = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(Дата(ДатаНач)); КонецЕсли; Если ПустоеЗначение(МетаНомер) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.DATE_TIME_IDDOC>='"+МетаНомер+"' |"; КонецЕсли; КонецЕсли; Если ПустоеЗначение(ДатаКон)=0 Тогда МетаНомер = ""; Если ТипЗначения(ДатаКон) = 12 Тогда //Документ Если ВремяДатаТайм = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаКон.ПолучитьПозицию())+"Z"; Иначе МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаКон.ПолучитьПозицию())+глMeta1С.ЗначениеВСтрокуБД(ДатаКон.ТекущийДокумент()); КонецЕсли; ИначеЕсли ТипЗначения(ДатаНач) = 3 Тогда //3 - тип данных Дата; МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(ДатаКон)+"Z"; ИначеЕсли ПустоеЗначение(Дата(ДатаНач)) = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(Дата(ДатаНач))+"Z"; КонецЕсли; Если ПустоеЗначение(МетаНомер) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.DATE_TIME_IDDOC<='"+МетаНомер+"' |"; КонецЕсли; КонецЕсли; Если ПустоеЗначение(СокрЛП(ТипДок)) = 0 Тогда СтрокПоиск = СокрЛП(ТипДок); КолСимв = СтрЧислоВхождений(СтрокПоиск,","); Если КолСимв <> 0 Тогда КолСимв = КолСимв + 1; СтрокаДляЗапроса = ""; Пока КолСимв <> 0 Цикл Если КолСимв = 1 Тогда //Он один СтрокПолуч = СокрЛП(СтрокПоиск); Иначе НомСимв = Найти(СтрокПоиск,","); Если НомСимв = 0 Тогда Сообщить("Ошибка в разборе команды: "+ТипДок); КонецЕсли; СтрокПолуч = СокрЛП(Сред(СтрокПоиск,1,НомСимв-1)); СтрокПоиск = СокрЛП(Сред(СтрокПоиск,НомСимв+1)); КонецЕсли; Если ПустоеЗначение(СтрокПолуч) = 0 Тогда ЧтоЭто = ЭтоЧисло(СтрокПолуч); Если СуществуетТакойВидДок(ЧтоЭто) = 1 Тогда МетаНомер = глMeta1С.ИДДокумента(ЧтоЭто); СтрокаДляЗапроса = СтрокаДляЗапроса + ?(ПустоеЗначение(СтрокаДляЗапроса)=1,"",",") + "'"+МетаНомер+"'"; КонецЕсли; КонецЕсли; КолСимв = КолСимв - 1; КонецЦикла; Если ПустоеЗначение(СтрокаДляЗапроса) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.IDDOCDEF in ("+СтрокаДляЗапроса+") |"; // '"+глMeta1С.ИДДокумента(ТипДок)+"' КонецЕсли; Иначе МетаНомер = ""; СтрокПолуч = СокрЛП(ТипДок); Если ПустоеЗначение(СтрокПолуч) = 0 Тогда ЧтоЭто = ЭтоЧисло(СтрокПолуч); Если СуществуетТакойВидДок(ЧтоЭто) = 1 Тогда МетаНомер = глMeta1С.ИДДокумента(ЧтоЭто); СтрокаДляЗапроса = СтрокаДляЗапроса + ?(ПустоеЗначение(СтрокаДляЗапроса)=1,"",",") + "'"+МетаНомер+"'"; КонецЕсли; КонецЕсли; Если ПустоеЗначение(МетаНомер) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.IDDOCDEF='"+МетаНомер+"' |"; КонецЕсли; КонецЕсли; КонецЕсли; Если Проведен = 1 Тогда Если БезУдаленых = 1 Тогда СкульЗапрос=СкульЗапрос+" |and (((TabJ.CLOSED & 1) = 1) or (TabJ.IsMark = 0)) |"; ИначеЕсли БезУдаленых = 2 Тогда СкульЗапрос=СкульЗапрос+" |and (((TabJ.CLOSED & 1) = 1) or (TabJ.IsMark <> 0)) |"; Иначе СкульЗапрос=СкульЗапрос+" |and ((TabJ.CLOSED & 1) = 1) |"; КонецЕсли; Иначе Если БезУдаленых = 1 Тогда СкульЗапрос=СкульЗапрос+" |and (TabJ.IsMark = 0) |"; ИначеЕсли БезУдаленых = 2 Тогда СкульЗапрос=СкульЗапрос+" |and (TabJ.IsMark <> 0) |"; КонецЕсли; КонецЕсли; СкульЗапрос=СкульЗапрос+" |ORDER BY |TabRod.CHILD_DATE_TIME_IDDOC "+?(Порядок=0,"ASC","DESC")+" |"; Если глRecord1С.Подготовить(СкульЗапрос)=0 Тогда Сообщить("Запрос не прошел "+глRecord1С.ПолучитьОписаниеОшибки()+" |"+СкульЗапрос,"!"); Возврат Рез; КонецЕсли; ТЗЗапрос = 0; ТЗЗапрос = СоздатьОбъект("ТаблицаЗначений"); Попытка ЗначСпс = глRecord1С.ВыполнитьИнструкцию(,ТЗЗапрос,1); Исключение Сообщить("ВыполнитьИнструкцию: "+ОписаниеОшибки()); КонецПопытки; Попытка глRecord1С.Закрыть(); Исключение Сообщить("Закрыть SQL запрос: "+ОписаниеОшибки()); КонецПопытки; Если ТипЗначенияСтр(ТЗЗапрос) <> "ТаблицаЗначений" Тогда Сообщить("Нет нужного параметра!","!"); ИначеЕсли ТЗЗапрос.КоличествоКолонок() = 0 Тогда ТЗЗапрос.НоваяКолонка("Док","Документ"); Сообщить("Запрос не выполнен: |"+СкульЗапрос,"!"); Иначе Рез = ТЗЗапрос; КонецЕсли; Возврат Рез; КонецФункции |
|||
12
ЧеловекДуши
28.05.13
✎
12:14
|
+ При открытии Журнала, подчиненных документов, это Он же общий журнал, вставить такой код
Если ТипЗначенияСтр(ДокументОснованиеЖурнала) = "Документ" Тогда // форма журнала подчиненных документов глVk_hook.ТекстSQL="Select JOURN.* from _1SJOURN JOURN(NOLOCK INDEX=ACDATETIME), _1SCRDOC CRDOC(NOLOCK INDEX=PARENT) where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC and CRDOC.MDID=? and CRDOC.PARENTVAL=? and CRDOC.CHILD_DATE_TIME_IDDOC>=? and CRDOC.CHILD_DATE_TIME_IDDOC<=? order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC"; глVk_hook.НовыйSQL="Select JOURN.* from _1SJOURN JOURN(NOLOCK), _1SCRDOC CRDOC(NOLOCK) where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC and CRDOC.MDID=? and CRDOC.PARENTVAL=? order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC"; глVk_hook.УстановитьЗаменуSQL(); КонецЕсли; |
|||
13
Sereja
28.05.13
✎
12:20
|
гугли "Секретный релиз". Там без подмены длл все делается
|
|||
14
ЧеловекДуши
28.05.13
✎
12:22
|
(13) Ага, прямо мана небесная :)
Подменивать, ДЛЛ или Екзе, Какая разница? |
|||
15
never_sleep
28.05.13
✎
12:25
|
ЧеловекДуши,
пообщался с парой-тройкой франчайзи в нашем городе. Сказали, что при переходе на скуль вообще ничего в конфигурации не придется трогать. Получается наврали? |
|||
16
ЧеловекДуши
28.05.13
✎
12:29
|
(15) Запомни, если коснешься Windows x64 (бит), то ты достойно уценишь советы франей.
А так же, если поставишь х32, то потом поймешь, что х64 было бы лучше :) Но это все оценивается степенью мастерства в Прямых запросах. Если вы не будете баловаться и злоупотреблять прямыми запросами, то думается и 4 Гб на 32-у битной оси у вас все пойдет :) |
|||
17
daniyar5436
28.05.13
✎
12:38
|
Как думаете, вариант
создать аналогичную конфу на скл пустую, перетащить справочники доки, допустим с начала года, с оригинальной дбф базы, залить начальные остатки, допустим на начало года, провести. Плохой вариант? |
|||
18
Mikeware
28.05.13
✎
12:40
|
(17) для тупых идиотов - вполне приемлемый...
|
|||
19
ЧеловекДуши
28.05.13
✎
12:41
|
(17) Мертвый, тогда зачем SQL?
Смысл в SQL как раз в том, что ненужно резать данные, которые можно использовать для аналитики :) |
|||
20
never_sleep
28.05.13
✎
13:27
|
(17) Как уже говорил, парралельно пытаюсь свернуть базу (подобным образом, кстати). Но это не dbf-->sql, а dbf--->dbf
вот этим методом: http://alexeev.pro/?page_id=1282 Правда один из регистров не сворачивается (1Ска упирается в потолок по оперативке 2Гб) и повисает. Остатки и партии выгрузились вроде правильно. Сейчас вот запустил выгрузку всех доков за 13 год. Тьма их. Сижу жду. (18) А почему для тупы идиотов? Подскажите, может я зря тут стараюсь. (16) Огромное спасибо за комментарии, учту их при миграции. |
|||
21
never_sleep
28.05.13
✎
13:28
|
(10) Сергей, доверюсь вам и попробую. Даром что всегда можно поменять dll'ку обратно.
|
|||
22
spock
28.05.13
✎
13:39
|
(0)Переходить на v8.2 еще не предлагали?
|
|||
23
never_sleep
28.05.13
✎
13:43
|
(22) Собираюсь мигрировать на 8ку (на УТ и Бух) до конца года. Скоро даже закуплю конфигурации (пока без лицензий на доп. пользователей). Но это пока задача менее важная чем, сейчас стоит передо мной. Моя база может встать уже завтра и переход на восьмерку это не вариант решения проблемы. (хотя, разумеется, мигрировать надо)
|
|||
24
Ёпрст
28.05.13
✎
13:43
|
(15) не наврали, и патчить ничего не надо.
|
|||
25
GStiv
28.05.13
✎
13:51
|
Только буквально загружать базу в SQL, причина простая не мог даже провести свертку базы из-за ошибки -310, а там уже запустил свертку
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |