Вход | Регистрация


1С:Предприятие ::

Метки:справочники

Можно ли осуществить программно поиск в справочнике по фрагменту...

Я
   Aiuan
 
25.07.04 - 19:18
т.е. в справочнике ищутся все позиции в которые входит данный фрагмент, а потом все найденые позиции выводятся для выбора...
 
 
   Валентин
 
1 - 25.07.04 - 19:20
тебе для этого был нужен Как создать DBF с оговоренной структурой из Excel VBA??
Вообще-то пошукай в поиске. Недавно эта тема была
   Gavrila
 
2 - 25.07.04 - 19:22
По фрагменту чего? А вообще-то можно с помощью запроса. В ТиС для Укрины это есть :)
   Матрейя
 
3 - 25.07.04 - 20:40
Стр - подстрока поиска.
Select descr, code from sc133 where (descr LIKE '%"+Стр+"%')
   Aiuan
 
4 - 25.07.04 - 20:44
(3) недопонял...
   Warlock
 
5 - 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 - нужно изменить под себя"). Был просто дан пример, у меня допустим формирование ТекстаЗапроса происходит по условиям (то есть составным образом).
 
  Рекламное место пустует
   Warlock
 
11 - 25.07.04 - 20:59
Вот пример, реализованный на встроенном языке 1С:

    СЗНайденныеЭлементы = СоздатьОбъект("СписокЗначений");
    Спр = СоздатьОбъект("Справочник.НужныйСправочник");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
        Если Спр.ПометкаУдаления() = 1 Тогда
            Продолжить;
        КонецЕсли;
        Если Найти(ВРег(Спр.Наименование),ВРег(СокрЛП(ИскомоеЗначение))) <> 0 Тогда
            СЗНайденныеЭлементы.ДобавитьЗначение(Спр.ТекущийЭлемент());
        КонецЕсли;
    КонецЦикла;

В СЗНайденныеЭлементы - список найденных элементов. Можно и в ТаблицуЗначений - по вкусу...
   Матрейя
 
12 - 25.07.04 - 21:01
11. Но вариант в (7) раз в десять быстрее.
   Warlock
 
13 - 25.07.04 - 21:02
(12)Я не спорю. Но и сложнее...
   Warlock
 
14 - 25.07.04 - 21:02
(13+) и менее универсален
   Матрейя
 
15 - 25.07.04 - 21:05
14.Ничуть, достаточно пары процедур парсинга dd(dds). 13. Сложность - научает гибкости мышление, преодоление сложности развивает беспримерные способности.
   Aiuan
 
16 - 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. Насчет корректности - не спорю.
   Warlock
 
19 - 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. Главный принцип хорошей реализации - она должна быть параметрической и способной работать без программиста. То есть следующий программист должен отдыхать и творить новые проекты, а не заниматься переделкой кривого и глючного кода.
   427
 
27 - 25.07.04 - 21:49
Вот и вся сущность элитности Светы в (22)
   Валентин
 
28 - 25.07.04 - 21:51
При таком подходе эффективней использовать стандартные процедуры/функции.
Не видел еще ни одной обработки/конфы использующей прямой доступ к данным и работающим безглючно. Очень много всего надо учесть.
А парсинг dd|dds - меняется на использование класса MetaData из 1С++.
   Матрейя
 
29 - 25.07.04 - 21:51
Кто допустил пита к инету? Этому ребенку пора спать!
   Warlock
 
30 - 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.
Насчет Элиты: нужно просто записаться в мою банду:)
   NS
 
40 - 25.07.04 - 22:40
Запросом... метод \"в\" ...
Организую банду NS-а..
   Матрейя
 
41 - 25.07.04 - 22:42
40. Классно! Вот уже две конкурирующие банды!
   Gavrila
 
42 - 26.07.04 - 14:52
(11) Ту же хрень лучше сделать запросом, работать будет быстрее :)



Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует