Имя: Пароль:
1C
1C 7.7
v7: Найти по наименованию не с начала справочника
,
0 FarmAdmin
 
13.12.12
17:37
Суть такова. Есть справочник, методом НайтиПоНаименованию() нахожу в нем нужный мне элемент. Задача стоит в том, чтобы продолжить дальнейший поиск с этого элемента справочника, а не с начала. Цикл не предлагать.
1 Wobland
 
13.12.12
17:38
select предлагать?
2 vinogradъ
 
13.12.12
17:38
найди все и перебирай
3 Стрелок
 
13.12.12
17:40
транзакция+удалениевнутритритранзакции+поиск+отменатранзакции

выход из цикла если не нашли больше
4 Ёпрст
 
13.12.12
17:40
Ну, вот штатный способ поиска по наименованию :

НачатьТранзакцию();
Пока Спр.НайтиПоНаименованию(....)=1
 СЗ.ДобавитьЗначение(Спр.ТекущийЭлемент());
 Спр.Удалить()4
КонецЦикла;
ОтменитьТранзакцию();
5 Ёпрст
 
13.12.12
17:41
правда, он обламывается, если какой-то юзверь откроет форму нужного элемента справочника..
6 NikNik001
 
13.12.12
17:45
тогда уж выгрузить в ТЗ все элементы справочника, а потом удалить все элементы ТЗ, не удовлетворяющие усовию.
7 NikNik001
 
13.12.12
17:45
ну или построить индексный файл для справочника
8 FarmAdmin
 
13.12.12
17:45
(4)Ну вот я тоже так думаю, что через выгрузку в СЗ или ТЗ.Че-то другие варианты не лезут в голову под конец дня. (((
9 Стрелок
 
13.12.12
17:46
(6) т.е. это по вашему будет быстрее?
(7) про индекс к справочнику - поподробнее
10 Ёпрст
 
13.12.12
17:46
(8) быстрее (1)
11 Alexor
 
13.12.12
17:47
Может запросом сделать проще?
12 FarmAdmin
 
13.12.12
17:48
Можно про select подробнее?
13 Ёпрст
 
13.12.12
17:50
(12)
|select
|   id [Элем $Справочник.Номенклатура]
|from $справочник.Номенклатура (nolock)
|where descr like '%вася%'
14 Ёпрст
 
13.12.12
17:51
найдет все элементы, где в наименовании встречается вася
15 Стрелок
 
13.12.12
17:51
(13) я так понимаю в России 1с++ идёт в комплекте с 1С? и в коде уже всё прописаано? ;)
16 Ёпрст
 
13.12.12
17:52
(15) давно вроде
17 ДенисЧ
 
13.12.12
17:52
(15) Почти так. Причём даже конфигурацию менять не надо при использовании внешних обработок
18 Стрелок
 
13.12.12
17:53
круто ) реально что ли?
19 Стрелок
 
13.12.12
17:56
во блин. а я впариваю клиентам переделки под 1с++ как "супер пупер навороты". а наши то многие и не в курсе что это такое. Не так давно ковырял конфу клиента нового - мрак. фильтр по справочнику товаров в 10000 работает порядка 2 минут до вывода списка на экран.

Хотя вчерась столкнулся с интересным моментом в списке справочника - при получении актуального остатка в колонке формы списка быстрый запрос увы проиграл простому СводныйОстаток (при условии конечно что остатки на ТА надо)
20 Ёпрст
 
13.12.12
17:57
(19) это на какой базе ?
на скуле ?
21 Стрелок
 
13.12.12
17:59
(20) нет дбф
22 NikNik001
 
13.12.12
18:00
ТабКл = СоздатьОбъект("XBASE");  
Файл1   = КаталогИБ() + "clients.dbf";
Индекс1 = КаталогИБ() + "clients.cdx";  

Если ФС.СуществуетФайл(Файл1) = 1 Тогда
   ТабКл.ОткрытьФайл(Файл1,,0);
   Если (ФС.СуществуетФайл(Индекс1)=0) и (ТабКл.Открыта()=1) Тогда
       ТабКл.ДобавитьИндекс("IDXCode1","Code1",0,0,"");
       ТабКл.ДобавитьИндекс("IDXCode2","Code2",0,0,"");
       ТабКл.СоздатьИндексныйФайл(Индекс1);
       ТабКл.ЗакрытьФайл();
       ТабКл.ОткрытьФайл(Файл1,Индекс1,0);
   ИначеЕсли (ТабКл.Открыта()=1) Тогда
       ТабКл.ЗакрытьФайл();
       ТабКл.ОткрытьФайл(Файл1,Индекс1,0);
   КонецЕсли;
Иначе
   ТабКл.ДобавитьПоле("Code1","N",5,);
   ТабКл.ДобавитьПоле("Code2","S",8,);
   ТабКл.ДобавитьИндекс("IDXCode1","Code1",0,0,"");
   ТабКл.ДобавитьИндекс("IDXCode2","Code2",0,0,"");
   ТабКл.СоздатьФайл(Файл1,Индекс1);
КонецЕсли;
23 Стрелок
 
13.12.12
18:00
уточнюсь - запрос выполнялся в функции с фильтром по товару
24 Alexor
 
13.12.12
18:00
(15) О, как! Какие люди появились!
25 Ёпрст
 
13.12.12
18:00
(21) запрос к дбф на чем ?
на оледб или на 1sqlite ?
26 Стрелок
 
13.12.12
18:01
оледб
27 Ёпрст
 
13.12.12
18:01
(26) запрос пишешь с учетом индекса ?
анси офф перед этим есть ?
28 Стрелок
 
13.12.12
18:02
ТекстЗапроса="
   |SELECT
   |    Рег.Товар AS [Товар $Справочник.Номенклатура],
   |    SUM(Рег.ОстатокТовара) AS Остаток
   |FROM
   |    (SELECT
   |        $Рег_1.Товар AS Товар,
   |        $Рег_1.ОстатокТовара AS ОстатокТовара
   |    FROM
   |        $РегистрИтоги.ОстаткиТоваров AS Рег_1
   |    WHERE
   |        (PERIOD = :ПредМесяц~~)
   |        AND    ($Рег_1.Товар=:Товар)
   |
   |    UNION ALL
   |
   |    SELECT
   |        $Рег_2.Товар AS Товар,
   |        $Рег_2.ОстатокТовара*(1-Рег_2.debkred*2) AS ОстатокТовара
   |    FROM
   |        $Регистр.ОстаткиТоваров AS Рег_2
   |    INNER JOIN
   |        1sjourn jr ON Рег_2.iddoc = jr.iddoc
   |            AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
   |            AND ($ФлагРегистра.ОстаткиТоваров = 1)
   |            WHERE ($Рег_2.Товар=:Товар)
   |    ) Рег
   |GROUP BY
   |   Рег.Товар
   |
   |ORDER BY
   |    Рег.Товар";
29 Ёпрст
 
13.12.12
18:02
могу предположить, что нет и нет
:)
30 Стрелок
 
13.12.12
18:02
(27) не говорите загадками....
31 Стрелок
 
13.12.12
18:02
всё по букварю ;)
32 МихаилМ
 
13.12.12
18:02
33 Ёпрст
 
13.12.12
18:03
(28) да , так и есть
Тогда, неудивительно, что "проиграл"
34 Стрелок
 
13.12.12
18:03
(33) что не так?
35 Ёпрст
 
13.12.12
18:03
(31) http://www.1cpp.ru/forum/YaBB.pl?num=1184317705
вот с этим ознакомься и обгони сводный остаток!
:)
36 Ёпрст
 
13.12.12
18:04
а если еще и галку на быстрая обработка движений в регистр воткнешь - еще быстрее будет
37 varelchik
 
13.12.12
18:08
(36) Зачет!
38 Стрелок
 
13.12.12
18:09
спасибо глянул. надо разбираться. завтра сдавать работу. пока так оставлю - потом на досуге переделаю.... пока в голове каша из фокса, 1С и 1с++
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.