|
|
|
Можно ли осуществить программно поиск в справочнике по фрагменту... | ☑ | ||
|---|---|---|---|---|
|
0
Aiuan
25.07.04
✎
19:18
|
т.е. в справочнике ищутся все позиции в которые входит данный фрагмент, а потом все найденые позиции выводятся для выбора...
|
|||
|
1
Валентин
25.07.04
✎
19:20
|
тебе для этого был нужен Как создать DBF с оговоренной структурой из Excel VBA??
Вообще-то пошукай в поиске. Недавно эта тема была |
|||
|
2
Gavrila
25.07.04
✎
19:22
|
По фрагменту чего? А вообще-то можно с помощью запроса. В ТиС для Укрины это есть :)
|
|||
|
3
Матрейя
25.07.04
✎
20:40
|
Стр - подстрока поиска.
Select descr, code from sc133 where (descr LIKE '%"+Стр+"%') |
|||
|
4
Aiuan
25.07.04
✎
20:44
|
(3) недопонял...
|
|||
|
5
Warlock
25.07.04
✎
20:45
|
(4)Это прямой SQL запрос...
|
|||
|
6
Валентин
25.07.04
✎
20:48
|
Только очень внимательно проверь ессть ли вообще у тебя sc133 и тот ли это справочник что тебе нужен.
|
|||
|
7
Матрейя
25.07.04
✎
20:51
|
Соединение = СоздатьОбъект("ADODB.Connection");
ConnectionString = "driver={SQL Server};server="+"ACER-W6ARR1O5HS"+";uid="+"sa"+";pwd="+""+";Database="+"souztem"; Соединение.ConnectionTimeOut =20; Соединение.CursorLocation = 1; Соединение.Mode=1; Соединение.Open(ConnectionString); Cmd = СоздатьОбъект("ADODB.Command"); Cmd.ActiveConnection = Соединение; Rs = CreateObject("ADODB.RecordSet"); ТекстЗапроса="Select descr, code from sc133 where ((descr LIKE '%"+Стр+"%') and (isfolder=2))"; Cmd.CommandText=ТекстЗапроса; Rs = Cmd.Execute; //Выполнение и получение набора данных Сч=0; Пока Rs.EOF() = 0 do Value1 = Rs.Fields("descr").Value; Value2 = Rs.Fields("Code").Value; Rs.MoveNext(); Сч=Сч+1; Тз.НоваяСтрока(); Спр.НайтиПоКоду(Value2,0); Тз.Наименование=Спр.ТекущийЭлемент(); Состояние("Обработка: "+Сч); КонецЦикла; |
|||
|
8
Матрейя
25.07.04
✎
20:53
|
+7. ConnectionString - нужно изменить под себя. Имя таблицы справочника можно узнать, посмотрев файл 1cv7.dd(dds) в блокноте апример.
|
|||
|
9
Валентин
25.07.04
✎
20:55
|
(7) Группы тоже могут понадобиться. Не стоит их так безоглядно отсекать. Или вообще не будет групп в таблице. Тогда косяк.
То что ты предлагаешь на hippo позиционируется обработкой ё-SQL. Просто и со вкусом. Кстати, что сказал что Aiuan под SQL имеет базу? |
|||
|
10
Матрейя
25.07.04
✎
20:59
|
9. Не обязательно иметь SQL базу. (я написал, что "ConnectionString - нужно изменить под себя"). Был просто дан пример, у меня допустим формирование ТекстаЗапроса происходит по условиям (то есть составным образом).
|
|||
|
11
Warlock
25.07.04
✎
20:59
|
Вот пример, реализованный на встроенном языке 1С:
СЗНайденныеЭлементы = СоздатьОбъект("СписокЗначений"); Спр = СоздатьОбъект("Справочник.НужныйСправочник"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Если Спр.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Если Найти(ВРег(Спр.Наименование),ВРег(СокрЛП(ИскомоеЗначение))) <> 0 Тогда СЗНайденныеЭлементы.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; В СЗНайденныеЭлементы - список найденных элементов. Можно и в ТаблицуЗначений - по вкусу... |
|||
|
12
Матрейя
25.07.04
✎
21:01
|
11. Но вариант в (7) раз в десять быстрее.
|
|||
|
13
Warlock
25.07.04
✎
21:02
|
(12)Я не спорю. Но и сложнее...
|
|||
|
14
Warlock
25.07.04
✎
21:02
|
(13+) и менее универсален
|
|||
|
15
Матрейя
25.07.04
✎
21:05
|
14.Ничуть, достаточно пары процедур парсинга dd(dds). 13. Сложность - научает гибкости мышление, преодоление сложности развивает беспримерные способности.
|
|||
|
16
Aiuan
25.07.04
✎
21:07
|
(9) именно... на dbf у меня база...
|
|||
|
17
Валентин
25.07.04
✎
21:11
|
в (11) более коректный вариант. а если требуется произодительность, то в Алгоритм полного перебора вариантов. Нужна помощь. 25 пост. Почитав Кнута - можно еще более поизвращаться.
Или уйти с 1С на другую платформу |
|||
|
18
Матрейя
25.07.04
✎
21:14
|
16. Средствами ADO можно вполне обратиться и к dbf...
17. Насчет корректности - не спорю. |
|||
|
19
Warlock
25.07.04
✎
21:20
|
(Матрейя)"Сложность - научает гибкости мышление, преодоление сложности развивает беспримерные способности."
Когда такое надо реализовать не один раз да еще и в нескольких разных базах... А потом что-то поменяется (пути, внутренние идентификаторы справочников) и все рухает... Тут не развитие беспримерных способностей - руки опускаются... |
|||
|
20
Матрейя
25.07.04
✎
21:22
|
Пример ADO для dbf:
ConnectionString="Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=\somepath;" ; где somepath - КаталогИБ() Имя таблицы в Select нужно указывать по типу sc133.dbf |
|||
|
21
Матрейя
25.07.04
✎
21:24
|
19. Я ведь писал выше - пара универсальных процедур парсинга dd(dds), то есть имея эти две (процедуру и функцию) - можно получать имена таблиц и имена полей таблиц (и их содержание) для любой базы 1с.
|
|||
|
22
Матрейя
25.07.04
✎
21:28
|
Поймите, свободные граждане, что нужно стремиться писать код так, чтобы когда вы переходите на другую работу, а на ваше место приходит другой человек, то... Вот так и рождается Элита.
|
|||
|
23
Валентин
25.07.04
✎
21:30
|
Неверное у тебя представление об Элите. Имхо, конечно.
|
|||
|
24
Матрейя
25.07.04
✎
21:32
|
23. Когда другой человек, который потенциально готов критиковать все, что было до него - восхищается вашей работой - это работа Элиты.
|
|||
|
25
Валентин
25.07.04
✎
21:39
|
Типовые задачи имеют и типовое решение. Изобретать 4-хколесный велосипед - удел избранных. Но я хочу приходить к клиенту и не волноваться если меняю реквизиты справочника/документа. И клиент хлчет чтобы у него все работало. Мне может быть и прятно от осознания того что повторить практически все запросы 1С могу и из SQL. Но клиенту будет глубоко на это начихать, если человек пришедший после меня на его конфу порушит все и будет усиленно все востанавливать в течении 2,3... 10 дней. И что скажут оба об элитарности - можно представить практически без фантазии
|
|||
|
26
Матрейя
25.07.04
✎
21:45
|
25. Главный принцип хорошей реализации - она должна быть параметрической и способной работать без программиста. То есть следующий программист должен отдыхать и творить новые проекты, а не заниматься переделкой кривого и глючного кода.
|
|||
|
27
427
25.07.04
✎
21:49
|
Вот и вся сущность элитности Светы в (22)
|
|||
|
28
Валентин
25.07.04
✎
21:51
|
При таком подходе эффективней использовать стандартные процедуры/функции.
Не видел еще ни одной обработки/конфы использующей прямой доступ к данным и работающим безглючно. Очень много всего надо учесть. А парсинг dd|dds - меняется на использование класса MetaData из 1С++. |
|||
|
29
Матрейя
25.07.04
✎
21:51
|
Кто допустил пита к инету? Этому ребенку пора спать!
|
|||
|
30
Warlock
25.07.04
✎
21:51
|
(27)Похоже, это называется "навязчивая идея"...
|
|||
|
31
Матрейя
25.07.04
✎
21:52
|
28. Парсинг - просто объектом "Текст". Если ты не видел - это не значит, что такого нет. Спроси у Guka - он подтвердит.
|
|||
|
32
Матрейя
25.07.04
✎
21:54
|
30. Не совсем так... Это рецидив некоторых участков лобной части мозга. Будем снисходительны...
|
|||
|
33
Валентин
25.07.04
✎
21:56
|
(31) Так чем тебе 1С++ - не элита? Или ВК для элиты - роспись в собственной неэлетарности?
Парсинг средствами 1С - только мечтать о таком. Может еще xml удобно разбирать объектом "Текст"? |
|||
|
34
Матрейя
25.07.04
✎
22:04
|
33. ПриНачалеРаботыСистемы - парсишь dd(dds) - 1-2 секунды, данные заносишь (имена таблиц, имена реквизитов и их тип) в глобальную ТЗ. Чтобы получить реквизит справочника Номенклатура - обращается так глТЗ.НайтиЗначение("Справочник(Номенклатура).Реквизит(ИмяРеквизита)",Стр,"Мета"); ИмяТаб=глТз.ПолучитьЗначение(Стр,"TableName"), ИмяПоля=глТз.ПолучитьЗначение(Стр,"RekName");
1с++ - есть несколько глюков, мне глюки не нравятся, но если было бы нужно - использовал бы 1с++, религия позволяет. ADO более надежно и предпочтительно, если есть время на разработку. |
|||
|
35
Валентин
25.07.04
✎
22:13
|
Имхо. Причем глобальное. Но косяк уже в "глТЗ.НайтиЗначение("Справочник(Номенклатура).Реквизит(ИмяРеквизита)",Стр,"Мета");" В случае если Номенклатура имееет 2 реквизита ООООООООООООченьДлинноеИмяРеквизита1 и ООООООООООООченьДлинноеИмяРеквизита2 - попытася выснить какому реквизиту какое поле соответсвует. Хотя если религия позволяет косяки - не актуально
|
|||
|
36
Матрейя
25.07.04
✎
22:27
|
35.А нафига писать очень длинные имена? Комбинаций нескольких символов хватит для описания множества реквизитов.
|
|||
|
37
Матрейя
25.07.04
✎
22:30
|
+36. А длинные пояснения можно писать в комментарий (или синоним). Мои примеры - это для собственных конфигураций для которых критична скорость. Типовые конфы я вообще не переделываю - все что юзерам надо - там есть, даже многофирменный учет - внешние отчеты по нескольким конфигурациям через OLE.
|
|||
|
38
Валентин
25.07.04
✎
22:33
|
А нафига вообще писать имена реквизитов? достаточно написать док=СоздатьОбъект("Документы.dh410") а следом док.sp415=sc33.ТекущийЭлемент()
В общем спор уже ни о чем. Не быть мне элитой... Будут после меня приходить люди ни конфы и говорить - ну можно же это было сделать быстрее раз в пятьдесят если отконвертировать в Очень Хороший Формат, а потом применить Очень Новую Технологию. Жаль. |
|||
|
39
Матрейя
25.07.04
✎
22:36
|
38. Но тогда нужно знать, какой док=dh428.
Насчет Элиты: нужно просто записаться в мою банду:) |
|||
|
40
NS
25.07.04
✎
22:40
|
Запросом... метод \"в\" ...
Организую банду NS-а.. |
|||
|
41
Матрейя
25.07.04
✎
22:42
|
40. Классно! Вот уже две конкурирующие банды!
|
|||
|
42
Gavrila
26.07.04
✎
14:52
|
(11) Ту же хрень лучше сделать запросом, работать будет быстрее :)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |