OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

реализовать для совместимости с 1С кодом функцию ЗначениеИзСтрокиВнутр и обратную

Open EvilBeaver opened this issue 11 years ago • 13 comments

Originally reported by: Alexey Lustin (Bitbucket: allustin, GitHub: allustin)


ЗначениеИзСтрокиВнутр (ValueFromStringInternal) Синтаксис:

ЗначениеИзСтрокиВнутр(<Строка>) Параметры:

<Строка> (обязательный)

Тип: Строка. Системное представление значения в строковом виде. Возвращаемое значение:

Тип: Произвольный. Значение, полученное из строкового системного представления. Описание:

Преобразует значение из строкового системного представления во внутреннее.

и по аналогии

ЗначениеВСтрокуВнутр (ValueToStringInternal) Синтаксис:

ЗначениеВСтрокуВнутр(<Значение>) Параметры:

<Значение> (обязательный)

Тип: Произвольный. Преобразуемое значение


  • Bitbucket: https://bitbucket.org/EvilBeaver/1script/issue/85

EvilBeaver avatar Nov 25 '14 07:11 EvilBeaver

Original comment by Alexey Lustin (Bitbucket: allustin, GitHub: allustin):


Я не холивара хотел - я хотел некоего поведения при копипасте 1С-ного кода в скрипты

Пусть хотя-бы скрипт при компиляции обрабатывая неизвестную функцию ЗначениеИзСтрокиВнутр/ВСтрокуВнутр что-нибудь говорит отличное от "Неизвестный литерал". Например "Error - использование внутренней сериализации 1С платформы в скриптах запрещено, аналог - <что-то>"

EvilBeaver avatar Nov 26 '14 09:11 EvilBeaver

Original comment by EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver):


@awa15, для меня это сложнее, хоть с доводами я и согласен.

EvilBeaver avatar Nov 25 '14 14:11 EvilBeaver

Original comment by Валерий Агеев (Bitbucket: awa15, GitHub: awa15):


Это, безусловно, холиварная тема. Для одних важнее читабельность кода, для других производительность. Но не суть. Я только хотел сказать, что совместимость сериализации с 1С немного труднее в реализации, имхо, но в будущем будет вызывать меньше проблем при портировании кода из 1С. В конечном итоге, для CLR-сериализации можно реализовать и отдельные функции, не совместимые с 1С. Все, что для этого надо, прописать GUID типов 1С в движке и реализовать для каждого типа несложные методы сериализации и десериализации.

EvilBeaver avatar Nov 25 '14 12:11 EvilBeaver

Original comment by EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver):


Имхо, это не трюки, это адские костыли. Я сторонник того, чтобы код отражал намерения автора. Эта свистопляска вокруг сериализованных строк меня удручает. Имхо, я бы такое разрешал делать только если бы мы делали Higload сервис обработки строк на 1С и выжимали бы всю возможную производительность. Сдается мне, такого никто не делает. Код должен быть в первую очередь читабельным.

EvilBeaver avatar Nov 25 '14 12:11 EvilBeaver

Original comment by Валерий Агеев (Bitbucket: awa15, GitHub: awa15):


Иногда функции ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр используют для всяких трюков типа такого http://infostart.ru/public/71130/#Pro_bystrye_massivy При этом, кмк, сделать сериализацию совместимой с 1С не так сложно. По большому счету нужны сериализация примитивных типов, коллекций (Список значений, Таблица значений, Дерево значений, Массив) и системных перечислений. Зато возможность сделать в 1С ЗначениеВФайл какой-нибудь ТЗ, а в скрипте ЗначениеИзФайла может пригодиться.

EvilBeaver avatar Nov 25 '14 11:11 EvilBeaver

Original comment by Alexey Lustin (Bitbucket: allustin, GitHub: allustin):


Да - еще раз пересмотрел код и свой и чужой.

Функции в основном используются для служебных целей, и в основном для ссылочных типов объектов базы данных ;-)

Поэтому видимо нужно просто использовать штатную сериализацию CLR. Она же все равно понадобится скорее всего.

EvilBeaver avatar Nov 25 '14 08:11 EvilBeaver

Original comment by Sergey Batanov (Bitbucket: dmpas, GitHub: dmpas):


Думаю, совместимость с 1С тут не нужна совершенно. Если прочитать примечание к этим функциям:

Примечание:

Строковое представление данных имеет специальный системный формат, использующий идентификацию данных внутри одной информационной базы. 

то слова "внутри одной информационной базы" как бы намекают, что из-вне значения приходить не должны.

Для обмена с 1С лучше всё-таки использовать какую-нибудь сериализацию.

EvilBeaver avatar Nov 25 '14 08:11 EvilBeaver

Original comment by EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver):


Предлагаю обсудить совместимость получаемых строк с 1С. Т.е. насколько важно отправлять полученную строку в платформу? Если так, то вопрос серьезный, если нет - то фигня делов, можно использовать штатную сериализацию CLR.

EvilBeaver avatar Nov 25 '14 08:11 EvilBeaver

Беру.

dmpas avatar Sep 05 '16 18:09 dmpas

@dmpas а как реализовывать хочешь?

EvilBeaver avatar Sep 06 '16 09:09 EvilBeaver

@EvilBeaver в любом случае совместимость с 1С буду рассматривать в последнюю очередь. Для начала попробую посмотреть родную .NET-овскую сериализацию, а там уж как пойдёт.

dmpas avatar Sep 06 '16 09:09 dmpas