|   |   | 
| 
 | Массив элементов с типом "файл" | ☑ | ||
|---|---|---|---|---|
| 0
    
        tndr2 27.04.19✎ 15:53 | 
        Вопрос такой:
 Если использовать метод НайтиФайлы("c:\temp", "*.exe") то вернется массив с типом "файл", но если потом обходить этот массив, и пытаться найти в этом массиве элемент, то всегда возвращается неопределено. Псевдокод: МассивФайлов1 = НайтиФайлы("c:\temp", "*.exe"); МассивФайлов2 = НайтиФайлы("c:\temp\1", "*.exe"); Для Каждого ЭлементМассив1 Из МассивФайлов1 Цикл Если МассивФайлов2.Найти(ЭлементМассив1) > 0 Тогда Сообщить("Элемент найден"); КонецЕсли; ... КонецЦикла; Метод "Найти()" - всегда будет возвращать неопределено.... Хотелось бы понять, почему так? | |||
| 1
    
        zehn 27.04.19✎ 16:12 | 
        Потому что это разные элементы.     | |||
| 2
    
        tndr2 27.04.19✎ 16:18 | 
        (1) Не, ну как...
 Допустим, в винде, я копирую файлы из одной папки у в другую, потом запускаю обработку в 1С, и она не находит одинаковые файлы в этих каталогах. Собственно почему? Предполагаю - это предположение, ссылочные типы после попыток преобразования ищутся по уиду, простые типы - ну они и в африке простые. Но ведь раз есть такой объект в 1с, как "файл", то он по идее тоже должен быть уникальным, соответственно и поиск тоже должен работать? | |||
| 3
    
        zehn 27.04.19✎ 16:21 | 
        (2) С чего бы это объкту файл быть одинаковым? Все объектные типы сравниваются по ссылке на объект.
 Мальчик = Новый Структура("Имя", "Саша"); Девочка = Новый Структура("Имя", "Саша"); Какой ты ожидаешь результат? | |||
| 4
    
        tndr2 27.04.19✎ 16:36 | 
        (3) Ну по ключу "Имя" - я во всех случаях значение получу.
 Но это структура. Речь про массивы. Метод НайтиФайлы() возвращает массив элементов с типом "Файл", тип "Файл" имеет определенные свойства, и допустим, что в обеих каталогах, эти свойств идентичны у каждого файла. Почему метод массива Найти() ничего не находит? Как это работает? Каждый раз, когда выполняется НайтиФайлы() к каждому элементу массиву что-то уникальное добавляется, или как? Задача простая; найти неуникальные файлы в разных каталогах, и их удалить. При условии, что их несколько десятков тысяч. | |||
| 5
    
        Rie 27.04.19✎ 16:43 | 
        (4) Элемент массива - это не файл на диске, а некая структура, описывающая его свойства.
 Файл1 = Новый Файл("ababua.txt"); Файл2 = Новый Файл("ababua.txt"); Файл на диске - один и тот же. Но Файл1 <> Файл2. Сравнивай имена файлов, а не сами объекты типа Файл. | |||
| 6
    
        tndr2 27.04.19✎ 16:48 | 
        (5) Это понятно
 Но выходит, что: 1. Мне надо найти все файлы в каталоге, получить некий массив (который висит в оперативной памяти, вместе со всеми свойствами каждого элемента массива) 2. Мне нужно обойти этот массив, и условно, в другой массив, записать строковое значение некого свойства 3. Потом выгрузить в массив файлы из другого каталога (и он со всеми свойствами будет висеть в оперативной памяти) 4. Начать сравнивать элементы этих массивов. Вопрос, почему, сразу нельзя сравнить объекты обоих массивов, в которых есть элементы с одинаковыми свойствами? | |||
| 7
    
        tndr2 27.04.19✎ 16:49 | 
        Объекты типа "Файл"     | |||
| 8
    
        MetaDon 27.04.19✎ 16:59 | 
        (6) а уникальные по имени или содержимому?     | |||
| 9
    
        Rie 27.04.19✎ 17:02 | 
        (6) Почему нельзя? Потому что людей много, они разные, и желания у них разные. И платформа 1С не может угадать, кому что хочется. Вам хочется по именам искать. Кому-то другому - по расширениям. Или по длине. Или...
 Получили массив файлов? Преобразуйте в массив имен: Имена = Новый Массив; Для каждого Файл из Файлы Цикл Имена.Добавить(Файл.Имя); КонецЦикла; И не морочьте себе голову, что там в памяти висит: нет ссылок на массив - сборщик мусора его удалит, когда память потребуется. | |||
| 10
    
        tndr2 27.04.19✎ 17:11 | 
        (9) Верно!
 Но, для этого объекта 1С уже определила свойства. Почему бы не сравнить эти свойства сразу? | |||
