Имя: Пароль:
1C
 
Гуру-тест: прикрепление файла из папки и в папку
0 Гений 1С
 
гуру
21.01.22
16:16
Реализована доработка - при прикреплении файла к объекту путь для размещения файла определяется по алгоритму.
Клиент поставил обратную задачу - если файл добавлен в папку, соответствующую объекту, нужно прикрепить файл к объекту.

Периодически запускается сканирование каталога прикрепленных файлов, находятся новые (еще не прикрепленные файлы).

Теперь вопрос ЗНАТОКАМ - как максимально просто (скорость выполнения игнорируем), определить, к какому объекту прикрепить файл.

Уточнение - к одному объекту может быть прикреплено множество файлов.

Описываю, как интересный алгоритм, ибо сперва хотел делать по-тупому, сложному пути.
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 пишешь "нелья файл перемещать между папками" - а его возьмут и переместят.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой