Имя: Пароль:
1C
1C 7.7
v7: Как искать в справочнике?
Ø (aka AMIGO 28.01.2013 19:53)
,
0 DES
 
28.01.13
15:29
Есть справочник (наименование, цена).
Как добавить элемент которого нет
С отсутствующим наименование и отсутст. ценой.
Есть метода перебора элементов по определенному наименованию?
1 Ёпрст
 
28.01.13
15:30
куда добавить то ?
2 Джинн
 
28.01.13
15:30
Хто здесь? (с)
3 1Сергей
 
28.01.13
15:31
По реке плывёт кирпич
Деревянный как стекло
Ну, и пусть себе плывёт
Нам не нужен пенопласт
4 Mikeware
 
28.01.13
15:31
ну откуда вы такие беретесь?
зы. из плиточников выгнали, чтоль?
5 DES
 
28.01.13
15:31
(1) если прочитать текст, то станет понятно куда.
6 DES
 
28.01.13
15:33
что, черный запрос ваять чтоли  ?
7 Ёпрст
 
28.01.13
15:33
Как добавить элемент которого нет ?

Если смотреть сбоку - то снизу кажется, что сверху ничего не видно!
8 Mikeware
 
28.01.13
15:36
(7) а как добавить элемент, который есть?
и - главное - зачем?? :-)
9 DGorgoN
 
28.01.13
15:36
чё?
10 mikecool
 
28.01.13
15:37
такое ощущение, что старыми никами кто то приторговывает )
11 Ёпрст
 
28.01.13
15:37
(10) это точно, райкомовские ветки это подтверждають
12 DES
 
28.01.13
15:38
(8) поразительно.
все же расписано
есть справочник.
нужно добавить элемент
если такой есть, но не нужно добавлять
проверять нужно по наименованию и по цене.

как проще объяснить ?
13 Mikeware
 
28.01.13
15:38
(12) сделай!©
зы. могу продать СП.
14 Ёпрст
 
28.01.13
15:39
(12) по-человечьи.
Теперь смотри на (0) и сравни с (12).
Разницу чуешь ?
15 DES
 
28.01.13
15:39
я не знаю что такое СП
16 DES
 
28.01.13
15:39
(14) нет , не чую
17 1Сергей
 
28.01.13
15:39
(15) это мы уже поняли
18 DGorgoN
 
28.01.13
15:39
(12) "если такой есть, НО не нужно добавлять" - шедеврально ящитаю.
19 DES
 
28.01.13
15:40
(18) ну опечатка, и чито ?
20 Ёпрст
 
28.01.13
15:40
(16) с учетом (18) , я тоже
:))))))))))))))))))
21 DES
 
28.01.13
15:41
(17) Ну вопрос то в другом
22 Irek-kazan
 
28.01.13
15:41
(10) ну с возрастом различные болезни начинаются
23 DGorgoN
 
28.01.13
15:41
И этот человек 8 лет тусовался на форуме, мы принимали его за своего, родимого... Ай ай ай..

P.S. Продам ник, прокачан до уровня лайт-модератора, инженер знаний с иконкой (иконку можно заменить). Дорого.
24 Ёпрст
 
28.01.13
15:41
короче, быстро прямым запросом, еще быстрее - составной реквизит и индекс на него и прямым запросом к нему.
25 DGorgoN
 
28.01.13
15:42
(24) Кубы забыл.
27 Ёпрст
 
28.01.13
15:43
можно и НайтиПоНаименованию использовать, тоже довольно быстро
28 Irek-kazan
 
28.01.13
15:43
а по теме: перед записью проверять поиском. Нашел не записывать
29 DES
 
28.01.13
15:43
(24) это есть в 1с 7 ?
30 DGorgoN
 
28.01.13
15:43
(28) Гайка, гайка, гаеЧка, стопорная гайка etc
31 DES
 
28.01.13
15:44
(28) Как искать если нашел по наименованию, но есть еще такие наименования но цена другая.
32 Irek-kazan
 
28.01.13
15:45
(31) запросом например
33 Irek-kazan
 
28.01.13
15:47
+(32) select count(*) from table where price=... and name=...
34 фобка
 
28.01.13
15:47
(31) прямой запрос 1с++
35 In123
 
28.01.13
15:48
(31) Ты вообще что нибудь, писал, Хоть раз в жизни? Зачем такие вопросы задаешь?
36 DES
 
28.01.13
15:48
робяты, я знаю что есть много сторонних фич, я сам писал DLL для 1С. Но это было так давно...

так пойдет ?

   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(ололо)
   |Э = Справочник.Материалы.ТекущийЭлемент;
   |Н = Справочник.Материалы.Наименование;
   |Ц = Справочник.Материалы.ТекущийЭлемент;
   |Условие(Н=ВыбрНаименование);
   |Условие(Ц=ВыбрЦена);
   |"//}}ЗАПРОС
37 Mikeware
 
28.01.13
15:49
есть повод посмеяться...
38 фобка
 
28.01.13
15:50
(36) можно и черным но " |Ц = Справочник.Материалы.ТекущийЭлемент;" не взлетит.
если цена - реквизит справочника тогда можно, иначе - выгружать в ТЗ и перебор
39 DES
 
28.01.13
15:50
(31) Зарплата на Oracle 9i подойдет ?
40 DES
 
28.01.13
15:51
(38) опесатка


   "//{{ЗАПРОС(ололо)
   |Э = Справочник.Материалы.ТекущийЭлемент;
   |Н = Справочник.Материалы.Наименование;
   |Ц = Справочник.Материалы.Цена;
   |Условие(Н=ВыбрНаименование);
   |Условие(Ц=ВыбрЦена);
   |"//}}ЗАПРОС
41 фобка
 
28.01.13
15:51
(40) ну, дык, запускай, какие сомнения? проще проверить чем спрашивать
42 пипец
 
28.01.13
15:52
запросом в ТЗ поиск по составному полю через ТЗ
43 DES
 
28.01.13
15:53
(42) не катит ТЗ.
В ТЗ еще грузить надо.
44 1Сергей
 
28.01.13
15:53
(42) из воробья по пушкам, имхо
45 фобка
 
28.01.13
15:53
(42) составное поле? проще фильтр на тз + фильтр на тз
46 фобка
 
28.01.13
15:54
(43) ну всё, просто выборка
47 DES
 
28.01.13
15:54
Ребята, подскажите текст Запроса.
48 Мимохожий Однако
 
28.01.13
15:54
)))
Спр = СоздатьОбъект("Справочник.Номенклатура");
НайтиПоНаименованию(ИскомоеНаименование)
...
Продолжать?
49 1Сергей
 
28.01.13
15:55
(48) продолжай
50 In123
 
28.01.13
15:55
(49) +100))))
51 DES
 
28.01.13
15:56
(48) я как раз переделываю подобное решение
52 пипец
 
28.01.13
15:56
ага а заглавные буквы проверять ? :))
Запрос.Выгрузить(ТЗ,0,0)
53 Ёпрст
 
28.01.13
15:57
(50) вполне годное решение
54 фобка
 
28.01.13
15:57
(52)в условие ВРЕГ
55 DES
 
28.01.13
15:58
(53) ну какое же оно годное?
значение цена проверено ?
56 Ёпрст
 
28.01.13
15:59
(55) дык допиши, в чем проблема ?
57 пипец
 
28.01.13
15:59
(54) ;)) я то вкурсе
58 Дядя Вова
 
28.01.13
15:59
А цена периодическая?
59 DES
 
28.01.13
16:00
Есть:
водка1  3,62
водка2  3,63
водка4  3,64
водка1  3,60
водка1  3,66
водка5  3,59


нужно ли записывать
водка1  3,65
?
60 фобка
 
28.01.13
16:01
(60) нужно
61 DES
 
28.01.13
16:01
цена не период
62 DES
 
28.01.13
16:02
(60) на 1с 7.7 скажи
63 фобка
 
28.01.13
16:02
(62) ты сам в 40 сказал уже
64 ЧеловекДуши
 
28.01.13
16:02
(59)Цена всегда берется на какую либо дату, т.е. она всегда одна.
Т.е. соответственно тебе нужно просто проверять товар.
...
И самое главное, что за конфигурация у тебя?
Версия, номер ?
65 DES
 
28.01.13
16:03
(63) я не знаю как проверить Запрос на результат наличия в выборке хотя бы 1 записи
66 Ёпрст
 
28.01.13
16:05
А я понял, аутору нужен готовый код, сам он никогда не напишет

вариянт нумер 1

select count(*) from $Справочник.нужный (nolock)
where descr like '%"+Наим+"'% and Цена=:ВыбЦена

вариянт нумбер 2

Спр=СоздатьОбъект("Справочник.Нужный");
НачатьТранзакцию();
Пока Спр.НайтиПоНаименованию(Наим)=1 Цикл
  Ежели Спр.Цена = ВыбЦена Тогда
     ОтменитьТранзакцию();
     Возврат 0;
  КонецЕжели;
  Спр.Удалить();
ОтменитьТранзакцию();
Возврат 1;

вариянт 3

чорный запрос
67 фобка
 
28.01.13
16:07
(65) не помню но чтото типа

Запрос.Выполнить(Текст);
Есть = 0;
Пока Запрос.Группировка() = 1 Цикл
Есть = 1;
Прервать;
КонецЦикла
68 DES
 
28.01.13
16:08
(67) весь фокус, что я сам в таком положении
69 фобка
 
28.01.13
16:08
Если Запрос.Группировка() = 1 Тогда
//Есть;
КонецЕсли;
70 ЧеловекДуши
 
28.01.13
16:09
(66)Аутор походу язвит. Напоминает оутСорсера, который работает по достижению написанного на форуме :)
...
Думается он освоит только пункт №2 :)
71 фобка
 
28.01.13
16:10
(66) хороший вариант с удалением, ток не быстрый наверное+ держит транзакцию на больших справочниках отстатыщ?
72 Irek-kazan
 
28.01.13
16:10
(68) смени сферу деятельности с алкогольной. Например:
таблетка1 1
таблетка2 1,1
таблетка1 2...
73 DES
 
28.01.13
16:11
Спс, надеюсь уже все проявили свое ЧЮ ?
А теперь можете что-то сказать по делу?
74 ЧеловекДуши
 
28.01.13
16:14
(68) (73)  Смотри в (66), пункт № 2.
Он тебе все описал. Убери Удалить и транзакцию. И получишь, то что хочешь.

Судя по коду в (36), у тебя конфа "Бух. Учет".
У материалов есть реквизит "Цена", он не периодический, т.е. всегда один и тот же. (если только у вас чего допилили)

Так что: по (0) НечеНеПонимаю :)
75 фобка
 
28.01.13
16:15
(74) "убери Удалить и транзакцию." не взлетит
76 ЧеловекДуши
 
28.01.13
16:16
(75)Но останется то, что нужно автору :)
77 DES
 
28.01.13
16:16
(76) согласен
78 ЧеловекДуши
 
28.01.13
16:17
+ Остальное он сам допилит, появление нового элемента можно решить с помощью ОпенКонфа.
79 DES
 
28.01.13
16:17
(75) согласен
(76) нет
80 фобка
 
28.01.13
16:18
(78) НайтиПоНаименованию() позиционируется всегда на первом найденом элементе
81 Neg
 
28.01.13
16:19
(59) Где такая дешевая водка?
82 DES
 
28.01.13
16:20
(81) в 1970 году
83 DES
 
28.01.13
16:20
(80) Точно
84 ЧеловекДуши
 
28.01.13
16:20
(79)Что нет?
Я же не в курсе, об состоянии ваших Мета данных :)

По мне так, все получится.
Найдет по наименованию, если не нашёл, то липи есЧё один эльномент :)

Но или используй запрос 1С (черный запрос) и в цикле, т.е. в ТЗ проверяешь, что да как двоится :)
85 DES
 
28.01.13
16:22
(84) Вся проблема в том что бы влепить элемент если ено наименование есть но нет такой цены.
86 DES
 
28.01.13
16:24
Вопрос по Запросу

ТекстЗапроса =
   "//{{ЗАПРОС(ололо)
   |Э = Справочник.Материалы.ТекущийЭлемент;
   |Н = Справочник.Материалы.Наименование;
   |Ц = Справочник.Материалы.Цена;
   |Условие(Н=ВыбрНаименование);
   |Условие(Ц=ВыбрЦена);
   |"//}}ЗАПРОС
   
Если ничего не выбрано, то какое кол-во строк будет в
ТЗ после
Запрос.Выгрузить(ТЗ);
?
87 фобка
 
28.01.13
16:26
(86) ТЗ.КоличествоСтрок() = 0, т.е. создаешь новый элемент
88 фобка
 
28.01.13
16:26
(87) не помню рус. LinesCnt()
89 Масянька
 
28.01.13
16:30
"Если долго мучиться - что-нибудь получиться,
А если получиться - опять будем мучиться" (С)
90 DES
 
28.01.13
16:32
вот такая фигня получилась, можете критиковать


Функция Искать(ВыбрНаименование, ВыбрЦена)
   Перем Запрос, ТекстЗапроса, ТЗ;
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(ололо)
   |Э = Справочник.Материалы.ТекущийЭлемент;
   |Н = Справочник.Материалы.Наименование;
   |Ц = Справочник.Материалы.Цена;
   |Условие(Н=ВыбрНаименование);
   |Условие(Ц=ВыбрЦена);
   |"//}}ЗАПРОС
   ;
   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
       Возврат 0;
   КонецЕсли;
   Запрос.Выгрузить(ТЗ,3,3);
   ТЗ.ПолучитьСтрокуПоНомеру(1);
   Возврат ТЗ.Э;
КонецФункции
91 фобка
 
28.01.13
16:34
(90) откровенно говоря, слабая реализация.. с другой стороны - работает и пофиг
92 DES
 
28.01.13
16:34
(91) не работает, двоит
94 фобка
 
28.01.13
16:36
(90) нет, не работает.

Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
       Сообщить("не работает запрос")
Возврат -1;
   КонецЕсли;

Запрос.Выгрузить(ТЗ,3,3);
Если ТЗ.КоличествоСтрок() = 0 ТОгда
Возврат 0;
Иначе
   возврат ТЗ.GetValue("Э",1);
КонецЕсли;
95 Ёпрст
 
28.01.13
16:37
(94) и это тоже не спасёёт
96 Ёпрст
 
28.01.13
16:37
ладно кипятите дальше
:)
97 DES
 
28.01.13
16:38
Запрос не возвращает ничего и никогда
98 Ёпрст
 
28.01.13
16:38
(97) см (93)
99 фобка
 
28.01.13
16:38
(97) параметры не передал
100 DES
 
28.01.13
16:38
помогите с черным Запросом
101 DES
 
28.01.13
16:40
(98) а как ты догадался ?
102 Дядя Вова
 
28.01.13
16:40
В 77 же вроде чорные запросы без функции не работают, не?
103 Ёпрст
 
28.01.13
16:40
(102) работают
104 DES
 
28.01.13
16:41
(103) ну тебя еще долго упрашивать, сколько ты обычно ломаешься ?
105 Ёпрст
 
28.01.13
16:42
Такую элементарщину пишут в начале, а не в конце..
106 Ёпрст
 
28.01.13
16:43
мне лень.
107 aka AMIGO
 
28.01.13
16:43
(90) поясеи: ищешь элемент с наименованием и ценой, если цена отличается - то создаешь новый элемент с таким-же наименованием?
а как потом с ними разбираться будешь?
108 aka AMIGO
 
28.01.13
16:43
поясеи =  поясни
109 Масянька
 
28.01.13
16:44
(104) Когда просят - говорят "Пожалуйста". А с Ёпрст так разговаривать нельзя.
110 aka AMIGO
 
28.01.13
16:45
да ни с кем так разговаривать нельзя
111 DES
 
28.01.13
16:46
(107) это не тот вопрос на который мне нужен ответ.
112 aka AMIGO
 
28.01.13
16:46
понятно.
113 DES
 
28.01.13
16:46
(109) обычно я говорю спасибо в конце, если есть за что.
114 фобка
 
28.01.13
16:47
(111) так найди ответ самостоятельно, тебе никто здесь ничем не обязан
115 Масянька
 
28.01.13
16:48
(113) А речь не про "Спасибо".
118 Масянька
 
28.01.13
16:50
(116) Про русский - не согласна. Про остальные - не знаю. Чего пришел-то на русский тогда? Остальные - не в теме?
119 Ёпрст
 
28.01.13
16:51
(117) Отвечать на примитив для начинающих, ответ на который решается самостоятельно за 1 минуты не комильфо.

Переделать нерабочий код из (90) в рабочий - еще быстрее, нужно только подумать, что в нём неправильно.
120 zladenuw
 
28.01.13
16:51
(117) что проверить. если тебе уже намекали что нужно сделать. конфетку тебе, не кто тут не даст.
121 zladenuw
 
28.01.13
16:52
(119) клон ? или перерождение ?
122 DES
 
28.01.13
16:53
(120) просто удивляюсь, я не просил намеков. Я просил помощи.
Когда Вы просите помощи у врача, он Вам будет отвечать намеками, вам понравится?
123 DES
 
28.01.13
16:54
(121) ну какая тебе разница ?
Нечего ответить по теме, зачем вообще пылить ?
124 Масянька
 
28.01.13
16:55
(122) Смешной какой! :)))) Врач - поставит диагноз, но не расскажет, как он поставил диагноз.
125 DES
 
28.01.13
16:55
(119) Не хочешь отвечать на примитив - не отвечай, нахрена начинающему твои намеки ?
126 DES
 
28.01.13
16:56
(124) и расскажет и покажет, если он врач , а не шарлатан
127 Ёпрст
 
28.01.13
16:57
(125) если тебе дадут готовый ответ - ты его не запомнишь, если решишь сам - запомнишь навсегда.
128 Дядя Вова
 
28.01.13
16:57
Эх.. жаль РД закончился, весело тут у вас ))
129 DES
 
28.01.13
16:58
(125) это моя проблема, и мне не нужно тут искать педагогов.
130 Масянька
 
28.01.13
16:58
(126) Ну, с врачами тебе повезло. А вот с 1С - не очень.
131 DES
 
28.01.13
16:59
(127) я это все знал 7-10 лет назад
132 Масянька
 
28.01.13
16:59
(129) За готовые решения - платят (обычно).
133 DES
 
28.01.13
16:59
(130) через десяток лет с вами произойдет тоже самое.
134 Масянька
 
28.01.13
17:00
(131) Не знал. Я вот я знаю теорему Пифагора, хотя учила ее в школе, лет 20 назад.
135 Ёпрст
 
28.01.13
17:00
Ладно, хрен с тобой красна шапка

в условие сокрЛП, добавить группировку на выходе :

Запрос.Выполнить(ТекстЗапроса);
Возврат Запрос.Группировка(1);
136 DES
 
28.01.13
17:00
(132) это стоит 30 копеек, куда Вам перевести ?
137 zladenuw
 
28.01.13
17:00
Так сложно сделать ? пару минут блин.

Процедура ДляТроля()
   
   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       Если Троль(ТЗ.Наименование,ТЗ.Цена) Тогда
           //Создаем элемент Справочника !
       КонецЕсли;    
   КонецЦикла;
   
   
КонецПроцедуры



