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

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


Процедура СчитываниеСвободныхЧленов()
       
       // Создаем объект типа "Текстовый документ"
       Текст = Новый ТекстовыйДокумент();
       
       // Пусть к файлу
       Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
       // Считываем файл                          
       Текст.Открыть(Путь);
       
       // Разделитель
       Разделитель = ПС;
       
       // Перебираем строки файла, заполняя документ
       Для а = 1 по Текст.КоличествоСтрок() Цикл
           // Получаем строку
           Стр = Текст.ПолучитьСтроку(а);
           // Заносим строку во временную переменную
           ТекущаяСтрока = Стр;
           // Найдем разделитель
           НомерСимвола = Найти(ТекущаяСтрока, Разделитель);
           // Выбираем значение до разделителя
           ДоРазделителя = СокрЛП(Лев(ТекущаяСтрока, НомерСимвола-1));
           // Обрезаем строчку до первого символа после разделителя
           ТекущяаСтрока = Сред(ТекущаяСтрока, НомерСимвола+1);
           // Ищем следующий разделитель
           // Если это последний реквизити, то просто берем
           // оставшуюся строчку
           НомерСимвола = Найти(ТекущаяСтрока, Разделитель);
           ПослеРазделителя = Число(Лев(ТекущаяСтрока, НомерСимвола-1));
1 Rie
 
10.06.12
16:12
(0) Так а проблема-то в чём?
2 Adept
 
10.06.12
16:13
&НаСервереБезКонтекста
Функция ПолучитьТаблицуДанных(ИмяФайла)
   ТаблицаВозврата  = Новый ТаблицаЗначений;
   ТаблицаВозврата.Колонки.Добавить("Счет");
   ТаблицаВозврата.Колонки.Добавить("КодКонтрагента");
   ТаблицаВозврата.Колонки.Добавить("КодДоговора");
   ТаблицаВозврата.Колонки.Добавить("СКД");
   ТаблицаВозврата.Колонки.Добавить("СКК");
   
   ТекстовыйФайл = Новый ЧтениеТекста(ИмяФайла,КодировкаТекста.ANSI);
   СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
   
   Пока СтрокаФайла <> Неопределено  Цикл
       НоваяСтрока = ТаблицаВозврата.Добавить();
       
       //Счет
       ПозицияРазделителя = Найти(СтрокаФайла,";");
       Если ПозицияРазделителя <> 0 Тогда
           НоваяСтрока.Счет    = Лев(СтрокаФайла,ПозицияРазделителя-1);
           СтрокаФайла            = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя);
       КонецЕсли;
       
       //Код контрагента
       ПозицияРазделителя = Найти(СтрокаФайла,";");
       Если ПозицияРазделителя <> 0 Тогда
           НоваяСтрока.КодКонтрагента    = Лев(СтрокаФайла,ПозицияРазделителя-1);
           СтрокаФайла                    = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя);
       КонецЕсли;
       
       //Код договора
       ПозицияРазделителя = Найти(СтрокаФайла,";");
       Если ПозицияРазделителя <> 0 Тогда
           НоваяСтрока.КодДоговора    = Лев(СтрокаФайла,ПозицияРазделителя-1);
           СтрокаФайла                    = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя);
       КонецЕсли;

       
       //СКД
       ПозицияРазделителя = Найти(СтрокаФайла,";");
       Если ПозицияРазделителя <> 0 Тогда
           НоваяСтрока.СКД    = Лев(СтрокаФайла,ПозицияРазделителя-1);
           СтрокаФайла            = Прав(СтрокаФайла,СтрДлина(СтрокаФайла)-ПозицияРазделителя);
       КонецЕсли;
       
       //СКК
       НоваяСтрока.СКК    = СтрокаФайла;
       

       
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();    
   КонецЦикла;
   
   Возврат ТаблицаВозврата;
КонецФункции



Пример чтения из файла с разделителями
3 hello19
 
10.06.12
16:17
проблема в том, что не понимаю, как считать данные именно в регистр сведений (у меня он называется Свободные члены, там 2 поля - уравнение и свободный член)
4 Rie
 
10.06.12
16:20
(3) Почитай документацию о РегистрСведенийНаборЗаписей.
Далее - аналогично примеру из (2), только заполняй не таблицу значений, а набор записей, а затем его запиши.

Однако возможно, что тебе необходима как раз ТаблицаЗначений (зачем использовать для решения системы линейных уравнений регистр сведений - очень непонятно).
5 echo77
 
10.06.12
16:24
(3) В регистр сведений эти данные надо записать:

Запись = РегистрыСведений.<ТвойРегистр>.СоздатьМенеджерЗаписи();
Запись.Уравнение = <Твое уравнение>;
Запись.СвободныйЧлен = <Твой член>;//(не твои 22 см, а значение переменной)
Запись.Записать();
6 hello19
 
10.06.12
16:41
Прочитал про Таблицу значений и решал, что, все-таки, стоит делать используя как раз ее

   Функция СчитатьСвободныеЧлены
       ТаблицаВозврата = Новый ТаблицаЗначений;
       ТаблицаВозврата.Колонки.Добавить("Уравнение");
       ТаблицаВозврата.Колонки.Добавить("Коэффициент");
       
       // Пусть к файлу
       Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
       ТекстовыйФайл = Новый ЧтениеТекста(Путь, ANSI);
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
       
       СчетчикУравнений = 1;
       Разделитель = ПС;
       
       Пока СтрокаФайла <> Неопределено Цикл
           НоваяСтрока = ТаблицаВозврата.Добавить();
           
           // Уравнения
           
           ПозицияРазделителя = Найти(СтрокаФайла, Разделитель);
           Если ПозицияРазделителя <> 0 Тогда
               НоваяСтрока.Уравнение = СчетчикУравнений;
               СчетчикУравнений = СчетчикУравнений +1;
           КонецЕсли
           
           // СвободныеЧлены
           Если ПозицияРазделителя <> 0 Тогда
               НоваяСтрочка.СвободныйЧлен = Лев(СтрокаФайла, ПозицияРазделителя-1);
               СтрокаФайла = Прав(СтрокаФайла, СтрДлина(СтрокаФайла)-ПозицияРазделителя);
           КонецЕсли
7 hello19
 
10.06.12
16:42
все ли правильно?
8 Rie
 
10.06.12
16:45
(6) Прочитай ещё про Массив - для решения системы линейных уравнений это даже круче, чем ТаблицаЗначений.

(7) Если запускаешь и всё работает, как надо - значит, правильно. Если не работает или работает не так, как тебе хотелось - то неправильно.
9 hello19
 
10.06.12
17:04
А если все-таки использовать регистр сведений в качестве хранилища данных, то верно ли выглядит код?

   Процедура СчитатьСвободныеЧлены
       Запись = РегистрыСведений.СвободныеЧлены.СоздатьменеджерЗаписа();
       
       // Пусть к файлу
       Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
       ТекстовыйФайл = Новый ЧтениеТекста(Путь, ANSI);
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
       
       СчетчикУравнений = 1;
       Разделитель = ПС;
       
       Пока СтрокаФайла <> Неопределено Цикл
           
           // Уравнения
           
           ПозицияРазделителя = Найти(СтрокаФайла, Разделитель);
           Если ПозицияРазделителя <> 0 Тогда
               Запись.Уравнение = СчетчикУравнений;
               СчетчикУравнений = СчетчикУравнений +1;
           КонецЕсли;
           
           // СвободныеЧлены
           Если ПозицияРазделителя <> 0 Тогда
               Запись.СвободныйЧлен = Лев(СтрокаФайла, ПозицияРазделителя-1);
               СтрокаФайла = Прав(СтрокаФайла, СтрДлина(СтрокаФайла)-ПозицияРазделителя);
           КонецЕсли;        
   КонецПроцедуры;
10 Rie
 
10.06.12
17:07
(9) Этот код - не рабочий.
(Почему бы тебе перед тем, как сюда писать, не проверить свой код самому - например, запустить его и полюбоваться на сообщения об ошибках?).
11 artems
 
10.06.12
17:07
"Свободные члены", регистр сведений .....
А вы точно расчет себестоимости пишите?
12 hello19
 
10.06.12
17:10
Да, код нерабочий и вылезают непонятные ошибки....

Вот немного подправил, но косяки те же...


   Процедура СчитатьСвободныеЧлены()
       Запись = РегистрыСведений.СвободныеЧлены.СоздатьМенеджерЗаписи();
       
       // Пусть к файлу
       Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
       ТекстовыйФайл = Новый ЧтениеТекста(Путь, ANSI);
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
       
       СчетчикУравнений = 1;
       Разделитель = ПС;
       
       Пока СтрокаФайла <> Неопределено Цикл
           
           // Уравнения
           
           ПозицияРазделителя = Найти(СтрокаФайла, Разделитель);
           Если ПозицияРазделителя <> 0 Тогда
               Запись.Уравнение = СчетчикУравнений;
               СчетчикУравнений = СчетчикУравнений + 1;
               
               Запись.Записать();
           КонецЕсли;
           
           // СвободныеЧлены
           Если ПозицияРазделителя <> 0 Тогда
               Запись.СвободныйЧлен = Лев(СтрокаФайла, ПозицияРазделителя-1);
               СтрокаФайла = Прав(СтрокаФайла, СтрДлина(СтрокаФайла)-ПозицияРазделителя);
               Запись.Записать();    
           КонецЕсли;    
       КонецЦикла;  
       
   КонецПроцедуры

что тут неправильно?
13 hello19
 
10.06.12
17:15
Выползают следующие ошибки:

{ОбщийМодуль.РешениеСЛУСервер.Модуль(105,2)}: Ожидается ключевое слово 'КонецПроцедуры' ('EndProcedure')
   <<?>>Процедура СчитатьСвободныеЧлены() (Проверка: Сервер)
{ОбщийМодуль.РешениеСЛУСервер.Модуль(138,16)}: Обнаружено логическое завершение исходного текста модуля
   КонецПроцедуры<<?>> (Проверка: Сервер)
14 Rie
 
10.06.12
17:18
(13) Ищи синтаксическую ошибку. Где-то какая-то скобка не закрыта...

Впрочем, и по смыслу код в (12) - некорректный. Зациклится напрочь и будет в регистр всякую хрень писать (если вообще будет).
15 hello19
 
