|
Гуру-тест: прикрепление файла из папки и в папку | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
21.01.22
✎
16:16
|
Реализована доработка - при прикреплении файла к объекту путь для размещения файла определяется по алгоритму.
Клиент поставил обратную задачу - если файл добавлен в папку, соответствующую объекту, нужно прикрепить файл к объекту. Периодически запускается сканирование каталога прикрепленных файлов, находятся новые (еще не прикрепленные файлы). Теперь вопрос ЗНАТОКАМ - как максимально просто (скорость выполнения игнорируем), определить, к какому объекту прикрепить файл. Уточнение - к одному объекту может быть прикреплено множество файлов. Описываю, как интересный алгоритм, ибо сперва хотел делать по-тупому, сложному пути. |
|||
1
pechkin
21.01.22
✎
16:19
|
в пути заложены нужные коды
|
|||
2
Гений 1С
гуру
21.01.22
✎
16:22
|
(1) там есть весьма простой метод, предлагаю догадаться
|
|||
3
pechkin
21.01.22
✎
16:23
|
(2) куда уж проще - правильное имя/путь - правильный объект
|
|||
4
Гений 1С
гуру
21.01.22
✎
16:24
|
ну т.е. код по определению пути упрощенно так
Если Объект.Вид = "А" Тогда Путь = "\AR"; ИначеЕсли Объект.Вид = "Б" Тогда Путь = "\BP"; ИначеЕсли Объект.Вид = "X" Тогда Путь = "\NK"; ИначеЕсли Объект.Вид = "N" Тогда Путь = "\UU"; КонецЕсли; Но это упрощенно, алгоритм довольно сложный и из пути получить объект довольно сложно, если прописывать, да и дублирование функционала будет. |
|||
5
Гений 1С
гуру
21.01.22
✎
16:24
|
т.е. задача стоит такая - по пути файла определить в какой объект его прикрепить.
|
|||
6
pechkin
21.01.22
✎
16:25
|
Путь = "\" + Объект.Вид;
|
|||
7
Dotoshin
21.01.22
✎
16:26
|
(0) В объекте есть какие-то признаки, указывающие на имя файла?
|
|||
8
Гений 1С
гуру
21.01.22
✎
16:27
|
(6) совсем не в кассу.
(7) Проще господа, проще. |
|||
9
Гений 1С
гуру
21.01.22
✎
16:28
|
Подсказываю - не стоит думать об обратной функции получения объекта по пути, её вообще можно не писать. Думаем
|
|||
10
pechkin
21.01.22
✎
16:28
|
(6) это может вообще быть отдельный справочник с настройками
|
|||
11
Dotoshin
21.01.22
✎
16:29
|
(8) Да куда уж проще, по набору признаков генерируется имя файла. Этот файл ищешь в папке...
|
|||
12
Ёпрст
21.01.22
✎
16:29
|
(0) имя файла задавать как гуид объекта.
|
|||
13
azernot
21.01.22
✎
16:30
|
В своё время в 1С 7.7 делал хранилище "прикреплённых файлов" и путь строился так:
\Тип\Вид\Год\Номер примеры пути: \Справочник\Контрагенты\0000\00000015 \Документ\РасходнаяНакладная\2020\00000028 Соответственно, путь всегда указывал на объект |
|||
14
Гений 1С
гуру
21.01.22
✎
16:30
|
(11) ты не понял, пользователь сам кидает файл в нужную папку. И нужно соответственно, этот файл прикрепить к нужному объекту.
|
|||
15
Гений 1С
гуру
21.01.22
✎
16:31
|
(13) это размещение файлов, а я решаю еще и обратную задачу - при добавление в структуру папок привязку файла к нужному объекту 1С.
|
|||
16
azernot
21.01.22
✎
16:32
|
(15) Не вижу смысла отвечать на идиотские вопросы, в которых НАМЕРЕННО скрывается часть информации.
|
|||
17
pechkin
21.01.22
✎
16:33
|
(15) те кинул в произвольную папку и произвольным именем и само все нашлось?
|
|||
18
pechkin
21.01.22
✎
16:34
|
ну если так, то круто конечно
|
|||
19
azernot
21.01.22
✎
16:45
|
Придумался пример такого "гуру" теста:
Пользователям предлагается картинка, на которой водитель шарит под капотом грузовичка, на картинке явно видно, что на улице зима (сугробы), что машина - заведена (дым из выхлопной трубы), над капотом нет ни дыма ни пара. Пользователям-гуру предлагается догадаться: что сломалось у водителя? "гуру" начинают накидывать варианты исходя из того, что машина заведена, что поломка именно под капотом, что зима, что из-под капота не дымит... А потом ТС выдаёт правильный ответ: - У водителя сломалась МАШИНА! |
|||
20
Ёпрст
21.01.22
✎
16:47
|
(19) это скорее из серии идиотэн-тест на пересдачу прав в Германии
|
|||
21
DrShad
21.01.22
✎
16:54
|
в папке есть файлик с гуидом объекта
|
|||
22
Гений 1С
гуру
21.01.22
✎
16:55
|
(21) нет, это будет мозолить глаз пользователю. Можно конечно сделать невидимым, но нет.
|
|||
23
Fish
21.01.22
✎
16:57
|
(0) Какой-то идиотский вопрос. У тебя же в задаче написано: "файл добавлен в папку, соответствующую объекту". Вот по этому соответствию и определяй. Непонятно, в чём проблема.
|
|||
24
azernot
21.01.22
✎
16:58
|
(20) А разве в (0) не что-то подобное?
- вы не знаете как организована структура папок - вы не знаете как формируется имя файла - вы не знаете, формируются каталоги при создании объекта или только при "прикреплении" файлов - вы не знаете, может ли пользователь сам сформировать новый каталог, зная алгоритм и поместить в него файлы - вы вообще не знаете, что значит "прикрепление" файла к объекту, хранится ли в базе данных что-то о "прикреплённых" файлах (имя, путь), хранятся ли данные этого файла. - вы вообще ничего не знаете, вам просто не за что зацепиться. Но вам предлагается "решить" эту задачу. Любые ответы, которые исходят из каких-то предположений, как это могло бы быть - отвергаются с едкими комментариями типа "Проще", "Не в кассу", "Это не о том". Т.е. предлагается именно угадать, что за "нетленку" наваял автор. А зная автора, легко предположить, что там либо будут какие-то колеса с четырьмя прямыми углами, либо что-то настолько же очевидное как ответ "МАШИНА". |
|||
25
Гений 1С
гуру
21.01.22
✎
16:59
|
(24) да, ответ не о том. суть не в структуре, а в подходе. алгоритм
|
|||
26
Гений 1С
гуру
21.01.22
✎
17:00
|
(24) когда я напишу ответ, ты поймешь, что был не прав
|
|||
27
Fish
21.01.22
✎
17:04
|
(26) У тебя в (4) прописан алгоритм определения имени папки по виду объекта. Этого достаточно для решения твоей задачи. Что ещё тебе надо, непонятно.
|
|||
28
Гений 1С
гуру
21.01.22
✎
17:05
|
(27) ну, расскажи, если есть файл в папке, как понять, к какому объекту его прикреплять.
|
|||
29
Гений 1С
гуру
21.01.22
✎
17:05
|
(21) хотя "горячо", в принципе, пока ты ближе всех подошел, правда не с того боку
|
|||
30
Fish
21.01.22
✎
17:06
|
(28) Так вызываешь функцию с кодом из (4), которая вернёт тебе соответствие объектов и имён папок. Всё.
|
|||
31
Garikk
21.01.22
✎
17:07
|
(28) так имя папки содержит в себе гуид объекта небось
|
|||
32
Dmitrii
гуру
21.01.22
✎
17:09
|
ОФФ.
(13) >> делал хранилище "прикреплённых файлов" и путь строился так: \Тип\Вид\Год\Номер. Интересно что происходило при изменении номера и года. В декабре и январе пользователи очень любят перетаскивать документы туда-сюда с одного года в другой и обратно (что-то не успели отгрузить, что-то - наоборот - запланированное на январь, заказчик решил забрать до праздников). При каждом изменении года в дате меняется номер. И каждый раз номер новый. |
|||
33
azernot
21.01.22
✎
17:10
|
(32) Менялось имя папки.
|
|||
34
Гений 1С
гуру
21.01.22
✎
17:11
|
(31) нет, это тоже мозолит глаз пользователю и не прозрачно.
|
|||
35
Dmitrii
гуру
21.01.22
✎
17:12
|
Угадайте количество углов у многоугольных колёс моего велосипеда.
Подсказка: колёса НЕ квадратные! (это было бы слишком просто и дублировало бы функционал). |
|||
36
Гений 1С
гуру
21.01.22
✎
17:12
|
Ладно, в 18 озвучу, как раз ковырять начну, наберитесь терпения.
|
|||
37
Гений 1С
гуру
21.01.22
✎
17:12
|
(35) не ну что ты, банальная алгоритмическая задачка на креативное мышление.
|
|||
38
Гений 1С
гуру
21.01.22
✎
17:13
|
В общем, большинство идут от того, что от имени папки пытаются построить обратную функцию и получить объект для размещения.
Но это математический подход. А программист - существо ленивое. Ему лень и влом обратную функцию писать. Подсказка: можно использовать прямую функцию. |
|||
39
Fish
21.01.22
✎
17:15
|
(38) "Подсказка: можно использовать прямую функцию." - Да, я тебе об этом и написал. Но ты, похоже, не осилил. :))
|
|||
40
azernot
21.01.22
✎
17:15
|
(26) Не прав в чём? В том, что намерено сокрыта информация, по которой можно догадаться до очевидного ответа? Ой, сомневаюсь
Для начала надо определиться, как искать новые файлы? Перебирать все файлы всей структуры каталогов и проверять "прикреплен"/"не прикреплен"? Или наоборот, перебирать объекты и по объектам проверять, есть ли папка, есть ли в ней файлы, прикреплены ли они? А может есть какой-то иной механизм хранения всех "прикреплённых" файлов, который апдейтится после каждого "прикрепления"... И от этого зависит, как определять "объект". В первом случае - обратным алгоритмом, во втором - он уже известен в момент проверки папки, а в третьем - он может храниться в этом механизме. Короче, вариантов - вагон и маленькая тележка, есть ли смысл играть в угадайку? |
|||
41
Kassern
21.01.22
✎
17:15
|
(36) сейчас то многим безразлично, что там наваял, а после 18 вообще все забьют...
|
|||
42
Kassern
21.01.22
✎
17:15
|
тем более пятница вечер
|
|||
43
Dmitrii
гуру
21.01.22
✎
17:17
|
(38) >> можно использовать прямую функцию.
Баян. Было в (30) уже. Новое что-то придумай. |
|||
44
Garikk
21.01.22
✎
17:20
|
(0) учитывая что '(скорость выполнения игнорируем)"
ты хочешь перебирать объекты и чекать каждую папку на изменение кол-ва прикрепленных файлов? |
|||
45
Garikk
21.01.22
✎
17:20
|
(44) *чекать папку привязанную к этому обхекту
|
|||
46
Гений 1С
гуру
21.01.22
✎
17:25
|
(39) озвучь весь алгоритм, плиз, чтобы я понимал, ты знаешь или нет
|
|||
47
Fish
21.01.22
✎
17:26
|
(46) Дальше - только за деньги. Я уже и так тебе практически весь алгоритм написал просто так.
|
|||
48
Гений 1С
гуру
21.01.22
✎
17:27
|
(44) ну не совсем так, но ладно, что мучать титьку.
Короче, я перебираю все файлы в каталоге. Если нахожу новый, то вызываю для каждого объекта функцию по определению пути (это можно захэшировать в регистре сведений,например) и смотрю, подходит ли путь под этот файл. т.к. файлы новые добавляются редко и объектов обозримое количество, быстродействием фоновой задачи можно пренебреть. (47) Я сэкономил. |
|||
49
acht
21.01.22
✎
17:28
|
||||
50
azernot
21.01.22
✎
17:29
|
Т.е. из всех возможных вариантов выбран самый еб..тый: для каждого "нового" файла перебирать все объекты, генерировать "путь" и проверять, то или не то.
Квадратные колёса как они есть. |
|||
51
Fish
21.01.22
✎
17:32
|
(50) " из всех возможных вариантов выбран самый еб..тый" - Геня этим и гениален, что умеет находить самые еб...тые способы :))
|
|||
52
Гений 1С
гуру
21.01.22
✎
17:33
|
(50) (51) после драки кулаками не машут господа, не стоит так бурно завидовать моему гению
|
|||
53
Kassern
21.01.22
✎
17:34
|
(48) "т.к. файлы новые добавляются редко и объектов обозримое количество", а когда файлов станет много и добавлять начнут чаще, то вам будет пофиг, вы ведь фриланс, сделали и свалили
|
|||
54
Garikk
21.01.22
✎
17:34
|
а как ты 'новость' файла определяешь? до того как получаешь пути объектов
|
|||
55
Kassern
21.01.22
✎
17:34
|
пускай другой ядом плюется на код и переделывает
|
|||
56
Dmitrii
гуру
21.01.22
✎
17:35
|
(48) Так в (30) это уже было!
Ты давай что-то новое рассказывай. А не это *ерню неси. Тем более, что можно вообще при записи каждого объекта определять путь по твоему алгоритму из (4) и сохранять его в допсведениях. А при появлении файла простым запросом получать объект сведений по значению и сведению (характеристике). А не трахаться с вызовом каждый раз для всех объектов функции. |
|||
57
acht
21.01.22
✎
17:38
|
(56) Клевета! Буквоедство, 0 биг ггггг.
Правильно, геня, да? |
|||
58
Dmitrii
гуру
21.01.22
✎
17:39
|
(52) После драки машешь как раз ты. Твой "гуру" тест был пройден уже 20 минут назад, а ты преподносишь своё *авнорешение, как открытие Америки.
|
|||
59
azernot
21.01.22
✎
17:40
|
(52) А в чём "гений"-то?
В том, что вместо правильного решения применения обратной функции определения объекта по пути, ты сделал какую-то херню? А если ты реально перебираешь все файлы, а не только изменённые позже какой-то последней даты, то это вдвойне херня, потому что тогда уж проще перебирать объекты, по крайней мере так будет гарантировано один раз обход одного объекта. А самое ужасное, что ты ведь реально решил этим "похвастаться", т.е. ты реально "гордишься" своим решением |
|||
60
Garikk
21.01.22
✎
17:42
|
(59) <а не только изменённые позже какой-то последней даты>
я бы не стал опираться на метаданные ФС...это чревато очень суровыми глюками завязанными на время сервера и вообще на телодвижения внутри ФС |
|||
61
Alres
21.01.22
✎
17:44
|
Гений таблетки забыл выпить что-ли, что за дикие костыли
|
|||
62
Kassern
21.01.22
✎
17:45
|
гения опять не оценили современники...)
|
|||
63
azernot
21.01.22
✎
17:48
|
(60) Вопрос даже не в этом (не в дате), а в том, перебираются ли все файлы, или всё же есть какой-то механизм, как среди них определить "новые" скопом, не перебирая вообще все.
|
|||
64
Kassern
21.01.22
✎
17:52
|
Если для всех объектов должны быть картинки, то проще запросом получать все объекты без картинок и искать по нужному пути файлики, если файл существует() то записывать картинку к объекту. Смысл каждый раз ФС дрючить обходом по всем файлам? Да и смысл вообще записывать в базу, если есть ссылка на картинку в ФС?
|
|||
65
Гений 1С
гуру
21.01.22
✎
17:52
|
(54) у меня в каждом файле в базе путь к файлу прописан, соответственно я сравниваю, есть такой путь или нет для каждого файла в папке
|
|||
66
Кирпич
21.01.22
✎
17:52
|
У такой задачи не может быть гениального решения. Задача примитивная.
Самый простой вариант - положить в папку файлик со ссылкой на объект(в виде имени файла или в файле GUID) типа {6F9619FF-8B86-D011-B42D-00CF4FC964FF}.ID я бы так сделал |
|||
67
Garikk
21.01.22
✎
17:52
|
(63) вообще кстати это сама по себе довольно интересная задача, у нас (не в 1С) юзали механизмы по типу FilesystemWatcher (в винде) и inotify (в линуксе)... но для этого нужен запущенный сервис постоянно для мониторинга
|
|||
68
Гений 1С
гуру
21.01.22
✎
17:52
|
(63) нет, я перебираю все
|
|||
69
Dmitrii
гуру
21.01.22
✎
17:53
|
(63) >> как среди них определить "новые" скопом, не перебирая вообще все.
Об этом будет отдельный гуру-тест. |
|||
70
Гений 1С
гуру
21.01.22
✎
17:53
|
(69) можно было бы свойство файлу добавлять, но это не работает если USER скопирует файл. ;-)
|
|||
71
Garikk
21.01.22
✎
17:55
|
(70) ну если скопирует - добавить его по новой а механизм контроля дублей не даст его еще раз добавить
кстати неплохой вариант, только он к типу файловой системы привязан |
|||
72
Kassern
21.01.22
✎
17:55
|
(66) достаточно просто уникальное поле в наименовании, например артикул и номер картинки через нижнее подчеркивание. Например: АВ123_1 и АВ123_2
|
|||
73
Dmitrii
гуру
21.01.22
✎
17:56
|
Один фиг всё это будет работать ровно до первого шифровальщика или любого сбоя носителя. Потом все данные в файлах накроются и будет разработана вменяемая система. Если конечно заказчик сменит аутсорсера.
|
|||
74
Кирпич
21.01.22
✎
17:57
|
(72) да похер чо. вариантов вагон
|
|||
75
Ногаминебить
21.01.22
✎
17:57
|
Проще всего обработанные файлы перекладывать в папку архив (если нужны) или вообще удалять (нафига хранить эти копии?).
|
|||
76
Гений 1С
гуру
21.01.22
✎
17:57
|
(72) файл в папку помещает пользователь. он не будет черточки к имени приписывать. Перечитай условие
|
|||
77
Гений 1С
гуру
21.01.22
✎
17:58
|
(75) файлы должны храниться в определенной иерархии. Перебрасывать нельзя. Там по сути папки по проектам, по ответственным.
|
|||
78
Гений 1С
гуру
21.01.22
✎
17:58
|
например, прислали новый файл, секретарь заходит в проводник и не заходя в 1с кидает в нужный проект, в нужную папку раздела проекта. А файл уже автоматом в 1с подцепляется к объекту.
|
|||
79
Гений 1С
гуру
21.01.22
✎
18:00
|
(58) конечно, конечно, не нервничайте, вы задачу решили, наверное, но не смогли донести свое решение в явном виде. Вы его подразумевали. Без проблем.
|
|||
80
Ногаминебить
21.01.22
✎
18:00
|
(78) И нафига он тогда в этой папке остается если в 1С его цепануло? :)
|
|||
81
Ненавижу 1С
гуру
21.01.22
✎
18:00
|
Прикрутил РС соответствия обьект-путь. По нему определяешь объект
|
|||
82
Гений 1С
гуру
21.01.22
✎
18:00
|
(56) можно все, если осторожно. Главное вовремя, а не "после драки"
|
|||
83
Кирпич
21.01.22
✎
18:01
|
(76) да на папке напиши "Папка объекта Гений идиот ID_0001"
ID_0001 - код объекта вариантов много всяких, но я бы сделал (66) |
|||
84
Гений 1С
гуру
21.01.22
✎
18:02
|
(81) чутка опоздал, задачу уже решили. Про регистр есть в ответе в (48). Но я не стал регистр юзать. Там перебирать всего по каждой папке штук 20 объектов, так что не критично при добавлении нового определить, куда пихать.
|
|||
85
Гений 1С
гуру
21.01.22
✎
18:02
|
(83) Неоднократно выше писал, что лишние символы "мозолят глаз" пользователю. Но видно ТЗ не писан для гуру, да?
|
|||
86
Ненавижу 1С
гуру
21.01.22
✎
18:02
|
(48) конь-гениально! Перебирать 150 тыщ товаров или 5 тыщ партнёров
|
|||
87
Гений 1С
гуру
21.01.22
✎
18:03
|
(86) ну там не такие объемы. ггг...
|
|||
88
Гений 1С
гуру
21.01.22
✎
18:04
|
(86) я ж написал, что время не критично(скорость выполнения игнорируем), читаем ТЗ внимательно
|
|||
89
Ненавижу 1С
гуру
21.01.22
✎
18:04
|
(87) знаменитые ларьки гения
|
|||
90
Кирпич
21.01.22
✎
18:04
|
(85) я за (66), повторяю.
И глаза не мозолит. Не выдумывай |
|||
91
Гений 1С
гуру
21.01.22
✎
18:04
|
(89) ты не поверишь, но в некоторых многомиллионных конторах номенклатура состоит из 200-300 позиций (станки, турбины, например)
|
|||
92
Гений 1С
гуру
21.01.22
✎
18:05
|
(90) там раньше тебя про файлик писали.
На файлик нужны права, его нужно прятать, а то потрут. Да и мозолит он глаза. Зачем с файликом если можно без. Да и потом банальный регистр Папка - Объект намного лучше решает задачу. не? ггг |
|||
93
Ненавижу 1С
гуру
21.01.22
✎
18:06
|
(91) размечтался. Ларёчник ты
|
|||
94
Кирпич
21.01.22
✎
18:09
|
(92) ну из всех озвученных решений твое самое тупорылое, согласись.
|
|||
95
Кирпич
21.01.22
✎
18:15
|
(92) "Да и потом банальный регистр Папка - Объект намного лучше решает задачу. не?"
Ты даже до этого не додумался. |
|||
96
Гений 1С
гуру
21.01.22
✎
18:26
|
(94) После драки кулаками не машут. (95) в (48) я написал про регистр. имеющие глаза да узрят. ггг
|
|||
97
pechkin
21.01.22
✎
19:07
|
(96) надеюсь ты хотя бы мерж делаешь, а цикл в цикле
|
|||
98
pechkin
21.01.22
✎
19:09
|
А проблема получилась в том, что кто-то написал функцию, которую по простому обрать никак нельзя
|
|||
99
sitex
naïve
21.01.22
✎
19:25
|
(0) Все не читал , БСП > РаботаСФайлами и т.д. там все есть
|
|||
100
Злопчинский
21.01.22
✎
20:51
|
||||
101
Злопчинский
21.01.22
✎
20:59
|
(59) "В том, что вместо правильного решения применения обратной функции определения объекта по пути, ты сделал какую-то херню?"
при применении обратной функции без явного костыля типа "Если Фамилия = Иванов Тогда..." для таких гениев как Гений1С - работать не будет. Потому что в прямой функции у такого гения написано задание соответствия в явном виде в (4). И в обратной функции придется писать ту же самую херню... |
|||
102
Злопчинский
21.01.22
✎
21:03
|
(72) фиг там. в артикул запросто манагеры могут впихнуть символы, недопустимые в имени папок/файлов
я б вообще назвал артикул тогда NUL или PRN... или Format C: /y |
|||
103
Злопчинский
21.01.22
✎
21:04
|
(92) "На файлик нужны права, его нужно прятать, а то потрут."
ну и что? то что nas пишешь "нелья файл перемещать между папками" - а его возьмут и переместят. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |