Имя: Пароль:
1C
1С v8
Как считать из текстового файла в Регистр сведений?
, ,
0 hello19
 
10.06.12
16:08
Пишу функционал, который будет решать систему линейных уравнений (СЛУ) для подсчета себестоимости.
Для начала нужно считать данные из текстового файла в регистр сведений. как это сделать?

Программирую под 1с недавно. Вот до чего дошел:


Процедура СчитываниеСвободныхЧленов()
       
       // Создаем объект типа "Текстовый документ"
       Текст = Новый ТекстовыйДокумент();
       
       // Пусть к файлу
       Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
       // Считываем файл                          
       Текст.Открыть(Путь);
       
       // Разделитель
       Разделитель = ПС;
       
       // Перебираем строки файла, заполняя документ
       Для а = 1 по Текст.КоличествоСтрок() Цикл
           // Получаем строку
           Стр = Текст.ПолучитьСтроку(а);
           // Заносим строку во временную переменную
           ТекущаяСтрока = Стр;
           // Найдем разделитель
           НомерСимвола = Найти(ТекущаяСтрока, Разделитель);
           // Выбираем значение до разделителя
           ДоРазделителя = СокрЛП(Лев(ТекущаяСтрока, НомерСимвола-1));
           // Обрезаем строчку до первого символа после разделителя
           ТекущяаСтрока = Сред(ТекущаяСтрока, НомерСимвола+1);
           // Ищем следующий разделитель
           // Если это последний реквизити, то просто берем
           // оставшуюся строчку
           НомерСимвола = Найти(ТекущаяСтрока, Разделитель);
           ПослеРазделителя = Число(Лев(ТекущаяСтрока, НомерСимвола-1));
78 pumbaEO
 
11.06.12
16:24
Запись = РегистрыСведений.СвободныеЧлены.СоздатьМенеджерЗаписи();
перенеси в середину цикла.
79 m-serg74
 
11.06.12
16:24
может как то так)))

Процедура СчитатьСвободныеЧлены() Экспорт
       
   Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
   Текст = Новый ТекстовыйДокумент;
   Текст.Прочитать(Путь);
   
   Для а = 1 По Текст.КоличествоСтрок() Цикл
       Запись = РегистрыСведений.СвободныеЧлены.СоздатьМенеджерЗаписи();
       
       Запись.Уравнение = а;
       Запись.Значение = Текст.ПолучитьСтроку(а);
       
       Запись.Записать();
   КонецЦикла;
       
КонецПроцедуры
80 m-serg74
 
11.06.12
16:24
(78) вот ты быстрый)))
81 hello19
 
11.06.12
16:26
Да, все работает. Спасибо!
82 pumbaEO
 
11.06.12
16:27
(80) судя, по теме твой ответ лучше... (не надо доп. объяснений)
83 hello19
 
11.06.12
16:41
теперь остается другой вопрос - как считать матрицу коэффициентов?
она задана в таком вот виде: (пример)
(1;1)(3;2)
(1;2)
(3;1)
Что эквивалентно такой записи:
1*Х1 + 2* Х3
2* Х1
1* Х3

Хочу считать это дело в регистр сведений с соответственно полями "Х" "У" и "Коэффициент". Как это лучше реализовать?

Вот что у меня получилось:

Процедура СчитатьКоэффициенты() Экспорт

   Путь = "C:\Users\слу.txt";
   ТекстовыйФайл = Новый ЧтениеТекста(Путь, КодировкаТекста.ANSI);
   СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
   
   Разделитель1 = "(";
   Разделитель2 = ";";
   Разделитель3 = ")";
   ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
   
   // Переменная Х
   НомерУравнения = 1;
   
   // Цикл по строкам файла
   Пока СтрокаФайла <> Неопределено Цикл
       
       // Цикл по строкам файла
       Если ПозицияРазделителя1 <> 0 Тогда
           
       Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();            
       ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
       ПозицияРазделителя2 = Найти(СтрокаФайла, Разделитель2);
       ПозицияРазделителя3 = Найти(СтрокаФайла, Разделитель3);
       Разница12 = ПозицияРазделителя2 - ПозицияРазделителя1-1;
       Разница23 = ПозицияРазделителя3 - ПозицияРазделителя2-1;
       
           Запись.х = НомерУравнения;
           Запись.у = Сред(СтрокаФайла, ПозицияРазделителя1+1, Разница12 );
           Запись.Коэффициент = Сред(СтрокаФайла, ПозицияРазделителя2+1, Разница23 );
           Запись.Записать();
           Запись.Записать();
           Запись.Записать();
           СтрокаФайла = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя3)
       
       КонецЕсли;
       
       НомерУравнения = НомерУравнения + 1;
           
       КонецЦикла;
   
КонецПроцедуры
84 m-serg74
 
11.06.12
16:57
опять ты за свое:

Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();            
Запись.х = НомерУравнения;
Запись.у = Сред(СтрокаФайла, ПозицияРазделителя1+1, Разница12 );
Запись.Коэффициент = Сред(СтрокаФайла, ПозицияРазделителя2+1, Разница23 );
Запись.Записать();
Запись.Записать();
Запись.Записать();

запись создаешь одну а записываешь ее 3 раза!!! зачем?
85 m-serg74
 
11.06.12
16:59
и как ты отсюда:

(1;1)(3;2) = 1*Х1 + 2* Х3
(1;2)      = 2* Х1
(3;1)      = 1* Х3

получаешь X, Y, Коэффициент???
86 m-serg74
 
11.06.12
17:01
и из своего файла ты прочитаешь всего одну (первую) строку:

СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
87 hello19
 
11.06.12
17:02
ну понятно как - сначала работаем со строкой (номер строки - это х)
дальше в строке ищу то, то между 1 и 2 разделителем - это у
то, что между 2 и 3 разделителями - то коэффициент
88 m-serg74
 
11.06.12
17:02
наведи в голове порядок... тогда записать в программе проще будет... без обид
89 m-serg74
 
11.06.12
17:05
напиши как в регистре будут выглядеть две записи из файла:

1)
(1;1)(3;2)

2)
(1;2)

???
90 hello19
 
11.06.12
17:09
кстати, при считывании свободных членов он округляет их.. .как от этого избавиться?
91 m-serg74
 
11.06.12
17:11
приведи пример: про округление
92 m-serg74
 
11.06.12
17:11
разделитель дес. знаков кто?
93 hello19
 
11.06.12
17:12
все, сам исправил
разделитель - запятая
94 m-serg74
 
11.06.12
17:12
молодец, так что с (89)
95 hello19
 
11.06.12
17:14
как переходить в цикле в следующей строчке?

Процедура СчитатьКоэффициенты() Экспорт

   Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\слу.txt";
   ТекстовыйФайл = Новый ТекстовыйДокумент;
   ТекстовыйФайл.Прочитать(Путь);
   
   Разделитель1 = "(";
   Разделитель2 = ";";
   Разделитель3 = ")";
   ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
   
   // Переменная Х
   НомерУравнения = 1;
   
   // Цикл по строкам файла
   Пока СтрокаФайла <> Неопределено Цикл
       
       // Цикл по строкам файла
       Если ПозицияРазделителя1 <> 0 Тогда
           
       Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();            
       ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
       ПозицияРазделителя2 = Найти(СтрокаФайла, Разделитель2);
       ПозицияРазделителя3 = Найти(СтрокаФайла, Разделитель3);
       Разница12 = ПозицияРазделителя2 - ПозицияРазделителя1-1;
       Разница23 = ПозицияРазделителя3 - ПозицияРазделителя2-1;
       
           Запись.х = НомерУравнения;
           Запись.у = Сред(СтрокаФайла, ПозицияРазделителя1+1, Разница12 );
           Запись.Коэффициент = Сред(СтрокаФайла, ПозицияРазделителя2+1, Разница23 );
           Запись.Записать();
           СтрокаФайла = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя3)
       
       КонецЕсли;
       
       НомерУравнения = НомерУравнения + 1;
           
   КонецЦикла;
   
КонецПроцедуры
96 m-serg74
 
11.06.12
17:17
я говорю определись...
то

ТекстовыйФайл = Новый ТекстовыйДокумент;

то

ТекстовыйФайл = Новый ЧтениеТекста(Путь, КодировкаТекста.ANSI);
97 m-serg74
 
11.06.12
17:17
хватит метаться из стороны в сторону)
98 pumbaEO
 
11.06.12
17:17
Я так понимаю, плавно переходим к рассчету симплекс метода или системы линейных уровнений на 1С ?
99 m-serg74
 
11.06.12
17:18
так он для того все это и делает, правда так и осталось не выясненным зачем РС, а не ТабЗнач)
100 Grusswelle
 
11.06.12
17:20
100!
101 m-serg74
 
11.06.12
17:22
(100) а пользы из 100 на 3 поста)))
102 hello19
 
11.06.12
17:24
>pumbaEO
Нет, буду искать решение СЛУ итерационными методами

>m-serg74
просто хочу реализовать одно и тоже действие несколькими способами...
103 m-serg74
 
11.06.12
17:26
для начала сделай одним, когда будет правильно работать, если хочешь потренироваться сделаешь вторым, знаешь поговорку про 2х зайцев?
104 m-serg74
 
11.06.12
17:28
человек не Windows(многозадачный) и все делает последовательно...
105 m-serg74
 
11.06.12
17:29
так что с (89) ?
106 hello19
 
11.06.12
17:34
Да как-то глухо с (89)
Пока учусь и хочу, чтобы было несколько правильных шаблонов считывания...
107 m-serg74
 
11.06.12
17:35
да ты не в программе (89), а на бумаге что ли придумай как будешь обрабатывать...
108 hello19
 
11.06.12
17:39
Так я же писал уже как:
Считываем строчку
х - номер строки
Ищем в ней первые 3 разделителя. То, что между 1 и 2 - то у. То, что между 2 и 3 - то коэффициент. После чего берем остаток стоки и продолжаем до тех пор пока строка не станет пустой.
Строка - пустая, берем новую строчку...
109 hello19
 
11.06.12
17:41
По идее должно работать, но что-то не очень..

Процедура СчитатьКоэффициенты() Экспорт

   Путь = "C:\Users\слу.txt";
   ТекстовыйФайл = Новый ЧтениеТекста(Путь, КодировкаТекста.ANSI);
   СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
   
   Разделитель1 = "(";
   Разделитель2 = ";";
   Разделитель3 = ")";
   ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
   
   // Переменная Х

   НомерУравнения = 1;
   
   // Цикл по строкам файла

   Пока СтрокаФайла <> Неопределено Цикл
       
       // Цикл по строкам файла

       Если ПозицияРазделителя1 <> 0 Тогда
           
           Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();            
           ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
           ПозицияРазделителя2 = Найти(СтрокаФайла, Разделитель2);
           ПозицияРазделителя3 = Найти(СтрокаФайла, Разделитель3);
           Разница12 = ПозицияРазделителя2 - ПозицияРазделителя1-1;
           Разница23 = ПозицияРазделителя3 - ПозицияРазделителя2-1;
       
           Запись.х = НомерУравнения;
           Запись.у = Сред(СтрокаФайла, ПозицияРазделителя1+1, Разница12 );
           Запись.Коэффициент = Сред(СтрокаФайла, ПозицияРазделителя2+1, Разница23 );
           Запись.Записать();
           СтрокаФайла = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя3)
       
       КонецЕсли;
       
       НомерУравнения = НомерУравнения + 1;
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
       
   КонецЦикла;
   
КонецПроцедуры
110 m-serg74
 
11.06.12
17:44
ты из строки в этом коде возьмешь только первое (...;...)
111 m-serg74
 
11.06.12
17:45
и что значит "По идее должно работать"? ты в блокноте что ли программу пишешь, проверить нет возможности и огласить результат работы...
112 hello19
 
11.06.12
17:47
запускаю программу - результата нет..
алгоритм правильный
113 hello19
 
11.06.12
17:47
почему возьму только первое?
114 m-serg74
 
11.06.12
17:48
потому что:

СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();

КонецЦикла;
115 m-serg74
 
11.06.12
17:49
больше циклов не вижу...О-О
116 m-serg74
 
11.06.12
17:50
>алгоритм правильный
- смелое заявление, почему тогда
>запускаю программу - результата нет..
117 hello19
 
11.06.12
17:50
не вижу ошибки(

я же как делаю - беру строчку:
СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();

Работаю с ней:
       Если ПозицияРазделителя1 <> 0 Тогда
           
           Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();            
           ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
           ПозицияРазделителя2 = Найти(СтрокаФайла, Разделитель2);
           ПозицияРазделителя3 = Найти(СтрокаФайла, Разделитель3);
           Разница12 = ПозицияРазделителя2 - ПозицияРазделителя1-1;
           Разница23 = ПозицияРазделителя3 - ПозицияРазделителя2-1;
       
           Запись.х = НомерУравнения;
           Запись.у = Сред(СтрокаФайла, ПозицияРазделителя1+1, Разница12 );
           Запись.Коэффициент = Сред(СтрокаФайла, ПозицияРазделителя2+1, Разница23 );
           Запись.Записать();
           СтрокаФайла = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя3)
       
       КонецЕсли

и как только с ней отработал, то перехожу к следующей..
       НомерУравнения = НомерУравнения + 1;
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
       
   КонецЦикла;

Разве нет?
118 hello19
 
11.06.12
17:51
результата нет, потому что реализация алгоритма неправильная
119 m-serg74
 
11.06.12
17:52
не "как только с ней отработал", а обработал первые скобочки и взял следующую строку...
120 m-serg74
 
11.06.12
17:53
может

Если ПозицияРазделителя1 <> 0 Тогда
  ////////////////
КонецЕсли

заменить на

Пока ПозицияРазделителя1 <> 0 Цикл
  ////////////////
КонецЦикла;
121 m-serg74
 
11.06.12
17:55
Считываем строчку
х - номер строки

это номер строки в файле или порядковый номер (...)?
122 hello19
 
11.06.12
17:55
заменил, но ничего не поменялось - результата нет
а почему я "обработал первые скобочки и взял следующую строку..." я же работаю вроде с одной и той же..
123 hello19
 
11.06.12
17:55
х - это номер строки
124 m-serg74
 
11.06.12
17:56
покажи место где ты в строчке обрабатываешь вторые (...)
125 m-serg74
 
11.06.12
17:57
(123) т.е. если в строчке несколько (...) то Х все равно не будет меняться? я правильно понял?
126 hello19
 
11.06.12
17:57
СтрокаФайла = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя3)

Здесь я беру все что справа от обработанной скобки. Разве нет?
127 m-serg74
 
11.06.12
17:58
правильно берешь а обрабатываешь то где?
128 m-serg74
 
11.06.12
18:00
сразу после этого ты берешь след. строку

СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
129 m-serg74
 
11.06.12
18:00
отладчик включи и посмотри очередность действий твоей проги
130 hello19
 
11.06.12
18:01
если в строчке несколько скобок, то Х не меняется - остается тем же

   Пока СтрокаФайла <> Неопределено Цикл
       
         // Цикл по строке файла
         Пока ПозицияРазделителя1 <> 0 Цикл
           
           Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();            
           ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
           ПозицияРазделителя2 = Найти(СтрокаФайла, Разделитель2);
           ПозицияРазделителя3 = Найти(СтрокаФайла, Разделитель3);
           Разница12 = ПозицияРазделителя2 - ПозицияРазделителя1-1;
           Разница23 = ПозицияРазделителя3 - ПозицияРазделителя2-1;
       
           Запись.х = НомерУравнения;
           Запись.у = Сред(СтрокаФайла, ПозицияРазделителя1+1, Разница12 );
           Запись.Коэффициент = Сред(СтрокаФайла, ПозицияРазделителя2+1, Разница23 );
           Запись.Записать();
           СтрокаФайла = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя3);
           ПозицияРазделителя1 = Найти(СтрокаФайла, Разделитель1);
           
       КонецЦикла;
       
       НомерУравнения = НомерУравнения + 1;
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
       
   КонецЦикла;


Вот я отрезал обработанную скобку:

           СтрокаФайла = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя3)
131 m-serg74
 
11.06.12
18:03
и что в рег. ничего не пишется?
132 hello19
 
11.06.12
18:03
нет, не пишется(
133 m-serg74
 
11.06.12
18:03
я домой))
134 hello19
 
11.06.12
18:06
ээх, ладно.. спасибо за помощь - буду сидеть разбираться
135 hello19
 
11.06.12
18:22
Все-равное не пойму где косяк...
136 ChAlex
 
11.06.12
18:45
(135) - может стоило-бы кого-нибудь нанять? Ведь это еще даже не начало ...
137 hello19
 
11.06.12
19:00
нанять? Вы, разве начинали изучение платформы с того, что нанимали тех, кто за вас выполнит ваше задание на не?
138 ChAlex
 
11.06.12
19:07
а - это побаловаться..., ну тогда я начинал с того, что 3 раза перечитал все что было доступно, потом год с отладчиком так сказать в руках, и первый вопрос который у меня возник - был наверное лет через 5. К этому времени уже обленился искать сам. где-то так. не в укор конечно, но что бы задавать вопросы - неплохо бы сначала поискать ответы самому. а для этого ну хотя бы дочитать документацию до конца ВСЮ. а еще лучше - так видео курс посмотреть - благо на просторах инета скачать не проблема. Уверяю - результат на выходе будет значительно быстрее и качественнее...
139 ChAlex
 
11.06.12
19:08
(+138) - все это не в обиду, а в качестве совета.
140 hello19
 
11.06.12
19:11
мне бы сейчас больше подошел совет по коду...
141 ChAlex
 
11.06.12
19:23
(140) - ну с первого поста по 130 - я смотрю вопросы сместилось вместе с поправкой каждого шага. честно говоря перечитывать все посты что бы понять а в чем-же вопрос на нынешний момент - как-то неохота. после того как заработает последний вариант кода - появится следующий вопрос... Время на отладку данного кода прочитав документацию - 5 минут с перекуром с кружкой пива. А сколько времени потратили вы? Теперь умножьте на еще не полученные вопросы - такими темпами жизни не хватит. В принципе могу подсказать, если введете в курс проблемы не отправляя перечитывать развитие сего сюжета :-)
142 hello19
 
11.06.12
19:37
Как сделать так, чтобы после закрытия 1с предприятия Регистры сведений были пустыми, т.е. как их чистить?
143 hello19
 
11.06.12
19:39
Сейчас задал общий вопрос, ответ на который опытный программист может дать не перечитывая историю топика...
144 ChAlex
 
11.06.12
19:43
В модуле обычного приложения (если вы запускаете 1с в обычном режиме) либо модуле управляемого приложения (если запускается в управляемом режиме) пишется в обработчике события код:

Рег=РегистрыСведений.хххх.СоздатьНаборЗаписей();
Рег.Записать();
145 ChAlex
 
11.06.12
19:43
(+144) забыл указать: обработчик событий №ПриЗавершенииРаботыСистемы" - по-памяти по-моему так называется
146 ChAlex
 
11.06.12
19:45
(+144) - можно и в обработчике "ПередЗаверешениемРаботыСистемы", а можно при старте приложения в обработчике "ПередНачаломРаботыСистемы" - как нравится
147 hello19
 
12.06.12
13:55
Как сделать так, чтобы регистры сведений очищались после закрытия 1с:предприятие?
148 hhhh
 
12.06.12
14:07
ИМХО основная ошибка автора, он плохо учил русский язык в школе. Ча-ща надо писать через "а", а он пишет через "я"

ТекущяаСтрока =

а вы тут развернули на 150 постов.
149 hello19
 
12.06.12
14:13
Если бы было хоть немного разума, то прочел бы история и увидел, что 150 постов не к этому относятся...
150 hello19
 
12.06.12
14:15
код для очистки регистра такой:
РегСЛУ = РегистрыСведений.СЛУ.СоздатьНаборЗаписей();
РегСЛУ.Записать();
   
РегСЧ = РегистрыСведений.СвободныеЧлены.СоздатьНаборЗаписей();
РегСЧ.Записать();

Куда нужно его вставить, чтобы при закрытии приложения регистры очищались?
151 J_B
 
12.06.12
14:18
(147) чем не нравится метод описанный в (144 - 146)? да и, если не надо хранить инфу, зачем использовать РС?
152 hello19
 
12.06.12
14:21
Тут такое дело - просто взял регистры сведений в качестве хранилищ для коэффициентов и свободных членов системы. Вообщем то, скоро думаю перейти на ТаблицыЗначений (просто в качестве практики)

Метод - нравиться.. только не знаю, куда именно нужно вставить строки, чтобы была очистка регистров...
153 J_B
 
12.06.12
14:30
(152) Если очень надо очищать именно при закрытии приложения то в модуле обычного приложения (пкм на названии конфигурации в дереые метаданных в конфигураторе - "Открыть модуль обычного приложения") найти процедуру "Процедура ПриЗавершенииРаботыСистемы()" и туда вставить этот код.

Но вот если все это городится в какой-то внешней обработке, то лучше в обработчике ПриЗакрытии() формы этой обработки.

И еще: неплохо бы раздобыть книжку "1С:Предприятие. Простые примеры разработки"
154 hello19
 
12.06.12
14:35
Да да , мне многие рекомендовали книжку - появится у меня скоро...

Теперь по коду:
я немного не понял - процедура "Процедура ПриЗавершенииРаботыСистемы()" уже где то есть, так?
155 hello19
 
12.06.12
14:35
просто не пойму, где "Открыть модуль обычного приложения"
156 m-serg74
 
12.06.12
14:39
тебе ж J_B написал:
пкм на названии конфигурации в дереые метаданных в конфигураторе - "Открыть модуль обычного приложения") найти процедуру "Процедура ПриЗавершенииРаботыСистемы()"
157 m-serg74
 
12.06.12
14:41
и ты ж вроде в v8: Проблема с обработками написал что разобрался...
158 J_B
 
12.06.12
14:41
В конфигураторе слева есть дерево метаданных, самая верхняя строчка в нем - название конфигурации - вот там и надо делать пкм (правая кнопка мыши).
Дальше: процедура может быть а может и не быть (зависит от того, какая конфигурация). Если есть - дописываем к существующей, нету - создаем свою
159 J_B
 
12.06.12
14:45
Но вот я бы не лез в типовые модули... лучше прикрутить к обработке кнопочку "Очистить регистры" и в ее обработчик влепить упомянутый кусочек кода.
160 m-serg74
 
12.06.12
14:46
навряд ли там типовая...
161 J_B
 
12.06.12
14:48
(160) тем более не лез бы на начальных уровнях...
162 m-serg74
 
12.06.12
14:52
да там скорее всего или вообще пустая или каркасная
163 m-serg74
 
12.06.12
14:55
ибо
РегистрыСведений.СЛУ, РегистрыСведений.СвободныеЧлены
164 hello19
 
12.06.12
16:13
Извиняюсь, что так долго... у меня там нет "Открыть модуль обычного приложения"
есть управляемое..
165 m-serg74
 
12.06.12
16:17
значит в модуле Управляемого приложения ваяй...
166 m-serg74
 
12.06.12
16:20
просто у тебя в настройках стоит вариант запуска - только Управляемое приложение
167 hello19
 
12.06.12
16:21
Ошибка(


{МодульУправляемогоПриложения(6,10)}: Переменная не определена (РегистрыСведений)
   РегСЧ = <<?>>РегистрыСведений.СвободныеЧлены.СоздатьНаборЗаписей(); (Проверка: Тонкий клиент)
168 m-serg74
 
12.06.12
16:27
правильно... ошибка из

Процедура ПриЗавершенииРаботыСистемы()
   ОчиститьРегистры();
КонецПроцедуры;

делай вызов другой процедуры, например:

&НаСервере
Процедура ОчиститьРегистры()
///ляляляляля
КонецПроцедуры
169 hello19
 
12.06.12
16:49
Почему то нет очистки...(
170 hello19
 
12.06.12
16:56
все работает,толкьо ничего не очищает(
171 hello19
 
12.06.12
17:42
Решил, что лучше держать все коэффициенты (и коэффициенты системы и свободные члены) в одном регистре - объединил 2 вышеуказанных процедуры и что-то не очень то получается....


Процедура Считывание() Экспорт
   Текст = Новый ТекстовыйДокумент;
   Путь = "C:\свободные.txt";
   Текст.Прочитать(Путь);

   Для а = 1 По Текст.КоличествоСтрок() Цикл
       Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();
       Запись.СвободныйЧлен = Текст.ПолучитьСтроку(а);
       Запись.Записать();
   КонецЦикла;
   
   Путь2 = "C:\слу.txt";
   Текст.Прочитать(Путь2);

   Разделитель1 = "(";
   Разделитель2 = ";";
   Разделитель3 = ")";
 
   // Переменная Х
   НомерУравнения = 1;
   
   // Цикл по количеству строк
   Для а = 1 По Текст.КоличествоСтрок() Цикл
       
       Строка = Текст.ПолучитьСтроку(а);
       ПозицияРазделителя1 = Найти(Строка, Разделитель1);
       
       // Цикл по строке
       Пока ПозицияРазделителя1 <> 0 Цикл
           
           Запись = РегистрыСведений.СЛУ.СоздатьМенеджерЗаписи();            
           ПозицияРазделителя1 = Найти(Строка, Разделитель1);
           ПозицияРазделителя2 = Найти(Строка, Разделитель2);
           ПозицияРазделителя3 = Найти(Строка, Разделитель3);
           Разница12 = ПозицияРазделителя2 - ПозицияРазделителя1 - 1;
           Разница23 = ПозицияРазделителя3 - ПозицияРазделителя2 - 1;
           
           Запись.х = НомерУравнения;
           Запись.у = Сред(Строка, ПозицияРазделителя1+1, Разница12 );
           НепроверенныйКоэффициент = Сред(Строка, ПозицияРазделителя2+1, Разница23 );
           Если НепроверенныйКоэффициент = "0" Тогда
                Запись.Коэффициент = 1;
            Иначе
                Запись.коэффициент = НепроверенныйКоэффициент;
                   
           КонецЕсли;
           //Запись.Коэффициент = Сред(Строка, ПозицияРазделителя2+1, Разница23 );
           Запись.Записать();
           Строка = Прав(Строка,СтрДлина(Строка)-ПозицияРазделителя3);
           ПозицияРазделителя1 = Найти(Строка, Разделитель1);
           
       КонецЦикла;
       
       НомерУравнения = НомерУравнения + 1;
       
   КонецЦикла;

КонецПроцедуры
172 hello19
 
12.06.12
17:47
черт, вопрос отпал)
173 hello19
 
12.06.12
18:22
И, тем не менее, не работает очистка регистров.
174 m-serg74
 
12.06.12
18:48
off: чушь какая то очередная...
175 hello19
 
20.06.12
15:29
как узнать, сколько в регистре сведений элементов?
176 hello19
 
20.06.12
16:11
как скопировать данные из регистра сведений в таблицу значений?
177 Bob2005
 
22.06.12
11:14
Выгрузить()
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс