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