Опубликовано SergeyBykov в ср, 17/06/2009 - 19:27.
ИМХО, Category из sysdatabases тут не причем. Если верить сообщению, то ты пытаешься из копии каталога с метаданными, подключиться к БД, у которой прописан другой каталог.
У тебя метаданные 1С где лежат - на диске или в БД на SQL?
Да я ошибся Category тут ни при чем, а проблема в опубликовании таблицы _1SCONNECT. Если ее не опубликовывать, то все ок, вроде. Дело в том, что схему опубликованной базы менять нельзя, а 1С видимо чтото меняет, но ответ ее абсолютно не адекватен.
Опубликовано SergeyBykov в чт, 18/06/2009 - 11:12.
А ты обрати внимание, что делает 1С 7.7, когда запускается.
Она проверяет все объекты своей БД, и если они отличаются от ее описания, то как раз и выдает такое сообщение.
sp она, ИМХО, тупо пересоздает, а вот с таблицами видимо так постпать не может.
А сравнивает она структуру скорее всего тупо: по символьно скрипт у себя и скрипт из базы.
Это так почему-то пересоздается одна таблица _1SConnect. Ну и ладно, я ее просто вычеркнул из репликации. Теперь репликация и 1С клиенты работают совместно. Тебе случайно не надо, чтобы несколько 1С версией 7.7 собирались в одной базе данных, например, 1С 8.1?
Хм, может и вправду не то делаю?
Вначале я создаю пустой каталог и в этом каталоге размещаю файлы БД db.mdf and db.ldf. Далее запускаю конфигуратор и добавляю новую бд, указывая этот пустой каталог с файлами базы. В диалоге идет запрос а какую версию 1С хотите? Я говорю сиквельную. Мне говорят ок. Далее я заполняю информацию доступа к сиквелу и загружаю данные из файловой конфигурации. Все с такой бд и работаю.
Все прекрасно работает с несколькими пользователями до тех пор пока я не сделаю эту базу данных опубликованной на сервере, чтобы данные реплицировать (это майкрософтовская репликация и никакого отношения к 1С не имеет). Как только я базу опубликовал так сразу появляется ошибка. Убрал репликацию - ошибка пропала.
Я посмотрел в каталог там лежат файлы *.md and *.dds, *.dba, *.cfg
Не понял про метаданные в БД.
прецендент обхода 1С API
Дописал сегодня решение и хочу сказать, что получил большое удовольствие. Все работает как часы. Могу предложить свои услуги в разработке прямых запросов к 1С версия 77 базе данных. Да в принципе и 8.1. А также решении задач, требующих групповых операций в рамках сиквела.
Считаю, что заявлен прецендент обхода 1С API разработчиков с целью повышения производительности системы 1С.
Единственно, что я поменял в ядре nexus так это задокументировал 'Документ уже открыт!!!'. Понятно, что последствия могут быть, но мешает.
Еще вариант может быть такой добавить вместо задокументированного
if exists(select * from Detailed where u=@@spid and UDN=@UDN )
and not exists (select * from Detailed where u=@@spid and UDN=@UDN and ValueType=8)
begin raiserror('Документ уже открыт!!!', 11, 11) return 1 end
ALTER procedure [dbo].[PreDetailEx]
@UDN integer,
@ViewMode varchar(32), -- название моды
@IsEdit int -- 1 просмотр, 2 - редактирование delete detailed
AS
declare @iRet int
--if exists(select * from Detailed where u=@@spid and UDN=@UDN )
--begin raiserror('Документ уже открыт!!!', 11, 11) return 1 end
exec @iRet=PreDetail @UDN, @ViewMode, @IsEdit
if @iRet <> 0 return @iRet
select * from ProcParam (nolock) where u=@@spid and UDN=@UDN
ValueType=8 - это ускоренный вывод грида только для просмотра. Я использую его в виде отчета.Теперь, если сейчас попытаться воспользоваться для этого же документа любым методом, скажем, посмотреть информацию, то тебе дадут по рукам и скажут, что документ уже открыт. Но я то его открыл только для чтения, а потом посмотрел отчет и захотел чтото посмотреть или изменить. А мне сообщение, что документ уже открыт. Вот это и мешает.
Добавил информацию о трюке. Это все класс "код", который был написан лет 5 назад. Теперь уже и не вспомнить как, но работает.
Самое интересное, что он дает наглядное представление, как можно сделать конвертацию классов. То есть класс объекта - это не абсолют и его можно спокойно поменять.
Опубликовано Serguei_Tarassov в ср, 10/06/2009 - 15:34.
Заполнение из таблицы впечатляет :) Осталось добавить настраиваемую схему отображения любой таблицы на панельку справа.
Но "толстый" клиент, который сейчас принято называть "умным" (smart), вовсе не означает большой трафик, скорее, наоборот: у толстяка многократно большие возможности кешировать данные и обрабатывать их локально. Другое дело, что нерадивые разработчики этим не умеют пользоваться
Если кто-то обижен, то прошу извинить и буду называть Сеню умным:). Конечно это альтернативное направление, когда умный клиент использует базу как склад. Пришел взял, что надо, положил, что решил сам, и теперь сам работает у себя. Я не сторонник такого подхода так как с несколькими умными клиентами групповой работы не получается. Толпа мозгов и мозг толпы - это не одно и то же.
Тут мой сын придумал афоризм.
С голых по нитке, налоговой рубашка.:)
Опубликовано Serguei_Tarassov в чт, 11/06/2009 - 10:35.
Кеширование есть всегда (для тонких клиентов - в неких буферах сервера), система оповещений принципиально не отличается. Другое дело, что ее далеко не всегда реализуют. Для клиентского кеша есть разработанные механизмы на уровне DataSet. В ORM/ОРП также есть встроенные механизмы хотя бы на уровне проверки timestamp объекта при записи данных в базу.
1C плюха
1C плюха
Не уверен, но может кто знает решение?
ИМХО, Category из
ИМХО, Category из sysdatabases тут не причем. Если верить сообщению, то ты пытаешься из копии каталога с метаданными, подключиться к БД, у которой прописан другой каталог.
У тебя метаданные 1С где лежат - на диске или в БД на SQL?
Да я ошибся
Да я ошибся Category тут ни при чем, а проблема в опубликовании таблицы _1SCONNECT. Если ее не опубликовывать, то все ок, вроде. Дело в том, что схему опубликованной базы менять нельзя, а 1С видимо чтото меняет, но ответ ее абсолютно не адекватен.
select * from _1SCONNECT
use [torg_planeta]
exec sp_addmergearticle
@publication = N'torg_planeta',
@article = N'_1SCONNECT',
@source_owner = N'dbo',
@source_object = N'_1SCONNECT',
А ты обрати
А ты обрати внимание, что делает 1С 7.7, когда запускается.
Она проверяет все объекты своей БД, и если они отличаются от ее описания, то как раз и выдает такое сообщение.
sp она, ИМХО, тупо пересоздает, а вот с таблицами видимо так постпать не может.
А сравнивает она структуру скорее всего тупо: по символьно скрипт у себя и скрипт из базы.
Это так
Это так почему-то пересоздается одна таблица _1SConnect. Ну и ладно, я ее просто вычеркнул из репликации. Теперь репликация и 1С клиенты работают совместно. Тебе случайно не надо, чтобы несколько 1С версией 7.7 собирались в одной базе данных, например, 1С 8.1?
Хм, может и
Хм, может и вправду не то делаю?
Вначале я создаю пустой каталог и в этом каталоге размещаю файлы БД db.mdf and db.ldf. Далее запускаю конфигуратор и добавляю новую бд, указывая этот пустой каталог с файлами базы. В диалоге идет запрос а какую версию 1С хотите? Я говорю сиквельную. Мне говорят ок. Далее я заполняю информацию доступа к сиквелу и загружаю данные из файловой конфигурации. Все с такой бд и работаю.
Все прекрасно работает с несколькими пользователями до тех пор пока я не сделаю эту базу данных опубликованной на сервере, чтобы данные реплицировать (это майкрософтовская репликация и никакого отношения к 1С не имеет). Как только я базу опубликовал так сразу появляется ошибка. Убрал репликацию - ошибка пропала.
Я посмотрел в каталог там лежат файлы *.md and *.dds, *.dba, *.cfg
Не понял про метаданные в БД.
*.md - метаданные
*.md - метаданные 1С
md - metadata я понял.
md - metadata я понял. Вопрос как их хранить в БД?
Не знаю, может и
Не знаю, может и нет такой опции.
прецендент обхода 1С API
прецендент обхода 1С API
Дописал сегодня решение и хочу сказать, что получил большое удовольствие. Все работает как часы. Могу предложить свои услуги в разработке прямых запросов к 1С версия 77 базе данных. Да в принципе и 8.1. А также решении задач, требующих групповых операций в рамках сиквела.
Считаю, что заявлен прецендент обхода 1С API разработчиков с целью повышения производительности системы 1С.
Единственно, что я поменял в ядре nexus так это задокументировал 'Документ уже открыт!!!'. Понятно, что последствия могут быть, но мешает.
Еще вариант может быть такой добавить вместо задокументированного
if exists(select * from Detailed where u=@@spid and UDN=@UDN )
and not exists (select * from Detailed where u=@@spid and UDN=@UDN and ValueType=8)
begin raiserror('Документ уже открыт!!!', 11, 11) return 1 end
ALTER procedure [dbo].[PreDetailEx]
@UDN integer,
@ViewMode varchar(32), -- название моды
@IsEdit int -- 1 просмотр, 2 - редактирование delete detailed
AS
declare @iRet int
--if exists(select * from Detailed where u=@@spid and UDN=@UDN )
--begin raiserror('Документ уже открыт!!!', 11, 11) return 1 end
exec @iRet=PreDetail @UDN, @ViewMode, @IsEdit
if @iRet <> 0 return @iRet
select * from ProcParam (nolock) where u=@@spid and UDN=@UDN
Расскажи, как
Расскажи, как это мешало?
ValueType=8 - это
ValueType=8 - это ускоренный вывод грида только для просмотра. Я использую его в виде отчета.Теперь, если сейчас попытаться воспользоваться для этого же документа любым методом, скажем, посмотреть информацию, то тебе дадут по рукам и скажут, что документ уже открыт. Но я то его открыл только для чтения, а потом посмотрел отчет и захотел чтото посмотреть или изменить. А мне сообщение, что документ уже открыт. Вот это и мешает.
Очень
Очень интересно.
Трюк с "имя папки = имя таблицы" не понял как устроен, но впечатляет. Магия!!!
Добавил
Добавил информацию о трюке. Это все класс "код", который был написан лет 5 назад. Теперь уже и не вспомнить как, но работает.
Самое интересное, что он дает наглядное представление, как можно сделать конвертацию классов. То есть класс объекта - это не абсолют и его можно спокойно поменять.
А что за нексус?
А что за нексус? Гугол даёт много ссылок, непонятно, какой именно имеется в виду. Поэтому непонятен контекст всего этого.
Вот этот
http://nexus.arbinada.com
СТ я забыл как
СТ я забыл как делать ссылку активной как у тебя. Напомни плз.
Стандартно
Стандартно: <a href="http://www.arbinada.com">Arbinada</a>
Шарман
Заполнение из таблицы впечатляет :) Осталось добавить настраиваемую схему отображения любой таблицы на панельку справа.
Но "толстый" клиент, который сейчас принято называть "умным" (smart), вовсе не означает большой трафик, скорее, наоборот: у толстяка многократно большие возможности кешировать данные и обрабатывать их локально. Другое дело, что нерадивые разработчики этим не умеют пользоваться
Если кто-то
Если кто-то обижен, то прошу извинить и буду называть Сеню умным:). Конечно это альтернативное направление, когда умный клиент использует базу как склад. Пришел взял, что надо, положил, что решил сам, и теперь сам работает у себя. Я не сторонник такого подхода так как с несколькими умными клиентами групповой работы не получается. Толпа мозгов и мозг толпы - это не одно и то же.
Тут мой сын придумал афоризм.
С голых по нитке, налоговой рубашка.:)
Кэширование на
Кэширование на клиенте пораждает такую мощную и сложную систему оповещения, что ни кто с этим связываться не хочет.
Кеширование есть всегда
Кеширование есть всегда (для тонких клиентов - в неких буферах сервера), система оповещений принципиально не отличается. Другое дело, что ее далеко не всегда реализуют. Для клиентского кеша есть разработанные механизмы на уровне DataSet. В ORM/ОРП также есть встроенные механизмы хотя бы на уровне проверки timestamp объекта при записи данных в базу.