10.06.12
17:27
Вроде поправил, но вылезают те же ошибки...(

   Процедура СчитатьСвободныеЧлены()
       Запись = РегистрыСведений.СвободныеЧлены.СоздатьМенеджерЗаписи();
       
       // Пусть к файлу
       Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
       ТекстовыйФайл = Новый ЧтениеТекста(Путь, ANSI);
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();

       Разделитель = ПС;
       
       // Уравнения
       Для а = 1 по а = ТекстовыйФайл.КоличествоСтрок() Цикл
           Запись.Уравнение = а;
           Запись.Записать();
       КонецЦикла;

       Пока СтрокаФайла <> Неопределено Цикл
           
           ПозицияРазделителя = Найти(СтрокаФайла, Разделитель);
           
           // СвободныеЧлены
           Если ПозицияРазделителя <> 0 Тогда
               Запись.СвободныйЧлен = Лев(СтрокаФайла, ПозицияРазделителя-1);
               СтрокаФайла = Прав(СтрокаФайла, СтрДлина(СтрокаФайла)-ПозицияРазделителя);
               Запись.Записать();    
           КонецЕсли;    
           
       КонецЦикла;  
       
   КонецПроцедуры
16 Rie
 
10.06.12
17:32
(15) Поскольку началось лето и штатные телепаты разъехались по отпускам, то так и остаётся непонятным - что "поправил", какие "те же"...
Если та же синтаксическая ошибка - не исключено, что она появляется раньше того кода, который ты приводишь (например, перед этой процедурой ты воткнул какой-то оператор, возможно, даже пустой оператор (;)).
17 hello19
 
10.06.12
17:36
Нет, перед процедурой вообще ничего нет. Вообще вот весь код модуля:

Процедура РешитьСЛУ() Экспорт

   Процедура СчитатьСвободныеЧлены()
       Запись = РегистрыСведений.СвободныеЧлены.СоздатьМенеджерЗаписи();
       
       // Пусть к файлу
       Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
       ТекстовыйФайл = Новый ЧтениеТекста(Путь, ANSI);
       СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();

       Разделитель = ПС;
       
       // Уравнения
       Для а = 1 по а = ТекстовыйФайл.КоличествоСтрок() Цикл
           Запись.Уравнение = а;
           Запись.Записать();
       КонецЦикла;

       Пока СтрокаФайла <> Неопределено Цикл
           
           ПозицияРазделителя = Найти(СтрокаФайла, Разделитель);
           
           // СвободныеЧлены
           Если ПозицияРазделителя <> 0 Тогда
               Запись.СвободныйЧлен = Лев(СтрокаФайла, ПозицияРазделителя-1);
               СтрокаФайла = Прав(СтрокаФайла, СтрДлина(СтрокаФайла)-ПозицияРазделителя);
               Запись.Записать();    
           КонецЕсли;    
           
       КонецЦикла;  
       
   КонецПроцедуры
   
   
КонецПроцедуры

синтаксических ошибок не вижу(
18 Rie
 
10.06.12
17:39
(17) А вложенные процедуры - это теперь считается синтаксически корректным в 1С?!!
Марш читать документацию!
19 hello19
 
10.06.12
17:41
так, не знал - спасибо)
я правильно понимаю, что нужно сделать из процедуры ф-цию и тогда ошибки пропадут?
если да, то что же должна возвращать функция?
20 Rie
 
10.06.12
17:48
(19) Неправильно понимаешь. 1Сик - не паскаль, вложенных подпрограмм в 1С нет.
Вынеси СчитатьСвободныеЧлены из РешитьСЛУ - и будет счастье (если читаешь в регистр сведений (что не есть хорошо) - то он будет доступен отовсюду; если же решишь делать по-человечески (через массив или хотя бы через таблицу значений - то можешь их и вернуть в качестве значения).
Но пока что - воспользуйся советом из второго предложения в посте (18).
21 Любопытная
 
10.06.12
17:48
(19) Зачем вообще внутрь вкладывать процедуру? Убери это
22 hello19
 
10.06.12
17:56
Хорошо, спасибо, Rie, так и сделаю.
23 hello19
 
10.06.12
18:04
теперь остается другой вопрос - как считать матрицу коэффициентов?
она задана в таком вот виде: (пример)
(1;1)(3;2)
(1;2)
(3;1)
Что эквивалентно такой записи:
1*Х1 + 2* Х3
2* Х1
1* Х3

Хочу считать это дело в регистр сведений с соответственно полями "Х" "У" и "Коэффициент". Как это лучше реализовать?
24 hello19
 
10.06.12
18:14
т.е. вообщем то придется работать одновременно с 2-мя разделителями... как это сделать?
25 Rie
 
10.06.12
18:14
(23) Для начала - расскажи, кто такие поля X и Y (что такое Коэффициент - я, кажется, догадался).
Но всё ж таки - не томи, раскрой секрет, зачем тебе понадобился именно регистр сведений - в то время, как всё прогрессивное человечество решает системы линейных уравнений при помощи массивов?
26 hello19
 
10.06.12
18:17
Объясняю на примере, что выше - там просто коэффициенты перед соответствующими перемеными
разбираем первую строку - это первое уравнение системы. У всех коэффициентов в этом уравнении Х = 1
В качестве У - первый элемент в скобке, коэффициент - второй элемент

Что касается того, что делаю через регистр сведений - начал программировать на 1с только сегодня и еще не до конца со всем разобрался. Почитав, понимаю, что буду переходить на массивы...
27 Rie
 
10.06.12
18:18
(24) Ищешь левую скобку. Нашёл? Значит, это начало пары. Ищешь точку с запятой. То, что между ними - номер "икса". Радостно его запоминаешь (в переменной! а не в регистр сведений!). Ищешь правую скобку. Нашёл - то, что между ними - коэффициент. И так в цикле до конца строки. А сам этот цикл - внутри цикла по строкам файла.
28 hello19
 
10.06.12
18:30
ох, сейчас попробую реализовать..
29 Rie
 
10.06.12
18:33
(28) См. (2) - и делай по образу и подобию :-)
30 m-serg74
 
10.06.12
18:44
(28) мне вот не понятно... например ежели у тебя в .тхт строки разделены "ПС", зачем ты его ищешь, перебирай строки и все... или я что то не догоняю)
31 hello19
 
10.06.12
18:48
я просто не знаю как перебирать только строки, так что в качестве разделителя и взял Пс...
Как же перебирать просто строки?
32 m-serg74
 
10.06.12
18:52
из СП:
Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI);
Стр = Текст.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
   Сообщить(Стр);
   Стр = Текст.ПрочитатьСтроку();
КонецЦикла;
33 m-serg74
 
10.06.12
18:54
в твоем случае наверное:

Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI);
Уравнение = Текст.ПрочитатьСтроку();
Значение = Текст.ПрочитатьСтроку();
Пока Уравнение <> Неопределено Цикл // строки читаются до символа перевода строки
   //твоя обработка строк
   Уравнение = Текст.ПрочитатьСтроку();
   Значение = Текст.ПрочитатьСтроку();
