Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 ноя 2024, 21:17

Загрузка из текстового файла в БГУ

Автор Natalyagrom, 30 сен 2011, 10:46

0 Пользователей и 1 гость просматривают эту тему.

Natalyagrom

Здравствуйте!
Помогите, пожайлуста, с кодом, если можно. В 8-ке мы новички, написали загрузку из текстового файла.(переделали из найденной в инете)
Обработка подключается в БГУ-
Сервис - Дополнительные отчеты и обработки - Дополнительные внешние обработки табличных частей.
Представление объекта - Документ Поступление родительской оплаты на л/с. , табличная часть - Оплата.

В самом документе Поступление род.опл. на закладке Оплата по кнопке заполнить выбирается подключенная обработка.  Выбирается текстовый файл, который надо загрузить, нажимается кнопка - Загрузить TXT/CSV . Временная таблица заполняется, и по кнопке Выполнить данные должны переходить в документ. А они не переходят. В этом проблема.
Подскажите, где ошибка в коде..

Фрагмент кода
Процедура ОсновныеДействияФормыВыполнить(Кнопка)
      
      Для каждого стр из ТП Цикл
         Состояние("Добавление " + стр.Номер + " из " + ТП.Количество());
         Попытка
            тов = объектДокумент.Оплата.Добавить();
            тов.Ребенок = стр.Ребенок;
            тов.Сумма = стр.Сумма;
                                                            Если Число(стр.Номер) > 6 Тогда прервать; КонецЕсли;
         Исключение
            Сообщить("Ошибка добавления " + стр.Артикул + " : " + ОписаниеОшибки());
         КонецПопытки;
         
      КонецЦикла;         
   
      //КонецЕсли;
   
   ЭтаФорма.Закрыть("ОК");
   
КонецПроцедуры

Процедура ЗагрузитьTXTНажатие(Элемент)
   
   ПотокЧтения = ПрочитатьФайл(ИмяФайла);
      
   Если ПотокЧтения = Неопределено тогда
      Сообщить("Ошибка открытия файла " + ИмяФайла + " для чтения.");
      Возврат;
   КонецЕсли;
      
   ФормаПрогрессора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
      
   Если ФормаПрогрессора.Открыта() Тогда
      ФормаПрогрессора.Закрыть();
   КонецЕсли;
      
   ФормаПрогрессора.Значение = 1;
   ВсегоСтрок = СтрЧислоСтрок(ПотокЧтения);
   
   ФормаПрогрессора.МаксимальноеЗначение = ВсегоСтрок;
   ФормаПрогрессора.Открыть();
   ФормаПрогрессора.КомментарийОбработкиДанных = "Загрузка данных";
   
   ТекстКорзины = "";
   ТП.Очистить();
   
   Пока ФормаПрогрессора.Значение < ФормаПрогрессора.МаксимальноеЗначение Цикл
         
      ФормаПрогрессора.Значение = ФормаПрогрессора.Значение + 1;
      ТекСтрока = СтрПолучитьСтроку(ПотокЧтения, ФормаПрогрессора.Значение);
      ТекстКорзины = ТекстКорзины + Символы.ПС + ТекСтрока;
      ФормаПрогрессора.Обновить();
      
      // Определим, что текст разделен разделителем "|"
      Если Найти(ТекСтрока,";") > 0 Тогда
         Попытка
            инф = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок( ТекСтрока, ";");
            Реб = Справочники.Дети.НайтиПоКоду(инф[2]);
            Если Реб.Пустая() Тогда
               Сообщить("Не найден ребенок с лицевым счетом: " + инф[2]);
               продолжить;
            КонецЕсли;
            стр = ТП.Добавить();
            стр.Ребенок = Реб;
            стр.Лицсчет = инф[2];
            
            стр.Сумма = инф[3];
            стр.Номер = ТП.Количество() + 1;
            Если Число(стр.Номер) > 6 Тогда прервать; КонецЕсли;
         Исключение
            Сообщить("Ошибка обработки строки: " + ФормаПрогрессора.Значение, СтатусСообщения.Внимание);
            Сообщить(ОписаниеОшибки());
         КонецПопытки;
         
      КонецЕсли;
   
   КонецЦикла;   
      
   ФормаПрогрессора.Закрыть();

КонецПроцедуры

Natalyagrom

// Определим, что текст разделен разделителем "|"
      Если Найти(ТекСтрока,";") > 0 Тогда
         Попытка
            инф = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок( ТекСтрока, ";");
            Реб = Справочники.Дети.НайтиПоКоду(инф[2]);
            Если Реб.Пустая() Тогда
               Сообщить("Не найден ребенок с лицевым счетом: " + инф[2]);
               продолжить;
            КонецЕсли;
            стр = ТП.Добавить();
            стр.Ребенок = Реб;
            стр.Лицсчет = инф[2];
            
            стр.Сумма = инф[3];
            стр.Номер = ТП.Количество() + 1;
            Если Число(стр.Номер) > 6 Тогда прервать; КонецЕсли;
         Исключение
            Сообщить("Ошибка обработки строки: " + ФормаПрогрессора.Значение, СтатусСообщения.Внимание);
            Сообщить(ОписаниеОшибки());
         КонецПопытки;
         
      КонецЕсли;
   
   КонецЦикла;   
      
   ФормаПрогрессора.Закрыть();

КонецПроцедуры

Natalyagrom

Почему то не помещается полностью..((
// Определим, что текст разделен разделителем "|"
      Если Найти(ТекСтрока,";") > 0 Тогда
         Попытка
            инф = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок( ТекСтрока, ";");
            Реб = Справочники.Дети.НайтиПоКоду(инф[2]);
            Если Реб.Пустая() Тогда
               Сообщить("Не найден ребенок с лицевым счетом: " + инф[2]);
               продолжить;
            КонецЕсли;
            стр = ТП.Добавить();
            стр.Ребенок = Реб;
            стр.Лицсчет = инф[2];
            
            стр.Сумма = инф[3];
            стр.Номер = ТП.Количество() + 1;
            Если Число(стр.Номер) > 6 Тогда прервать; КонецЕсли;
         Исключение
            Сообщить("Ошибка обработки строки: " + ФормаПрогрессора.Значение, СтатусСообщения.Внимание);
            Сообщить(ОписаниеОшибки());
         КонецПопытки;
         
      КонецЕсли;
   
   КонецЦикла;   
      
   ФормаПрогрессора.Закрыть();

КонецПроцедуры

has

Пройдитесь отладчиком, ошибку быстро найдете. А так по коду не скажешь где именно ошибка.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск