Имя: Пароль:
1C
 
Загрузка с текстового файла
0 Neznayka
 
04.08.06
11:44
Мне нужно сделать отчет с запросом данных из существующего текстового файла. Подскажите пожалуйста, как правильно это сделать?
1 Vlad_1717
 
04.08.06
11:50
А какая структура файла-то?
2 Neznayka
 
04.08.06
11:54
обычный текстовый файл, в который были записаны данные из 1С через глобальный модуль
3 Vlad_1717
 
04.08.06
11:55
А как эти данные в файл попали?
4 agarych
 
04.08.06
12:01
Текст = СоздатьОбъект("Текст");
Текст.Открыть(Файл);
Для я = 1 По Текст.КоличествоСтрок() Цикл
  Стр = Текст.ПолучитьСтроку(я);
  //что хочешь то и делай здесь со строкой
КонецЦикла;
5 John_T
 
04.08.06
12:02
Открываеш файл, читаеш построчно и записываеш в таблицу значений. Затем цикл по ТЗ и все.
6 prochor
 
04.08.06
12:03
1) надо знать структуру записи текстового файла
2) надо, чтобы данные были СТРОГО структурированы, т.е. допустим одно данное от другого в строке отделялись каким-то неупотребляемым знаком, типа &
3) надо открыть ЖКК и посмотреть ее в главе Работа с текстовыми файлами
7 Neznayka
 
04.08.06
12:11
в текстовый файл попадают данные о сотрудниках, и какие права установленны на тот или иной объект. Данные в строке разделены между собой запятой.
8 Vlad_1717
 
04.08.06
12:21
В каждой строке - Сотрудник,права - так?
9 John_T
 
04.08.06
12:28
Количество = СтрЧислоВхождений(Стр,",")+1;
Для СчетчикЦикла = 1 По Количество Цикл
   Если КоличествоКодов>1 Тогда
       Код = Лев(Стр,Найти(Стр,",")-1);
       Если Код="" Тогда
           Код = Стр;
       КонецЕсли;
       Стр = Прав(Стр,СтрДлина(Стр)-СтрДлина(Код)-1);
   Иначе
       Код = СокрЛП(Стр);
   КонецЕсли;
КонецЦикла;
10 Neznayka
 
04.08.06
12:33
Примерно так:
"Иван","Иванов Иван"

----------
"Константа.ВалютаБухУчета",1,0
"Константа.ВалютаУпрУчета",1,0
"Константа.ВидСвойстваКонтрагентов",1,0
"Константа.ВидСвойстваНоменклатуры",1,0
"Константа.ДатаЗапретаРедактирования",0,0
"Константа.ЕдиницаВеса",1,0

Нужно извлечь из каждого файла пользователя его ФИО, права на константы, справочники и т.д.
11 Skynin
 
04.08.06
13:08
(10) то есть это файл, "сгенерированый Описание структуры метаданных?"
12 Neznayka
 
04.08.06
13:11
да
13 Vlad_1717
 
04.08.06
13:12
(11),(12) Это в какой это "стуктуре" описаны пользователи?
14 Neznayka
 
04.08.06
13:17
в смысле? я что-то не совсем поняла
15 Skynin
 
04.08.06
13:19
(14) задача тогда известная :) Есть стандартные обработки на проклабе, которые разгребают этот файл.
16 Neznayka
 
04.08.06
13:22
что такое проклаб?
17 Has
 
04.08.06
13:26
18 Neznayka
 
05.08.06
11:21
А в 1С возможно такое, чтобы при запросе строки обрезать слово не с левой стороны (напр., Сред(Стр,12,ДлСтр-16)), а с правой?
19 Анчоус
 
05.08.06
11:27
Лев(Стр, колСимволов) - обрезание слева
Прав(Стр, колСимволов) - обрезание справа
20 Neznayka
 
05.08.06
11:31
С помощью Прав(Стр, колСимволов) можно обрезать определенное количество символов справа, а мне нужно допустим из ""Константа.ПереоцениватьОстатки",1,0" взять 1, а не 0, тогда как быть?
21 Ынча
 
05.08.06
11:35
Тогда лучше использовать Сред...
22 Neznayka
 
05.08.06
11:39
я пробовала использовать сред, но он обрезает только слева, а справа не трогает
23 Neznayka
 
05.08.06
11:41
Допустим в строке ""Константа.ВалютаБухУчета",1,0" я прописала
Сред(Стр,28,ДлСтр-2), он обрезал только "Константа.ВалютаБухУчета", а остальное оставил как есть
24 Ынча
 
05.08.06
11:43
Сред (""Константа.ПереоцениватьОстатки",1,0", 44, 1)
25 jurii
 
05.08.06
11:45
Список значений и всего то делов:
   Сп = СоздатьОбъект("СписокЗначений");
   Сп.ИзСтрокиСРазделителями(Стр);
   Сообщить(Сп.ПолучитьЗначение(2));
26 Neznayka
 
05.08.06
11:45
а что за число 44?
27 Ынча
 
05.08.06
11:45
А вообще посмотри функцию ИзСтрокиСРазделителями() - быть может она тебе пригодится.
Она может из твоей строки сделать СписокЗначений, в котором будет три элемента:

1 = "Константа.ПереоцениватьОстатки"
2 = 1
3 = 0
28 Ынча
 
05.08.06
11:47
Число 44 - это номер символа, с которого начинаем обрезать (только я ошибся: не 44, а 34), а второе число (1) - это количество символов, которое тебе нужно вернуть...
29 Neznayka
 
05.08.06
11:50
спасибо за подсказку
30 Ынча
 
05.08.06
11:53
А вообще попробуй:
СЗ = СоздатьОбъект("ТаблицаЗначений");
СЗ.ИзСтрокиСРазделителями("""Константа.ПереоцениватьОстатки"",1,0");

тогда получиш:
СЗ.ПолучитьЗначение(1) = "Константа.ПереоцениватьОстатки"
СЗ.ПолучитьЗначение(2) = 1
СЗ.ПолучитьЗначение(3) = 0
31 Ынча
 
05.08.06
11:55
Вернее не
СЗ = СоздатьОбъект("ТаблицаЗначений");
а
СЗ = СоздатьОбъект("СписокЗначений");
32 Ынча
 
05.08.06
11:58
пипарился :)
33 Neznayka
 
07.08.06
09:03
Сейчас я пытаюсь сделать загрузку данных не из одного файла, а из всех файлов каталога. Что не правильно я прописываю?
   Файл = ФС.ВыбратьФайл(КаталогИБ() + "\Users\*.txt");
   Пока Файл=1 Цикл
       //Обработка файла
       ВыводТабл();
       СледФайл = ФС.НайтиСледующийФайл();
   КонецЦикла;
34 skunk
 
07.08.06
09:09
35 Ангел- Хоронитель
 
07.08.06
09:34
(33)книжки читать надо!
36 Neznayka
 
07.08.06
09:37
в книжках такого я не нашла, поэтому и спрашиваю
37 skunk
 
07.08.06
09:39
и что в (34) не айда?
38 TDV
 
07.08.06
10:10
Может что то не догоняю,но при чем здесь секция Халява???
39 romix
 
модератор
07.08.06
10:26
Книга знаний: Чтение и запись текстовых файлов XML средствами 1С:Предприятие 7.7

Это пример чтения файлов, размеченных как XML.

Формат в (10) проще, и разбирается просто сз.ИзСтрокиСРазделителями()
40 Черномор
 
07.08.06
11:26
Процедура ПолучитьДанные(ВыбранныйФайл)
   Если ПустаяСтрока(ВыбранныйФайл) = 1 Тогда
       Возврат;
   КонецЕсли;
                 
   Текст = СоздатьОбъект("Текст");
   Текст.Открыть(КаталогИБ()+"\TMP\"+ВыбранныйФайл);
   
   Для сч=1 По Текст.КоличествоСтрок() Цикл
   стрДанные = Текст.ПолучитьСтроку(сч);
   стрДанные = СтрЗаменить(стрДанные,",",РазделительСтрок);
   Код = СтрПолучитьСтроку(1);
   Наименование = СтрПолучитьСтроку(2);
   ...
   ПолеN = СтрПолучитьСтроку(N);
   КонецЦикла;
   
   
КонецПроцедуры    // ПолучитьДанные
//----------------------------------------------------
Процедура Сформировать()        
   Перем ВыбранныйФайл;
   
   ФС.УстТекКаталог(КаталогИБ()+"\TMP");
   ВыбранныйФайл = ФС.НайтиПервыйФайл("*.txt");
   
   
   ПолучитьДанные(ВыбранныйФайл);  
   Пока ПустаяСтрока(ВыбранныйФайл) = 0 Цикл
       ВыбранныйФайл = ФС.НайтиСледующийФайл();
       ПолучитьДанные(ВыбранныйФайл);  
   КонецЦикла;
   
КонецПроцедуры
41 Neznayka
 
07.08.06
12:53
Спасибо за подсказку, но я уже сама это сделала
42 skunk
 
07.08.06
12:54
(41)теперече надо ссылку на фотку показать... тут так принято
43 Milli
 
07.08.06
13:17
такое фото пойдет: http://webfile.ru/1049710 ???
44 Milli
 
07.08.06
13:18
ах, да, я под другим именем вошла... :)