1с 77 скопировать файл
« Как стать программистом 1С » Язык 1С » Работа с файловой системой из 1С
Работа с файловой системой из 1С
Следующие функции языка 1С позволяют манипулировать файлами:
- СоздатьКаталог 1С
- НайтиФайлы 1С
- КопироватьФайл 1С
- ПереместитьФайл 1С
- УдалитьФайлы 1С
- РазделитьФайл 1С
- ОбъединитьФайлы 1С.
Работа с каталогами — СоздатьКаталог 1С
//создает недостающие каталоги в указанном пути
//если каталога нет – создаст всю вложенную структуру
//если есть D:\Temp, то создаст подкаталоги
СоздатьКаталог("D:\Temp\1\2\3")
Поиск файлов — НайтиФайлы 1С
//найти все файлы 1С в каталоге «Sc»
НайденныеФайлы = НайтиФайлы("D:\Sc", "*");
//найти все ТЕКСТОВЫЕ файлы 1С в каталоге, включая вложенные подкаталоги
НайденныеФайлы = НайтиФайлы("D:\Sc", "*.txt", Истина);
//найти все файлы 1С в каталоге, в имени которых встречается слово "копия"
НайденныеФайлы = НайтиФайлы("D:\Sc", "*копия*");
//найти все файлы 1С в каталоге, в имени которых встречается любая цифра в скобочках, например "(1)" или "(100)"
НайденныеФайлы = НайтиФайлы("D:\Sc", "*(*)*");
//найти все файлы 1С в каталоге, в имени которых встречается цифра в скобочках меньше 10, например "(1)" или "(9)"
НайденныеФайлы = НайтиФайлы("D:\Sc", "*(?)*");
Для каждого Файл из НайденныеФайлы Цикл
Если Файл.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
Копирование, перемещение и удаление файлов — КопироватьФайл 1С, ПереместитьФайл 1С, УдалитьФайлы 1С
ИмяФайла = "Текстовый файл.txt";
КаталогИсточник = "D:\sc\";
КаталогПриемник = "D:\";
//копирование файла
ФайлИсточник = Новый Файл(КаталогИсточник + ИмяФайла);
Если не ФайлИсточник.Существует() или ФайлИсточник.ЭтоКаталог() Тогда
ВызватьИсключение "Файл '" + КаталогИсточник + ИмяФайла + "' не существует или является каталогом";
КонецЕсли;
Попытка
КопироватьФайл(КаталогИсточник + ИмяФайла, КаталогПриемник + ИмяФайла);
Исключение
ВызватьИсключение "Нет прав на копирование файла";
КонецПопытки;
ФайлПриемник = Новый Файл(КаталогПриемник + ИмяФайла);
Если не ФайлПриемник.Существует() или ФайлПриемник.Размер() <> ФайлИсточник.Размер() Тогда
ВызватьИсключение "Не удалось корректно скопировать файл";
КонецЕсли;
//перемещение файла
Попытка
ПереместитьФайл(КаталогИсточник + ИмяФайла, КаталогПриемник + ИмяФайла);
Исключение
ВызватьИсключение "Нет прав на копирование файла";
КонецПопытки;
ФайлПриемник = Новый Файл(КаталогПриемник + ИмяФайла);
Если не ФайлПриемник.Существует() Тогда
ВызватьИсключение "Не удалось корректно перенести файл";
КонецЕсли;
Разделение и слияние файлов — РазделитьФайл 1С, ОбъединитьФайлы 1С
//функция создает каталог с именем файла
//в нем создает разделенные части файла, каждая размером в указанное кол-во мегабайт
//каждую часть сжимает архиватором
//возвращает имя каталога
Для работы с файловой системой предназначен объект "ФС". В принципе его не требуется создавать с помощью функции СоздатьОбъект. Можно считать, что он уже создан. Но 1С позволяет создать сколько угодно таких объектов при помощи функции СоздатьОбъект;
Объект "ФС" имеет следующие методы:
ВыбратьФайл()
Открывает окно диалога выбора/сохранения файла. Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.
Параметры:
-: 0 - диалог типа , 1 - диалог типа ;
- переменная, содержащая на входе строку с именем файла, а на выходе - имя выбранного файла;
- переменная, содержащая на входе строку с начальным каталогом, а на выходе - имя выбранного каталога;
- строка с заголовком окна;
- строка с фильтром отбора файлов (например: 'Все файлы (*.*) |*.*');
- строка с расширением файла по умолчанию;
- время ожидания отклика пользователя в секундах (необязателен).
ВыбратьФайлКартинки
Открывает окно диалога выбора/сохранения файла картинки.
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.
Синтаксис: ВыбратьФайлКартинки (, , , , , )
ВыбратьКаталог
Открывает окно диалога выбора каталога.
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена'; 1 - если в окне диалога нажата кнопка 'ОК', при этом в переменную возвращается имя выбранного каталога; -1 (минус единица) - закончилось время ожидания отклика пользователя.
Синтаксис: ВыбратьКаталог(,,)
СуществуетФайл
Проверяет существование файла..
Возвращает: 1 - файл существует; 0 - не существует.
Синтаксис: СуществуетФайл()
Параметры:
- строка с именем файла источника;
- строка с именем файла приемника;
-:
0 - существующий файл приемника перезаписать;
1 - существующий файл приемника не перезаписывать.
Удаляет файл.
Синтаксис: УдалитьФайл()
Параметры:
- строка с именем файла источника;
- строка с новым именем файла;
-:
0 - запрещает перемещение файла между дисками и существующий файл приемника не перезаписывается;
1 - разрешает перемещение файла между дисками (только для файлов) и существующий файл приемника перезаписывается.
Открывает выборку файлов по заданной маске и находит первый файл.
Возвращает строку с именем найденного файла.
Синтаксис: НайтиПервыйФайл()
Находит следующий файл по открытой выборке файлов.
Возвращает строку с именем найденного файла.
Синтаксис: НайтиСледующийФайл()
Возвращает атрибуты файла (в параметрах).
Атрибуты файла закодированы, об этом см. Синтакс-Помощник или описание встроенного языка
Создать новый каталог (папку).
Синтаксис:СоздатьКаталог()
Удаляет каталог файлов.
Синтаксис: УдалитьКаталог()
Устанавливает текущий каталог файлов.
Синтаксис: УстТекКаталог()
ТекКаталог
Возвращает строку с именем текущего каталога файлов.
WindowsКаталог
Возвращает строку с именем Windows директории.
СвободноеМестоНаДиске
Возвращает размер свободного дискового пространства в байтах.
Синтаксис: СвободноеМестоНаДиске()
Также часто применяются системные функции:
КаталогИБ Возвращает имя каталога базы данных.
КаталогПользователя Возвращает имя каталога пользователя.
КаталогПрограммы Возвращает имя каталога с исполняемыми файлами системы 1С:Предприятие.
КаталогВременныхФайлов Возвращает имя каталога временных файлов.
ИмяКомпьютера Возвращает сетевое имя компьютера, работающего в данный момент с программой.
Примеры
Пример 1
//переместить все текстовые файлы (*.txt) из каталога информационной базы в каталог TXT.
В программных модулях системы «1С:Предприятие» версии 7.7 для работы с файлами и каталогами используются методы объекта типа " ФС " (сокр. от слов «файловая система»), причём по умолчанию в программе всегда доступен уже существующий (встроенный) объект с именем «ФС», к которому можно непосредственно применять данные методы.
Чтобы вызвать метод объекта типа " ФС " , имя метода пишется через точку после имени объекта, например:
При необходимости разработчик может также создать собственный объект типа " ФС " при помощи функции СоздатьОбъект() , например:
Методы объекта типа «ФС»
Прежде чем перейти к подробному рассмотрению конкретных методов объекта " ФС " , ещё раз хочу подчеркнуть, что методы данного объекта предназначены для работы именно с файловой системой. То есть они используются для выполнения таких операций, как поиск, удаление и копирование файлов, создание и удаление каталогов, выбор текущего каталога, просмотр реквизитов файлов и т.д. и т.п. Создание же и редактирование самих файлов выполняется с помощью методов объектов других типов. Так, например, для создания и редактирования текстовых файлов используются методы объектов типа " Текст " , для создания и редактирования файлов баз данных — методы объектов типа " XBase " , а для работы с файлами графики — методы объектов типа " Картинка " .
Примечание: При работе с файлами в системе «1С:Предприятие» версии 7.7, необходимо учитывать тот факт, что программа создавалась в те времена, когда имена файлов и каталогов могли содержать только символы латинского алфавита и цифры, а длина имени (без учёта расширения) не могла превышать восьми символов. По этой причине, во избежании недоразумений при работе с системой, не рекомендуется использовать файлы и каталоги с длинными именами, да ещё и содержащими буквы кириллицы.
Работа с дисками и каталогами
Проверить наличие свободного места на диске позволяет метод СвободноеМестоНаДиске() , возвращающий значение размера свободного дискового пространства в байтах. В качестве единственного параметра методу передаётся строковое выражение, содержащее имя проверяемого диска, например, "A:" , "C:" или другое. Англоязычный синоним имени метода — GetDiskFreeSpace() .
Пример использования метода:
Данный метод может быть полезен, например, при копировании файлов на съёмный носитель, который имеет сравнительно небольшой объём дискового пространства.
Получить имя текущего каталога позволяет метод ТекКаталог() . Данный метод не имеет параметров, а возвращает строковое значение — имя текущей директории (точнее, полный путь к ней, например, "D:\1S_Base\1SBDB" ). Англоязычный синоним имени метода — GetCurrentDirectory() .
Пример использования метода:
Кстати, для каждого конкретного пользователя текущим каталогом по умолчанию является его рабочий каталог, указанный в настройках Конфигуратора.
Если в Конфигураторе не указаны сведения о пользователях, то текущим каталогом для всех пользователей по умолчанию является корневой каталог базы данных.
Сделать текущим другой каталог позволяет метод УстТекКаталог() . Возвращаемого значения у метода нет. В качестве единственного параметра методу передаётся строковое выражение, содержащее полный путь к каталогу, устанавливаемому в качестве текущего. Англоязычный синоним имени метода — SetCurrentDirectory() .
Пример использования метода:
Данный метод может быть полезен, например, при написании обработок, выгружающих файлы обмена для системы Клиент-Банк, рабочий каталог которой может находиться на другом диске или даже на другом компьютере в сети.
Примечание: Каталог, который сделали текущим с помощью метода УстТекКаталог() , является таковым только для того контекста, из которого был вызван метод. То есть, если метод был вызван из модуля формы обработки, то каталог становится текущим только для данной формы обработки. Если же метод был вызван из глобального модуля программы, то каталог становится текущим для всех нижестоящих модулей.
Возможность интерактивного выбора каталога предоставляет метод ВыбратьКаталог() . При вызове данного метода, на экран выводится стандартное окно выбора директории (см. рис. ниже), после чего в программу возвращаются значения, определяемые действиями пользователя. Англоязычный синоним имени метода — SelectDirectory() .
- < Каталог >— имя переменной, в которую перед вызовом метода можно передать имя начальной директории — той, которая будет предложена пользователю в окне диалога (см. пример и рисунок ниже). Если в переменную передать пустую строку или вообще ничего не передать, то в качестве начальной директории будет использован каталог пользователя. В эту же переменную, в случае нажатия кнопки «ОК», система возвратит имя выбранного пользователем каталога;
- < Заголовок >— строковый литерал или cтроковое выражение, с помощью которого можно задать заголовок открываемого окна;
- < Таймаут >— числовое выражение, значение которого задаёт время ожидания системы (в секундах) на отклик пользователя. По истечении этого времени окно закрывается. Если же таймаут не задан (параметр вообще-то является необязательным) или задан 0, то окно будет ждать действий пользователя бесконечно.
Возвращаемое методом значение, в зависимости от действий пользователя, может быть следующим:
- 1 — в окне диалога нажата кнопка «ОК», при этом в переменную < ИмяКаталога >возвращается имя выбранного каталога;
- 0 — в окне диалога нажата кнопка «Отмена» или кнопка закрытия окна, либо клавиша Esc на клавиатуре;
- −1 — истекло время ожидания отклика пользователя, указанное в параметре < Таймаут >.
Пример использования метода:
В результате работы вышеприведённого кода на экран будет выведено стандартное диалоговое окно для выбора каталога.
Содать новый каталог на диске позволяет метод СоздатьКаталог() . Возвращаемое значение у метода отсутствует. В качестве единственного параметра методу передаётся строковое выражение, содержащее имя создаваемого каталога и полный путь к нему. Англоязычный синоним имени метода — CreateDirectory() .
Пример использования метода:
Примечание: Полный путь к создаваемому каталогу можно не указывать, если он создаётся в текущем каталоге.
Удалить каталог с диска позволяет метод УдалитьКаталог() . В качестве единственного параметра методу передаётся строковое выражение, содержащее имя удаляемого каталога и полный путь к нему. Англоязычный синоним имени метода — RemoveDirectory() .
Пример использования метода:
Примечание: Полный путь к создаваемому каталогу можно не указывать, если он создаётся в текущем каталоге.
Получить имя основного каталога операционной системы Windows позволяет метод WindowsКаталог() . Он не имеет параметров. Англоязычный синоним имени метода — GetWindowsDirectory() .
Примечание: Для получения информации о некоторых каталогах можно также использовать глобальные (встроенные) функции, такие как:
- ИмяКомпьютера() — возвращает строковое значение, содержащее сетевое имя компьютера, работающего в данный момент с программой, например, "buch1" ;
- КаталогПрограммы() — возвращает строковое значение, содержащее полный путь к папке исполнимыми файлами программы, например, "C:\Program Files\1Cv77\BIN\" ;
- КаталогИБ() — возвращает строковое значение, содержащее полный путь к папке информационной базы (базы данных), например, "C:\Program Files\1Cv77\1SBDB\" ;
- КаталогПользователя() — возвращает строковое значение, содержащее полный путь к рабочему каталогу пользователя, например, "C:\Program Files\1Cv77\1SBDB\usr1\" ;
- КаталогВременныхФайлов() — возвращает строковое значение, содержащее имя каталога временных файлов, например, "C:\WINDOWS\Temp\" .
Для выполнения таких действий, как проверка наличия каталога на указанном диске, переименование или перемещение каталога, получение атрибутов каталога, используются те же методы объекта " ФС " , что и при работе с файлами (см. ниже).
Работа с файлами
Проверить наличие файла или каталога позволяет метод СуществуетФайл() . В качестве единственного параметра методу передаётся строковое выражение, содержащее имя искомого файла или каталога (например, "D:\SSTDB\update.txt" или "D:\1S_Base\SSTDB"). ). Англоязычный синоним имени метода — ExistFile() .
Пример использования метода:
В параметре метода можно указать либо полный путь к файлу/каталогу, либо только имя искомого файла/каталога, если проверка будет производиться в текущей директории:
Получить атрибуты указанного файла или каталога позволяет метод АтрибутыФайла() . Англоязычный синоним имени метода — GetFileAttr() .
- < Файл >— строковое выражение, содержащее имя файла или каталога, атрибуты которого требуется получить. В параметре следует указать либо полный путь к файлу/каталогу, либо только имя файла/каталога, если проверка файла будет производиться в текущей директории;
- < Размер >— имя переменной, в которую система возвратит числовое значение размера файла в байтах;
- < Атрибуты >— имя переменной, в которую система возвратит строковое значение длиной 9 символов, в котором будут закодированы атрибуты файла. Символы могут принимать значения «0» или «1». Если первый символ «1», то файл доступен только для чтения; если второй символ «1», то это скрытый файл; если третий символ «1», то это системный файл; если четвертый символ «1», то это каталог; если пятый символ «1», то это архивный файл; если шестой символ «1», то это обычный файл (все другие атрибуты не установлены); если седьмой символ «1», то это временный файл; если восьмой символ «1», то это файл, сжатый каким-либо архиватором; если девятый символ «1», то к файлу нет доступа;
- < ВремяСоздания >— имя переменной, в которую система возвратит строковое значение, содержащее дату и время создания файла;
- < ВремяПоследнДоступа >— имя переменной, в которую система возвратит строковое значение, содержащее дату и время последнего доступа к файлу;
- < ВремяПоследнЗаписи >— имя переменной, в которую система возвратит строковое значение, содержащее дату и время последней записи файла;
- < РасширенноеИмя >— имя переменной, в которую система возвратит строковое значение, содержащее полное имя файла.
Пример использования метода:
Переместить или переименовать указанный файл или каталог позволяет метод ПереименоватьФайл() . Англоязычный синоним имени метода — MoveFile() .
- < ФайлИсточник >— строковое выражение, содержащее имя файла или каталога, который необходимо переименовать или переместить. В параметре следует указать либо полный путь к файлу/каталогу, либо только имя файла/каталога, если операция будет выполняться с файлом или каталогом из текущей директории;
- < ФайлПриемник >— строковое выражение, содержащее имя файла или каталога, который должен появиться в результате переименования или перемещения. В параметре следует указать полный путь к файлу/каталогу, либо только имя файла/каталога, если переименовывается файл/каталог из текущей директории, либо файл/каталог перемещается в текущую директорию;
- < ФлагПерезаписи >— числовое выражение, определяющее режим переименования (перемещения) в случае наличия в каталоге-приёмнике одноимённого файла. Если значение параметра равно 0, то существующий в каталоге-приёмнике одноимённый файл не заменяется на копируемый (не перезаписывается) и перемещения не происходит; если же значение параметра равно 1, то выполняется перемещение и перезапись (только для файлов. ).
Пример использования метода:
Выполнить копирование файла позволяет метод КопироватьФайл() . Англоязычный синоним имени метода — FileCopy() .
- < ФайлИсточник >— строковое выражение, содержащее имя файла, который необходимо копировать. В параметре следует указать либо полный путь к файлу, либо только имя файла, если он находится в текущей директории;
- < ФайлПриемник >— строковое выражение, содержащее имя будущей копии файла. В параметре следует указать либо полный путь к файлу, либо только имя файла, если он будет находиться в текущей директории;
- < ФлагОтменыПерезаписи >— числовое выражение, определяющее режим копирования в случае наличия в каталоге-приёмнике одноимённого файла. Если результатом этого выражения является 0, то существующий в каталоге-приёмнике одноимённый файл заменяется на копируемый (перезаписывается); если же результатом выражения является 1, то копирование не выполняется.
Пример использования метода:
Удалить указанный файл позволяет метод УдалитьФайл() . В качестве единственного параметра методу передаётся строковое выражение, содержащее имя удаляемого файла, например, "D:\SSTDB\CP\input.tmp" . Полный путь к удаляемому файлу можно не указывать, если он удаляется в текущем каталоге. Англоязычный синоним имени метода — DeleteFile() .
Пример использования метода:
Выбор файла пользователем (кроме файлов картинки) позволяет реализовать метод ВыбратьФайл() . Англоязычный синоним имени метода — SelectFile() .
- < ТипДиалога >— числовое выражение, значение которого определяет тип открываемого диалога. Допустимые значения: 0 — диалог типа «Открыть», 1 — диалог типа «Сохранить»;
- < Файл >— имя переменной, в которую при вызове метода можно передать строковое значение с именем сохраняемого файла. В эту же переменную система возвращает имя выбранного файла;
- < Каталог >— имя переменной, в которую при вызове метода можно передать строковое значение с именем начального (рекомендуемого) каталога. Если начальный каталог не указать, система использует текущий. В эту же переменную система возвратит имя выбранного пользователем каталога;
- < 3аголовок >— строковое выражение, содержащее текст заголовка для открываемого окна;
- < Фильтр >— строковое выражение, задающее список фильтров отбора файлов. Фильтр состоит из двух частей, разделенных символом «|» (вертикальная черта): строки представления, которая отображается в окне выбора файла, и непосредственно строки маски. В строке маски можно использовать символ « * » (звёздочка), что означает наличие любого числа произвольных символов. Символ «?» (вопросительный знак) в строке маски означает наличие одного произвольного символа. Одновременно можно задавать несколько фильтров в виде списка, в качестве разделителей используется символ «|» (вертикальная черта). Например, список из двух фильтров: "Текст(*.txt)|*.txt| Таблицы(*.mxl)|*.mxl" ;
- < Расширение >— строковое выражение, содержащее расширение имени файла по умолчанию (оно будет использовано системой при записи файла);
- < Таймаут >— числовое выражение, значение которого задаёт время ожидания системы (в секундах) на отклик пользователя. По истечении этого времени окно закрывается. Если же таймаут не задан (параметр вообще-то является необязательным) или задан 0, то окно будет ждать действий пользователя бесконечно.
Возвращаемое методом значение, в зависимости от действий пользователя, может быть следующим:
- 1 — в окне диалога нажата кнопка «ОК», при этом в в переменную < ИмяФайла >возвращается выбранное имя файла, а в переменную < НачКаталог >возвращается имя выбранного каталога;
- 0 — в окне диалога нажата кнопка «Отмена» или кнопка закрытия окна, либо клавиша Esc на клавиатуре;
- −1 — истекло время ожидания отклика пользователя, указанное в параметре < Таймаут >.
Пример использования метода:
В результате работы вышеприведённого кода на экран будет выведено стандартное диалоговое окно для выбора файла.
Выбор файла картинки пользователем позволяет реализовать метод ВыбратьФайлКартинки() . Англоязычный синоним имени метода — SelectPictFile() .
- < ТипДиалога >— числовое выражение, значение которого определяет тип открываемого диалога. Допустимые значения: 0 — диалог типа «Открыть», 1 — диалог типа «Сохранить»;
- < Файл >— имя переменной, в которую при вызове метода можно передать строковое значение с именем сохраняемого файла. В эту же переменную система возвращает имя выбранного файла;
- < Каталог >— имя переменной, в которую при вызове метода можно передать строковое значение с именем начального (рекомендуемого) каталога. Если начальный каталог не указать, система использует текущий. В эту же переменную система возвратит имя выбранного пользователем каталога;
- < 3аголовок >— строковое выражение, содержащее текст заголовка для открываемого окна;
- < Расширение >— строковое выражение, содержащее расширение имени файла по умолчанию (оно будет использовано системой при записи файла);
- < Таймаут >— числовое выражение, значение которого задаёт время ожидания системы (в секундах) на отклик пользователя. По истечении этого времени окно закрывается. Если же таймаут не задан (параметр вообще-то является необязательным) или задан 0, то окно будет ждать действий пользователя бесконечно.
Возвращаемое методом значение, в зависимости от действий пользователя, может быть следующим:
- 1 — в окне диалога нажата кнопка «ОК», при этом в в переменную < ИмяФайла >возвращается выбранное имя файла, а в переменную < НачКаталог >возвращается имя выбранного каталога;
- 0 — в окне диалога нажата кнопка «Отмена» или кнопка закрытия окна, либо клавиша Esc на клавиатуре;
- −1 — истекло время ожидания отклика пользователя, указанное в параметре < Таймаут >.
Пример использования метода:
В результате работы вышеприведённого кода на экран будет выведено стандартное диалоговое окно для выбора файла картинки.
Работа с выборкой файлов
Начать выборку файлов по заданной маске и найти первый файл позволяет метод НайтиПервыйФайл() . В качестве единственного параметра методу передаётся строковое выражение, содержащее маску имён файлов. В строке маски можно использовать символ « * » (звёздочка), что означает наличие любого числа произвольных символов, и символ «?» (вопросительный знак), что означает наличие одного произвольного символа. Возвращаемое методом значение является строкой с именем найденного файла. Англоязычный синоним имени метода — FindFirstFile() .
Пример использования метода:
Примечание: Методы НайтиПервыйФайл() и НайтиСледующийФайл() возвращают имена файлов в той же последовательности, как это делает команда dir операционной системы MS DOS (см. рис. ниже). То есть, если задана маска « *.* » для некорневого каталога, первым возвращаемым значением будет строка "." , обозначающая ссылку на текущий каталог. Вторым возвращаемым значением будет строка ".." , обозначающая ссылку на каталог уровнем выше. А уже при получении последующих файлов, возвращаемыми значениями будут имена найденных файлов.
Найти следующий файл в открытой выборке файлов позволяет метод НайтиСледующийФайл() . Параметры у метода отсутствуют. Возвращаемым значением метода будет строка с именем найденного файла. Англоязычный синоним имени метода — FindNextFile() .
Если на поддержке у программиста находится большое количество баз данных , то данная обработка поможет автоматически и быстро скопировать нужную папку (например, ExtForms, ExtDb, Usrdef и т.д.) и ее содержимое (кроме вложенных папок) во все помеченные каталоги информационных баз. Обработка проверена только на базах с DBF организацией данных. Для подкраски строк ТЗ используется FormEx, но можно и без него. Огромная благодарность АльФу и Маляеву.
Специальные предложения
Скачал,Посмотрел . замечания:
понимаешь, ты сам знаешь что ДОЛЖНА делать и ДЕЛАЕТ твоя обработка.
а вот теперь забудь на минуту и посмотри сам на нее глазами пользователя.
Почему бы не сделать , чтобы при открытии заполнялись все каталоги
кнопку сформировать - переименуй в " Обновить или Загрузить путь баз данных"
Кнопка с Глобусом - вызывает раздражение и она там совершенно не нужно,так красоту не наводят. Если есть кнопка на форме, она должна нажиматься и выполнять какоето действие.
В описании благодарность Альфу ты выразил, а пользователям в описании написать, что обработка может использовать функции ВК Formex не указал.
И как то ооооооооооочень странно ты ее используешь.
По твоей идее с раскроской строк (ты ее -ВК должен попытаться загрузить при открытии обработки но уж ни как при
Процедура ПриДвойномНажатииПравойКнопки(сост, х, у)
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 1 Тогда
Если ТЗ.КоличествоСтрок() <> 0 Тогда
Если Вопрос("Вы действительно хотите удалить строку ТЗ?","Да+Нет") = "Да" Тогда
ТекСтр = ТЗ.ТекущаяСтрока();
ТЗ.УдалитьСтроку(ТЗ.ТекущаяСтрока());
ТЗ.ТекущаяСтрока(ТекСтр);
Иначе
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
Если ТЗ.КоличествоСтрок() <> 0 Тогда
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
ТЗ.НомПП = ТЗ.НомерСтроки;
КонецЦикла;
КонецЕсли;
ТЗ.ТекущаяСтрока(1);
КонецЕсли;
КонецПроцедуры // ПриДвойномНажатииПравойКнопки()
а у если у пользователя нет этой ВК (и он не подозревает что она должа быть)
как удалить строку из таблицы ?
Сделай рядом или список или ТЗ с "копируемыми файлами - ведь бывает нужно не все скопировать а только 8 из 10 . Дай пользователю выбор.
Для работы с файлами и каталогами в 1С:Предприятие используется специальный объект " ФС " (файловая система). Средства языка 1С имеют возможности поиска, копирования, переименования, удаления и совершения других операций с файлами и каталогами.
Для работы с файловой системой предназначен объект " ФС ". В принципе его не требуется создавать с помощью функции СоздатьОбъект . Можно считать, что он уже создан. Но 1С позволяет создать сколько угодно таких объектов при помощи функции СоздатьОбъект ; Это может оказаться полезным при создании рекурсивных функций для работы с фаловой системой. Пример такой функции будет рассмотрен далее.
Открывает окно диалога выбора/сохранения файла. Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.
Параметры :
-: 0 - диалог типа , 1 - диалог типа ;
- переменная, содержащая на входе строку с именем файла, а на выходе - имя выбранного файла;
- переменная, содержащая на входе строку с начальным каталогом, а на выходе - имя выбранного каталога;
- строка с заголовком окна;
- строка с фильтром отбора файлов (например: 'Все файлы (*.*) |*.*');
- строка с расширением файла по умолчанию;
- время ожидания отклика пользователя в секундах (необязателен).
Открывает окно диалога выбора/сохранения файла картинки.
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.
Синтаксис : ВыбратьФайлКартинки (, , , , , )
Открывает окно диалога выбора каталога.
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена'; 1 - если в окне диалога нажата кнопка 'ОК', при этом в переменную возвращается имя выбранного каталога; -1 (минус единица) - закончилось время ожидания отклика пользователя.
Синтаксис : ВыбратьКаталог(,,)
Проверяет существование файла..
Возвращает: 1 - файл существует; 0 - не существует.
Синтаксис : СуществуетФайл()
Копирует файл.
Синтаксис : КопироватьФайл(,,)
Параметры :
- строка с именем файла источника;
- строка с именем файла приемника;
-:
0 - существующий файл приемника перезаписать;
1 - существующий файл приемника не перезаписывать.
Параметры :
- строка с именем файла источника;
- строка с новым именем файла;
-:
0 - запрещает перемещение файла между дисками и существующий файл приемника не перезаписывается;
1 - разрешает перемещение файла между дисками (только для файлов) и существующий файл приемника перезаписывается.
Открывает выборку файлов по заданной маске и находит первый файл.
Возвращает строку с именем найденного файла.
Синтаксис : НайтиПервыйФайл()
Находит следующий файл по открытой выборке файлов.
Возвращает строку с именем найденного файла.
Синтаксис : НайтиСледующийФайл()
Также часто применяются системные функции:
ФС . УстТекКаталог ( КаталогИБ ());
ИмяФайла = "";
ИмяФайла = ФС . НайтиПервыйФайл ("*.txt");
Если ИмяФайла <> "" Тогда
ФС . СоздатьКаталог ("TXT");
ФС . КопироватьФайл ( ИмяФайла , ФС . ТекКаталог () + "TXT" + ИмяФайла );
ФС . УдалитьФайл ( ИмяФайла );
Пока 1 = 1 Цикл
ИмяФайла = " ";
ИмяФайла = ФС . НайтиСледующийФайл ()
Если ИмяФайла <> "" Тогда
ФС . КопироватьФайл ( ИмяФайла , ФС . ТекКаталог () + "TXT" + ИмяФайла );
ФС . УдалитьФайл ( ИмяФайла );
Иначе
Прервать ;
КонецЕсли ;
КонецЦикла ;
//выбрать файл с фотографией сотрудника
ИмяФайла = "";
ИмяКаталога = КаталогИБ ();
Если ФС . ВыбратьФайлКартинки (0, ИмяФайла , ИмяКаталога ,"Укажите файл с фотографией:",,20) = 1 Тогда
ВремКартинка = СоздатьОбъект ("Картинка");
ВремКартинка . Загрузить ( ИмяКаталога + ИмяФайла );
КартинкаНаФорме . УстановитьКартинку ( ВремКартинка );
КонецЕсли ;
При переборе файлов методами НайтиПервыйФайл() и НайтиСледующийФайл() файловая система перебирает как файлы, так и каталоги.
Функция ЭтоКаталог ( ИмяФайла )
Перем Размер , Атрибуты , Создан , Доступ , Запись , РасшИмяФайла ;
Рез = 0;
ФС . АтрибутыФайла ( ИмяФайла , Размер , Атрибуты , Создан , Доступ , Запись , РасшИмяФайла );
Если Сред ( Атрибуты ,4,1) = "1" Тогда
Рез = 1;
КонецЕсли ;
Возврат Рез ;
КонецФункции
Этот пример показывает работу с файловой системой через рекурсивную процедуру, создающую объект " ФС ".
Эта процедура позволяет копировать все файлы или файлы с заданным расширением из одного каталога в другой, включая все вложенные подкаталоги.
Процедура КопироватьФайлы ( ПутьОткуда , ПутьКуда , Расширение )
ФС_ = СоздатьОбъект ("ФС");
ИмяФайла = ФС_ . НайтиПервыйФайл ( ПутьОткуда + "\*.*");
Пока ПустаяСтрока ( ИмяФайла ) = 0 Цикл
Если ( ИмяФайла <> ".") И ( ИмяФайла <> "..") Тогда
Если ЭтоКаталог ( ПутьОткуда + "\" + ИмяФайла ) = 1 Тогда
ПодКаталогОткуда = ПутьОткуда + "\" + ИмяФайла ;
ПодКаталогКуда = ПутьКуда + "\" + ИмяФайла ;
// Проверим наличие подкаталога в папке ПутьКуда
( ЭтоКаталог ( ПодКаталогКуда ) = 0) Тогда
ФС_ . СоздатьКаталог ( ПодКаталогКуда );
КонецЕсли ;
КопироватьФайлы ( ПодКаталогОткуда , ПодКаталогКуда , Расширение );
Иначе
Поз = Найти ( ИмяФайла ,".");
Расш = Нрег ( ? ( Поз > 0, Сред ( ИмяФайла , Поз + 1),""));
Если Расш <> Нрег ( Расширение ) Тогда
ИмяФайла = ФС_ . НайтиСледующийФайл ();
Продолжить ;
КонецЕсли ;
ИмяФайлаИсточника = ПутьОткуда + "\" + ИмяФайла ;
ИмяФайлаПриемника = ПутьКуда + "\" + ИмяФайла ;
ФС_ . КопироватьФайл ( ИмяФайлаИсточника , ИмяФайлаПриемника ,0); // Копируем с перзаписью
КонецЕсли ;
КонецЕсли ;
ИмяФайла = ФС_ . НайтиСледующийФайл ();
КонецЦикла ;
КонецПроцедуры
Читайте также: