|
Сравнение ВнешнегоИсточникаДанных с ТЗ | ☑ | ||
---|---|---|---|---|
0
DenYuliya
16.12.22
✎
14:10
|
Всем привет.
Есть ТЗ (результат запроса), есть объект 1С с типом "Внешний источник данных" (далее - ВИД), первый раз в глаза вижу такой, каюсь. Надо их сравнить, точнее отобрать строки из ВИД, где значения колонок в ВИД совпадают с аналогичными в ТЗ. Проще всего это было бы сделать, конечно, в запросе. Но - нельзя же в одном запрос делать запрос к справочнику и ВИД. Как еще можно поискать, чтобы пооптимальнее? Или хотя бы ключевые слова поиска в гугле/СП:) Спасибо! |
|||
1
p-soft
16.12.22
✎
14:18
|
кто "нельзя же в одном запрос делать запрос к справочнику и ВИД" запретил? определяем состав полей и в запрос все..
|
|||
2
DenYuliya
16.12.22
✎
14:24
|
(1) это как? Мануал по работе с ВИД говорит, что нельзя, и при попытке выбрать - тоже ошибка.
|
|||
3
p-soft
16.12.22
✎
14:33
|
(2) может в последних релизах добавили. я сейчас специально в справку залез - в запросах присутствует объект таблица из вид
|
|||
4
p-soft
16.12.22
✎
14:33
|
(3) а впрочем, какая разница. ну выгрузите все в одну тз, сверните и считайте строки по шаблону..
|
|||
5
Kassern
16.12.22
✎
14:34
|
(2) "Мануал по работе с ВИД говорит, что нельзя" - скиньте ссылку, где такое говорится
|
|||
6
H A D G E H O G s
16.12.22
✎
14:51
|
(4) Достаточно просто напрячь мозг
|
|||
7
H A D G E H O G s
16.12.22
✎
14:52
|
(5) У вас пятничное замутнение? 2 разные базы, скорее всего. Или вообще 2 разных сервера СУБД
|
|||
8
H A D G E H O G s
16.12.22
✎
14:53
|
(0) Массив впихивай, по нему отбирай из ВИД. И потом сравнивай 2 ТЗ
|
|||
9
Kassern
16.12.22
✎
15:34
|
(7) Давно с видами не ковырялся, на одном проекте настроена синхронизация путевых листов через ВИД, который год работает.
|
|||
10
Kassern
16.12.22
✎
15:37
|
(8) Можно наверное через набор данных объект подсунуть таблицу из ВИД и далее уже в СКД соединить со своими данными.
|
|||
11
DenYuliya
16.12.22
✎
16:02
|
(5) к сожалению, ссылку что-то найти не могу, где это обсуждалось. При одновременном выборе в качестве источников в запросе справочника и ВИД выдается ошибка "Получение данных из нескольких источников данных недопустимо"
|
|||
12
DenYuliya
16.12.22
✎
16:02
|
(3) При одновременном выборе в качестве источников в запросе справочника и ВИД выдается ошибка "Получение данных из нескольких источников данных недопустимо"
|
|||
13
H A D G E H O G s
16.12.22
✎
16:02
|
(10) Это СКДшная ересь, не имеющая отношения к светлому и чистому изначальному запросу.
|
|||
14
DenYuliya
16.12.22
✎
16:06
|
(13) типа если ручками писать, то ошибки не будет? В консоли запросов такая же ошибка.
|
|||
15
DenYuliya
16.12.22
✎
16:10
|
(4) "ну выгрузите все в одну тз" - из ВИД, через ВнешниеИсточникиДанных.НашВИД.Таблицы.НашаНеобъектнаяТаблицаВИД.СоздатьНаборЗаписей(); ?
"Сверните и считайте строки по шаблону" - получается, это надо проделывать будет каждый раз (в цикле) для каждой из строк ТЗ (результат запроса из справочника)? Неоптимально как-то... Схлопнуть 2 таблицы по общему реквизиту в запросе было бы красивее( |
|||
16
DenYuliya
16.12.22
✎
16:11
|
(8), (10) вообще не понимаю, как это делается(.
|
|||
17
p-soft
16.12.22
✎
16:14
|
(16) отдохните, еще попробуйте. программирование - это сложно. я вот 20 лет пишу, а все равно бывает туплю(
|
|||
18
DenYuliya
16.12.22
✎
16:15
|
(7) "2 разные базы, скорее всего. Или вообще 2 разных сервера СУБД" вы о источниках данных в ВИД (вид как объект 1С)? Выгружены из некой сторонней программы, не 1С, из *.bak, более подробно не могу сказать.
|
|||
19
DenYuliya
16.12.22
✎
16:16
|
(17) очень ценный совет. Плохо, когда не знал, да еще и забыл.
|
|||
20
p-soft
16.12.22
✎
16:17
|
(19) знания - придут, я про упорство.
|
|||
21
H A D G E H O G s
16.12.22
✎
16:18
|
(15) Есть ТЗ (результат запроса) - назовем ее ТаблицаИзЗапроса
МассивПоиска=ТаблицаИзЗапроса.ВыгрузитьКолонку("КолонкаСвязиСВид"); ЗапросКВИД.УстановитьПараметр("МассивПоиска",МассивПоиска); ТаблицаИзВИД=Запрос.Выполнить().Выгрузить(); Вот и 2 таблицы ТаблицаИзЗапроса и ТаблицаИзВИД. Соединяем их mergejoin и будет одна таблица. |
|||
22
DenYuliya
16.12.22
✎
16:18
|
(17) выгрузить целиком всю таблицу в массив, потом массив передать в запрос, и с ним уже соединять справочник? Об этом речь?
|
|||
23
H A D G E H O G s
16.12.22
✎
16:19
|
ТаблицаИзВИД=Запрос.Выполнить().Выгрузить();
читать как ТаблицаИзВИД=ЗапросКВИД.Выполнить().Выгрузить(); |
|||
24
H A D G E H O G s
16.12.22
✎
16:19
|
МассивПоиска еще сверните перед помещением в параметр ЗапросаКВИД если предполагаются дубли
|
|||
25
DenYuliya
16.12.22
✎
16:20
|
(23) а, так к ВИД по отдельности можно делать запрос? Это отлично! Спасибо, попробую так сделать.
|
|||
26
mikecool
16.12.22
✎
16:23
|
(16) данные ВИД загони во врем таблицу, потом ее соединяй со своими
|
|||
27
H A D G E H O G s
16.12.22
✎
16:25
|
(26) Excel, который может быть источником ВИД смотрит на тебя как-то недовольно, свирепо и в то же время грустно и с недоумением.
|
|||
28
H A D G E H O G s
16.12.22
✎
16:26
|
(25) По отдельности - можно.
|
|||
29
DenYuliya
16.12.22
✎
17:15
|
(27) не, там не Excel - источник ВИД. Это бэкап некой сторонней программы учета на скуле.
|
|||
30
Kassern
16.12.22
✎
17:20
|
(13) Ну почему сразу ересь? Только что протестил, норм отрабатывает, через набор-объект получил нужные таблицы из ВИД, а дальше любишь их со своими таблицами из базы и все красиво выводишь с возможностями СКД.
|
|||
31
Kassern
16.12.22
✎
17:25
|
(30) +можно и без набора-объект вопрос решить, для каждой таблицы ВИД сделать свой набор данных - запрос. Далее все это дело связать и все будет отрабатывать
|
|||
32
Kassern
16.12.22
✎
17:25
|
Ограничение лишь в разрезе одного набора подключение ВИД к прочим таблицам.
|
|||
33
mikecool
16.12.22
✎
17:30
|
(27) также, как и на запросы через драйвер odbc
|
|||
34
Kassern
16.12.22
✎
17:31
|
(32) Вот мини пример сделанный на коленке:
https://disk.yandex.ru/i/7hEXBJHQMQB5AA Перечень таблиц https://disk.yandex.ru/i/7khbngumQiD0Xg Связи наборов |
|||
35
DenYuliya
16.12.22
✎
17:40
|
(5) кстати, ссылку на мануал я нашла. https://helpf.pro/faq83/view/1223.html
|
|||
36
DenYuliya
16.12.22
✎
17:40
|
(34) спасибо большое, сейчас посмотрю
|
|||
37
DenYuliya
16.12.22
✎
17:41
|
(30) что за "набор-объект"? Это для таблиц ВИД с типом данных таблиц "Объектные данные"?
|
|||
38
Kassern
16.12.22
✎
17:55
|
(37) https://disk.yandex.ru/i/HpQjfFmMOKSD6Q
Тут это не важно, объект, или запрос. Тут важно, чтобы ВИД был в отдельном наборе. |
|||
39
DenYuliya
16.12.22
✎
18:18
|
(24) кстати, насчет "свернуть массивы, если есть дубли". Я вспомнила про еще одно условие. Есть ТабЗначИзСправочника и ТабЗначИзВИД. Так вот в ТабЗначИзВИД МОГУТ БЫТЬ дубли по ключевому полю (идентификатору). И это нормально. В этом случае есть определенный алгоритм отбора, какую из нескольких записей брать, путем проверки других реквизитов.
При таком раскладе просто "схлопнуть" не получится же? Или засунуть в запрос 2 ТЗ (помнится, как-то это можно сделать, и не особо сложно), а потом уже там их объединять? Или как-то сначала проверить... Хотелось бы "цикла в цикле" избежать. |
|||
40
H A D G E H O G s
16.12.22
✎
18:20
|
(39) "Хотелось бы "цикла в цикле" избежать."
Я же написал - mergejoin |
|||
41
DenYuliya
16.12.22
✎
21:12
|
(27) кстати да, а чем плох вариант (26)? Выгрузить запросом в ТЗ из ВОД, как в (28). Загрузить эту ТЗ в новый запрос, как ВТ. И ее соединить со справочником. Норм вариант?
(40) стыдоба, но я не поняла. Что имеется под "mergejoin" в контексте данного вопроса? Соединение запросом? |
|||
42
DenYuliya
16.12.22
✎
21:18
|
(40) это подобно примеру тут https://infostart.ru/public/326983/ в пункте "3.5. Слияние" ?
|
|||
43
H A D G E H O G s
16.12.22
✎
21:44
|
(42) Да
|
|||
44
H A D G E H O G s
16.12.22
✎
21:46
|
(41) "кстати да, а чем плох вариант (26)"
Данные ВИД надо предварительно отобрать по массиву. Вдруг этих данных в ВИД будет миллион, а в таблице - сотня. Вот выгрузишь эту сотню в массив и отберешь по нему ВИД. |
|||
45
DenYuliya
16.12.22
✎
22:46
|
(44) о божечки, я, похоже, запуталась сама уже((((. Да, все так и есть. В ТЗ1 может быть сотня, а в ТЗ_Вид (которая из ВИД выгружена) может быть миллион.
Я сейчас пытаюсь пойти по пути "запихнуть ТЗ1 и ТЗ_ВИД в запрос и там уже их соединением схлопнуть, чтобы все строки из ТЗ_ВИД, совпадающие по ID с ТЗ1 - присоединились". Плохой вариант, да? Может реально проще забыть про запрос и в цикле это все обойти? |
|||
46
DenYuliya
16.12.22
✎
22:49
|
к (45) об этом и шла речь в (21), видимо. Про "забыть про запрос и в цикле это все обойти"
|
|||
47
DenYuliya
16.12.22
✎
23:10
|
(34) сейчас будет тупой вопрос. А СКД вне объекта "Отчет" я не могу запустить что ли? В модуле формы обработки я не могу (или что то делаю не так) сделать через набор-объект, у меня же там просто конструктор запроса, не СКД.
|
|||
48
DenYuliya
16.12.22
✎
23:20
|
Ну теперь я вообще уперлась в какую-то странную скульную ошибку. Причем она возникает, если я беру, к примеру, за месяц. А за конкретный день - все нормально. Я так понимаю, это что-то с языком "скуль/кириллица" связано? А что с этим делать, никто не знает, случайно?
|
|||
49
DenYuliya
16.12.22
✎
23:21
|
К (48), не вставилось почему-то в сообщение:
Ошибка ODBC. SQLSTATE: 42000 Номер ошибки: 468 Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot resolve the collation conflict between "Slovak_CI_AS" and "SQL_Latin1_General_CP1_CS_AS" in the equal to operation. {ВнешняяОбработка.ЗагрузкаИз_DBO__Breed.Форма.Форма.Форма(136)}:РезультатЗапросаК_ВИД = ЗапросК_ВИД.Выполнить().Выгрузить(); {ВнешняяОбработка.ЗагрузкаИз_DBO__Breed.Форма.Форма.Форма(14)}:ТабДанныеИзВид = ПолучитьДанныеИзВИД(МассивПоиска); //ТЗ из ВИД {ВнешняяОбработка.ЗагрузкаИз_DBO__Breed.Форма.Форма.Форма(4)}:ЗагрузитьНаСервере(); по причине: Ошибка выполнения запроса по причине: Ошибка внешней базы данных: ошибка при выполнении запроса по причине: Ошибка ODBC. SQLSTATE: 42000 Номер ошибки: 468 Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot resolve the collation conflict between "Slovak_CI_AS" and "SQL_Latin1_General_CP1_CS_AS" in the equal to operation. |
|||
50
DenYuliya
16.12.22
✎
23:44
|
к (49).
В общем, история такая: это проблема в кодировке внешней базы данных. Программа, из которой выгружались данные - из Словакии, крутилась на словацкой локали. Эта ошибка -это конфликт локалей.Короче это специфика этого внешнего источника данных и ничего с ней сделать нельзя, кроме как не использовать запрос. Приплыли(. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |