Ошибка переименования файлов 1с
Мы значительно автоматизировали модификацию прикладных решений в тех случаях, когда удаляются или переименовываются объекты конфигурации, их реквизиты, а так же элементы, реквизиты и параметры форм.
Платформа контролирует ссылочную целостность дерева объектов конфигурации. Она автоматически отслеживает ссылки на объекты (реквизиты и т.д.), и не позволяет удалять их тогда, когда они используются в других объектах. Точно так же переименование объектов (реквизитов и т.д.) конфигурации не нарушает существующие связи их с другими объектами конфигурации.
Однако имена объектов используются не только в структуре метаданных, но и в программном коде. И в случае удаления/переименования объектов вам приходится вручную вносить исправления в программный код. Такая работа требует внимательности и аккуратности, и по этой же причине она является источником ошибок.
Теперь этот процесс значительно автоматизирован. При удалении или переименовании объектов конфигурации платформа автоматически находит фрагменты кода, которые связаны с изменяемым объектом. Очевидные фрагменты платформа может переименовать самостоятельно, а в неочевидных случаях она предлагает принять решение вам.
Настройки
Использование этого механизма настраивается в параметрах конфигуратора. Теперь там появилась группа настроек Рефакторинг при изменениях в метаданных и формах:
Автоматический анализ текстов модулей вы можете настроить по-отдельности для каждого вида операций. При удалении, при переименовании, при изменениях, выполняемых в формах. Также вы можете настроить реакцию платформы в тех случаях, когда требуется ваше участие: Задавать вопрос, Продолжать операцию или Отменять операцию.
Терминология
Не всегда есть возможность автоматически определить, что данный фрагмент кода работает с конкретным объектом конфигурации.
Например, если в коде используется конструкция Справочники.Номенклатура, то мы со 100%-ой уверенностью можем сказать, что выполняется работа со справочником Номенклатура. Такие случаи называются фактическим использованием. Их платформа умеет обрабатывать автоматически, а в окне результатов поиска они помечаются пиктограммой i.
Наряду с этим есть случаи, когда только по фрагменту текста нельзя понять, с каким именно объектом конфигурации ведётся работа. Например, Параметр1.Номенклатура. Переменная Параметр1 может ссылаться и на справочник с реквизитом Номенклатура, и на данные строки табличной части, в которой есть колонка Номенклатура. Узнать это на 100% можно, только если вы самостоятельно проанализируете алгоритм. Такие случаи называются возможным использованием. Они требуют вашего вмешательства, и в окне результатов поиска они помечаются пиктограммой !.
Поиск ссылок
Если вы хотите заранее проанализировать последствия переименования или удаления объектов конфигурации, вы можете найти все ссылки на них в модулях:
Платформа перечислит все фрагменты кода, которые могут использовать выбранный объект. По двойному клику мыши она откроет соответствующий модуль и подсветит найденную строку:
Случаи возможного использования платформа помечает в общем списке пиктограммой ?:
Удаление
При удалении объекта конфигурации платформа автоматически покажет список фрагментов, которые могут использовать удаляемый объект:
Переименование
При переименовании объектов платформа (если найдёт фрагменты кода) также сначала поинтересуется, хотите ли вы продолжать эту операцию:
Чтобы ускорить ручное изменение фрагментов, вы можете выделить сразу несколько строк, а затем из контекстного меню выполнить команду Заменить.
Надеемся, что новый механизм значительно сократит количество «ручной» работы и желаем вам удачного переименования и удаления объектов :).
Нужно переименовать файл в заданном каталоге.
Попытка
НайденныеФайлы = НайтиФайлы("C:\Program Files\1cv81\bin\","*.dbf");
Исключение
Сообщить("Файл не получен: "+ ОписаниеОшибки());
Возврат;
КонецПопытки;
Есть массив файлов, могу получить сам файл, но методов которые могут изменять файл не нашел, может СП устарел или не научился им пользоваться? оО
Ставлю, что сп у него левый. У меня есть лучше.
вспоминаю этот сумрачный осенний вечер. дождило, мне требовалось сменить у файла имя. помолясь, я нажал ф1, и ко мне явился Христос в форме СП.
(5) что переместить?
Свойства:
Методы:
Конструкторы:
Описание:
Используется для доступа к параметрам файлов или каталогов. Необходимо отметить, что данный объект не предназначен для чтения и записи из файлов.
(22) Переходи на 7.7 там все реаловано:
(24) +
Параметры:
1 - разрешает перемещение файла между дисками (только для файлов) и существующий файл приемника перезаписывается.
(39)(40)Ребята, может вы не поверите. Но я этой хрени слава боогу ни разу не пробовал.Так что притензии насколько она хорошо получается не ко мне:-))
(50) (52) я, конечно, вовремя вернулся, но ДОС - это дисковая .. какая? .. что?
//помните анекдот: темно как в жпе у.
+(64) там месяце в декабре-январе надо начинать читать. год назад. подушка и носовой платок обязательны
(66) ага. по длине одной ветки (ну.. несколько тысячных по примерно одному вопросу) чуть ли не дятловцев переплюнул. талант, у меня ни разу не было тысячи (ну разве что в хреноветках)
(68) твоё кунг-фу сильнее моего. я тогда уже завершал и всего один переход 7.7->8.2, отрывался как мог ;)
(71)Подумаешь. Во сне..
Я в твоем сне, в котором ты надиктовал, уже видел, что ничего хорошего не будет.
(75)Ты студент. Нуб.
Вот когда тебе будет пофигу что за конфа, а все будет упираться во время "разобраться", вот тогда и станешь настоящим адинесником.
(80)Как ни прискорбно.Цитирую.
>>(69) это мощно. я бы не взялся сейчас за клюшки. я всего то унф и зуп корп
(83)да ничего собссно. Считаешь себя мега-супер-пупер-спецом.
Что я тебе папа родной чтоли:-)
Удачи:-))
(85) я понимаю, глубоко в твоем сознании засела обида. не печалься. не все копрокодят так как ты. и не все выставляют это напоказ. скоро и ты обретешь душевный покой и равновесие :)
Я чего-то не очень понимаю, что там такого ?
СП:
ПереместитьФайл (MoveFile)
Синтаксис:
Тип: Строка. Полное имя файла-приемника (полное новое имя файла).
Описание:
Выполняет перемещение (переименование) указанного файла.
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание:
Статья рассчитана в первую очередь на тех, кто недостаточно много работал с 1С и не успел набить шишек при встрече с часто встречающимися ошибками. Обычно можно определить для себя несколько действий благодаря которым можно определить решится ли проблема за несколько минут или же потребует дополнительного анализа. В первое время сталкиваясь с простыми ошибками тратил уйму времени на то, чтобы с ними разобраться. Конечно, интернет сильно помогает в таких вопросах, но не всегда есть возможность им воспользоваться. Поэтому надеюсь, что эта статья поможет кому-нибудь сэкономить время.
В информационных базах на платформе 1С могут возникнуть множество различных ошибок:
нарушение логической/физической целостности базы, ошибки пользователей, «кривой» код разработчика и многое другое.
Причин может быть множество: отключили свет, и не было источника бесперебойного питания, или вечер пятницы удался, и пользователь уже и не может вспомнить в понедельник, что он натворил такого.
Во-первых, стоит задать несколько уточняющих вопросов пользователю:
1) Релизы платформы/конфигурации.
4) Возникает ли если запустить 1с с другого компьютера/от другого пользователя? Это даст нам пищу для размышлений – сможет ли помочь очистка кэша, настройка прав, или очистка настроек пользователя.
Теперь немного о самих ошибках и том как их решать.
Общее:
Часть ошибок возникает при использовании нелицензионного ПО (windows, 1C и т.д.).
Распространенный пример – ломаная платформа. Один из патчей взламывает конкретную версию платформы, поэтому после установки новой версии платформы и попытке зайти в базу можно увидеть окно «Не обнаружено свободной лицензии».
Если Вы встретили ошибку в первый раз - возможно, кто-то уже ее встречал -
поищите в google, возможно кто-то уже с этим сталкивался и решил проблему, и Вы не потратите лишних пару часов своего времени.
Релиз конфигураций должен быть актуальным (в первую очередь для конфигураций из которых сдается регламентированная отчетность), неспроста на линии консультаций практически всегда предлагают вначале обновиться, а потом уже смотреть дальше.
Актуальный релиз платформы - у каждой конфигурации написано, какой релиз платформы рекомендован для работы с этой конфигурацией.
Технологический журнал позволяет протоколировать все события 1С:Предприятия (или часть, используя фильтр).
Про него можно прочитать здесь и здесь.
. ВАЖНО
Перед любыми действиями с базой - сделать архивную копию!
Если база не открывается в конфигураторе - скопировать папку с базой и выполнять все операции на копии!
1) База вообще не открывается ни в пользовательском режиме, ни в конфигураторе.
-
Самое быстрое, что можно сделать - очистить временные файлы (удалить базу из списка баз и подключить заново)
- Также можно попытаться зайти в базу от другого пользователя.
- Если база файловая, то стоит запустить утилиту для тестирования физической целостности базы chdbfl. Она находится в папке:
C:\Program Files (x86)\1cv8\8.x.x.xxx\bin\chdbfl.exe
- Если база sql-ная то тестирование средствами sql.
2) Если база при запуске уходит в дамп.
- Откройте свойства экрана. Это можно сделать через Панель управления, или просто щелкнув правой кнопкой мыши по любому месту рабочего стола, свободному от окон и значков, и выбрав пункт контекстного меню «Свойства».
- В открывшемся окне настройки дисплея перейдите на закладку «Параметры» и нажмите кнопку «Дополнительно».
- В открывшемся окне свойств видеокарты перейдите на вкладку «Диагностика».
- Передвиньте движок «Ускорение» в крайнюю левую позицию («нет») и нажмите «Применить» или «Ок». Аппаратное ускорение отключено. Изменения вступят в силу после перезагрузки системы.
- Откройте Панель управления (Пуск — Панель управления).
- Найдите и откройте элемент «Экран».
- В левой части открывшегося окна щелкните по ссылке «Настройка параметров экрана».
- В открывшемся окне нажмите на ссылку «Дополнительные параметры».
- Перейдите на вкладку «Диагностика» и нажмите кнопку «Изменить параметры».
- В открывшемся окне передвиньте движок в крайнее левое положение («нет») и нажмите «Ок». Если UAC включен, придется подтвердить, что изменения санкционированы пользователем. Аппаратное ускорение отключено. Изменения вступят в силу после перезагрузки системы.
В Windows 7 в некоторых случаях кнопка «Изменить параметры» будет неактивна. В этом случае отключить аппаратное ускорение невозможно, так как видеокарта и ее драйвер не поддерживают манипуляции аппаратным ускорением.
4) При каком-то действии выкидывает на код в конфигуратор.
- Для проверки стоит очистить кэш.
- Если не помогло то скорей всего ошибка в коде - особенно актуально для нетиповых и самописных конфигураций, но встречается иногда и в типовых.
Если конфигурация нетиповая, то тут либо обновление прошло некорректно или разработчик дорабатывавший конфигурацию не предусмотрел все возможности пользовательских ошибок – защита от дурака (если это возможно!).
Если типовая, то возможно ошибка в релизе.
В любом случае стоит пробежать в отладчике и посмотреть что не так.
5) Под одним пользователем дает что-то сделать, под другим нет.
- Настройки прав пользователей.
- Настройки пользователя.
- Очистка кэша.
6) С одного ПК заходит, с другого нет.
- Проверить в проводнике видит ли базу – может к папке с базой не предоставлен общий доступ.
- Очистка кэша.
- Зайти под другим пользователем.
7) Я ничего не делал/делала но у меня все сломалось
- Если смогут подсказать что именно «не делали» и когда, то можно воспользоваться
8) Недостаточно памяти.
Был у меня случай, пришел клиент, говорит, при закрытии месяца вылетает ошибка "Недостаточно памяти". Взялся я за эту проблему. Думал, что легко, сначала добавил оперативки - ошибка. Было 2 гигабайта, стало 4, а все равно 1с-ке мало. Размер файла подкачки менял - ошибка, переустановка системы (поставил Windows 7) дало только временный результат, где-то на неделю. Перепробовал все. Спустя некоторое время решение было найдено.
Решение
На клиентском компе запустить командную строку от имени администратора, прописать там следующее:
BCDEdit /set increaseuserva xxxx - вместо хххх пишите объем виртуального адресного пространства в мегабайтах, т.е. сколько нужно памяти под работу приложений. По умолчанию 2 гига. Вообще в 32-разрядных операционных системах выделяется 4 гигабайта: 2 - на приложения и 2 на нужды самой ОС. Я выбрал 3000 (т.е. CDEdit /set increaseuserva 3000). Однако система может подглючивать. Особенно, если у вас 2 гига оперативки, как у меня. Это для ОС семейства Windows Vista, 7, Windows 2008.
Для Windows XP \ Windows 2003 пишем
/3GB /userva=xxxx (xxxx в МБ в диапазоне 2048 - 3072) в файле boot.ini, рекомендуемый максимум значений userva 2900–3030.
9) Элементы форм налезают друг на друга и имеют неправильное расположение.
10) Ошибка СУБД Внутренняя ошибка компоненты dbeng8
- Ошибка связана с различием кода разных версий платформы, когда пользователи пытаются использовать файловый вариант. Для клиент-серверного варианта при запуске происходит контроль и работа с разными версиями платформы в принципе невозможна.
Решение: обновиться до актуального релиза на всех рабочих местах.
Если не помогло, тогда делаем следующее:
-
Тестирование и исправление
11) Ошибка в платформе 8.3.4.428
- В версии 8.3.4.428 платформы "1С:Предприятие" обнаружена критичная ошибка, возникающая при реструктуризации данных. Данная ошибка локализована и будет исправлена в следующей версии платформы.
12) Конфликт блокировок при выполнении транзакции:
Microsoft OLE DB Provider for SQL Server: Could not continue scan with NOLOCK due to data movement.
HRESULT=80040E14, SQLSrvr: SQLSTATE=42000, state=3, Severity=C, native=601, line=1
Конечно список далеко не полный, так что буду рад, если его дополнят в комментариях.
Специальные предложения
В случае, когда база открывается только в Конфигураторе, может помочь выгрузка данных с последующей загрузкой в новую "нулевую" базу. Не панацея, конечно, но иногда выручало.
При любой непонятной фигне чистить кэш потом разбираться.
У меня пользователи уже научены что сначала давят Сервис\Очистить кэш и перезапустить программу а потом уже звонить и жаловаться.
Хорошая статья! По первому пункту могу добавить. Если не получилось ничего из перечисленного, можно воспользоваться программкой Tool_1CD и с ее помощью удалить записи в таблице configsave. Только это мне и помогло в свое время.
1 пункт. Как же можно выгрузить в *.dt, если по условию не загружается конфигуратор?
8. пункт это не решение. Увеличение до 3Гб памяти под процесс зачастую не помогает. Решение - это 64-разряда для клиента и для сервера.
Вообще в 32-разрядных операционных системах выделяется 4 гигабайта: 2 - на приложения и 2 на нужды самой ОС.
Строго говоря, 4 гигабайта это адресное пространство 32-разрядных систем, а не "выделяется". Из которых MS еще что-то резервирует под аппаратную часть, плюс еще ограничивает каждый процесс 2 Гигами.
9. Проще сделать "Восстановить положение окна Alt-Shift-R"
Многократно повторенный совет использовать chdbfl.exe довольно сомнителен. Утилита известна тем, что зачастую добивает базу окончательно.
(6)(9) - присоединяюсь. С программными лицензиями проблемы возникают гораздо чаще.
Статья классная, я плюсанул. Одно но "Часть ошибок возникает при использовании нелицензионного ПО (windows, 1C и т.д.)." - очень сомнительное предложение.
Terve!R; user705520_admin; roman8115; virtmon; Sophus; Bukaska; JesteR; buganov; for-elenak; plmshka; Sergafan10; + 11 – 1 Ответить
(9) Aspire1C,
Скорее это относится к карявым патчам в которых "что-то не учли"
(0)
Статья хорошая, хотя у нас с одним клиентом, в клиент-серверном варианте, возникла ошибка, которая не была описана ни где в интернете (по крайней мере я не нашёл):
При попытки открыть форму справочника или сделать запрос хотя бы к одному его полю - рабочий сервер 1С 8.3 падает и перезапускается. Тут ни чиска кешев, ни dt, ни чекдб в скуле, ни выгрузка-загрузка через файловую базу (с проверкой chdbfl и тестированием-исправлением) не помогают :-) Хотя в файловом варианте всё работало отлично.
Там учитывать нечего.
Но из за повального спроса, их часто снабжают дополнительным потребительским сервисом - троянами.
Если в процессах висит что-то типа rundll32 C:\windows\temp\pagefile.sys - это вот оно.
(26) Aspire1C, да, часто это ошибка, возникшая вследствие незнания администратором специфики механизмов лицензирования 1С/HASP.
Это не статья. Это перечень условно известных проблем с не всегда корректными рекомендациями по их решению.
Далее по пунктам:
0) Кэш (и Local, и Roaming) чистим в первую очередь. И при возможности перезапускаем серверы приложения и СУБД.
1) Правильное решение - технологический журнал.
2) Приведена только одна из возможных причин, к тому же не самая частая. (проверьте в системном логе ошибок GDI). И даже в этом случае лучшее решение - обновлять драйвера видео. Наблюдается это только со старыми дровами встроенного видео Intel. А вообще правильное решение - технологический журнал.
3) Правильное решение - технологический журнал
4) Не нужно гадать - сразу идем в отладчик.
5) Верно.
6) Скорее всего, это какая-то проблема связи либо авторизации. В случае с файловой базой первичная рекомендация верная, а при клиент-серверной помогут всяческие пинги, телнеты, анализ системных логов и опять же - технологический журнал.
7) Не забыть написать служебку о саботаже рабочего процесса пользователем. В следующий раз пользователь будет помнить, что он делал. А так да, ЖР, минимальный ТЖ (excp, excpcntx) и логи.
8) Вообще-то в современных конфигурациях механизмы, требовательные к памяти, обычно выполняются на сервере. Может помочь оптимизация проблемных запросов. А в некоторых случаях поможет только сервер x64. Ну и о фрагментации адресного пространства памяти не забываем, спасет плановый перезапуск рабочих процессов.
9) Не факт. В УФ может быть виноват браузер, в ОФ - кривые привязки элементов формы.
10) Тоже не факт. Сбойная база к такой ошибке может приводить.
11) Версия платформы отозвана. Решение - только поднимать базу из бэкапа.
12) С чего вы вообще взяли, что конфликт блокировок - это ошибка? Это показатель некорректной работы СУБД или логики конфигурации, и dbcc checkdb Вас от этого не спасет.
"Конфликт блокировок" бывает двух видов:
а) таймаут - тут нужно выяснять, почему не удалось наложить блокировку за отведенное время.
б) дедлок - тут нужно анализировать порядок наложения блокировок, и далеко не всегда эту проблему удается решить "малой кровью".
Созинов; dutlovva; Serg O.; nnn123; roman8115; Ikarus; mms76; pallid; meuses; ojiojiowka; gigabyte_artur; quNas; anchovy; CratosX; warrior1985; mr.Kot; Bukaska; ВРедная; Yashazz; lesna; Redokov; JesteR; suggestive; TrinitronOTV; EmpireSer; + 25 – Ответить
В программе необходимо загружать DBF-файлы с длиной имени больше 8 символов. Если длина <=8 символам - все нормально, если же больше - программа вылетает с ошибками:
=8>ДБФ.Первая(); : Перед выполнением операции нужно открыть базу!
Пока ДБФ.ВКонце() = 0 Цикл : Перед выполнением операции нужно открыть базу!
При этом я принудительно обрезаю имя файла до первых 8 символов - но все равно не помогает! Никак не могу понять свою ошибку(
Код ( (Unknown Language)):
Процедура ВыборФайла()
КаталогЗагрузки = "";
ФайлЗагрузки = "";
Если ФС.ВыбратьФайл(1, ФайлЗагрузки, КаталогЗагрузки, "Выберите файл", "*.dbf|*.dbf", , ) = 1 Тогда
ФайлЗагрузки = КаталогЗагрузки + ФайлЗагрузки;
КонецЕсли;
Процедура ПриВыбореИмениФайла()
Поз=Найти(ФайлЗагрузки,".");
Если (Поз=0) Или (Поз>8) Тогда
ФайлЗагрузки=СокрП(Лев(СокрЛ(ФайлЗагрузки),12))+".DBF";
Иначе
ФайлЗагрузки=СокрЛП(Лев(ФайлЗагрузки,Поз)+"DBF");
КонецЕсли;
КонецПроцедуры
Доступ к полям длиной более 255 символов баз DBF
При чтении строкового поля базы DBF длиной более 255 символов получаем неверные данные. Все.
Загрузка Dbf файлов
Такая проблема, при загрузке пачки документов, попался "битый", и на нём загрузка вылетает вот с.
Ошибка при имени dbf файла более 8 символов ( MSDASQL.1 )
Всем доброго времени суток :) Цель функции: Найти *.dbf файлы в директории, присоединиться к ним в.
Преобразовать строки длиной больше 10 символов
С клавиатуры вводим число n типа int. Затем вводим n строк. Если в строке больше 10 символов, то.
А зачем имя обрезать?
Разве длинные имена XBase не открывает?
В любом случае имя DOS это не первые 8 символов имени. Там более сложно. Подробностей не расскажу, потому что не знаю
А зачем имя обрезать?
Разве длинные имена XBase не открывает?
В любом случае имя DOS это не первые 8 символов имени. Там более сложно. Подробностей не расскажу, потому что не знаю
Пробовал делать аналогичным образом - тоже не получается(
Если допустимо переименовать файл перед открытием, то тем или иным способом его переименовать можно, а потом уже открывать
Какой способ переименования пробуешь?
Если допустимо переименовать файл перед открытием, то тем или иным способом его переименовать можно, а потом уже открывать
Какой способ переименования пробуешь?
1) открыть файл;
2) переименовать его имя до 8 символов;
3) дальнейшая обработка
в 1с 8.1 примерно так
Или WinApi - поиск по getshortpathname
переименовать можно ДО открытия, Вам же сказали.
т.е. правильно мыслить в таком направлении:
1) дать пользователю выбрать файл.
2) переименовать в 8.3-формат или получить короткое имя из длинного (как написано выше)
3) открыть и сделать нужную обработку
Честно говоря, я и не подозревал, что так просто можно получить короткое имя
Это все меняет
Я бы так и сделал
Кстати, переименование еще может и не прокатить, если проблема не только в имени, но и в пути
Получить короткое имя - лучшее решение
в 1с 8.1 примерно так
Спасибо за помощь! Но у меня ошибка в строчке:
То же самое и по указанной Вами ссылке
Добавлено:
переименовать можно ДО открытия, Вам же сказали.
т.е. правильно мыслить в таком направлении:
1) дать пользователю выбрать файл.
2) переименовать в 8.3-формат или получить короткое имя из длинного (как написано выше)
3) открыть и сделать нужную обработку
Добавлено: и можно настроить, что система короткие имена не поддерживает. возможно, из-за этого и не получается
Добавлено: и можно настроить, что система короткие имена не поддерживает. возможно, из-за этого и не получается
К сожалению данный метод тоже не подходит, ибо функция GetShortPathName 1С 7.7 незнакома(
Ради интереса попробовал переименовать уже закрытый файл в файл с длиной имени более 8 символов.
[codebox]
ДБФ.ЗакрытьФайл(); //закрываем наш обработанный DBF-файл
ФС.УстТекКаталог(СокрЛП("D:"));
Результат = "";
Результат = ФС.НайтиПервыйФайл("reestr.DBF");
Если Результат<>"" Тогда
ФС.ПереименоватьФайл(СокрЛП(КаталогЗагрузки)+"\"+ Результат,СокрЛП (КаталогЗагрузки)+"\R91000" + Результат,1);
КонецЕсли;
[/codebox]
Программа находит файл "D:\reestr.DBF" и переименовывает его в "D:\R91000reestr.dbf". Теперь необходимо сделать следующее:
1) позволить пользователю выбрать файл;
2) обрезать его имя до первых 8 символов;
3) обработать и закрыть;
4) переименовать полученный файл так как нужно.
Имя исходного файла значения не имеет, главное, чтобы это был DBF-файл (все необходимые параметры берутся из данных самого файла). Пробовал обрезать имя файла, переименовывать его - все тщетно! Ну никак не получается это сделать(
OKEN, спасибо огромное за помощь! Я тоже заметил эту ошибку, но потом почему-то забыл про нее.. Сейчас временно оставил этот пункт, ибо возникли более важные задачи. Попозже я еще к нему вернусь
Наконец-то разделался с другими делами и появилась возможность заняться этим вопросом. Пробую диалог типа <открыть>- файл все равно не открывается( Вся проблема в том, что файлы которые необходимо обрабатывать имеют формат DBF, но длина имени составляет порядка 12-14 символов. Неужели нет никакой возможности открыть их без предварительного переименовывания?открыть>
Для какого банана, извиняюсь, переименовывать?
При длинном пути надо брать либо в кавычки имя файла, либо, ИмяФайла = Лев(ДлинноеИмяФайла,7)+"~.dbf"
Еще раз убедился, что старая привычка (имя файла латиницей и не более 8 символов) позволяет избежать массы проблем.
Наследство DOS 6.2 все еще живо в народных сердцах
Для какого банана, извиняюсь, переименовывать?
При длинном пути надо брать либо в кавычки имя файла, либо, ИмяФайла = Лев(ДлинноеИмяФайла,7)+"~.dbf"
Поясню подробней. На диске в различных каталогах находятся файлы dbf с длиной имени порядка 12-14 символов. Если длина имени не превышает 8 символов- файлы открываются нормально, если же больше - программа вылетает с ошибкой "Перед выполнением операции нужно открыть базу!" на строчках
ДБФ.Первая();
и Пока ДБФ.ВКонце() = 0 Цикл
Хотелось бы программно переименовывать длинные имена до 8 символов, обрабатывать данные, а затем возвращать исходное имя файлам. В противном случае остается только вручную переименовывать файлы, что весьма неудобно, ибо их несколько сотен и каждый день появляются новые.
Первоначальная версия процедур:
[codebox]
Процедура ВыборФайла()
КаталогЗагрузки = "";
ФайлЗагрузки = "";
Если ФС.ВыбратьФайл(1, ФайлЗагрузки, КаталогЗагрузки, "Выберите файл", "*.dbf|*.dbf", , ) = 1 Тогда
ФайлЗагрузки = КаталогЗагрузки + ФайлЗагрузки;
КонецЕсли;
Процедура ПриВыбореИмениФайла()
Поз=Найти(ФайлЗагрузки,".");
Если (Поз=0) Или (Поз>8) Тогда
ФайлЗагрузки=СокрП(Лев(СокрЛ(ФайлЗагрузки),12))+".DBF";
Иначе
ФайлЗагрузки=СокрЛП(Лев(ФайлЗагрузки,Поз)+"DBF");
КонецЕсли;
КонецПроцедуры
Решил сделать возможной загрузку файлов и с длинными именами. Алгоритм следующий:
1) long = 0;
2) пытаемся открыть файл, если длина больше 8 символов Тогда
а) усекаем имя до 8 символов;
б) переименовываем файл на диске в короткое имя;
в) присваиваем переменной long значение 1;
Иначе
ничего не делаем
Далее создаем объект типа XBase, создаем новый документ, открываем наш файл DBF и начинаем заполнять документ значениями полей файла. Если у нас был длинный файл (long=1), то после окончания всех действий вновь переименовываем файл (возвращаем ему исходное имя).
[codebox]
Перем КороткоеИмяФайла,ПолноеИмяФайла;
Процедура ВыборФайла()
КаталогЗагрузки = "";
ФайлЗагрузки = "";
Если ФС.ВыбратьФайл(0, ФайлЗагрузки, КаталогЗагрузки, "Выберите файл", "*.dbf|*.dbf", , ) = 1 Тогда
ПолноеИмяФайла = КаталогЗагрузки + ФайлЗагрузки;
КонецЕсли;
Процедура ПриВыбореИмениФайла()
long=0;
Поз=Найти(ФайлЗагрузки,".");
Если (Поз>8) Тогда // длинное имя файла
КороткоеИмяФайла=СокрП(Лев(СокрЛ(ФайлЗагрузки),8))+".DBF";;
long = 1;
ФС.УстТекКаталог(КаталогЗагрузки);
Результат = "";
Результат = ФС.НайтиПервыйФайл(ФайлЗагрузки);
Если Результат<>"" Тогда
ФС.ПереименоватьФайл(СокрЛП(КаталогЗагрузки)+"\"+ Результат,СокрЛП (КаталогЗагрузки)+"\" + КороткоеИмяФайла,1);//теперь наш файл называется R91000.dbf
КонецЕсли;
Иначе
КороткоеИмяФайла=СокрЛП(Лев(ФайлЗагрузки,Поз)+"DBF");
КонецЕсли;
КонецПроцедуры
В новом варианте обработка файлов с длинными именами все равно невозможна, программа вылетает с теми же ошибками. Подскажите, возможно ли реализовать мою задумку в 1С?
Коды ошибок и типовой состав информационной базы данных 1С 7.7
ИНСТРУКЦИЯ 1С 7.7 → перейти в меню [СТАТЬИ И ИНСТРУКЦИИ]
- 10 Ошибка закрытия файла
- 20 Ошибка создания файла
- 30 Ошибка определения длины файла
- 40 Ошибка установки длины файла
- 50 Ошибка при попытке заблокировать файл
- 60 Ошибка при открытии файла
- 70 Ошибка чтения файла
- 80 Ошибка удаления файла
- 90 Ошибка переименования файла
- 100 Ошибка позиционирования в файле
- 110 Ошибка снятия блокировки с файла
- 120 Ошибка записи в файл
- 200 Файл не является базой данных DBF-формата
- 210 Неопознанное имя поля
- 220 Неопознанный тип поля
- 230 Запись слишком длинная
- 300 Индексный файл не содержит информации о записи
- 310 Нарушение структуры индексного файла
- 330 Указанное имя индекса недоступно
- 340 Ошибка уникальности индекса
- 400 Ожидается запятая или скобка
- 410 Выражение не завершено
- 422 IFF() требует параметров одинаковой длины
- 425 У STR() и SUBSTR() 2-й и 3-й параметры - константы
- 430 Неверное число параметров
- 440 Слишком сложное выражение
- 450 Пропущена правая скобка
- 460 Неверный тип подвыражения
- 470 Неопознанная функция
- 480 Неопознанный оператор
- 500 Выражение не завершено символом двойной кавычки
- 920 Недостаточно памяти
ExtForms (каталог с файлами внешних отчетов, печатных форм, бухгалтерской отчетностью и др. внешними модулями)
1SBKTTL.DBF ( содержит рассчитанные бухгалтерские итоги остатков и оборотов по синтетическим счетам и объектам аналитики ) - К ак уменьшить размер файла (решение проблемы)
Читайте также: