fixin (fixin) wrote,
fixin
fixin

Category:

Беседы с Ненавижу 1С о альтернативе 1с.



Мои диалоги с Ненавижу 1С об альтернативе 1С.


В том далеком 2007 году хотели написать "убийцу 1С".




Nenavizhu 1s (1/03/07)
привет


 Nenavizhu 1s (1/03/07)
прикольный антиспам


 Nenavizhu 1s (1/03/07)
я по поводу темы "Мысли о написании альтернативы 1С"


 203136830 (1/03/07)
хай


 203136830 (1/03/07)
давай напишем


 Nenavizhu 1s (1/03/07)
давай
я высказал несколько идей, мой ник на мисте "Ненавижу 1С"


 203136830 (1/03/07)
на чем писать будем?


 203136830 (1/03/07)
как насчет java, чтобы работало под винды и линухи?


 203136830 (1/03/07)
ссори, пока нет интернета


 Nenavizhu 1s (1/03/07)
я пишу на делфи, попытки создать типа конфигуратора


 203136830 (1/03/07)
меня тоже 1с задолбала


 203136830 (1/03/07)
у меня есть идея, как это организовать...


 203136830 (1/03/07)
;-)


 Nenavizhu 1s (1/03/07)
и как?


 203136830 (1/03/07)
а на дельфях можно без переписания кода запустить на линухи?


 Nenavizhu 1s (1/03/07)
мне надо будет подучить джаву если на ней, хорошо программирую на делфи и 1С, посредственно на С++ и ПХП


 203136830 (1/03/07)
я хочу чтобы это был свободный и кроссплатформенный код


 203136830 (1/03/07)
ты что юзаешь в качестве сервера бд?


 Nenavizhu 1s (1/03/07)
ну у них есть некий Kilyx кросплатформенный, но не юзал


 203136830 (1/03/07)
ты конфу как хранишь? в каком виде?


 Nenavizhu 1s (1/03/07)
планируется универсальность, пока Файрберд, но есть класс диалектов СКЛ (1/03/07)
в таблицах самой базы, то есть некие таблицы моих метаданных


 203136830 (1/03/07)
правильная мысля...


 203136830 (1/03/07)
то бишь конфа, как в навижн, меняется динамически.


 Nenavizhu 1s (1/03/07)
да


 203136830 (1/03/07)
объект справочник, документ уже написал?


 Nenavizhu 1s (1/03/07)
нет, я пока платформу создаю предопределенный класс на уровне платформы будет один, от него все стартуют и наследуют, множ. наследования нет


 203136830 (1/03/07)
ну хорошо, от этого объекта наследует справочник, ты пробовал реализовать объект справочника?


 203136830 (1/03/07)
то бишь когда я добавляю в метаданные новый справочник, триггер создает таблицу базы данных


 Nenavizhu 1s (1/03/07)
нет, я еще и поля класса толком не создал, времени нет, а щас в командировке вообще


 203136830 (1/03/07)
когда добавляю реквизит, создает новую колонку


 203136830 (1/03/07)
гыгыгы


 Nenavizhu 1s (1/03/07)
если класс не абстрактный, то создается


 203136830 (1/03/07)
далее - как собираешьс хранить ссылки?


 203136830 (1/03/07)
предлагаю такой вариант - если тип известен, то 4 байта целое.


 Nenavizhu 1s (1/03/07)
если в абстрактном создашь реквизит, то создастся во всех первых неабстрактных


 203136830 (1/03/07)
если тип неизвестен, то 8 байт - 4 байта на номер класса, 4 байта на номер экземпляра


 203136830 (1/03/07)
если составной тип, то используются также таблицы для хранения строки, даты, числа, многострочного текста


 Nenavizhu 1s (1/03/07)
я тебе позже вышлю некую схему таблиц метаданных


 Nenavizhu 1s (1/03/07)
как я вижу


 203136830 (1/03/07)
например ссылка 12.14 означает ссылку на таблицу (1/03/07)
вышли, надеюсь это не ГУИД как в 1С?


 203136830 (1/03/07)
тут еще вопрос в индексируемости полей...


 203136830 (1/03/07)
давай на Java напишем, я ее тоже не знаю, хочетца поизучать


 Nenavizhu 1s (1/03/07)
ты вообще в Москве?


 Nenavizhu 1s (1/03/07)
я вот в Краснодаре, а сейчас в Изобильный уехал (1/03/07)
джава требует машину


 203136830 (1/03/07)
я в москве


 203136830 (1/03/07)
ну и фиг с ней с машиной


 203136830 (1/03/07)
зато джава больше похожа на си


 203136830 (1/03/07)
окей, вышли мне свое видение метаданных, я посмотрю


 Nenavizhu 1s (1/03/07)
ок, только позже


 203136830 (1/03/07)
гут


 Nenavizhu 1s (1/03/07)
fixin@mail.ru  сюда?


 203136830 (1/03/07)
ага..


 203136830 (1/03/07)
сюды


 Nenavizhu 1s (1/03/07)
уже ушло


 203136830 (1/03/07)
получил


 203136830 (1/03/07)
изучаю


 203136830 (1/03/07)
ахренеть


 203136830 (1/03/07)
в таком виде лучше не представлять данные - нихера не понятно. ;-)


 203136830 (1/03/07)
а скомпилированный класс как хранить?


 Nenavizhu 1s (1/03/07)
как БЛОБ


 Nenavizhu 1s (1/03/07)
весь код как БЛОБ


 203136830 (1/03/07)
а в память подгружать по мере надобности?


 203136830 (1/03/07)
а код писать в чем?


 203136830 (1/03/07)
в дельфях?


 203136830 (1/03/07)
нужен какой-то язык без явной типизации.


 Nenavizhu 1s (1/03/07)
почему без явной?


 203136830 (1/03/07)
чтобы можно было писать:
а=Новый Class("")
как ты этот кусок запиешшь при явной типизации?


 203136830 (1/03/07)
откуда прога будет знать, что у справочника есть метод выбрать элементы?


 203136830 (1/03/07)
кстати, как справочник по ангельски?


 Nenavizhu 1s (1/03/07)
я уже передумал так писать, на сервере нада так
FOR SELECT OBJECT FROM [Справочник.Номенклатура] DO
BEGIN
END


 Nenavizhu 1s (1/03/07)
> кстати, как справочник по ангельски?
reference


 203136830 (1/03/07)
а как ссылка тогда?


 203136830 (1/03/07)
FOR SELECT OBJECT FROM [Справочник.Номенклатура] DO
BEGIN
END


это на каком языке?


 Nenavizhu 1s (1/03/07)
объектный СКЛ


 203136830 (1/03/07)
NRB_TRIGGER - это что?


 Nenavizhu 1s (1/03/07)
триггеры классов


 203136830 (1/03/07)
ха, ненавижн, у тебя получается два языка - один скл-ный, другой для кодеюнитов?


 203136830 (1/03/07)
триггеры классов = методы объектов в терминах 1с?


 Nenavizhu 1s (1/03/07)
один язык, просто на сервере операции с формами не допустимы


 203136830 (1/03/07)
а какой язык?


 203136830 (1/03/07)
что за язык?


 Nenavizhu 1s (1/03/07)
триггеры не методы, они нужны для инкапсуляции полей


 Nenavizhu 1s (1/03/07)
язык - симбиоз объектного и скуль, как в аксапте


 203136830 (1/03/07)
предлагаешь его интерпретировать или как?


 Nenavizhu 1s (1/03/07)
на сервере транслируется в обычный скуль, на клиенте в псевдокод


 203136830 (1/03/07)
про клиента подробнее


 203136830 (1/03/07)
про сервер ты имеешь в виду на такой же язык, что написаны хранимые процедуры?


 Nenavizhu 1s (1/03/07)
про сервер да


 203136830 (1/03/07)
ты хочешь весь код вынести на сервер?
а как же оле и т.п.?


 Nenavizhu 1s (1/03/07)
про клиент, там допустимо такое:
//делаем кнопку недоступной
Button.Enabled:=false;
//а потом зачем то удаляем запись
DELETE FROM MyClass WHERE(1/03/07)
аксапту видел с ее MorphX?


 Nenavizhu 1s (1/03/07)
вообще есть безусловно скользкие моменты и нужна документация сначала


 203136830 (1/03/07)
хорошо, ты хочешь интерпретировать язык?


 Nenavizhu 1s (1/03/07)
ну в общем то да


 203136830 (1/03/07)
погодь. занят


 Nenavizhu 1s (1/03/07)
а мне думаешь легко, я воще в командировке...


 203136830 (1/03/07)
как то все это сложно слишком - код на сервере + код на клиенте?


 203136830 (1/03/07)
может делать если надо вставки для кода на сервере на хранимых процедурах
думаешь стоит ориентироваться на то, что сервер умеет выполнять хранимые процедуры или последовательности операторов?


 Nenavizhu 1s (1/03/07)
приведенный код возможен, но неправильный с идеологии по хорошему мы должны вызвать на клиенте метод класса, а методы класса это хранимая процедура


 Nenavizhu 1s (1/03/07)
в моей идеологии объект это запись и два объекта ссылаться на одну запись не могут, это просто один и тот же объект


 Nenavizhu 1s (1/03/07)
запись таблицы класса


 Nenavizhu 1s (1/03/07)
а код на клиенте это методы форм класса, но не методы класса!


 203136830 (1/03/07)
а не кажется тебе, что в таком случае методы класса будут ограничены синтаксисом СКЛ и поэтому будут более ущербны чем в 1С


 203136830 (1/03/07)
тогда весь не серверный код придется выносить в формы и ты получишь 77 а не 80


 203136830 (1/03/07)
может лучше сделать методы для выбора таблиц
для перебора


 203136830 (1/03/07)
а уже затем создать объект запрос, который будет выполнять сложный запрос?


 203136830 (1/03/07)
а все хранимые процедуры использовать только в интерфейсе к конкретной скл-базе?


 203136830 (1/03/07)
например:
а=Новый ("")
тогда будет независимо от конкретного движка базы данных.


 203136830 (1/03/07)
хотя возможнось юзать хранимые процедуры конкртеной бд можно оставить как бонус


 203136830 (1/03/07)
в таком случае можно использовать заранее скомпиленные модули


 Nenavizhu 1s (1/03/07)
что есть "не серверный код"? все не серверное делается на клиенте, необязательно в форме, ну скажем общий клиентский модуль


 Nenavizhu 1s (1/03/07)
и в чем такое ограничение СКЛ? его можно
ты хочешь переплюнуть 8ку или сделать простую, прозрачную систему?


 Nenavizhu 1s (1/03/07)
хочу


 Nenavizhu 1s (1/03/07)
хочу прозрачную и переплюнуть по функционалу


 203136830 (1/03/07)
тебе придется озадачиваться интертрепатором.


 Nenavizhu 1s (1/03/07)
придеца


 203136830 (1/03/07)
а если сделать просто, то получишь код на java, он сам будет интерпретироваться машиной


 203136830 (1/03/07)
как минимум на огромный кусок меньше работы


 203136830 (1/03/07)
а скл-механику можно реализовать через объект СКЛЗапрос


 203136830 (1/03/07)
ккак по англицки проведен?


 Nenavizhu 1s (1/03/07)
я бы использовал Executed


 Nenavizhu 1s (1/03/07)
а вообще есть же англоязычные синонимы в 1С


 Nenavizhu 1s (1/03/07)
и не запирайся ты на 1С, не надо копировать так конкретно


 203136830 (1/03/07)
Posted, нашел


 203136830 (1/03/07)
да лана, можно и 1с повторить.


 Nenavizhu 1s (1/03/07)
мне Провести(2/03/07)
привет


 203136830 (2/03/07)
хай


 203136830 (2/03/07)
слушай, если не писать интертрепатор, как хранить код?


 Nenavizhu 1s (2/03/07)
как дела?


 203136830 (2/03/07)
я вот над этим запарился счас


 203136830 (2/03/07)
Хочу хранить код (2/03/07)
псевдокод


 203136830 (2/03/07)
это как?


 203136830 (2/03/07)
а как из псевдокода будут видны другие классы?


 203136830 (2/03/07)
например а=новый (2/03/07)
аллё!


 Nenavizhu 1s (2/03/07)
алле, некогда мне, да не нужен мне
а=новый (2/03/07)
это потому что у тя интертрепатор


 203136830 (2/03/07)
Например я описал классы для базовых элемнетов - документов, справочников, регистров накопления и т.д.
Допустим я объявляю новый класс справочника номенклатуры Reference_Goods, наследуемый от класса справочники Reference.
Так вот, конкретные вопросы:
1. Как мне сделать, чтобы при выполнении кода я мог сконструировать экземпляр этого класса, т.е. где должно быть размещено хранилище классов.
2. Можно скомпилировать только этот класс (2/03/07)
1. Как мне сделать, чтобы при выполнении кода я мог сконструировать экземпляр этого класса, т.е. где должно быть размещено хранилище классов.
2. Можно скомпилировать только этот класс (Documents, References, Document_Invoice:Documents, Document_Income:Documents, Reference_Goods:References
Нужно их как-то объединить, чтобы можно было создавать любой из этих классов динамически и обращаться к свойствам и методов этих классов.


То бишь работа приложения начнется с создания класса Application.
Метод Application:OnStart может выглядеть так


S=New Reference_Users; //Создаем класс справочника
//Как вариант можно так
//S=References.Create(2/03/07)
вот поэтому ты вынужден использовать интерпретатор свой а не джава


 203136830 (2/03/07)
не понял?


 203136830 (2/03/07)
мне на мисте грят, что джава - херня
предлагают Kylyx. Это правда что на Kylyx код можно просто перекомпилить и получишь для линух, а не для виндов?


 203136830 (2/03/07)
а там язык пасцаль или си


 203136830 (2/03/07)
по моему ты все хочешь сделать слишком сложно.
у меня получается на уровне 1с 77 / Навижн и это совсем неплохо для начала!


 Nenavizhu 1s (2/03/07)
паскаль


 203136830 (2/03/07)
вот скажи мне  - результат скл запроса хранится на сервере, как временная таблица?


 203136830 (2/03/07)
а файер фокс много места занимает?


 203136830 (2/03/07)
т.е. файер берд


 Nenavizhu 1s (2/03/07)
нет не много занимает


 203136830 (2/03/07)
и он бесплатный, значитцо?
а админить его сильно надо?


 203136830 (2/03/07)
гы, мне осталось решить проблему как хранить код, сегодня то что у тя спрашивал, спрошу на мисте


 203136830 (2/03/07)
вот если бы это был VBA или JAVA, там языки нетипизированные и запросто можно писать
x=y.method(2/03/07)
а так неохота писать ядро на Kylyx, а прикладной уровень на нетипизированном языке


 203136830 (2/03/07)
неужели в pascal нет типа вроде Variant


 203136830 (2/03/07)
бейсика


 203136830 (2/03/07)
или объект с методами


 203136830 (2/03/07)
т.е. типа - объект с методами



 Nenavizhu 1s (2/03/07)
есть


 Nenavizhu 1s (2/03/07)
все там есть, но причем здесь паскаль на котором ты платформу пишешь и язык самой платформы?


 203136830 (2/03/07)
а как это в паскале называется?


 203136830 (2/03/07)
да при том, батенька!


 Nenavizhu 1s (2/03/07)
varianr


 Nenavizhu 1s (2/03/07)
variant


 203136830 (2/03/07)
я пишу класс application


 203136830 (2/03/07)
класс documents


 203136830 (2/03/07)
класс references


 203136830 (2/03/07)
класс справочника номенклатуры будет наследовать от класса references


 203136830 (2/03/07)
т.е. пользовательский класс будет наследовать от системного класса


 203136830 (2/03/07)
нужна только динамическая компиляция класса (2/03/07)
но хорошо, как прога поймет, что если x - variant, то как она поймет как ей выполнять метод X.PRINT(5/03/07)
Раздельная компиляция классов
Известно, что в Windows можно использовать DLL, т.е. откомпилировать некий набор функций отдельно и сохранить его в виде DLL, чтобы по мере надобности загрузить в память.


В связи с этим вопрос - а можно ли откомпилировать отдельно класс (5/03/07)
Вопрос по IDispatch.
Если у меня в коде встречается вызов
For i=1 to 100
     X.Print(5/03/07)
Вопрос по вызовам методов.
Если программист пишет в коде:
Y="Print";
X[Y](5/03/07)
Какой я вижу систему
Код системы состоит из классов, которые могут наследовать друг от друга.


Система - это компилятор, который обеспечивает большее быстродействие кода, чем интерпретатор.


Каждый класс можно компилируется в отдельный модуль. Чтобы откомпилировать модуль, не нужны исходники базовых классов (5/03/07)
Предлагаемая схема
Будем рассматривать только методы (мы хотим динамически добавлять/удалять классы, то должен существовать некоторый массив классов Сlasses.


Каждый класс имеет свойство ClassNo, которое определяет под каким индексом в массиве Classes хранится описание этого класса. Это свойство устанавливается после добавления нового класса в массив классов.


Каждое описание классов содержит массив Methods следующей структуры: название метода, адрес метода. Этот массив служит для быстрого определения адреса метода по его названию. Массив обычно упорядочен по названию метода для ускорения поиска адреса метода.


Каждый класс содержит статический (    Addr=Classes(         X: 1
          Y: 2
          Z: 3
     LocalClasses:
          B: 2
          C: 3
     Function X(1
          Y: 2
          Z: 3
     LocalClasses:
          A: 1
          B: 2
          C: 3
     Function Z(2
          Z: 3
     LocalClasses:
          A: 1
          B: 2
     Function Y(    Y     A::Y
o     Z     A::NoMethod
2.     B
o     X     B::X
o     Y     B::NoMethod
o     Z      A::Z
3.     C
o     X     C::NoMethod
o     Y     C::Y
o     Z      C::Z



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


 


 Nenavizhu 1s (7/03/07)
а ты пока это прочти http://www.forum.mista.ru/topic.php?id=258915


 203136830 (7/03/07)
текст


 Nenavizhu 1s (7/03/07)
Решил написать платформу "а-ля 1С", но не толстый клиент и компилятор как предлагает Гений. Среда будет объектно-ориентированная. Язык - симбиоз процедурного (вместо нее технология триггеров (
--выводим суммы продаж по организациям
SELECT Persone.Department.Organization as Org, SUM(
UPDATE self
SET ....
3. Вызов метода для нескольких объектов:
EXEC MyMethod(7/03/07)
а кто будет думать, где выполнять код - програмист?


 203136830 (7/03/07)
не вззззлетит


 203136830 (7/03/07)
хотя может и взлетит, но неудобно


 203136830 (7/03/07)
если бы код сам определял где ему выполняться.



 Nenavizhu 1s (7/03/07)
методы класса на серваке, методы форм на клиенте


 Nenavizhu 1s (7/03/07)
ну как будет нет прочтешь все остальное, хотя там как обычно флуд


 203136830 (7/03/07)
гы, значит все, что не влезет в скл-синтаксис, выносить в формы????


 203136830 (7/03/07)
нах


 Nenavizhu 1s (7/03/07)
я не вижу такого, что не влезет в скуль синтаксис, но должно делаться на сервере


 203136830 (7/03/07)
оки почитаю


 203136830 (7/03/07)
задай этот вопрос юзверям - все ли можно сделать на скл


 Nenavizhu 1s (7/03/07)
юзверям пох где, лишь бы правильно и быстро


 203136830 (7/03/07)
пойми, с клиента можно так же быстро управлять данными на скл сервере


 203136830 (7/03/07)
если не качать их на клиента


 203136830 (7/03/07)
= юзверям пох где, лишь бы правильно и быстро
о программистах речь и о функциональности


 Nenavizhu 1s (7/03/07)
чтобы управлять надо знать чем управлять, а данные на серваке


 203136830 (7/03/07)
приведи хоть один пример


 Nenavizhu 1s (7/03/07)
думаю можно все, тем более диалекты скулей ща оч. развиты


 Nenavizhu 1s (7/03/07)
пример чего?


 203136830 (7/03/07)
когда клиент не сможет управлять


 Nenavizhu 1s (7/03/07)
тебе придется качать данные на клиент, чтоб оперировать ими


 203136830 (7/03/07)
сделай обертку класво


 Nenavizhu 1s (7/03/07)
не понял тебя


 203136830 (9/03/07)
в xslt сечешь?


 Nenavizhu 1s (9/03/07)
неа


 Nenavizhu 1s (16/03/07)
привет, безработным


 

Tags: , Альтернатива
Subscribe

promo fixin december 31, 2037 16:57 1417
Buy for 30 tokens
UPD: Друзья, в августе 2019 года блог переехал на http://fixinchik.ru. Welcome! Добро пожаловать в журнал Осипова Сергея Александровича, известного также как Fixin и Гений 1С. Рекомендую ознакомиться с Часто Задаваемыми Вопросами обо мне. Что я хочу в подарок - список. Мой проект "…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 20 comments