Перенос БД
02.03.2004
23:13
#1
Обращаюсь за помощью.
Проблема:
Возникла необходимость в создании новой конфигурации на основании исходной (т.е. таже структура, с добавлением нового и удалением лишнего, но обязательно НОВАЯ). Конфигурация почти закончена. Теперь нужна подготовиться к тому чтобы прийти на фирму и за день произвести перенос информационной базы из старой в новую. Вот тут то и проблема. Для справочников обработчик написал в 2 вариантах (один переносит через txt-файл, другой через V77.Application). Но вот с другими данными я так до конца не осознал что нужно сделать.
ВОПРОСЫ:
1) Какие еще необходимо перенести данные (документы, журналы операций, регистры??)?
2) Какой способ лучше выбрать (пробовал перенести через dbf - ковырялся через FoxPro, там заморочки, структура базы не совсем понятно - перенос не сработал выдавалась ошибка при открытиии "чего-нить" в переносимой конфигурации). Получается обработчик самое надежное???
3) Какие-нить обработчики, программы, советы...что-нить что может мне помочь.
ОЧЕНЬ БУДУ БЛАГОДАРЕН. ЗАРАНЕЕ СПАСИБО!
Проблема:
Возникла необходимость в создании новой конфигурации на основании исходной (т.е. таже структура, с добавлением нового и удалением лишнего, но обязательно НОВАЯ). Конфигурация почти закончена. Теперь нужна подготовиться к тому чтобы прийти на фирму и за день произвести перенос информационной базы из старой в новую. Вот тут то и проблема. Для справочников обработчик написал в 2 вариантах (один переносит через txt-файл, другой через V77.Application). Но вот с другими данными я так до конца не осознал что нужно сделать.
ВОПРОСЫ:
1) Какие еще необходимо перенести данные (документы, журналы операций, регистры??)?
2) Какой способ лучше выбрать (пробовал перенести через dbf - ковырялся через FoxPro, там заморочки, структура базы не совсем понятно - перенос не сработал выдавалась ошибка при открытиии "чего-нить" в переносимой конфигурации). Получается обработчик самое надежное???
3) Какие-нить обработчики, программы, советы...что-нить что может мне помочь.
ОЧЕНЬ БУДУ БЛАГОДАРЕН. ЗАРАНЕЕ СПАСИБО!
04.03.2004
09:55
#2
Насколько велики изменения?
Не проще ли скопировать старую базу и сделать объединение с новым вариантом?...
Если новая БД - передаленная старая, то система сама перенесет все данные, естественно за исключением тех, которые были удалены в новом варианте.
Не проще ли скопировать старую базу и сделать объединение с новым вариантом?...
Если новая БД - передаленная старая, то система сама перенесет все данные, естественно за исключением тех, которые были удалены в новом варианте.
04.03.2004
21:15
#3
"Изменение, если честно не насколько велики, но они есть. Да и главное условие начальства - сделать отдельную базу и перенос из одной в другую.
Кстати, сюда же вопрос.
Делаю перенос Документов, но в документе присутствует справочник.контрагенты, но данные в документе на момент ввода документа, то есть начинаю сравнивать значение со справочником и вносить его в документ - он вносит новое значение (Например, "Скидка для контрагента").Что делать? Привожу кусок обработки
Если ФС.Существуетфайл("d:\1с\sent_all" + "\NUL") = 0 Тогда
Предупреждение("Путь информационной базы не найден!");
Иначе
V7 = СоздатьОбъект("V77.Application");
Открыта = V7.Initialize(V7.RMTrade, "/D" + "d:\1с\sent_all" +" /M /NLogin", """");
Если Открыта = 0 Тогда
Предупреждение("Ошибка открытия информационной базы");
Возврат;
КонецЕсли;
Импорт1 = V7.CreateObject("Документ.РасхНакл");
Док1=СоздатьОбъект("Документ.РасхНакл");
Док1.Новый();
ДатаHачала='01.01.01';
ДатаКонца=РабочаяДата();
Импорт1.ВыбратьДокументы(ДатаHачала,ДатаКонца);
Импорт1.ПолучитьДокумент();
//Шапка запись
КонтрИмпорт=V7.CreateObject("Справочник.Контрагенты");
Контр=СоздатьОбъект("Справочник.Контрагенты");
Тов=СоздатьОбъект("Справочник.Номенклатура");
КонтрИмпорт.НайтиПоКоду(Импорт1.Контрагент.ПолныйКод(),2);
Док1.Контрагент=КонтрИмпорт.ТекущийЭлемент();
//вот тут я в активирую элемент справочника, но данные переносятся не все.
Жду ответа, заранее спасибо."
Кстати, сюда же вопрос.
Делаю перенос Документов, но в документе присутствует справочник.контрагенты, но данные в документе на момент ввода документа, то есть начинаю сравнивать значение со справочником и вносить его в документ - он вносит новое значение (Например, "Скидка для контрагента").Что делать? Привожу кусок обработки
Если ФС.Существуетфайл("d:\1с\sent_all" + "\NUL") = 0 Тогда
Предупреждение("Путь информационной базы не найден!");
Иначе
V7 = СоздатьОбъект("V77.Application");
Открыта = V7.Initialize(V7.RMTrade, "/D" + "d:\1с\sent_all" +" /M /NLogin", """");
Если Открыта = 0 Тогда
Предупреждение("Ошибка открытия информационной базы");
Возврат;
КонецЕсли;
Импорт1 = V7.CreateObject("Документ.РасхНакл");
Док1=СоздатьОбъект("Документ.РасхНакл");
Док1.Новый();
ДатаHачала='01.01.01';
ДатаКонца=РабочаяДата();
Импорт1.ВыбратьДокументы(ДатаHачала,ДатаКонца);
Импорт1.ПолучитьДокумент();
//Шапка запись
КонтрИмпорт=V7.CreateObject("Справочник.Контрагенты");
Контр=СоздатьОбъект("Справочник.Контрагенты");
Тов=СоздатьОбъект("Справочник.Номенклатура");
КонтрИмпорт.НайтиПоКоду(Импорт1.Контрагент.ПолныйКод(),2);
Док1.Контрагент=КонтрИмпорт.ТекущийЭлемент();
//вот тут я в активирую элемент справочника, но данные переносятся не все.
Жду ответа, заранее спасибо."
05.03.2004
20:55
#4
НайтиПоКоду(>,)-это функция, которая возвращает значение 0 или 1.
поставь условие на нахождение элемента...
поставь условие на нахождение элемента...
06.03.2004
00:39
#5
"Данный ваш совет относится к случаям, когда элемента нет в справочнике - у меня такой вариант не возможен, проблема совершенно в другом.
Дело в том, что данные из справочников для документа берутся на момент переноса (например, Скидка для Дилеров aka Контрагентов, но она изменяется со временем), а мне нужно что бы переносились данные актуальные на тот момент, когда был создан документ, т.е. чтобы переносился один в один. Надеюсь, я корректно задал вопрос. Попробовал временно изменять значение реквизита справочника, а потом менять обратно после запись…Почему-то не помогает. Показываю кусок кода.
//Код урезал до минимума, чтобы не посчитали за флуд
Импорт1 = V7.CreateObject("Документ.РасхНакл");
Док1=СоздатьОбъект("Документ.РасхНакл");
Док1.Новый();
ДатаHачала='01.01.01';
ДатаКонца=РабочаяДата();
Импорт1.ВыбратьДокументы(ДатаHачала,ДатаКонца);
Импорт1.ПолучитьДокумент();
КонтрИмпорт=V7.CreateObject("Справочник.Контрагенты");
Контр=СоздатьОбъект("Справочник.Контрагенты");
Тов=СоздатьОбъект("Справочник.Номенклатура");
Контр.НайтиПоКоду(Импорт1.Контрагент.ПолныйКод(),2);
Знач1=Контр.КО;
Контр.КО=Импорт1.КО1;
Док1.Контрагент=Контр.ТекущийЭлемент();
//Многое вырезанно ....
Док1.ВидДокумента=Импорт1.ВидДокумента;
Док1.ДатаДо=Импорт1.ДатаДо;
Док1.НомерДок=Импорт1.НомерДок;
Док1.ДатаДок=Импорт1.ДатаДок;
Док1.Записать();
Импорт1.ВыбратьСтроки();
Пока Импорт1.ПолучитьСтроку()=1 Цикл
//Табличная часть ...
КонецЦикла;
Док1.Записать();
Контр.КО=Знач1;
// КОНЕЦ
Жду ответа."
Дело в том, что данные из справочников для документа берутся на момент переноса (например, Скидка для Дилеров aka Контрагентов, но она изменяется со временем), а мне нужно что бы переносились данные актуальные на тот момент, когда был создан документ, т.е. чтобы переносился один в один. Надеюсь, я корректно задал вопрос. Попробовал временно изменять значение реквизита справочника, а потом менять обратно после запись…Почему-то не помогает. Показываю кусок кода.
//Код урезал до минимума, чтобы не посчитали за флуд
Импорт1 = V7.CreateObject("Документ.РасхНакл");
Док1=СоздатьОбъект("Документ.РасхНакл");
Док1.Новый();
ДатаHачала='01.01.01';
ДатаКонца=РабочаяДата();
Импорт1.ВыбратьДокументы(ДатаHачала,ДатаКонца);
Импорт1.ПолучитьДокумент();
КонтрИмпорт=V7.CreateObject("Справочник.Контрагенты");
Контр=СоздатьОбъект("Справочник.Контрагенты");
Тов=СоздатьОбъект("Справочник.Номенклатура");
Контр.НайтиПоКоду(Импорт1.Контрагент.ПолныйКод(),2);
Знач1=Контр.КО;
Контр.КО=Импорт1.КО1;
Док1.Контрагент=Контр.ТекущийЭлемент();
//Многое вырезанно ....
Док1.ВидДокумента=Импорт1.ВидДокумента;
Док1.ДатаДо=Импорт1.ДатаДо;
Док1.НомерДок=Импорт1.НомерДок;
Док1.ДатаДок=Импорт1.ДатаДок;
Док1.Записать();
Импорт1.ВыбратьСтроки();
Пока Импорт1.ПолучитьСтроку()=1 Цикл
//Табличная часть ...
КонецЦикла;
Док1.Записать();
Контр.КО=Знач1;
// КОНЕЦ
Жду ответа."
08.03.2004
16:28
#6
Ну дык если скидка "изменяется со временем" значит она есть периодический реквизит. Тогда надо получать его значение на ДатаДок(). (смотри как работать с пер-ми рекв-ми)
10.03.2004
18:27
#7
Кстати, возник по ходу такой вопрос. Открываю базу через FoxPro, смотрю - многие данные о документе хранятся в статическом ввиде - часть в ссылках.
Так вот - делаю перенос документа, если открываю документ, то из-за того что он не проведен - данные меняются в соответствиями с модулем формы, если просто просмотр - то все как нужно. Маленький побочный вопрос. Сделать Документ.Провести() я не могу, там обход документов неправильно делается. Как можно сделать пометку на документ - проведен, чтобы он не трогался, то есть не обсчитывался?
Так вот - делаю перенос документа, если открываю документ, то из-за того что он не проведен - данные меняются в соответствиями с модулем формы, если просто просмотр - то все как нужно. Маленький побочный вопрос. Сделать Документ.Провести() я не могу, там обход документов неправильно делается. Как можно сделать пометку на документ - проведен, чтобы он не трогался, то есть не обсчитывался?
Читают тему
(гостей: 1)