|
Как быстро удалить документ зная ссылку? | ☑ | ||
---|---|---|---|---|
0
Помогите
09.02.15
✎
08:28
|
Ссылка.ПолучитьОбъект() выполняется дольше чем Объект.Удалить()
Почему у Ссылки нет метода Удалить()? Или есть другой способ? |
|||
1
Симпатяга
09.02.15
✎
08:37
|
(0) ДокументСсылка.<Имя документа> (DocumentRef.<Имя документа>)
Описание: Используется для указания ссылки на документ в реквизитах других объектов и переменных встроенного языка. Данный объект НЕ СОДЕРЖИТ средств для чтения, изменения, добавления и удаления документа, однако позволяет обращаться к его реквизитам и другой информации об документе. При обращении к свойствам объекта будет выполняться считывание всех данных документа из базы данных, но оно будет оптимизировано при многократном обращении к данному документу как через этот объект, так и через другое равное ему значение. |
|||
2
Симпатяга
09.02.15
✎
08:41
|
Удалять можно объект, а не ссылку. Для этого его нужно получить.
|
|||
3
Помогите
09.02.15
✎
08:58
|
Не логично. Для удаления объекта не должно быть обязательным его получение в среду выполнения функции.
|
|||
4
Симпатяга
09.02.15
✎
09:00
|
(3) это 1с
|
|||
5
Cube
09.02.15
✎
09:01
|
(3) Ну да, ну да...
Ты, когда в очередной раз будешь удалять ярлык программы с рабочего стола в винде, вспомни свои слова... Ссылка - это ярлык объекта. Нужен только для идентификации объекта. Методов объекта он не содержит. |
|||
6
Lama12
09.02.15
✎
09:03
|
(3) Вполне логично. Ссылка указывает только на место в одной таблице. Т.е. в таблице где находится сам документ. В тоже время табличная часть это совсем другая таблица. Что ж мы удалим запись о документе, а данные его табличной части оставим в базе?
В конце концов, 1С работает с объектами, а не с примитивными типами. Если вспомнить ООП, то у объектов не просто так деструкторы делают. |
|||
7
Помогите
09.02.15
✎
09:05
|
(5) Ярлык тут вообще ни при чем.
Ты наверное когда удаляешь строку из таблицы базы данных, сначала ее считываешь. |
|||
8
Помогите
09.02.15
✎
09:07
|
(6) у табличной части есть ссылка на объект. Можно удалить объект, и заодно табличную часть, зная ссылку.
|
|||
9
Fish
09.02.15
✎
09:09
|
(8) А вот как раз для этого и необходимо объект прочитать. Учите матчасть.
|
|||
10
Помогите
09.02.15
✎
09:09
|
(9) для чего для этого?
|
|||
11
Ненавижу 1С
гуру
09.02.15
✎
09:09
|
(0) к сожалению в 1С этого действительно нет
(5) для того чтобы удалить документ ворда, ты его обязан открывать и считывать? глупости пишешь |
|||
12
Fish
09.02.15
✎
09:11
|
(10) Ещё раз повторю: учите матчасть. Если ты даже не понимаешь, что написал в (8), то что тебе можно объяснить?
|
|||
13
XLife
09.02.15
✎
09:11
|
(11) >ты его обязан открывать и считывать?
а вдруг там что-то ценное внутри?)) |
|||
14
Lama12
09.02.15
✎
09:12
|
(7) 1С работает с объектами. Это не одна запись, и не в одной таблице.
У объектом есть структура, методы, и события. Все это связано. (8)Все это и делает деструктор объекта. Кто по твоему должен это делать? Те СУБД которые работают с 1С, и слыхом не слыхивали об объектной модели. Они по природе своей реляционные, а не объекториентированные. |
|||
15
Wern
09.02.15
✎
09:12
|
Документ в 1с это не документ ворд и не строка в таблице, с ним так не выйдет.
|
|||
16
Помогите
09.02.15
✎
09:12
|
(12) я понимаю что в 8 написал. Ты же ничего полезного не сказал.
|
|||
17
Помогите
09.02.15
✎
09:12
|
(15) что мешает?
|
|||
18
Fish
09.02.15
✎
09:12
|
(16) Похоже не понимаешь.
|
|||
19
Помогите
09.02.15
✎
09:13
|
(18) Понимаю.
|
|||
20
Fish
09.02.15
✎
09:13
|
(19) Тогда к чему эта ветка? Понимал бы хоть немного, такого вопроса бы не возникло.
|
|||
21
Помогите
09.02.15
✎
09:14
|
(20) Похоже ты не понял вопроса.
|
|||
22
Ненавижу 1С
гуру
09.02.15
✎
09:14
|
к табличной части 1С могла бы сделать так:
FOREIGN KEY (...) REFERENCES ... ON DELETE CASCADE (19) не обращай внимание, здесь 1С-ники, они ничего кроме 1С не видели и веруют в нее как в библию |
|||
23
Помогите
09.02.15
✎
09:17
|
(22) Короче понятно все.
Просто разработчики не запрограммировали очень полезную функцию, хотя могли бы это сделать. Надо им написать с предложением чтобы сделали. |
|||
24
Lama12
09.02.15
✎
09:17
|
(22) А кто будет отрабатывать события Объекта? Как платформа должна узнать что удаляется объект? Ссылка - есть ссылка, у нее суть не объектная.
|
|||
25
Lama12
09.02.15
✎
09:18
|
(23) Не позорься.
|
|||
26
Wern
09.02.15
✎
09:18
|
(23) Попробуй написать такую функцию сам, может тогда ты поймешь что то что сделано, сделано не просто так.
|
|||
27
Fish
09.02.15
✎
09:19
|
(22) Конечно, конечно. Если бы целью 1С было разрушить базу :))
|
|||
28
Помогите
09.02.15
✎
09:19
|
(24) ты тут самый умный что ли?
(26) на прямых запросах SQL писал, нормально все удалилось. |
|||
29
Ненавижу 1С
гуру
09.02.15
✎
09:20
|
(24) на усмотрение разработчика конечно
я вообще бы логику объектных событий перенес бы в триггеры |
|||
30
Ненавижу 1С
гуру
09.02.15
✎
09:21
|
(28) мы тоже резали базу прямыми, все живы
да утомительно, да многое не дорезали - потом дорезали, но живем! |
|||
31
Помогите
09.02.15
✎
09:22
|
Мне нужно было быстро удалить документы. Я поотключал все обработчики, все равно медленно удаляет.
Запросом в тысячу раз быстрее. |
|||
32
Ненавижу 1С
гуру
09.02.15
✎
09:24
|
(31) просто многие тут видели только базы для ларьков и не понимают, что средствами 1С эта операция может происходить часами ( и никакой гарантии целостности при этом!), а в скуле запросом минуту другую
|
|||
33
фобец
09.02.15
✎
09:26
|
(30) во. Вместо того чтобы написать обработку и пустить процесс на ночь или на выходных - вы занимались ерундой
|
|||
34
Помогите
09.02.15
✎
09:27
|
(32) Но попадаются и знающие люди. Иногда.
Похоже из-за обработчиков событий объекта 1С-овцы не сделают функцию "Ссылка.УдалитьОбъект()" |
|||
35
Lama12
09.02.15
✎
09:28
|
(28) Я опираюсь на общую теорию. Нельзя смотреть на задачу узко. Подумай какие еще проблемы встают при удалении документов.
(29) Триггеры вещь хорошая, но на разных СУБД она имеет разную реализацию. 1С большую часть логики, которая должна обрабатываться СУБД, вынесла на уровень сервера приложений, что б не заморачиваться со сложностью кода под каждую СУБД. Да и в файловой СУБД нет триггерров. (31) Кто будет проверять логику удаления? (32) При удалении запросом на уровне СУБД, опять же теряется отработка логики поведения системы на удаление объекта. И битых сслок может быть во много раз больше. В общем, я свою точку зрения обозначил. Если есть желание рассуждать об удалении ссылок, без привязке в логике поведения объектов в системе, то пожалуйста. |
|||
36
Wern
09.02.15
✎
09:29
|
(34) Там далеко не только обработчики событий, есть еще подписки, движения, планы обмена, и т.п. Удалив прямым скул запросом по ссылке ты просто разрушишь базу.
|
|||
37
Ненавижу 1С
гуру
09.02.15
✎
09:30
|
(33) приходишь с выходных, а оно сдохло, и чего? сказать шефу, вы тут еще неделю не поработайте, мы чиним базу?
|
|||
38
Ненавижу 1С
гуру
09.02.15
✎
09:31
|
(34)(35)(36) я не спорю, я говорю, что в ИСКЛЮЧИТЕЛЬНЫХ случаях непосредственное удаление вполне приемлимо
|
|||
39
eklmn
гуру
09.02.15
✎
09:33
|
(38) ты поддержал идею от Помогите - виновен!
|
|||
40
Ненавижу 1С
гуру
09.02.15
✎
09:34
|
(39) да я вообще тут еретик, не новость ))
|
|||
41
Wern
09.02.15
✎
09:34
|
(38) ну в исключительных случаях, ничего не мешает его сделать. Хотя в случае (0) одна проблема подменяется другой. У него проблема со скоростью удаления, а пытается он решить какую то другую задачу с удалением по ссылке. Если есть проблема со скоростью ее надо и решать, на это есть свои методы и способы.
|
|||
42
eklmn
гуру
09.02.15
✎
09:34
|
+ представь такие "вумные" програмисты из других сред приходят и начинают "что-то делать" в базе...
потом конечно ее уже никто не востановит, потому что 1С виновата |
|||
43
Сергиус
09.02.15
✎
09:38
|
Если я правильно понял, автор хочет, чтобы в 1с был какой-то, образно говоря, менеджер очистки, которому можно просто скормить ссылку на объект(при этом не считывая его), а уже он бы все корректно подчистил в базе во всех нужных таблицах.
|
|||
44
Fish
09.02.15
✎
09:39
|
(43) Не корректно, а быстро. Корректность автора похоже не заботит.
|
|||
45
eklmn
гуру
09.02.15
✎
09:39
|
(43) ага, есть встроенное "Удаление помеченных объектов"
|
|||
46
Ненавижу 1С
гуру
09.02.15
✎
09:39
|
(42) а нормально в 1С, что в ранних версиях 8ки движения на счетах не имевших допустим второго субконто выдавало НЕОПРЕДЕЛЕНО, а теперь выдает NULL? и нигде об этом не написали
Спасибо, что с переходом на 8.2 описали новое поведение обработки заполнения, но что делать со старыми базами? внедрять дополнительный код Про проблему хранения в составном типе пустых ссылок вместо неопределено, такого не слышали? |
|||
47
eklmn
гуру
09.02.15
✎
09:41
|
(46) блин, да че только не схавал я от 1С с этими переходами, а че делать платформа меняется постоянно
|
|||
48
eklmn
гуру
09.02.15
✎
09:41
|
+ работа всегда есть ))
|
|||
49
ShoGUN
09.02.15
✎
09:46
|
(46) Расслабься, в любом ORM такое бывает. Самое хреновое тут конечно то, что не написали. Документация у 1С хромает, это не новость.
|
|||
50
Ненавижу 1С
гуру
09.02.15
✎
09:48
|
(48) яростно плюсую
|
|||
51
Cube
09.02.15
✎
09:50
|
(11) "для того чтобы удалить документ ворда, ты его обязан открывать и считывать?"
Да, ты должен его получить (открыть папку с документом). Имея только ярлык ты ничего сделать не можешь. |
|||
52
Помогите
09.02.15
✎
09:50
|
(44) Говорил же, ты не понял вопроса. Нужно и быстро, и корректно.
|
|||
53
Cube
09.02.15
✎
09:51
|
И вообще, если надо мочить быстро по ссылкам, то СП в помощь:
УдалениеОбъекта (ObjectDeletion) Свойства: ОбменДанными (DataExchange) Ссылка (Ref) Методы: Записать (Write) Конструкторы: На основании ссылки Описание: Предназначен для удаления объекта базы данных. Объект хранит ссылку на объект базы данных и при обращении к методу Записать() производит удаление объекта базы данных, на который показывает ссылка. Кроме того, данный объект имеет свойство ОбменДанными, которое содержит параметры обмена данными, используемые при удалении объекта, на который показывает ссылка. Основное назначение данного объекта - переносить удаление объектов базы данных при использовании в составе других механизмов обмена данными. Доступность: Сервер, толстый клиент, внешнее соединение. И пример: Массив = Новый Массив; Массив.Добавить(Справочники.Валюты.НайтиПоКоду("999")); УдалениеОбъекта = Новый (Тип("УдалениеОбъекта"),Массив); УдалениеОбъекта.Записать(); |
|||
54
ShoGUN
09.02.15
✎
09:53
|
(44) Ну пусть удаляет напрямую, если пофиг на корректность и битые ссылки не волнуют.
Проблема-то в том, что при удалении объекта может выполняться совершенно несвязанные с этим события. А всю логику переносить в триггеры - разработчики платформы зароются в работе с разными СУБД, триггеров-то превеликое множество реализаций. |
|||
55
Помогите
09.02.15
✎
09:54
|
(51) Открывая папку с документом и тысячей других документов, ты его не считываешь к себе.
Документ ворда лежит в сети, на сервере. Удаление происходит быстро. Скачивание документа на твой комп не происходит при открытии папки. |
|||
56
Помогите
09.02.15
✎
09:55
|
(53) Ну вот. А ты говорил что нужно считывать.
Всем спасибо. Темку можно закрыть. |
|||
57
ShoGUN
09.02.15
✎
09:55
|
(55) Ещё раз - логика реализована не на уровне СУБД. Она реализована как раз в коде объекта. Для того, чтобы логика отработала корректно - в общем случае надо выполнить код из объекта, а для этого надо его получить. Просто грохнуть запись в БД - недостаточно.
|
|||
58
Помогите
09.02.15
✎
09:56
|
(57) Не в коде объекта, а в метаданных.
|
|||
59
Fish
09.02.15
✎
09:57
|
(52) Если нужно "Нужно и быстро, и корректно", то только типовыми методами, и не надо ничего изобретать. Например, (45).
|
|||
60
ShoGUN
09.02.15
✎
09:57
|
(57) Код - это подмножество метаданных.
|
|||
61
Зеленый пень
09.02.15
✎
09:58
|
Давайте еще вспомним, что регистры, подчиненные регистратору, можно удалять только по каждому регистратору отдельно.
И типовое удаление помеченных на больших базах неработоспособно. Не заточена 1С под большие базы, хоть и декларирует это. |
|||
62
Fish
09.02.15
✎
10:00
|
(61) А большие базы это сколько? Сотни гигабайт?
|
|||
63
Timon1405
09.02.15
✎
10:00
|
(60), (58) говорит про модуль менеджера
|
|||
64
Cube
09.02.15
✎
10:01
|
(56) Я такого не говорил. Я сказал, что у ссылки нет методов объекта и это не только в 1С так, так везде.
|
|||
65
Serg_1960
09.02.15
✎
10:01
|
(53) Без проверки ссылочной целостности? О_О
|
|||
66
Ненавижу 1С
гуру
09.02.15
✎
10:02
|
(62) ну хотя бы одна сотня
|
|||
67
ShoGUN
09.02.15
✎
10:02
|
(63) Поясни мысль. В модуле объекта что - логики не может быть?
|
|||
68
Cube
09.02.15
✎
10:03
|
(55) Это в толстом клиенте объект тянется на клиент, а в тонком всё произойдет &НаСервере...
|
|||
69
Помогите
09.02.15
✎
10:03
|
(65) А так и так без проверки.
|
|||
70
Ненавижу 1С
гуру
09.02.15
✎
10:04
|
нужен модуль ссылки, хотя бы для печати не нужно поднимать объект
|
|||
71
b_ru
09.02.15
✎
10:06
|
(22) FOREIGN KEY (...) REFERENCES ... ON DELETE CASCADE это хорошо, но практически оно никак не сможет проанализировать флажок "автоматически удалять движения при распроведении", а еще не сможет проанализировать ведущие измерения в регистрах, да и вообще там километровый триггер получается, что совсем не хорошо.
|
|||
72
ShoGUN
09.02.15
✎
10:06
|
(70) В принципе - неплохо бы было, но это замечательный способ выстрелить себе в ногу. Не думаю, что 1С на это пойдёт.
|
|||
73
pescennius
09.02.15
✎
10:07
|
(70) он и так есть, называется модуль менеджера, там можно такие процедуры реализовать в которых объект не требуется.
|
|||
74
ShoGUN
09.02.15
✎
10:07
|
(71) Мало того, скорей всего реализация триггера будет зависеть от СУБД. 1С даже представления не использует, что уж про триггеры говорить.
|
|||
75
Fish
09.02.15
✎
10:08
|
(66) Нормально работает типовое удаление на базе ~150 ГБ. Почему оно неработоспособно?
|
|||
76
Timon1405
09.02.15
✎
10:09
|
(67) http://infostart.ru/public/72472/
(57) >>в общем случае надо выполнить код из объекта в общем получать объект не обязательно, см. (70) и печать в новых типовых |
|||
77
Fish
09.02.15
✎
10:10
|
(74) Тут некоторые "мегапрограммисты", видимо не в курсе, что 1С не только с MS SQL работает :)
|
|||
78
Serg_1960
09.02.15
✎
10:14
|
(77) + Тут некоторые "мегапрограммисты" забывают про RLS.
|
|||
79
ShoGUN
09.02.15
✎
10:17
|
(76) Я в курсе, зачем это нужно, я писал и пишу не только на 1С. Безусловно, логику можно перенести в static методы класса, но для этого её надо переделать сначала.
|
|||
80
Зеленый пень
09.02.15
✎
11:23
|
(75) Значит, объектов мало к удалению.
Когда переваливает за 500 тыс - дело дрянь. |
|||
81
Fish
09.02.15
✎
11:27
|
(80) А зачем копить по 500 тыс объектов к удалению? Базу надо регулярно обслуживать.
|
|||
82
Cube
09.02.15
✎
11:34
|
(81) Ну, например, свертка базы...
|
|||
83
Wern
09.02.15
✎
11:37
|
(82) Зачем при свертке вообще что то удалять? перенесите нужные данные в новую базу и дело с концом.
|
|||
84
Cube
09.02.15
✎
11:42
|
(83) С концом, с началом... Ситуации разные бывают...
|
|||
85
Serg_1960
09.02.15
✎
12:08
|
(имхо) Написать рег.задание и пусть оно регулярно удаляет объекты (например ночью по тысяче объектов) ...
|
|||
86
Ненавижу 1С
гуру
09.02.15
✎
12:09
|
(73) только там параметр нужен, а так - все ОК
|
|||
87
hhhh
09.02.15
✎
15:43
|
(82) элементарно можно удалить 500 тыс объектов мелкими порциями, по 5-10 тыс. объектов за раз.
|
|||
88
del123
09.02.15
✎
16:08
|
Глобальный контекст (Global context)
УдалитьОбъекты (DeleteObjects) Синтаксис: УдалитьОбъекты(<СписокСсылок>, <Проверять>, <НайденныеДанные>) Параметры: <СписокСсылок> (обязательный) Тип: Массив. Список ссылок на объекты, которые нужно удалить. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |