|
Как считать из текстового файла в Регистр сведений? | ☑ | ||
---|---|---|---|---|
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
|
Выгрузить()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |