Имя: Пароль:
1C
 
Как убрать запрос из цикла
, ,
0 Mary01
 
29.05.15
21:31
Как можно оптимизировать код?

Загружаю в 1С (1С БП 8) построчно данные из файла Эксель, в каждой строке есть  контрагент, нужно синхронизировать контрагентов с имеющимися в базе - по наименованию, ИНН, КПП. Но т.к. поиск в справочнике по нескольким реквизитам невозможен, то делаю запросом. Проблема в том, что получается запрос в цикле, а это плохо. Может быть есть способ поиска  по нескольким реквизитам, кроме запроса? Выполнять запрос вне цикла не получится, т.к. параметры для запроса получаю в цикле.
Есть вариант - читать файл 2 раза, первый раз собрать из файла всех контрагентов, загнать в запрос и выгрузить полученные ссылки в таблицу, а при втором чтении файла искать в этой таблице. Но думаю тоже не очень вариант, как-то громоздко.
1 Маленький Вопросик
 
29.05.15
21:34
прочитай файл в таблицузначений... и делай с ней что хочешь...

так "плохо" - это не работает или что???
2 shuhard_серый
 
29.05.15
21:34
(0)[Проблема в том, что получается запрос в цикле, а это плохо.]
вбили франчам этот бред в голову и верят
3 Рэйв
 
29.05.15
21:35
>>получается запрос в цикле, а это плохо.

Сам так решил или как?
4 Рэйв
 
29.05.15
21:35
(2)+1
5 ДенисЧ
 
29.05.15
21:36
Я думаю, самым лучшим вариантом решения будет или стена, или по собственному.
6 Рэйв
 
29.05.15
21:36
Правда НЕ ВСЕГДА обоснованно.
7 Mary01
 
29.05.15
21:36
(1) и будет эта огромная тблица в памяти находиться...
8 Рэйв
 
29.05.15
21:36
(5)Да на них стен не напасешься...
9 ДенисЧ
 
29.05.15
21:37
(8) Одной на всех хватит. И она уже есть. правда, далековато...
10 Mary01
 
29.05.15
21:37
(3) известный факт же, с самых азов 1С
11 Рэйв
 
29.05.15
21:38
(9)Да там митинг будет похлеще чем на как предателя немцова убили
12 Mary01
 
29.05.15
21:38
(1) работает.
плохо - это то, что это не оптимально
13 ДенисЧ
 
29.05.15
21:39
(11) В очередь, ***** дети!!!
(10) А что, НайтиПоРеквизиту() в цикле намного халяльней?
14 ДенисЧ
 
29.05.15
21:39
(12) Premature optimisation is a root of evil
15 Mary01
 
29.05.15
21:45
(13) не знаю намного ли. а если нет, то почему?
16 Рэйв
 
29.05.15
21:46
/root/think_u_have_it
17 ДенисЧ
 
29.05.15
21:47
(15) Я, наверное, буду неоригинален... Но НайтиПоРеквизиту() - это тоже запрос.
Так что рэбе в моём лице не одобряэ
18 Kvant1C
 
29.05.15
21:51
(0) Это нужно загружать каждый день, по нескольку раз на дню?
Если да, то тогда можно подумать над оптимизацией, если это нужно загружать раз в месяц, то забить и не париться.
19 Mary01
 
29.05.15
22:10
(18) максимум раз в день. не каждый день.
20 Gangar
 
29.05.15
22:12
(19) тогда юзай правило - работает, не трогай.
21 Sj
 
29.05.15
22:44
(1) +1
  Грузи данные из аксель в тз. Дальше передавай все данные из тз в запрос. А потом просто соедини левым соединением курсор со справочником контрагентов по полям поиска.
22 1с80
 
29.05.15
22:54
(0) Для разовых операций ничего страшного в том, что поиск контрагента будет в цикле. Не стоит заморачиваться.
Если бы это была операция типа проведения документа и в цикле по табличной части был бы запрос, то так действительно делать не стоит.
23 vde69
 
29.05.15
23:07
24 Casey1984
 
30.05.15
00:04
Работает - не тронь!
25 GreyK
 
30.05.15
00:08
(0) Не парь мозг. Есть вариант ещё из клюшек. Создаёшь текстовую переменную со всеми полями поиска через разделитель, записываешь соответствия в список значений, ну или в соответствие для v8.
26 Mary01
 
30.05.15
19:12
(25) не понятно. и как потом дальше это соответствие использовать?
27 2S
 
30.05.15
19:13
(26) генеришь уникальное представление, дальше поиском
28 2S
 
30.05.15
19:23
Странно что еще фото не просили :)
29 Mary01
 
30.05.15
19:28
(27) есть НайтиПоКоду, НайтиПоНаименованию, НайтиПоРеквизиту,а как по этому уникальному представлению найти - я вот этого не понимаю
30 Mary01
 
30.05.15
19:29
(28) просили )
31 ДенисЧ
 
30.05.15
19:30
(30) B&
32 Mary01
 
30.05.15
19:53
(31) что это?
33 RomanYS
 
30.05.15
20:01
кэш = Новый Соответствие;

цикл по контрагентам
..
кэш.Вставить(Выб.инн + Выб.КПП, Выб.Ссылка);
..


цикл по файлу
...
Контрагент = кэш.Получить(ИНН+КПП);
...
34 Mary01
 
30.05.15
20:24
(33) цикл по контрагентам - имеется в виду, что весь справочник контрагентов нужно перебрать?
35 ДенисЧ
 
30.05.15
20:27
(32) Это два символа из кодовой таблицы ASCII. Ваш Кэп
36 ILM
 
гуру
30.05.15
20:33
(0) [Но т.к. поиск в справочнике по нескольким реквизитам невозможен] А почему нельзя в справочнике по нескольким полям искать?
37 Mary01
 
30.05.15
20:38
(36) может быть и можно, но я не знаю как иначе как запросом.
38 ДенисЧ
 
30.05.15
20:39
(37) А что, за запрос ныне расстреливают?
Мы уже обсудили этот вопрос.
Так что пора переходить к настоящим.
Фотка гидЭ?
39 Mary01
 
30.05.15
21:25
и еще дополнение.
помимо того, что контрагентов надо найти, недостающих контрагентов нужно еще и создать!
40 ДенисЧ
 
30.05.15
21:40
(39) Тебе нужно благословление на создание?
41 Kvant1C
 
30.05.15
21:41
>>контрагентов нужно еще и создать
Что-то мешает?
42 Ainura80
 
30.05.15
21:53
(0) Попробуйте второй вариант, и вообще почему не научить пользователей работать с типовой обработкой
ЗагрузкаДанныхИзТабличногоДокумента
43 ДенисЧ
 
30.05.15
22:02
(42) Какие мерзости Вы советуете...
44 Ainura80
 
30.05.15
22:04
(42) Ой не говорите))просто ужас)
45 ДенисЧ
 
30.05.15
22:05
(44) Не просто ужас, а "ужас, ужас, ужас!!!"
46 Mary01
 
30.05.15
22:07
(40) (41) уже ничего не мешает, я придумала как сделать.
буду делать как в (33). и если контрагента не нашла в кэше, то создам и просто добавлю его в кэш!
вопрос только в том, что, неужели засунуть таблицу из ВСЕХ контрагентов в память это оптимальнее, чем выполнять маленький запросик в цикле?
47 Mary01
 
30.05.15
22:07
(43) что тут плохого?
48 Ainura80
 
30.05.15
22:08
(45) Сорь, не прочитала , нормально ее сути вопроса.. а так таблица значений ей в помочь. А на счет обработки я видела как опытные пользователи ею работали) Странно и хвалили)
49 1с80
 
30.05.15
22:15
(46) Что значит оптимальнее? Вы по каким критериям хотите оптимизировать? По размеру используемой памяти, по скорости работы, по трудозатратам на реализацию? Еще по каким то другим?
50 Mary01
 
30.05.15
22:18
(49) по скорости хочу оптимизировать
51 Сияющий в темноте
 
31.05.15
08:32
Оптимальнее - контрагентов из Эксель в одну таблицу,а контрагентов из 1с в другую и уже с помощью нетрадиционных методов сравнения строк разбирать весь этот навоз
52 Ainura80
 
31.05.15
09:29
(51) А не запутанее так еще выдет ?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн