Имя: Пароль:
1C
 
Можно ли осуществить программно поиск в справочнике по фрагменту...
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) Ту же хрень лучше сделать запросом, работать будет быстрее :)
Основная теорема систематики: Новые системы плодят новые проблемы.