Имя: Пароль:
1C
1C 7.7
v7: Удалить справочник цен
,
0 shegy
 
26.11.11
19:15
Всем, привет, подскажите пож. Ситуация следующая, при помощи кривой обработки, справочник цен забился по полной катушке, т.е. по одному и тому же типу цен, может быть от 1 до 10 записей, вопрос как можно удалить по шурику все эти записи, сейчас пытаюсь удалить его стандартными средствами, через выборку и элементов и последующем Спр.Удалить(1), но уж больно долгий процесс получается, может знает кто-нибудь более быстрый вариант?
1 Rie
 
26.11.11
19:18
(0) Тебе вообще весь? Напрочь? Грохни таблицу целиком.
2 Rie
 
26.11.11
19:20
+(1) Хотя стоп. Цены - у них периодические реквизиты есть?
3 Guk
 
26.11.11
19:20
(2) ессно. если грохнуть только таблицу справочника, то константы то останутся...
4 Rie
 
26.11.11
19:22
Тогда почистить константы - а потом грохнуть таблицу. Используя или 1С++, если есть. Или ADO, если нет 1С++.
5 shegy
 
26.11.11
19:23
Весь, напрочь, просто один умник через одно место обработку написал, по записи цен, в итоге такая х..., творится в справочнике цен, решил все грохнуть,а цены записывать при проведении поступления ТМЦ
6 shegy
 
26.11.11
19:24
Не с 1С++ не с ADO дело не  когда не имел. есть еще вариант, а то пока разбираться буду, еще больше времени пройдет
7 Rie
 
26.11.11
19:24
(5) Так 1С++ имеется или нет?
8 Rie
 
26.11.11
19:25
(6) Там особо разбираться не надо. Посмотри в 1Cv7.DD, какая таблица соответствует справочнику цен.
9 МастерВопросов
 
26.11.11
19:26
(8) это таблица констант, т.к. цена периодический реквизит
10 shegy
 
26.11.11
19:26
ну с 1Cv7.DD это все понятно, что дальше то делать?
11 Rie
 
26.11.11
19:26
(9) Ему нужны обе таблицы.
12 Rie
 
26.11.11
19:27
(10) База DBF или SQL?
13 shegy
 
26.11.11
19:27
DBF
14 МастерВопросов
 
26.11.11
19:28
Не совсем в тему канеш...
При интерактивной пометке на удаление элемента справочника владельца, база задает вопрос: "пометить на удаление подчиненные справочники?" - отвечаешь "да". Потом снимаешь пометку на удаление с владельца и на вопрос "снять пометку с подчиненных" отвечаешь "нет".
У тебя кстати не один владелец всех этих цен?
15 shegy
 
26.11.11
19:29
неа, разные
16 shegy
 
26.11.11
19:30
прошло минут 15 еще даже 1 % не удалился
17 Rie
 
26.11.11
19:31
(13) Это хуже. Установи драйвер для Visual FoxPro - например, отсюда: http://www.onlinedisk.ru/file/776979/
18 shegy
 
26.11.11
19:32
и что дальше?
19 МастерВопросов
 
26.11.11
19:35
(5) закеж код, который создавал неправильные цены, может там что интересного.
А новые цены сколько времени создавались? Почему нельзя столько же потратить на их удаление.
20 Rie
 
26.11.11
19:35
Потом
СтрокаСоединения = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source="+КаталогИБ()+";Mode=ReadWrite;Extended Properties='';User ID='';Password="";Mask Password=False;Collating Sequence=MACHINE;DSN=''";
Соединение = СоздатьОбъект("ADODB.Connection");
Соединение.Open(СтрокаСоединения,,,);
21 МастерВопросов
 
26.11.11
19:38
Дурацкий вопрос: ты хоть монопольно в базе?
22 shegy
 
26.11.11
19:38
(19) Ну как тебе сказать, видимо потому-что база с апреля месяца и каждый день после прихода товара, создавались новые записи, причем из разговора с людьми, которые пользуются базой, записывались данные не только по товару из приходу. но и по другому товару
23 shegy
 
26.11.11
19:38
(21) в базе монопольно
24 shegy
 
26.11.11
19:39
(20) а дальше?
Я так понимаю User ID='' это имя пользователя в базе, так?
25 Rie
 
26.11.11
19:41
(24) Нет. Там пустая строка. Дальше
ТекстЗапроса =
"DELETE [1SCONST]
|FROM [1SCONST] Constants
|    INNER JOIN SCНомерСправочникаЦен Prices
|    ON Prices.ID=Constants.OBJID
|";
Соединение.Execute(ТекстЗапроса,,);
26 shegy
 
26.11.11
19:42
(25) енто все?
27 Rie
 
26.11.11
19:42
+(25) НомерСправочникаЦен - это цифирь такая, которую в 1Cv7.DD посмотришь.
Ну и затем
ТекстЗапроса = "DELETE FROM SCНомерСправочникаЦен";
Соединение.Execute(ТекстЗапроса,,);
28 shegy
 
26.11.11
19:43
жесть, понял, спасибо, сейчас попробую
29 Rie
 
26.11.11
19:44
(26) Вот теперь всё.
Только тренируйся на копии базы сначала.

И кто-нибудь из знающий - гляньте мой код, где-то мог и очепятаться, и описаться (ударение по выбору).
30 zak555
 
26.11.11
19:45
del *.dbf
??
31 shegy
 
26.11.11
19:45
(29) ну про копию это понятно, но вот этим "И кто-нибудь из знающий - гляньте мой код, где-то мог и очепятаться, и описаться (ударение по выбору)." сразу настроение поднял, какие последствия могут быть?
32 aka AMIGO
 
26.11.11
19:46
что за конфа?
33 shegy
 
26.11.11
19:48
типовая торговля и склад
34 Rie
 
26.11.11
19:49
(31) Никаких. Я мог ошибиться в строке соединения - тогда просто не подконнектишься к базе.
Мог ошибиться в запросе на очистку таблицы констант - тогда удалишь пару-тройку реквизитов у других справочников :-)
Но я сейчас ещё разок этот код гляну сам.
35 shegy
 
26.11.11
19:49
Соединение.Open(СтрокаСоединения,,,);
{C:\USERS\SHEGY\DESKTOP\УДАЛИТЬ ЧЕРЕЗ ADO.ERT(6)}: ADODB.Connection: Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.
36 zak555
 
26.11.11
19:50
чувствуется мне, что все проблемы кроются в нелицензионной винде
37 shegy
 
26.11.11
19:51
(36) это сейчас к чему?
38 МастерВопросов
 
26.11.11
19:51
(22) по идее можно из майского бекапа взять файл  const.dbf (или как он там называется) + файл справочника цен и их подменить в рабочей базе.
Но так ты грохнешь все периодические реквизиты и константы с мая. Так что лучше не делать.
39 Rie
 
26.11.11
19:51
(35) Строка соединения - именно такая, как в (20)?
40 shegy
 
26.11.11
19:52
ну да, не чего не менял
41 shegy
 
26.11.11
19:54
а то что я монопольно в базе, это не играет роли?
42 Rie
 
26.11.11
19:57
(40) Попробуй так:
СтрокаСоединения = "Provider=VFPOLEDB.1;Null=Yes;Exclusive=No;Data Source="+КаталогИБ()+";Mode=ReadWrite;Extended Properties="""";User ID="""";Password="""";Mask Password=False;Collating Sequence=MACHINE;DSN="""";"

(41) Ну и как к тебе подключаться-то, если ты - монопольно в базе?
43 МастерВопросов
 
26.11.11
19:57
(41) играет, надо не монопольно. Т.к. ты пытаешься еще раз подключиться к базе, но уже через ФоксПро провайдера.
44 shegy
 
26.11.11
19:58
ну ладно, все понял, исправлюсь
(42) сейчас попробую
45 shegy
 
26.11.11
20:00
Вроде как поперло, о результатах сообщу
46 shegy
 
26.11.11
20:01
Rie - может где есть в сети справочка по ADO
47 shegy
 
26.11.11
20:01
и последний вроде как вопрос, а на сколько долго обработка будет таблицы грохать?
48 Rie
 
26.11.11
20:02
(46) Есть, конечно же. На msdn.microsoft.com и на www.w3schools.com посмотри.
49 Rie
 
26.11.11
20:02
(47) Почти мгновенно.
50 Rie
 
26.11.11
20:04
(47) И ещё посмотри насчёт 1SCONST (погугли, к примеру). Что-то нет у меня уверенности, что соединения по OBJID достаточно.
51 Ёпрст
 
26.11.11
20:05
(0) delete from 1sconst where id = $ИсторияРеквизита.Цены.Цена
   delete from $Справочник.Цены
52 shegy
 
26.11.11
20:06
Все всем спасибо, все грохнул, сейчас буду пробовать проводить документы, дабы встало все по человеческий
53 Rie
 
26.11.11
20:06
+(50) И на самом деле правильно гложет - там должен ещё ID реквизита участвовать.
54 Ёпрст
 
26.11.11
20:06
+51 потом упаковать таблички
55 shegy
 
26.11.11
20:07
чейт в обще не чего, не понял
56 Rie
 
26.11.11
20:07
(52) См. (51). Это правильно, а (25) - нет.
57 Rie
 
26.11.11
20:08
+(56) $ИсточнияРеквизита.Цены.Цена - это из 1С++, в ADO нужно ставить сам ID реквизита.
58 МастерВопросов
 
26.11.11
20:09
(46) Вопрос по прямому запросу
http://www.1cpp.ru/forum/YaBB.pl?num=1148874473
там и про Адо тоже были примеры, вроде.
59 shegy
 
26.11.11
20:13
Т.е. получается должно быть так:

ТекстЗапроса = "DELETE FROM 1SCONST Constants where id = $ИсторияРеквизита.Цены.Цена";
Соединение.Execute(ТекстЗапроса,,);

Только не пойму от куда брать $ИсторияРеквизита.Цены.Цена???
60 shegy
 
26.11.11
20:17
а блин, так это и надо так писать?
61 shegy
 
26.11.11
20:20
Народ где взять этот ID?
62 Rie
 
26.11.11
20:24
(61) В 1Cv7.MD
63 shegy
 
26.11.11
20:25
эээ, в смысле, просто написать $Справочник.Цены.Цена ???
64 Rie
 
26.11.11
20:25
+(62) Лучше скачай 1С++ c www.1cpp.ru
Драйвер у тебя уже стоит, так что добавишь одну dll - и наступит счастье.
65 shegy
 
26.11.11
20:26
а без 1с++ в обще не как не получится?
66 Rie
 
26.11.11
20:26
(63) Нет.
Если у тебя стоит что-то, умеющее читать составной документ (например, Far с плагином), то залезаешь им в 1Cv7.MD и смотришь.
67 Rie
 
26.11.11
20:26
(65) У тебя Торговля - совсем-совсем типовая?
68 shegy
 
26.11.11
20:27
ну практический
69 shegy
 
26.11.11
20:28
скачал я 1с++, куда его засунуть в каталог с базой или в BIN?
70 Rie
 
26.11.11
20:30
+(66) Или ещё проще - создай пустую базу с тем же MD, убери в этой пустой базе признак периодического реквизита с Цена и посмотри в DD его ID. Вроде как должен совпадать.
(69) В BIN
71 shegy
 
26.11.11
20:32
эксперименты с мд, это пипец, лучше подскажите как при помощи 1с++ сделать все это дело, подключаться так же? Текст запроса какой писать?
72 Rie
 
26.11.11
20:34
(70) Если используешь 1C++, то
Соединение = СоздатьОбъект("OLEDBData");
Соединение.Соединение(СтрокаСоединения);
Запрос = Соединение.СоздатьКоманду();
Запрос.Выполнить(ТекстЗапроса);

Тексты запросов - в (51).
73 Rie
 
26.11.11
20:35
+(72) 1С++ - это внешняя компонента.
74 Rie
 
26.11.11
20:36
+(73) То есть, надо
ЗагрузитьВнешнююКомпоненту("1cpp.dll");
перед тем, как.
75 shegy
 
26.11.11
20:36
delete from 1sconst where id = $ИсторияРеквизита.Цены.Цена
delete from $Справочник.Цены
а это 2 разных запроса или один, можно увидеть как он должен быть, а то ну совсем не в теме, как это работает, будет время обязательно изучу
76 mdocs
 
26.11.11
20:36
Сколько миллионов записей в справочнике Цены?
77 Rie
 
26.11.11
20:36
(75) Два разных.
Сначала первый, потом - второй.
После выполнения первого у тебя все цены будут с пустыми значениями.
78 shegy
 
26.11.11
20:43
Всем спасибо, все получилось