Создать документ нового типа
Модераторы: m0p3e, edward_K, Модераторы
Re: Создать документ нового типа
edward_K
Где я писал что юзаю alter dictionary? Дядя Федя писал что это вредно, я в курсе. Так что контрольная сумма словаря не меняется - дело не в этом. Добавлял таблицы lot-ом, получается нельзя так делать? В support попробую. БД Oracle.
Документ мне нужен не для бух. учета, исключительно для опер контура.
Где я писал что юзаю alter dictionary? Дядя Федя писал что это вредно, я в курсе. Так что контрольная сумма словаря не меняется - дело не в этом. Добавлял таблицы lot-ом, получается нельзя так делать? В support попробую. БД Oracle.
Документ мне нужен не для бух. учета, исключительно для опер контура.
Re: Создать документ нового типа
вот такой код для создания таблицы юзал
Код: Выделить всё
create table s_Module "Программные модули"
with table_Code = 31600
with replace
with tableOptions branched
(
nRec : comp "Номер записи",
Code : word "Системный код модуля",
Name : string[200] "Наименование модуля",
Description : string "Описание назначения",
Params : longint "Дополнительные параметры",
LevelCode : string[20] "Код на уровне", // Только для сортировки
cModule : comp "Ссылка на вышестоящий модуль" // ToDo-> переделать на ref(s_Module)
)
with index
(
index1 = nRec(unique, surrogate, journal),
index2 = Code(unique),
index3 = Name,
index4 = LevelCode,
index5 = cModule + Name,
index6 = cModule + LevelCode
);
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Создать документ нового типа
Попробуйте создать как у меня.
а какая разница? бухучет или оперативный. Настраиваете забалансовый счет с нужным разрезом хранения - то есть 6 аналитик в вашем распоряжении + подразделение. А если еще и по кредиту цеплять то 12. - получаете готовый фейс за 5 сек с прописанным выбором, отчетами и т.д. Еще и к до можно привязать и сф сделать.
а какая разница? бухучет или оперативный. Настраиваете забалансовый счет с нужным разрезом хранения - то есть 6 аналитик в вашем распоряжении + подразделение. А если еще и по кредиту цеплять то 12. - получаете готовый фейс за 5 сек с прописанным выбором, отчетами и т.д. Еще и к до можно привязать и сф сделать.
Re: Создать документ нового типа
Покрутил и так и сяк. Вывод - на простейших таблах (как у Edward_K) создается. У меня же есть restrict на поле - он мне нужен. Без этого параметра таблица создается нормально, с restrict - валится ошибка (это если через support, если vip-ом то ошибки нет, но тогда компилятор кричит что нужно чистить журнал и рубить протект). Но журнализация не работает все равно (хоть с restrict, хоть без). Т.е. таблица помечается как журнализируемая, но реально не журнализируется.
Re: Создать документ нового типа
Добавление и удаление таблиц не требует чистки журнала, отключения журнализации, протекта и прочих манипуляций.
Поэтому модификация своих таблиц на "горячую" может производиться по следующему алгоритму:
1. Выгрузил из таблицы данные в бдф
2. Удалил таблицу
3. Создал таблицу с новой структурой
4. Загрузил данные в таблицу из дбф
Все это прекрасно делается VIP-ом, написав один раз батник.
Поэтому модификация своих таблиц на "горячую" может производиться по следующему алгоритму:
1. Выгрузил из таблицы данные в бдф
2. Удалил таблицу
3. Создал таблицу с новой структурой
4. Загрузил данные в таблицу из дбф
Все это прекрасно делается VIP-ом, написав один раз батник.
Re: Создать документ нового типа
Делай, как написал galover, т.е. не отходи от принятого стандарта в самой Гал-ку.galover писал(а):Т.е. таблица помечается как журнализируемая, но реально не журнализируется.
Заводи поле типа Comp, как нумератор записей (в галке- nRec)
Добавляй по этому полую индекс, где и указывай, что данное поле уникально, журнализируемо и заполняемо автоматом, например:
Код: Выделить всё
index1 = nRec(unique, surrogate, journal)
unique - уникальное
surrogate - заполняется автоматом уникальным значением, содержит в себе номер офиса
journal - используется при журнализации, заносится как номер записи в журнале, кстати
На счет restrict : данный ключик нужен для описания признака ограничивающего ссылочную целостность, т.е. при его использовании накладываются ограничения на модификации связанных таблиц, т.е. уже не банальное добавление таблиц в словарь, а фактически его изменение, что и заставляет отрубать службы протекта, журнализации со всеми вытекающими последствиями
Если я где-то ошибся, поправьте
Re: Создать документ нового типа
Ну на счет тормозов - какая-то мистика, нагрузку на систему твоя новая таблица не дает, единственно - это если она журнализируема и прописана в журнале, то именно при модификации записей в ней (ну понятно, что и при вставке с удалением) создается доп запись в журнале - не более.galover писал(а):Да, еще вспомнил главное ограничение на добавление своих таблиц. Помимо тормозов при обращении, созданные таблицы не журнализируются, хотя и стоят как журнализируемые. Такое поведение, если не чистить журнал и не отрубать протект. А поскольку чистить журнал никак нельзя, то остается одно - юзать стандартные таблицы Галактики
Re: Создать документ нового типа
Vitaliy
Спасибо КЭП. Все это я прекрасно знаю (и про journal и про restrict), хэлп есть, читать умею. Кроме того смотрел как в исходниках Галактики создаются таблицы. Попробуй сам, ради эксперимента, создать вот такую таблицу:
Если bat-ком, то я получаю такую ошибку (при том что таблица создается)
Как видно restrict нет, journal указан. Но таблица все равно не журнализируется (в настройках офиса таблица в списке журнализируемых стоит). Чтобы убедиться, достаточно завести про F7 новую запись прямо в Support и посмотреть что будет в журнале.
И да, на патчах Галактики, где требовалась докомпиляция словаря, также нужно было чистить журнал и рубить протект. Так что думаю без этого никак не обойтись.
Спасибо КЭП. Все это я прекрасно знаю (и про journal и про restrict), хэлп есть, читать умею. Кроме того смотрел как в исходниках Галактики создаются таблицы. Попробуй сам, ради эксперимента, создать вот такую таблицу:
Код: Выделить всё
create table s_Module "Программные модули"
with table_Code = 31600
with replace
with tableOptions branched
(
nRec : comp "Номер записи",
Code : word "Системный код модуля",
Name : string[200] "Наименование модуля",
Description : string "Описание назначения",
Params : longint "Дополнительные параметры",
LevelCode : string[20] "Код на уровне", // Только для сортировки
cModule : ref(s_Module) "Ссылка на вышестоящий модуль"
)
with index
(
index1 = nRec(unique, surrogate, journal),
index2 = Code(unique),
index3 = Name,
index4 = LevelCode,
index5 = cModule + Name,
index6 = cModule + LevelCode
);
если в Support, то без ошибки. Однако и так, и так результат один - таблица есть, журнализации нет.c:\GalProjects\Release\Tools\11\create.prj(23) Ошибка: Перед изменением структур
ы таблиц нужно выключить протект, журнализацию и почистить журнал (стр.23, поз.1
в c:\GalProjects\Release\Tools\11\create.prj)
<eof>
^
Как видно restrict нет, journal указан. Но таблица все равно не журнализируется (в настройках офиса таблица в списке журнализируемых стоит). Чтобы убедиться, достаточно завести про F7 новую запись прямо в Support и посмотреть что будет в журнале.
Мистика, не мистика, но тормоза наличествуют.на счет тормозов - какая-то мистика, нагрузку на систему твоя новая таблица не дает, единственно - это если она журнализируема и прописана в журнале, то именно при модификации записей в ней (ну понятно, что и при вставке с удалением) создается доп запись в журнале - не более.
И да, на патчах Галактики, где требовалась докомпиляция словаря, также нужно было чистить журнал и рубить протект. Так что думаю без этого никак не обойтись.
Re: Создать документ нового типа
попробовал самСпасибо КЭП. Все это я прекрасно знаю (и про journal и про restrict), хэлп есть, читать умею. Кроме того смотрел как в исходниках Галактики создаются таблицы. Попробуй сам, ради эксперимента, создать вот такую таблицу:
Создал файл test.lot
Код: Выделить всё
create table s_Module "Программные модули"
with table_Code = 31600
with replace
with tableOptions branched
(
nRec : comp "Номер записи",
Code : word "Системный код модуля",
Name : string[200] "Наименование модуля",
Description : string "Описание назначения",
Params : longint "Дополнительные параметры",
LevelCode : string[20] "Код на уровне", // Только для сортировки
cModule : ref(s_Module) "Ссылка на вышестоящий модуль"
)
with index
(
index1 = nRec(unique, surrogate, journal),
index2 = Code(unique),
index3 = Name,
index4 = LevelCode,
index5 = cModule + Name,
index6 = cModule + LevelCode
);
Проверил, таблица создана, добавил в журнализацию.
Создал файл :
Код: Выделить всё
interface ttttest 'tttttest' escclose, cyan;
create view;
handleevent
cmInit:
{
if getlast s_Module (index2)=tsOk
insert in s_Module set s_Module.Code:=s_Module.Code+1;
}
end;
end.
Протект был отключен на тестовой базе, но журнализация включена, журнал не вычищен. Все так и осталось после компиляции. Компилил Vip 5.4.28.
Код: Выделить всё
Чтобы убедиться, достаточно завести про F7 новую запись прямо в Support и посмотреть что будет в журнале.
п.с.: компилил не проектный файл, а подсовывал компилятору именно lot-файл, не вижу смысла в проектный файл втыкать создание таблицы, так как часто перекомпиливать фейс при отладке - логично, но с каждой перекомпиляцией фейса пересобирать табличку - не совсем правильно.
Re: Создать документ нового типа
У меня протект включен как раз. БД Oracle. vip 5.4.35Протект был отключен на тестовой базе, но журнализация включена, журнал не вычищен. Все так и осталось после компиляции. Компилил Vip 5.4.28.
Попробовал с KatMC, запись в журнал заносится! Потому как срабатывает триггер (БД Oracle). Даже если делать вставку сторонними средствами через ODBC, то все равно будет вставка в журнал. Да и через интерфейс пробовал, не работает журнал, хоть тресни.Попробуйте тоже самое с любой таблицей, к примеру с KatMC, тоже изменений в журнале не будет зарегистрировано.
Не толькоЖурнализация ведется по действиям через пользовательский интерфейс.
Какая разница, как назвать файл хоть lot, хоть vip. Обрабатывается по #make не расширение, а содержимое.п.с.: компилил не проектный файл, а подсовывал компилятору именно lot-файл
я тоже не вижу смысла, тем более что я не пересобираю проект каждый раз (у меня там и интерфейсов то нет, только create table), и делаю это ровно один раз.не вижу смысла в проектный файл втыкать создание таблицы, так как часто перекомпиливать фейс при отладке - логично, но с каждой перекомпиляцией фейса пересобирать табличку - не совсем правильно.
Re: Создать документ нового типа
На оракле утверждать не берусь, не проверял. Но все же мне кажется дело не в протекте, а в реализации докомпиляции словаря под оракл.У меня протект включен как раз. БД Oracle. vip 5.4.35
Может кто-нить попробует под оракл скомпилить прилагаемые файлы?
Разницы нет, просто по вашей ошибке не понятно на что ругаетсяКакая разница, как назвать файл хоть lot, хоть vip. Обрабатывается по #make не расширение, а содержимое.
Код: Выделить всё
c:\GalProjects\Release\Tools\11\create.prj(23) Ошибка: Перед изменением структур
ы таблиц нужно выключить протект, журнализацию и почистить журнал (стр.23, поз.1
в c:\GalProjects\Release\Tools\11\create.prj)
<eof>
^
На первасиве не прокатывает.Попробовал с KatMC, запись в журнал заносится! Потому как срабатывает триггер (БД Oracle). Даже если делать вставку сторонними средствами через ODBC, то все равно будет вставка в журнал.
С другой стороны интересно, почему у вас из суппорта создается, через строчник с ошибкой валится.
Блин, развернуть себе оракл, потестировать, а то как-то думалось, что отличий особо не должно быть, а тут вон оно что получается.
Re: Создать документ нового типа
galover
Тоже попробовал создать таблицу S_MODULE по вашему примеру. Добавить ее в список журналируемых в настройках Саппорта. А затем вставить пару записей. С помощью asql.exe выполнить запросы:
Результат на Первасиве все сработало сразу - записи в журнале появились.
Результат на MS SQL - журнал сразу не заработал. После чего я прогнал БД утилитой chkmssql.exe. С параметрами:
После этого удалил эти записи и вставил повторно. Все отлично журнал работает.
На Oracle тест лениво прогонять.
Попробуйте проверить свою БД утилитой ChkOra9.exe. За вставку в журнал на оракле отвечают триггеры и функции на сервере БД. Может их надо пересоздать. Для вновь добавленных таблиц после изменения настроек Саппорта.
Тоже попробовал создать таблицу S_MODULE по вашему примеру. Добавить ее в список журналируемых в настройках Саппорта. А затем вставить пару записей. С помощью asql.exe выполнить запросы:
Код: Выделить всё
insert s_Module set Code:=1, Name:='Hello';
insert s_Module set Code:=2, Name:='World';
Результат на MS SQL - журнал сразу не заработал. После чего я прогнал БД утилитой chkmssql.exe. С параметрами:
Код: Выделить всё
[ChkBase]
Out=out
StoredProcs=on
UsersAndRights=on
Compile=on
Journal=on
Fields=on
Indexes=on
Triggers=on
[DataBase]
DataBaseName=test
[SQLDriver]
SQLServer=ncacn_np:ORPS-SERVER642[\pipe\naps\query]
[Login]
UserName=larin
[DictVersion]
Version=52
Sum=-1601339646
На Oracle тест лениво прогонять.
Попробуйте проверить свою БД утилитой ChkOra9.exe. За вставку в журнал на оракле отвечают триггеры и функции на сервере БД. Может их надо пересоздать. Для вновь добавленных таблиц после изменения настроек Саппорта.
Re: Создать документ нового типа
Сдается мне что это все же ошибка, раз после создания таблиц нужно еще бубном стучать. Попробую в ТП написать. У кого есть Oracle, проверьте если не влом, подтверждается ли диагноз бага.
Re: Создать документ нового типа
Скорее всего, не создаются автоматом триггеры журнализации, как сказал LaaLaa. Чек с проверкой триггеров правит их.
Re: Создать документ нового типа
Ну что сказать, прогнал chkora9.exe с ChkBase.Triggers=on журнализация зафурычила. Посмотрим какие еще косяки вылезут. Всем спасибо за участие.