КонецЦикла;
34 hello19
 
11.06.12
13:48
Интересный вопрос - как это дело запустить?
Просто у меня есть в обработках - "РешалкаСЛУ"
код я реализовывал в общем модуле.
Как сделать так, чтобы можно было посмотреть результат работы кода в режиме предприятия?
35 hello19
 
11.06.12
14:18
Если реализована процедура в общем модуле можно ли ее использовать в обработке?
36 m-serg74
 
11.06.12
14:33
конечно можно
37 hello19
 
11.06.12
14:36
так?
РешениеСЛУСервер.СчитатьСвободныеЧлены();
38 m-serg74
 
11.06.12
14:43
примерно так... только надо туда наверное параметры какие то передать, а после выполнения получить обратно и вывести пользователю...
39 hello19
 
11.06.12
14:46
и тут вылезает ошибка - "Метод объекта не обнаружен(КоличествоСтрок)"
Правильно ли я понимаю, что проблема в процедуре, именно в методе "КоличествоСтрок"?

Вот код:

Процедура СчитатьСвободныеЧлены() Экспорт
   Запись = РегистрыСведений.СвободныеЧлены.СоздатьМенеджерЗаписи();
       
   // Путь к файлу
   Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
   ТекстовыйФайл = Новый ЧтениеТекста(Путь, КодировкаТекста.ANSI);
   СтрокаФайла = ТекстовыйФайл.ПрочитатьСтроку();
   
   // Уравнения
   Для а = 1 по а = ТекстовыйФайл.КоличествоСтрок() Цикл
       Запись.Уравнение = а;
       Запись.Записать();
   КонецЦикла;

   // Коэффициенты
   // Строки читаются до символа ПС
   Пока СтрокаФайла <> Неопределено Цикл
       Запись.Значение = ТекстовыйФайл;
       Запись.Записать();
   КонецЦикла;  
       
КонецПроцедуры
40 m-serg74
 
11.06.12
14:49
посмотри ЧтениеТекста в СП, у него нет метода КоличествоСтрок(),
и вот это не понятно -

Для а = 1 по а = ТекстовыйФайл.КоличествоСтрок() Цикл...
41 m-serg74
 
11.06.12
14:50
если б был метод КоличествоСтрок() тогда наверное:

Для а = 1 по ТекстовыйФайл.КоличествоСтрок() Цикл
42 m-serg74
 
11.06.12
14:55
посмотри (32)(33) я ж написал тебе как читать твой текст. файл?
43 hello19
 
11.06.12
15:18
А за счет чего данные будут записывать в регистр сведений?
44 m-serg74
 
11.06.12
15:19
совсем не понятно о чем ты?
45 m-serg74
 
11.06.12
15:19
а так вообще то за счет программы...
46 hello19
 
11.06.12
15:20
просто там в коде
Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI);
Уравнение = Текст.ПрочитатьСтроку();
Значение = Текст.ПрочитатьСтроку();
Пока Уравнение <> Неопределено Цикл // строки читаются до символа перевода строки

   //твоя обработка строк

   Уравнение = Текст.ПрочитатьСтроку();
   Значение = Текст.ПрочитатьСтроку();
КонецЦикла;

Уравнение и Значение как-то не откуда берутся и не привязаны. Как будто просто переменные..
47 hello19
 
11.06.12
15:20
или я чего не понимаю?
48 hello19
 
11.06.12
15:21
и что будет в них лежать (в Уравнении и в Значении), если содержание текстового фала такое:
12
13
14
49 m-serg74
 
11.06.12
15:22
у тебя всегда строка состоит из двух цифр?
50 hello19
 
11.06.12
15:24
нет, может быть любое число в том числе и дробное
51 hello19
 
11.06.12
15:25
я тут подумываю в качестве разделителя взять ПС и просто записывать в значение то, что между соседними разделителями...
а может есть что по-проще?
52 m-serg74
 
11.06.12
15:28
приведи пример как ты вручную их распознавал бы?
(51) "подумываю" - ты уже давно его взял, только ПС - это Перенос строки как я понимаю, и в одной строке бесполезно его искать так как это перенос строки))), а вообще разделители бывают разный запятая, точка с запятой, табуляция... ПС твой что то как то бредово выглядит... мое мнение, с ним можно не согласиться...
53 hello19
 
11.06.12
15:30
так что же тут лучше использовать?
54 m-serg74
 
11.06.12
15:33
да это не принципиально, что использовать как разделитель принципиально твердо знать - что используешь, и как обрабатывать... не по программе, а по сути... иначе никогда не написать программу пока сам не будешь четко представлять что делать...
55 hello19
 
11.06.12
15:37
Вы что-нибудь можете предложить конкретное?
В Вашем примере в "Значение" записывается целиком число или только его цифры?
56 hello19
 
11.06.12
15:38
и как же все-таки программа узнает, что имеет дело с регистром сведений?
57 m-serg74
 
11.06.12
15:39
//твоя обработка строк
вот тута надо написать работу с регистром,
58 hello19
 
11.06.12
15:39
как именно?

и на вопрос про считывание так и не ответили..
59 m-serg74
 
11.06.12
15:40
в моем примере, если учесть что разделитель выбранный Вами - ПС в Значение будет попадать каждая вторая строка текст. файла, в Уравнение - каждая первая
60 hello19
 
11.06.12
15:43
каждая первая - т.е. все))) забавно написали)
как сказать, чтобы запись велась в регистрах?
61 m-serg74
 
11.06.12
15:46
>каждая первая - т.е. все))) забавно написали)
не придирайся - первая - читай четная, вторая - не четная, но может быть - 3, 4 и т.д. а там чет - нечет - нет выражения в русском языке, умник...
62 hello19
 
11.06.12
15:53
мне надо, чтобы в "уравнение" был просто набор целых чисел от 1 до количества строк в файле
а в "Значении" - числа
каким методом лучше сделать и то и то сразу?
63 m-serg74
 
11.06.12
16:01
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать("c:\000.txt");
Для Инд = 1 По ТекстДок.КоличествоСтрок() Цикл
   Уравнение = Инд;
   Значение = ТекстДок.ПолучитьСтроку(Инд);
   //здесь запись в рег. свед.
КонецЦикла;
64 hello19
 
11.06.12
16:08
как то так:

Процедура СчитатьСвободныеЧлены() Экспорт
   Запись = РегистрыСведений.СвободныеЧлены.СоздатьМенеджерЗаписи();
       
   // Путь к файлу
   Путь = "C:\Users\mikhailyuk_s\Documents\InfoBase6\свободные.txt";
       
   Текст = Новый ТекстовыйДокумент;
   Текст.Прочитать(Путь);
   СтрокаФайла = Текст.ПрочитатьСтроку();
   
   Для а = 1 По Текст.КоличествоСтрок() Цикл
       Запись.Уравнение = а;
       Запись.Значение = Текст.ПолучитьСтроку(а);
       
       Запись.Записать();
       Запись.Записать();
   КонецЦикла;
       
КонецПроцедуры
65 hello19
 
11.06.12
16:09
Только метод класса прочитать строку не обнаружен(
66 m-serg74
 
11.06.12
16:13
а где в (63) ты нашел подобие СтрокаФайла = Текст.ПрочитатьСтроку();
67 m-serg74
 
11.06.12
16:13
и вот это что:

       Запись.Записать();
       Запись.Записать();
68 m-serg74
 
11.06.12
16:13
отчего не 3, 5, 10 раз подряд?
69 hello19
 
11.06.12
16:17
СтрокаФайла = Текст.ПрочитатьСтроку(); - больше нет, забыл убрать
Запись.Записать();  - запись в регистр значений

2 раза потому что "уравнение" и "значение"
70 pumbaEO
 
11.06.12
16:17
(68) так надежней...
71 hello19
 
11.06.12
16:20
после запуска кода он записал в регистр только 3-е значение....(
72 m-serg74
 
11.06.12
16:20
(70) )))
73 hello19
 
11.06.12
16:21
в чем косяк?
74 m-serg74
 
11.06.12
16:22
наверное потому что у тебя всего в текст... 3 строки было б десять, записал бы только 10-е...
75 pumbaEO
 
11.06.12
16:22
Возможно у тебя в файле только три СвободныхЧлена
76 hello19
 
11.06.12
16:23
так нужно же чтобы каждое записал..
77 hello19
 
11.06.12
16:23
а не только последнее
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
Выгрузить()