| 11
    
        H A D G E H O G s 27.04.19✎ 18:47 | 
        Жесть какая.     | |||
| 12
    
        tndr2 27.04.19✎ 19:16 | 
        Ну вот дурацкая ситуация, нет админов, и они не могут написать скрипт, который ежедневно будет копировать файлы из одной папки в другую.
 И из второго удалять неактуальные файлы, ибо принимается, что в первой папке всегда набор файлов актуален. Хотим сделать - это из 1с. Файлов много, десятки тысяч. Какой алгоритм? | |||
| 13
    
        hhhh 27.04.19✎ 19:26 | 
        (10) ну ведь там путь разный, и полное имя файла. Как же вы говорите, что все свойства одинаковые. То есть 1с сравнила, но файлы оказались разными.     | |||
| 14
    
        Garykom гуру 27.04.19✎ 19:28 | 
        (12) Алгоритм простой: нанять программиста.     | |||
| 15
    
        H A D G E H O G s 27.04.19✎ 19:46 | 
        (12) У тебя Найти() в цикле будет занимать 90% времени.
 Помести имена файлов в Соответствие, или в ТЗ и потом Индексируй и будет щасте. | |||
| 16
    
        H A D G E H O G s 27.04.19✎ 19:46 | 
        Плач Ярославны на ровном месте какой-то.     | |||
| 17
    
        H A D G E H O G s 27.04.19✎ 19:47 | 
        Хочется еще быстрее - раскидай этот 10К список по 6 фоновым заданиям     | |||
| 18
    
        Garykom гуру 27.04.19✎ 19:48 | 
        Мне интереснее зачем надо из 1С искать *.exe     | |||
| 19
    
        H A D G E H O G s 27.04.19✎ 19:50 | 
        (18) Это либо для примера, либо мы нашли вирусописателя на 1с.     | |||
| 20
    
        Garykom гуру 27.04.19✎ 19:52 | 
        (19) Интересно как он будет встроенными в платформу 1С возможностями файлы exe модифицировать?     | |||
| 21
    
        Garykom гуру 27.04.19✎ 19:53 | 
        (20)+ Я в курсе что это можно в последних версиях, интересно как "вирусописателя" с этим справится     | |||
| 22
    
        H A D G E H O G s 27.04.19✎ 20:00 | 
        (21) Это можно было во всех версиях.     | |||
| 23
    
        Garykom гуру 27.04.19✎ 20:01 | 
        (22) Без внешних ВК и прочего?     | |||
| 24
    
        H A D G E H O G s 27.04.19✎ 20:03 | 
        (23) ДвоичныеДанные->Base64Строка->ComSafeArray->Base64Строка->ДвоичныеДанные     | |||
| 25
    
        Garykom гуру 27.04.19✎ 20:08 | 
        (24) Угу и с какой версии появились ДвоичныеДанные->Base64Строка ?     | |||
| 26
    
        tndr2 27.04.19✎ 20:20 | 
        (13) Верно.
 Поэтому сначала создается объект типа "Файл", который предназначен для копирования, и далее этот объект, в зависимости от условий, либо копируется, либо нет, но во всех случаях записывается в служебный массив. Массив этих файлов - является актуальным. Потом необходимо из массива файлов, который устарел вычесть массив актуальных файлов, и удалить ненужные. Вопрос, почему функция Массив1.Найти(ЭлементМассива2) всегда = неопределено. Если свойства у каждого файла, из обоих массивов идентичны. Как 1с определяет, что самого объекта из массива1 с типом файл (с ОДИНКАОВЫМИ свойствами), нет в массиве2? | |||
| 27
    
        H A D G E H O G s 27.04.19✎ 20:22 | 
        (25) 8.1 вроде     | |||
| 28
    
        H A D G E H O G s 27.04.19✎ 20:24 | 
        (26)
 Файл1=Новый Файл("С:\temp\data.txt"); Файл2=Новый Файл("С:\temp\data.txt"); ФайлыРавны=Файл1=Файл2; Что будет в переменной ФайлыРавны ? | |||
| 29
    
        hhhh 27.04.19✎ 20:26 | 
        (26) наверно по адресу элемента в оперативной памяти. То есть массив где-то располагается в оперативной памяти компьютера. Для поиска задаем адрес ячейки оперативной памяти. Если в массиве есть такой адрес ячейки, значит найдено.     | |||
| 30
    
        tndr2 27.04.19✎ 20:32 | 
        Ладно давайте так:
 МассивВычитания = Новый массив(); МассивВычитаемый = Новый массив(); МассивВычитаемый = НайтиФайлы("с:\", *.txt"); ИмяФайла = "с:\qqq.txt"; Файл1 = новый Файл(ИмяФайла); Если Файл.Существует() тогда Массив1.Добавить(Файл1); КонецЕсли; Для каждого НайденныйФайл ИЗ МассивВычитаемый Цикл Если Массив1.Найти(НайденныйФайл) Тогда .... \\\ Чего-то делаем КонецЦикла Но всегда "неопределено" Впорос; Почему? | |||
| 31
    
        tndr2 27.04.19✎ 20:34 | 
        У обоих объектов одинаковый свойства, почему поиск не проходит?     | |||
| 32
    
        runoff_runoff 27.04.19✎ 20:37 | 
        (30) кстати.. попробуйте использовать СравнениеЗначений.Сравнить()..     | |||
| 33
    
        tndr2 27.04.19✎ 20:37 | 
        Окей, вы скажете я создал объект не существующего файла, но блин, это же объект, у него есть свойства, и у существующего файла тоже есть свойства, они идентичны, все это происходит в ОЗУ, но сопоставление не происходит...     | |||
| 34
    
        hhhh 27.04.19✎ 20:37 | 
        (30) потому что это две разные ячейки оперативной памяти компьютера. Файл1 это уже новая ячейка оперативной памяти. Она никогда у вас не будет равна ячейкам МассивВычитаемый. Хоть вы головой об стенку бейтесь, всё равно будет неопределено.     | |||
| 35
    
        H A D G E H O G s 27.04.19✎ 20:38 | 
        (30) Вам бы ЯП подучить. Ну хоть какой-нибудь.     | |||
| 36
    
        H A D G E H O G s 27.04.19✎ 20:38 | 
        (33) Андрей, ты пьян.     | |||
| 37
    
        Garykom гуру 27.04.19✎ 20:39 | 
        (27) Мне почему то помнится в 8.2 и не в самом начале     | |||
| 38
    
        tndr2 27.04.19✎ 20:39 | 
        (34) А с ссылочными типами в терминах 1С все будет отлично работать)     | |||
| 39
    
        H A D G E H O G s 27.04.19✎ 20:39 | 
        (32) Интересно, что будет с СравнитьЗначение() в (28)     | |||
| 40
    
        tndr2 27.04.19✎ 20:40 | 
        (35) Ну будь любезен, объясни как это работает?
 Я не понимаю. | |||
| 41
    
        Garykom гуру 27.04.19✎ 20:46 | 
        (40) "Две разные ссылки на один объект не равны между собой", хотя если получить объект по каждой и сравнить то они равны.     | |||
| 42
    
        H A D G E H O G s 27.04.19✎ 20:49 | 
        (40) 2 массива разных объектов. Уникальный. Естественно, они не равны друг другу, так как это РАЗНЫЕ объекты, хоть и содержат одинаковые данные.
 Почему 1С не сделала сравнение по содержимому - хороший вопрос, который можно задать также Oracle, Microsoft и Borland вместе с Гугл. На то ты и программист здесь, чтобы самостоятельно сравнивать по содержимому. | |||
| 43
    
        H A D G E H O G s 27.04.19✎ 20:49 | 
        Уникальный - > Уникальных.     | |||
| 44
    
        runoff_runoff 27.04.19✎ 20:50 | 
        (39) будет 0, т.е. значения равны..     | |||
| 45
    
        Garykom гуру 27.04.19✎ 20:52 | 
        Ну вся проблема ТС в том что он вместо строк (с полными путями файлов найденных) зачем то сами файлы из 1С сохраняет, которые внутри в т.ч. могут иметь разные один путь и ссылаться на один объект файл на диске.     | |||
| 46
    
        tndr2 27.04.19✎ 20:54 | 
        (42) Это все замечательно.
 Но, вопрос, как 1с сравнивает эти "разные" объекты? По каким критериям, если все свойства этих объектов, определенные самой платформой идентичны. И выходит, что сначала сама платформа гоняет рекурсивно поиск по каталогу, потому выгружает это все в массив для 1с гомнокодера, типа меня, и я еще потом 2 раза должен прогнать этот массив, для того, чтобы сравнить значения... Чего-то не то? Нет? | |||
| 47
    
        Garykom гуру 27.04.19✎ 20:58 | 
        Файл (File)
 ПолноеИмя (FullName) Использование: Только чтение. Описание: Тип: Строка. Содержит полное имя файла (включающее путь к файлу), с которым связан объект. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). | |||
| 48
    
        Garykom гуру 27.04.19✎ 20:59 | 
        Вам так надо срочно обратиться к кому то и купить СП     | |||
| 49
    
        Garykom гуру 27.04.19✎ 20:59 | 
        (48) *таки     | |||
| 50
    
        tndr2 27.04.19✎ 21:12 | 
        Я не понимаю как это работает...
 Сам по себе метод НайтиФайлы() - не очень быстрый Кроме того, надо получить свойства файла, типа "ПолноеИмя", а дальше уже что с ним делать... Ну такое себе.. | |||
| 51
    
        H A D G E H O G s 27.04.19✎ 21:12 | 
        (46) Все в порядке, я не вижу проблемы.     | |||
| 52
    
        H A D G E H O G s 27.04.19✎ 21:27 | 
        Как я вижу программистов 1С
 https://youtu.be/UNfKzPWJK50?t=634 | |||
| 53
    
        tndr2 27.04.19✎ 21:30 | 
        (51) Ну это достаточно серьезная проблема, если например необходимо актуализировать изображения на сайте.
 Оперативно, удалять/добавлять и все это делать средствами учетной системы на 1с. При условии, что файлов много, они часто изменяются и их необходимо копировать для работы разных отделов компании.. | |||
| 54
    
        H A D G E H O G s 27.04.19✎ 21:32 | 
        (53) Напишите ВК, но я сомневаюсь, что узкое горлышко - 1С, а не NTFS.     | |||
| 55
    
        H A D G E H O G s 27.04.19✎ 21:33 | 
        Когда пытаешься поддерживать актуальность файлов в каталоге:
 https://youtu.be/UNfKzPWJK50?t=137 | |||
| 56
    
        tndr2 27.04.19✎ 21:34 | 
        Ежова понесло..)))     | |||
| 57
    
        Garykom гуру 27.04.19✎ 21:36 | 
        (54) Кстати насчет ВК.
 Сча Golang изучаю и оно мне нравится кросскомпиляцией под разные платформы. Но как ее прикрутить к 1С в виде ВК? | |||
| 58
    
        Garykom гуру 27.04.19✎ 21:38 | 
        (57)+ В будущем вот это хочу пощупать https://github.com/covrom/gonec     | |||
| 59
    
        Garykom гуру 27.04.19✎ 21:47 | ||||
| 60
    
        tndr2 27.04.19✎ 23:37 | 
        (34) А как же с ссылочными типами, ну или простыми?
 Как-то же находит? Что это за такой странный объект - "Файл", у которого порядка 5-6 свойств, по которым платформа не в состоянии определить идентичность? Понятно, что 1С - это учетная система, и что функционал работы с файловой системой ОС - сильно ограничен, но если уж вы дали инструмент работы с файловой системой, так доработайте его до конца..... | |||
| 61
    
        Garykom гуру 27.04.19✎ 23:43 | 
        (60) Вы хотите странного.
 Взяли две пачки листочков бумаги. Написали на листках одной пачке имена и на листках другой пачке тоже имена, причем так что имена между и первой и второй пачкой могут повторяться. Все листочки сложили так что названия не прочитать. И теперь хотите чтобы некто/нечто не разворачивая листочков нашло "одинаковые листочки" (по факту разные но с одинаковыми именами внутри) в двух пачках? | |||
| 62
    
        tndr2 27.04.19✎ 23:47 | 
        (61) Я ничего не хочу     | |||
| 63
    
        tndr2 27.04.19✎ 23:48 | 
        У объекта типа "файл" есть свойства, вот пусть интерпретатор и сравнивает свойства, которые ему передаются     | |||
| 64
    
        tndr2 27.04.19✎ 23:53 | 
        Ссылочные или простые типа он же сравнивает?     | |||
| 65
    
        tndr2 28.04.19✎ 00:10 | 
        (54) лабание внешних компонент - приводит к сложности принятия решений бизнесом.
 Ибо если чота_там_не_заработает_ то надо будет заморачиваться, как выйти из сложной ситуации... А "дело" не может себе позволить простаивать Ежов. Твоя зарплата - это работа других более предприимчивых людей. | |||
| 66
    
        Мимохожий Однако 28.04.19✎ 06:44 | 
        (4) Есть программы копирования, которые решают эту задачу за 5 минут настройки. Достаточно установить на компьютер. Например, Cobian Backup различных версий. Это не считая кучи примеров готовых скриптов и батников. ИМХО, буря в стакане бурды.     | |||
| 67
    
        Cyberhawk 28.04.19✎ 08:25 | 
        Так пути (каталоги) поиска-то разные в параметре метода, возвращающем массив описаний файлов.
 Попробуй два массива создать, передавая в метод один и тот же каталог, что будет? | |||
| 68
    
        Web00001 28.04.19✎ 08:38 | 
        У нас есть учетная система, что будем делать? Синхронизировать файлы, что же еще? Может использовать rsync или rclone? При наличии программиста 1С который работает за тарелку лапши? Ты что дебил?     | |||
| 69
    
        zehn 28.04.19✎ 08:49 | 
        (65) Милота-то какая - разработчик, не осиливший сравнение объектов по ссылке, учит остальных как вести бизнес... Тяжело вам там, товарищ председатель совета директоров, программировать заставляют?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |