|
Сериализация таблицы значений | ☑ | ||
---|---|---|---|---|
0
Shrk_V_V_V
05.10.17
✎
08:52
|
Сравниваю две таблицы значений с помощью функции ЗначениеВСтрокуВнутр. Но не сравниваются, потому что в каждой строке тзн есть какие-то флажки, которые отличаются. Что это за флажки, как их можно поменять, чтобы совпадали? Платформа 1С 8.2, последняя.
|
|||
1
DrShad
05.10.17
✎
08:55
|
с помощью этой функции нельзя сравнить две таблицы от слова совсем никак
|
|||
2
Shrk_V_V_V
05.10.17
✎
08:58
|
Раз нет аргументов, предполагается, что я должен поверить?
|
|||
3
DrShad
05.10.17
✎
08:59
|
(2) самому мозг включить не судьба? отсортируй их по разному и сравни? таблицы то одинаковы, но сравнить сериализовав никак
|
|||
4
Shrk_V_V_V
05.10.17
✎
08:59
|
тзн = Новый ТаблицаЗначений;
тзн.Колонки.Добавить("ПолеСтрока", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(255))); тзн.Колонки.Добавить("ПолеЧисло", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15, 3))); стртзн = тзн.Добавить(); стртзн.ПолеСтрока = "Ква"; стртзн.ПолеЧисло = 2; стртзн = тзн.Добавить(); стртзн.ПолеСтрока = "Кря"; стртзн.ПолеЧисло = 4.5; тзн2 = Новый ТаблицаЗначений; тзн2.Колонки.Добавить("ПолеСтрока", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(255))); тзн2.Колонки.Добавить("ПолеЧисло", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15, 3))); стртзн = тзн2.Добавить(); стртзн.ПолеСтрока = "Ква"; стртзн.ПолеЧисло = 2; стртзн = тзн2.Добавить(); стртзн.ПолеСтрока = "Кря"; стртзн.ПолеЧисло = 4.5; стр1 = ЗначениеВСтрокуВнутр(тзн); стр2 = ЗначениеВСтрокуВнутр(тзн2); Сообщить(стр1 = стр2); Сообщить(стр1); Сообщить(стр2); ОткрытьЗначение(тзн); |
|||
5
Shrk_V_V_V
05.10.17
✎
09:00
|
Очевидно, что надо отсортировать перед сравнением и обеспечить идентичный порядок колонок. Ну и мозг включить)
|
|||
6
DrShad
05.10.17
✎
09:03
|
иди у гугла спроси, уже есть несколько алгоритмов сравнения таблиц и все опубликованы и не надо ничего сериализовать, если сам додуматься не можешь
|
|||
7
Shrk_V_V_V
05.10.17
✎
09:05
|
Вопрос был, как работает функция 1с ЗначениеВСтрокуВнутр для таблицы значений. Если не знаешь, можно просто проигнорировать тему. Зачем спамить?
|
|||
8
DrShad
05.10.17
✎
09:09
|
нет в таблицах никаких флажков, ибо флажок это клиентское представление на форме
|
|||
9
Shrk_V_V_V
05.10.17
✎
09:10
|
http://prntscr.com/gtgose
красненьким подчеркнутые циферки интересуют. Наверно я их неудачно флажками назвал. |
|||
10
DrShad
05.10.17
✎
09:16
|
забудь вообще про эту функцию, она была актуальна только в 7.7 и то не везде
|
|||
11
Shrk_V_V_V
05.10.17
✎
09:32
|
Доктор, при всем уважении, выступаете невежливо и не по делу.
|
|||
12
DrShad
05.10.17
✎
09:35
|
ну если я тебе скажу что эти циферки это описание таблицы, тебе легче станет?
|
|||
13
DrShad
05.10.17
✎
09:37
|
и если даже они у тебя не сходятся, то таблицы по любому разные
|
|||
14
Лефмихалыч
05.10.17
✎
09:39
|
обе ТЗ в запрос и полное соединение
|
|||
15
Shrk_V_V_V
05.10.17
✎
09:41
|
Легче станет, если найти конкретное описание этих циферок. Мой пример работает. А если выгрузить запрос в тзн, потом очистить, и потом заполнить то же самое руками, то в этих циферках получается расхождение. Понятно, что я функцию csv написал руками и все уже сравнил. Но так бы получилось короче и быстрее, вот и решил узнать, может кто разбирался.
|
|||
16
Shrk_V_V_V
05.10.17
✎
09:43
|
>обе ТЗ в запрос и полное соединение
прикольный вариант. Но надо писать запрос, а тема с сериализацией работает для любой структуры. |
|||
17
Рэйв
05.10.17
✎
09:44
|
(15)В качестве извращенного варианта:
Сделай в каждой тз по еще одной колонке, куда для каждой строки сложи сумму ЗначениеВСтрокуВнутр() всех значений, потом сложи все значения в этой колонке и сравни с такой же хренью в другой тз:-) |
|||
18
ptiz
05.10.17
✎
09:44
|
(0) Почему бы не сериализовать в XML и сравить там?
|
|||
19
DrShad
05.10.17
✎
09:45
|
(15) короче, быстрее и самое главное всегда верно работает вот так
ВсеКолонки = ""; Для Каждого Колонка Из Таблица0.Колонки Цикл ВсеКолонки = ВсеКолонки + ", " + Колонка.Имя КонецЦикла; ВсеКолонки = Сред(ВсеКолонки, 2); Таблица = Таблица1.Скопировать(); Таблица.Колонки.Добавить("Знак", Новый ОписаниеТипов("Число")); Таблица.ЗаполнитьЗначения(1, "Знак"); Для Каждого Строка Из Таблица0 Цикл ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Строка) КонецЦикла; Таблица.Колонки.Добавить("Счёт"); Таблица.ЗаполнитьЗначения(1, "Счёт"); Таблица.Свернуть(ВсеКолонки, "Знак, Счёт"); Ответ = Таблица.Скопировать(Новый Структура("Счёт", 1), ВсеКолонки + ", Знак"); Если Ответ.Количество() = 0 Тогда ТаблицыРавны = Истина; Иначе ТаблицыРавны = Ложь; КонецЕСли; |
|||
20
DrShad
05.10.17
✎
09:49
|
(18) тогда уж проще сравнивать JSON
|
|||
21
Shrk_V_V_V
05.10.17
✎
09:49
|
>Почему бы не сериализовать в XML и сравить там?
Так можно. Но я не умею писать тзн в XMl(и обратно) одной строчкой, ну и длиннее строчка получается итоговая. |
|||
22
Shrk_V_V_V
05.10.17
✎
09:49
|
>тогда уж проще сравнивать JSON
в 8.2 нету(((((( |
|||
23
Рэйв
05.10.17
✎
09:51
|
(21)
Функция XML(Данные) ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Данные); Возврат ЗаписьXML.Закрыть(); КонецФункции // |
|||
24
DrShad
05.10.17
✎
09:52
|
(22) есть, просто вы не умеете им пользоваться
|
|||
25
Shrk_V_V_V
05.10.17
✎
09:54
|
(23) А обратно?
|
|||
26
Филиал-msk
05.10.17
✎
09:54
|
(15) Осеннее обострение уберпрограммистов началось.
Ты б еще md5 хеш посчитал. А, извини, md5 скомпроментирован. Тогда sha1 |
|||
27
Рэйв
05.10.17
✎
09:54
|
(25)
//------Десериализация Функция ДанныеИзXML(Стр) ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(Стр); Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); КонецФункции |
|||
28
DrShad
05.10.17
✎
09:55
|
(22) https://github.com/legionwfz/1C-JSON
пользуйся на здоровье |
|||
29
DrShad
05.10.17
✎
09:55
|
(25) обратно через чтениеXML
|
|||
30
Shrk_V_V_V
05.10.17
✎
09:57
|
(28) Спасибо, понятно что можно использовать самописку, и я использовал
(27) Спасибо большое, прикольный вариант, работает как песня)) |
|||
31
Shrk_V_V_V
05.10.17
✎
09:58
|
(27) Главное, неведомой фигни нет))
|
|||
32
DrShad
05.10.17
✎
10:00
|
(31) ты сам себе противоречишь, когда тебе изначально говорили забыть о своей дури, ты кричал что вопрос не в этом и нечего спамить ))))
|
|||
33
Shrk_V_V_V
05.10.17
✎
10:02
|
Почему я должен о ней забыть? Это короче и лаконичнее чем XML. Не найду описания флажков, буду XML использовать, это удобнее чем у меня сейчас. Найду- буду использовать это. Почему я должен что-то забывать, лол
|
|||
34
Shrk_V_V_V
05.10.17
✎
10:07
|
(26) csv-это просто строчка, в которой поля запятыми(точками с запятыми) разделены. Чтобы ее собрать, не надо быть уберпрограммистом)
|
|||
35
DrShad
05.10.17
✎
10:13
|
(33) какое нафиг описание флажков?
вот оно {"B",1} есть флажок {"B",0} нет флажка |
|||
36
Shrk_V_V_V
05.10.17
✎
10:19
|
Я же картинку прислал. И объяснил, что у меня эти поля разные в одинаковых таблицах значений. И я не знаю, как их поменять, поскольку не знаю что они означают. В любом случае состоявшееся обсуждение небесполезно, поскольку вариант с XML прикольный.
|
|||
37
DrShad
05.10.17
✎
10:21
|
(36) в (19) еще прикольней
|
|||
38
Филиал-msk
05.10.17
✎
10:22
|
(36) > вариант с XML прикольный.
Разработка чтобы чисто поржать. Точно. |
|||
39
Филиал-msk
05.10.17
✎
10:23
|
(37) Если колонки типизированы, то построитель отчета выгоднее
|
|||
40
Shrk_V_V_V
05.10.17
✎
10:31
|
(38) В десяти строчках написано сравнение произвольных таблиц значений. Вы бы показали свой вариант сравнения, короче и быстрее. И мы бы вместе поржали над этим. А то я не возьму в толк, над чем вы ржете))
|
|||
41
Shrk_V_V_V
05.10.17
✎
10:35
|
(40)
Функция XML(Данные) ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Данные); Возврат ЗаписьXML.Закрыть(); КонецФункции Сообщить(XML(тзн1) = XML(тзн2)); // Почему это так смешно, объясните)) |
|||
42
DrShad
05.10.17
✎
10:44
|
(40) в (19) сравнение всего 13 строк, причем можно сравнивать не сортированные таблицы и произвольному набору колонок
поржем!? |
|||
43
h-sp
05.10.17
✎
11:05
|
(41) смешно, потому что вы обозвали типовую сериализацию, которая уже 10 лет во всех типовых конфах, прикольным вариантом.
А то, что вы используете какую-то древнюю фигню ЗначениеВСтрокуВнутр, да еще какие-то флажки там выискиваете - это по вашему не прикольно. |
|||
44
Shrk_V_V_V
05.10.17
✎
11:18
|
(42) (43)
Я тут гонки устроил. Вариант доктора- 2 секунды Вариант XML- 30 секунд Древняя фигня- 3 секунды. Так что выискивать фигню, чтобы не юзать XML смысл есть. Почему вам смешно я не понял, раз мы с вами согласны что с XML вариант хороший. |
|||
45
DrShad
05.10.17
✎
11:20
|
(44) потому что это типовой вариант сериализации значений уже много лет
|
|||
46
Филиал-msk
05.10.17
✎
11:24
|
||||
47
Ёпрст
05.10.17
✎
11:27
|
||||
48
FIXXXL
05.10.17
✎
11:56
|
СравнениеЗначений и СериализаторXDTO.ЗаписатьXDTO(ТЗ) прокатят?
|
|||
49
Сияющий в темноте
05.10.17
✎
12:18
|
когда мы соавниванм таблицы,мы хотим убедиться,что они содержат одинаковые данные и сериализация системными средствамт нас не спасет
и самое главное,что сортировка и сравнение таблиц выгрузкой во что то приводит к очень большой потере производительности,так что нудно искать методы,чтобы этого не делать |
|||
50
Shrk_V_V_V
05.10.17
✎
12:21
|
(48) Сравнение значений не работает насколько я понял, а второе вполне, обсуждалось в ветке.
|
|||
51
Shrk_V_V_V
05.10.17
✎
12:23
|
(49) Сериализация для сравнения больших таблиц понятно что очень медленно. Я просто хотел сравнить маленькие таблицы, написав поменьше букв)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |