|
Сравнение ТЗ или особенности ЗначениеВСтрокуВнутр | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
23.01.15
✎
08:20
|
Надо сравнить 2 ТЗ на изменения. Но 1 ТЗ получается из ссылки, а другая ТЧ. Если изменить, что-то в ТЧ, то "хэш" у второй таблицы меняется, хотя данные остаются те же самые. В итоге функция показывает различия, хотя их нет.
Что означают цифры в, {2,2,3, ? Как можно добиться идентичности таблиц, без сложного кода? Или проще сравнивать все через запрос. |
|||
1
ИС-2
naïve
23.01.15
✎
08:20
|
КлючевыеСтолбцы = "Номенклатура,ХарактеристикаНоменклатуры,СерияНоменклатуры";
ТЗ_Отсканировано = Отсканировано.Выгрузить(Отсканировано.НайтиСтроки(Новый Структура("Подтверждено",Истина)),КлючевыеСтолбцы); ТЗ_Отсканировано.сортировать(КлючевыеСтолбцы); // в этом случае какие-то поля меняет и таблицы не идентичны, поэтому делаем другой вариант //ТЗ_Док = рабдок.ссылка.Товары.выгрузить(,КлючевыеСтолбцы); ТЗ_Док = ТЗ_Отсканировано.СкопироватьКолонки(); Для Каждого Стр из рабдок.ссылка.Товары Цикл //ЗаполнитьЗначенияСвойств(ТЗ_Док.Добавить(),стр); Для Каждого КлСтолб из ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(КлючевыеСтолбцы,",") Цикл КонецЦикла; КонецЦикла;; ТЗ_Док.сортировать(КлючевыеСтолбцы); ЕстьИзм = не (ЗначениеВСтрокуВнутр(ТЗ_Док) = ЗначениеВСтрокуВнутр(ТЗ_Отсканировано)); |
|||
2
ИС-2
naïve
23.01.15
✎
08:21
|
упс чуть не то
|
|||
3
ИС-2
naïve
23.01.15
✎
08:21
|
ТЗ_Отсканировано
{"#",acf6192e-81ca-46ef-93a6-5a6968b78663, {8, {3, {3,"Номенклатура", {"Pattern", {"#",dd0e8719-5e55-43a0-944a-8321d4c46843} },"Номенклатура",10}, {4,"ХарактеристикаНоменклатуры", {"Pattern", {"#",32fb38a7-0eff-4313-93c7-f07d95302083} },"Характеристика номенклатуры",10}, {5,"СерияНоменклатуры", {"Pattern", {"#",0675623a-8763-43c0-94dc-e6f81b5173ab} },"Серия номенклатуры",10} }, {2,3,0,3,1,4,2,5, {1,3, {2,0,3, {"#",dd0e8719-5e55-43a0-944a-8321d4c46843,162:83642b3c13e292974d52bc28dd7a0c6a}, {"#",32fb38a7-0eff-4313-93c7-f07d95302083,346:00000000000000000000000000000000}, {"#",0675623a-8763-43c0-94dc-e6f81b5173ab,221:997c002219a6a0cc11e4803c4d314049},0}, {2,1,3, {"#",dd0e8719-5e55-43a0-944a-8321d4c46843,162:83642b3c13e292974d52bc28dd7a0c6a}, {"#",32fb38a7-0eff-4313-93c7-f07d95302083,346:00000000000000000000000000000000}, {"#",0675623a-8763-43c0-94dc-e6f81b5173ab,221:997c002219a6a0cc11e47ed3a1f7e5fb},0}, {2,2,3, {"#",dd0e8719-5e55-43a0-944a-8321d4c46843,162:83642b3c13e292974d52bc28dd7a0c6a}, {"#",32fb38a7-0eff-4313-93c7-f07d95302083,346:00000000000000000000000000000000}, {"#",0675623a-8763-43c0-94dc-e6f81b5173ab,221:997c002219a6a0cc11e4803c4d31403d},0} },-1,2} } } |
|||
4
ИС-2
naïve
23.01.15
✎
08:22
|
ТЗ_Док
{"#",acf6192e-81ca-46ef-93a6-5a6968b78663, {8, {3, {3,"Номенклатура", {"Pattern", {"#",dd0e8719-5e55-43a0-944a-8321d4c46843} },"Номенклатура",10}, {4,"ХарактеристикаНоменклатуры", {"Pattern", {"#",32fb38a7-0eff-4313-93c7-f07d95302083} },"Характеристика номенклатуры",10}, {5,"СерияНоменклатуры", {"Pattern", {"#",0675623a-8763-43c0-94dc-e6f81b5173ab} },"Серия номенклатуры",10} }, {2,3,0,3,1,4,2,5, {1,3, {2,2,3, {"#",dd0e8719-5e55-43a0-944a-8321d4c46843,162:83642b3c13e292974d52bc28dd7a0c6a}, {"#",32fb38a7-0eff-4313-93c7-f07d95302083,346:00000000000000000000000000000000}, {"#",0675623a-8763-43c0-94dc-e6f81b5173ab,221:997c002219a6a0cc11e4803c4d314049},0}, {2,0,3, {"#",dd0e8719-5e55-43a0-944a-8321d4c46843,162:83642b3c13e292974d52bc28dd7a0c6a}, {"#",32fb38a7-0eff-4313-93c7-f07d95302083,346:00000000000000000000000000000000}, {"#",0675623a-8763-43c0-94dc-e6f81b5173ab,221:997c002219a6a0cc11e47ed3a1f7e5fb},0}, {2,1,3, {"#",dd0e8719-5e55-43a0-944a-8321d4c46843,162:83642b3c13e292974d52bc28dd7a0c6a}, {"#",32fb38a7-0eff-4313-93c7-f07d95302083,346:00000000000000000000000000000000}, {"#",0675623a-8763-43c0-94dc-e6f81b5173ab,221:997c002219a6a0cc11e4803c4d31403d},0} },-1,2} } } |
|||
5
Провинциальный 1сник
23.01.15
✎
08:26
|
Неблагодарное это занятие.. "Внутр" он на то и внутр, что может поменяться в любое время по желанию 1с. Если надо что-то подобное, лучше делайте сериализацию в какой-то стандартный формат, xml или json.
|
|||
6
ИС-2
naïve
23.01.15
✎
08:40
|
(5) как можно быстро и просто сериализовать ТЗ? XMLСтрока - не работает с ТЗ
|
|||
7
Провинциальный 1сник
23.01.15
✎
08:56
|
(6) Как-то так:
Функция XML(Данные) ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Данные); Возврат ЗаписьXML.Закрыть(); КонецФункции |
|||
8
Провинциальный 1сник
23.01.15
✎
09:08
|
+(7) А вот десериализация
Функция ДанныеИзXML(Стр) ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.УстановитьСтроку(Стр); Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); КонецФункции |
|||
9
ИС-2
naïve
23.01.15
✎
09:17
|
(8) спс. Нашел типовое
ТиповыеОтчеты.СериализоватьОбъектXDTO КлючевыеСтолбцы = "Номенклатура,ХарактеристикаНоменклатуры,СерияНоменклатуры"; ТЗ_Отсканировано = Отсканировано.Выгрузить(Отсканировано.НайтиСтроки(Новый Структура("Подтверждено",Истина)),КлючевыеСтолбцы); ТЗ_Отсканировано.сортировать(КлючевыеСтолбцы); // в этом случае какие-то поля меняет и таблицы не идентичны, поэтому делаем другой вариант //ТЗ_Док = рабдок.ссылка.Товары.выгрузить(,КлючевыеСтолбцы); ТЗ_Док = ТЗ_Отсканировано.СкопироватьКолонки(); Для Каждого Стр из рабдок.ссылка.Товары Цикл //ЗаполнитьЗначенияСвойств(ТЗ_Док.Добавить(),стр); НовСтр = ТЗ_Док.Добавить(); Для Каждого КлСтолб из ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(КлючевыеСтолбцы,",") Цикл НовСтр[КлСтолб] = Стр[КлСтолб]; КонецЦикла; КонецЦикла;; ТЗ_Док.сортировать(КлючевыеСтолбцы); Хэш1 = ТиповыеОтчеты.СериализоватьОбъектXDTO(ТЗ_Отсканировано); Хэш2 = ТиповыеОтчеты.СериализоватьОбъектXDTO(ТЗ_Док); // ЕстьИзм = не (ЗначениеВСтрокуВнутр(ТЗ_Док) = ЗначениеВСтрокуВнутр(ТЗ_Отсканировано)); ЕстьИзм = не (Хэш1 = Хэш2); Возврат ЕстьИзм; |
|||
10
Ёпрст
23.01.15
✎
09:30
|
(0) Это не верное сравнение ТЗ.
Изменят порядок строк и всё, привет котёнку - твои "хеши" разные, а фактически, тз одинаковые. |
|||
11
Ёпрст
23.01.15
✎
09:30
|
Ну и серилизация, не быстрый метод.
|
|||
12
ИС-2
naïve
23.01.15
✎
09:31
|
(10) поэтому я делаю одинаковую сортировку
|
|||
13
Ёпрст
23.01.15
✎
09:36
|
(9) Хня же написана, не ?
Зачем ты к отсканированной ТЗ прибавляешь строки документа ? |
|||
14
Ёпрст
23.01.15
✎
09:36
|
и потом ЭТО сравниваешь ?
Всегда же будет что они разные. |
|||
15
ИС-2
naïve
23.01.15
✎
10:12
|
(13) читай код внимательно. Ни где я не добавляю к ТЗ_Отсканировано строки.
Если не знаешь 1С, то сообщаю что метод СкопироватьКолонки не копирует таблицу. И таблица значений не ссылочная. Так, что все работает нормально |
|||
16
ИС-2
naïve
23.01.15
✎
10:14
|
по скорости не знаю - в моем случае работает нормально (до 100 строк).
А вот большие таблицы надо как-то по другому сравнивать... |
|||
17
WebberNSK
23.01.15
✎
10:35
|
(16) непонятно в чем у вас сложность написать сравнение строк?
ваш механизм явно будет проигрывать по производительности- столько не нужных операций для этого делается |
|||
18
ИС-2
naïve
23.01.15
✎
10:42
|
(17) как сравнивать строки?
Я знаю только 2 способа - запросом по 2 ТЗ (в этом случае будет тратиться время на создание временных таблиц) и перебор строк таблиц значений (если ТЗ большие, то надо очень много времени). Если знайте какие-то еще сообщите... Оба эти варианта, требуют больших трудозатрат программиста на написание и отладку алгоритма чем вставка 3 строк кода. |
|||
19
tridog
23.01.15
✎
10:59
|
(11) Угу, настолько не быстрый, что на любой серверный вызов по нескольку раз делается и от этого наверняка все страдают.
Нужно соизмерять уровень неоптимальности с накладными расходами на "соседних" участках алгоритма. |
|||
20
ИС-2
naïve
23.01.15
✎
11:00
|
(19) так какие же есть альтернативы?
|
|||
21
WebberNSK
23.01.15
✎
11:03
|
перебор строк таблиц значений (если ТЗ большие, то надо очень много времени).
то что вы делаете, будет требовать намного больше времени чем простейшая операция сравнения строк в таблицах проиндексируйте таблицы и/или используйте дополнительные структуры хранящие индексы строк для обхода таблиц |
|||
22
tridog
23.01.15
✎
11:19
|
(20) Нда-м, сарказм не понят. На любой серверный вызов сериализация выполняется по нескольку раз.
И в 99% случаев выполняется быстрее, нежели код на встроенном языке. Если задачу можно решить сериалзиацией - не нужно бояться ее использовать. |
|||
23
Ёпрст
23.01.15
✎
12:09
|
(15) А это че ??
Для Каждого Стр из рабдок.ссылка.Товары Цикл //ЗаполнитьЗначенияСвойств(ТЗ_Док.Добавить(),стр); НовСтр = ТЗ_Док.Добавить(); |
|||
24
Ёпрст
23.01.15
✎
12:10
|
И при чем тут скопировать колонки ?
|
|||
25
Ёпрст
23.01.15
✎
12:12
|
всё догнал, просто пустую тз создаешь
Один хрен , метод не очень |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |