Поиск ссылок прямыми запросами для SQL версии.

29.10.10

Задачи пользователя - Поиск данных

Поиск ссылок стандартным методом довольно долгая процедура.
В этой обработке реализован обход метаданных для поиска реквизитов, которые могут содержать ссылку на искомый объект, составление и выполнение запросов по найденным таблицам.
Для работы необходима компонента 1С++.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Поиск Ссылок
.ert 102,00Kb
216
216 Скачать бесплатно

См. также

Поиск данных Платформа 1С v7.7 Абонемент ($m)

Если у пользователя конфигурации 1С 7.7 сложный интерфейс (или несколько интерфейсов), в котором проблематично найти нужный элемент метаданных - константу, справочник или документ (журнал документов), отчет или обработку, в этом случае поможет универсальный навигатор - органайзер по элементам метаданных, позволяющий легко найти нужный пользователю вид объекта метаданных в отсортированном по алфавитному порядку списке идентификаторов, синонимов или даже комментариев объектов метаданных. Данная универсальная обработка позволяет выбрать и открыть необходимую форму списка и форму элемента. Для доступа к нужному объекту в конфигурации у пользователя должно быть настроено разрешение в правах пользователя, а ссылка в его интерфейсе пользователя в конфигурации не обязательна.

1 стартмани

09.10.2021    5058    0    ksnik    1    

7

Поиск данных Чистка данных Логистика, склад и ТМЦ Программист Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

Простая и удобная обработка предназначена для поиска и исправления задублированных (повторяющихся) номенклатурных штрихкодов справочника Единицы. Также она даёт возможность посмотреть номенклатурные остатки. Полезна в случаях, когда номенклатура сопоставляется по штрихкоду с другими внешними источниками, а именно с модулем "Обмент ГИСМТ".

1 стартмани

19.11.2020    7928    1    Kuzya_brаtsk    4    

8

Поиск данных Программист Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Россия Абонемент ($m)

Для 1с77 ТиС 9.2 отчет - выборка всех сотовых телефонов из справочника контрагенты для передачи в СМС рассылку. Для 1с8 Обработка с алгоритмом распознавания номера телефона из строки.

1 стартмани

20.03.2020    5485    5    AlexHelmer    1    

2

Поиск данных Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Внешняя обработка предназначена для поиска и подробного анализа дублей.

2 стартмани

29.04.2015    19037    53    Pirat-37    1    

0

WEB-интеграция Поиск данных Платформа 1С v7.7 1С:Торговля и склад 7.7 Автомобили, автосервисы Абонемент ($m)

Внешняя обработка для поиска автозапчастей по каталожному номеру

1 стартмани

26.01.2015    15088    11    kras_71    6    

2

Поиск данных Бухгалтер Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Абонемент ($m)

Поиск контрагентов по списку ИНН, переноса в группу и формирования оборотов по счетам с субконто "Контрагенты"

10 стартмани

16.08.2014    17062    2    GSoft    1    

1

Поиск данных Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Процедура контекстного поиска в журнале документов.

18.04.2014    11669    cushe    3    

5

Поиск данных Программист Платформа 1С v7.7 Абонемент ($m)

Обработка + консольная утилита (exe). Работает с использованием FormEx.dll (Алексей Фёдоров aka АЛьФ), strmatch (Ракунов Александр aka skorp) и 1sqlite (Александр Орефков). Выполняет быстрый нечеткий поиск по справочнику (по умолчанию - номенклатуры) с выводом наиболее похожих позиций в выпадающий список. Работает на 1с 7.7. Тестировалось на server 2003 в терминалах, в файловой БД. Предполагаемые достоинства: пример (более) «адекватного» (по меркам автора на данный момент) поведения поисковой строки (реализовано при помощи консольной утилиты, работающей через winapi – исходники прилагаются (писалось в lazarus)) и удобной навигации по списку, во время ввода. Является, скорее, примером для реализаций собственных адаптированных поисковых решений.

1 стартмани

30.12.2013    22241    34    Jill    13    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Утюг 56 18.11.09 13:30 Сейчас в теме
глРаспечататьТаблицу<<?>>(тзСсылок);
{C:\TEMP\ПОИСКССЫЛОК.ERT(361)}: Процедура не обнаружена (глРаспечататьТаблицу)
5. MadDAD 136 19.11.09 02:41 Сейчас в теме
(1), (2). Прошу прощения не отвязал от конфгурации.
(3) - Максимально количество субконто не определялось, стояло 4 по умолчанию.

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

Поправил определение количества субконто.
2. Boog 50 18.11.09 15:36 Сейчас в теме
глРаспечататьТаблицу<<?>>(тзСсылок);
{E:\!1C_BASE\EXTFORMS\1\POISKSSYLOK.ERT(361)}: Процедура не обнаружена (глРаспечататьТаблицу)
3. Boog 50 18.11.09 15:39 Сейчас в теме
Извиняюсь за дубль - не обновил страницу.
4. Boog 50 18.11.09 16:56 Сейчас в теме
Ошибка обработки запроса:

SELECT DISTINCT
:Объект As [Объект $Справочник.Контрагенты]
,Tab.DOCID As [Ссылка $Документ]
,'Субконто' As Реквизит
,'Проводка' As Метаданные
,J.IDDOCDEF AS Ссылка_вид
, CASE :Объект
When
Tab.DTSC0 then 'Дт1'
When
Tab.KTSC0 then 'Кт1'
When
Tab.DTSC1 then 'Дт1'
When
Tab.KTSC1 then 'Кт1'
When
Tab.DTSC2 then 'Дт2'
When
Tab.KTSC2 then 'Кт2'
When
Tab.DTSC3 then 'Дт3'
When
Tab.KTSC3 then 'Кт3'
END As Субконто
FROM
_1SENTRY As Tab
INNER JOIN _1sjourn J On J.IDDOC = Tab.DOCID
where (Tab.DTSC0 = :Объект And Tab.VDTSC0 in (450)) OR (Tab.KTSC0 = :Объект And Tab.VKTSC0 in (450))
OR (Tab.DTSC1 = :Объект And Tab.VDTSC1 in (450)) OR (Tab.KTSC1 = :Объект And Tab.VKTSC1 in (450))
OR (Tab.DTSC2 = :Объект And Tab.VDTSC2 in (450)) OR (Tab.KTSC2 = :Объект And Tab.VKTSC2 in (450))
OR (Tab.DTSC3 = :Объект And Tab.VDTSC3 in (450)) OR (Tab.KTSC3 = :Объект And Tab.VKTSC3 in (450))

State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'DTSC3'.
6. Boog 50 19.11.09 10:34 Сейчас в теме
В процедуре НайтиРеквизитыСсылок в цикле по субконто, нужно делать цикл от 1 по КолвоСубконто-1
и в ДопКолонке писать
When
Tab.DTSC"+Субконто+" then 'Дт"+(Субконто+1)+"'
When
Tab.KTSC"+Субконто+" then 'Кт"+(Субконто+1)+"'";

Тогда взлетит.
7. MadDAD 136 19.11.09 10:40 Сейчас в теме
(6) Точно :) Затупил... Хотя у меня работает с таким запросом.
10. Утюг 56 19.11.09 10:50 Сейчас в теме
О, пока разглядывал, тут уже написали. Но Boog (6) не до конца прав - см. мое (9), п.2.
12. MadDAD 136 19.11.09 11:15 Сейчас в теме
(10) В принципе то же самое, только у меня первые субконто задаются до цикла по остальным, тогда цикл с 1.

Добавил определение наличия таблицы, поправил максимально количество субконто, (6)поправил нумерацию субконто.

(8) Ссылка_вид содержит идентификатор вида документа для типизации документа в запросе. Если идет запрос по регистрам - в качестве сылки возвращается документ, который делал движения. В остальных случаях если ссылка не документ, то и вид документа не нужен, соответственно он пустой.
Это служебное поле, которое в принципе можно прятать.
8. Boog 50 19.11.09 10:47 Сейчас в теме
А что в колонке Ссылка_вид?
Если ссылка найдена в движении регистра, то там какое-то число, в остальных строках там пусто.
9. Утюг 56 19.11.09 10:48 Сейчас в теме
1. Еще бы надо проверять наличие таблицы _1sentry и, в зависимости от ее наличия, обрабатывать или пропускать строки 317-340. В ТиС и ЗиК ее нет и получаем ошибку.
2. В _1sentry нумерация субконто начинается с ноля, т.е. при 3-х субконто поля будут называться DTSC0, DTSC1, DTSC2. А в обработке они начинаются с единицы, в связи с чем имеем ошибку - Недопустимое имя столбца "DTSC3". Соответственно, строку 330 надо изменить на
Для Субконто = 0 По КолвоСубконто-1 Цикл
11. Boog 50 19.11.09 11:15 Сейчас в теме
С проверкой на ведение бух. учета в базе вообще - согласен.
По поводу цикла от 0 по КолвоСубконто-1:
там перед циклом определяются DTSC0 и KTSC0. Отдельно. (и условия для них).
13. Утюг 56 19.11.09 11:40 Сейчас в теме
(11) впопыхах не заметил
(12) угу, теперь летает
14. jj_mail 20.11.09 13:00 Сейчас в теме
Ошибка обработки запроса:

SELECT DISTINCT
:Объект As [Объект $Справочник.Фирмы]
,Tab.ID As [Ссылка $Справочник.Фирмы]
,'Родитель' As Реквизит
,'Справочник.Фирмы' As Метаданные

FROM
$Справочник.Фирмы As Tab

where Tab.PARENTID = :Объект

State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'PARENTID'.
--------------------------
Ошибка обработки запроса:

SELECT DISTINCT
:Объект As [Объект $Справочник.Фирмы]
,Tab.DOCID As [Ссылка $Документ]
,'Субконто' As Реквизит
,'Проводка' As Метаданные
,J.IDDOCDEF AS Ссылка_вид
, CASE :Объект
When
Tab.DTSC0 then 'Дт1'
When
Tab.KTSC0 then 'Кт1'
When
Tab.DTSC1 then 'Дт2'
When
Tab.KTSC1 then 'Кт2'
When
Tab.DTSC2 then 'Дт3'
When
Tab.KTSC2 then 'Кт3'
END As Субконто
FROM
_1SENTRY As Tab
INNER JOIN _1sjourn J On J.IDDOC = Tab.DOCID
where (Tab.DTSC0 = :Объект And Tab.VDTSC0 in ()) OR (Tab.KTSC0 = :Объект And Tab.VKTSC0 in ())
OR (Tab.DTSC1 = :Объект And Tab.VDTSC1 in ()) OR (Tab.KTSC1 = :Объект And Tab.VKTSC1 in ())
OR (Tab.DTSC2 = :Объект And Tab.VDTSC2 in ()) OR (Tab.KTSC2 = :Объект And Tab.VKTSC2 in ())

State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ')'.
15. MadDAD 136 27.11.09 11:49 Сейчас в теме
(14)
Не был предусмотрен вариант справочников с одним уровнем.
Не был предусмотрен вариант остутствия объекта в видах субконто.
16. jj_mail 27.11.09 12:34 Сейчас в теме
Заголовок = глСтрРасставитьПробелы<<?>>(тз.ИмяКолонки(НомерКолонки));
{D:\ПОИСКССЫЛОК.ERT(33)}: Функция не обнаружена (глСтрРасставитьПробелы)
17. MadDAD 136 27.11.09 12:34 Сейчас в теме
(16) Извиняюсь, выгрузил старую версию. Сейчас уже лежит новая.
18. afanasko 35 23.12.09 17:06 Сейчас в теме
18. Очень интересно сделано. Код понравился ))) +
19. maxim_ro 25.10.10 17:26 Сейчас в теме
Как раз искал похожую обработку. Все вроде бы хорошо но два нюанса. Стандартная функция НайтиСсылки() в большинстве случаев работает у меня быстрее но если в этой обработке убираю лишние метаданные тогда она работает намного быстрее чем стандартный механизм. Но эта обработка не учитывает метаданные где есть реквизиты неопределенного типа!
21. MadDAD 136 26.10.10 02:42 Сейчас в теме
(19) Спасибо за указанный недочет. Для собственного пользования обработка давно уже доработана, здесь не обновил.

Самое большое время тратится на запрос по таблице проводок. Если эта таблица не интересует - можно смело закомментировать. Вообще обработка и создавалась для того чтобы можно было искать ссылки выборочно а не по всем метаданным.
20. MadDAD 136 26.10.10 02:39 Сейчас в теме
Новая версия. Теперь учтены реквизиты неопределенного типа (Спасибо maxim_ro).
22. s_s_v 29.10.10 11:15 Сейчас в теме
Для реквизитов неопределенного типа в отчете для документа стоит

сзНеопределенных.Установить("Документ", "'A1'+");

т.е. в запросах получается типа того
where Tab.sp2265 = 'A1'+' 7K'+' 65GAE '

Провел трассировку стандартного метода НайтиСсылки() и там во временную табл. для документа передается 'O1', т.е. строка должна получиться вида
where Tab.sp2265 = 'О1'+' 7K'+' 65GAE '


Может подскажете как всетаки корректно определить правильное значение для документа или справочника.

23. MadDAD 136 29.10.10 11:45 Сейчас в теме
(22) проверил сейчас. Действительно - верно 'О1'. Видимо при разработке недостаточно тестировал.

Версия обновлена.
24. s_s_v 29.10.10 12:00 Сейчас в теме
Кстати я для справочника не проверял.

И еще меня это очень заинтересовало хочу доработать, а пока просто подкину идею по ускорению.
Если ищем ссылки на документ, то вероятность того, что на данный (искомый) документ встретятся ссылки в документах или на регистрах раньше самого документа чрезвычайно мала. А значит нет смысла проверять всю таблицу в запросе, а нужно отсекать по дате времени документа. Хотя не спорю могут быть специфичные ситуации, когда документ передвигают по датам и времени.

Но если добавить фильтры по времени, то на больших базах для документов поиск можно сократить в разы
Оставьте свое сообщение