Консультация № 143351
08.09.2008, 14:52
0.00 руб.
08.09.2008, 15:48
0 5 2
Помогите, пожалуйста отредактировать файл в 1С 7.7.
Вопрос задаю в эту рассылку абсолютно правильно. Код будет выполняться в программе
1С Бухгалтерия 7.7, но сам код очень похожий на С++, прошу Вас подсказать.
Есть файл бинарный произвольной структуры (я ее знаю). Необходимо произвести побайтовое чтение файла, затем побайтовую запись файла.
Реальная задача: после архивирования (обрезания) базы за 2000 - 2003 год файл 1cv7.mlg все еще содержит данные об объектах, использовавшихся в 2000 году, и все еще содержит сведения о действиях пользователей за 2000-2003 год. Таким образом, он имеет слишком большой размер (свыше 50 Мб), затрудняя анализ журнала регистрации, и затрудняя резервное копирование. Его нужно обрезать. Можно удалить его совсем, система создаст новый, но данные за 2004-2008 год будут потеряны. Я хочу его прочесть в побайтовом режиме, и обрезать.
Все это можно сделать средствами Windows, она достаточно мощная и разнообразная.
Приведу начало кода. Помогите пожалуйста, его продолжить. Нужы комманды для побайтового чтения любого бинарного файла, и побайтовой записи любого файла.
Var FileToedit;
FileToEdit=CreateObject("Windows.Filesystem... Вот в этом месте вместо Windows.Filesystem
можно написать Exel.Application, например, а как зовется объект для работы с файлами, я не знаю. Но точно знаю, что в стандартной поставке Windows XP SP2 он есть.
Var filelength;
filelength=FileToEdit.МетодПодскажите
FileToEdit.Seek(0);
Var FirstByte;
FirstByte=FileToEdit.МетодПодскажите
ByteToWrite=123;
FileToEdit.МетодПодскажите(ByteToWrite)
FileToEdit.Close();
Ненадежные утилиты внешних разработчиков прошу не предлагать. Все я буду делать средствами Windows.

Обсуждение

Неизвестный
08.09.2008, 16:09
общий
это ответ
Здравствуйте, Шахрайчук Владимир Анатольевич!
Вы вполне можете использовать для этого штатные средства 1С.
При запуске 1с выберите Монитор (Монитор пользователей).
Потом в Меню Монитор\Архивирование Журнала
Здесь вы можете заархивирувать и удалить из текущего журнала данные за любой предыдущий период работы
Неизвестный
08.09.2008, 16:15
общий
это ответ
Вообще-то, журнал регистрации это текстовый файл, если не запаролен. Так что можно воспользоваться объектом текст (только медленно очень) или V7TextFile из V7plus.Dll
А лучше, если знаете C++ пользоваться им, просто не понимаю зачем именно на 1С заморачиваться, или скрип на VB написать.
Неизвестный
08.09.2008, 16:37
общий
А зачем городить огород на сиподобном языке, когда достаточно все выполнить простой обработкой на встроенном языке 1С и пишется за 15 минут максимум. Вот пример, написан "на коленке" за ~5 минут

СтрокаПоиска = Формат(ДатаОбрезки,"ДГГГГММДД")+";"; //ДатаОбрезки - реквизит на форме, тип дата

ФайлЖР = КаталогИБ()+"\Syslog\1cv7.m_g";

ФС.КопироватьФайл(КаталогИБ()+"\Syslog\1cv7.mlg",ФайлЖР,0); // создаем копию ЖР, с ней и работаем

ЖР = СоздатьОбъект("Текст");
ЖР.Открыть(ФайлЖР);
Количество = ЖР.КоличествоСтрок();

Для Сч=1 По Количество Цикл
СтрокаЖР = ЖР.ПолучитьСтроку(Сч);
Если Найти(СтрокаЖР,СтрокаПоиска)>0 Тогда //ищем строку с нужной датой
Прервать; // нашли, стоп
КонецЕсли;
КонецЦикла;

ЖР1 = СоздатьОбъект("Текст"); //создаем новый файл ЖР

Для Сч1=Сч По Количество Цикл
ЖР1.ДобавитьСтроку(ЖР.ПолучитьСтроку(Сч1)); // копируем построчно туда из исходного ЖР
КонецЦикла;
ЖР1.Записать(ФайлЖР); // заменяем файл 1cv7.m_g
// и уже ручками меняем расширение у 1cv7.m_g и заменяем файл 1cv7.mlg


Неизвестный
08.09.2008, 16:55
общий
Доброго времени суток вам, Владимир. Все таки напишу по вопросу, хотя может и правда хватит предложенных вариантов. Объект Windows Script Host для работы с файлами называется Scripting.FileSystemObject. Очень хорошее описание находится тут. Приведенные по ссылке примеры достаточно просто доточить под 1С, если возникнут сложности, пишите.
Неизвестный
08.09.2008, 18:54
общий
Дмитрий Сташенко - точно в яблочко.
Black Monk - отлично. Не буду изобретать велосипед, попробую этим.
Честно говоря, я этот пункт меню искал в конфигураторе, а в мониторе поискать не догадался. А ведь столько баз уже обрезал...
Scripting.FileSystemObject прекрасно поможет мне с любыми файлами.
Форма ответа