Процедура Троль(Наименование,Цена)
   
   СпрН = СоздатьОбъект("Справочник.ТМЦ");
   ТекЭлемент = ?(Спрн.НайтиПоНаименованию("Наименование")=1,Спрн.ТекущийЭлемент(),"");
   Если ПустоеЗначение(ТекЭлемент)=1 Тогда
       Возврат 1;
   ИначеЕсли ТекЭлемент.Цена = Цена Тогда
       Возврат 0;
   Иначе
       Возврат 1;
   КонецЕсли;
КонецПроцедуры
138 Масянька
 
28.01.13
17:01
(133) Врач? Диагноз? Доктор, у меня вот ножка болит. Почему?
139 Ёпрст
 
28.01.13
17:01
(131)
"Не знал но забыл" ©Чьё то
140 111222333444
 
28.01.13
17:01
(129) Проблема-то может и твоя, только ты ж не запомнивши сейчас, потом опять прибежишь с тем же самым. Утомительно это.
Ёпрст за годом год дело говорит. Да плюс еще и готовое решение дал на предыдущей странице. А тебе всё не так
141 DES
 
28.01.13
17:03
135 Куда это лепить ?
142 Масянька
 
28.01.13
17:03
(136) У Ёпрст в личке есть счет - туда и переведи. Да уж и не 30 копеек, а рубль хотя бы.
143 Масянька
 
28.01.13
17:04
(141) Без слов..............

PS Пожалуй, и рубля будет мало.
144 Ёпрст
 
28.01.13
17:07
(141)
1.добавить СокрлП в условие по Наименованию в текст запроса
2.добавить группировку в текст запроса
3.делать возврат из функции, как в (135)
145 DES
 
28.01.13
17:07
ладно, спасибо.
Поднял свою старую конфу, вспомнил.
146 DES
 
28.01.13
17:10
думал, что спросить на форуме у спецов быстрее чем вспомнить пароль 10летней давности
147 Mikeware
 
28.01.13
17:11
(146) а зачем вспоминать пароль?
148 Mikeware
 
28.01.13
17:12
+(147)
не пел давно...
да и спел -  гавно...
©
149 Ёпрст
 
28.01.13
17:13
И чего, во всех конфах лепят кучу элементов с одинаковым наименованием, пр изменении цены ?
150 DES
 
28.01.13
17:13
(147) Зачем тебе это знать ?
151 Ёпрст
 
28.01.13
17:13
еще и паролят, чтоб этот позор никто не видел.
152 DES
 
28.01.13
17:14
(149) это всего лишь гипотетическая задача.
но смысл алгоритма не меняет
153 DES
 
28.01.13
17:15
(152)+  мне говорили что 1сники не понимают ничего кроме наименование, цена.
154 Mikeware
 
28.01.13
17:16
(153) ну, не все ж настолько тупые...
хотя некоторые, ставящие задачку "не понимающим 1сникам", еще тупее их...
155 DES
 
28.01.13
17:19
ну если бы ставящие задачу были острее - то накой тогда бы им понадобились тупые 1сники ???
156 akaBrr
 
28.01.13
17:20
(155) время в сутках ограничено, приходится разделять задачи
157 Mikeware
 
28.01.13
17:20
(155) бесспорно... но пока они не могут поставить задачу даже тупым 1снегам...
158 Mikeware
 
28.01.13
17:21
(156) тут не время в сутках ограничено тут постановщик ограничен
160 DES
 
28.01.13
17:24
(158) Вы лично взялись  дотянуть до 2-х часов ?
161 DES
 
28.01.13
17:25
(158) чтобы Вам помочь - я признаю себя чудаком в 1С, можете не стараться.
162 Ёпрст
 
28.01.13
17:27
По -ходу бананан всех покусал...
новый вирус на мисте
163 Mikeware
 
28.01.13
17:29
(162) а его кто укусил?
164 Ёпрст
 
28.01.13
17:30
хз, мот какая мутация 86 ?
166 Mikeware
 
28.01.13
17:37
(164) молдова. наверное, скорее чтото с биологией, нежели с радиацией...
2 + 2 = 3.9999999999999999999999999999999...