7.7 Как убрать пометку с файла?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем S0LNCE, 24 фев 2012.

  1. TopicStarter Overlay
    S0LNCE
    Offline

    S0LNCE

    Регистрация:
    28 окт 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Поздравляю всех с Днем защитника отечества, желаю всего самого лучшего!
    Подскажите, пожалуйста, как убрать пометку с xml-файлов, загружаемых в 1С 7.7, которые не были загружены в предыдущем цикле загрузки?
    Есть обработка, которая загружает xml-файлы. В ней есть процедура, которая формирует список xml-файлов. В этом списке с любого файла можно снять пометку, соответственно загрузятся только те файлы, на которых есть пометка. «Хорошие» файлы загружаются, создают документы и автоматически удаляются. Если в одном из загружаемых файлов есть ошибка, то такой файл не загрузится, выведется сообщение об ошибке и загрузка остановится. Повторное нажатие кнопки «Загрузить» повторяет загрузку оставшихся файлов либо до следующего файла с ошибкой, либо до конца списка файлов.
    Нужно, чтобы со всех незагрузившихся в предыдущем цикле файлов снималась пометка в списке файлов, тогда бы шла загрузка только файлов без ошибок. Я пока что сделала только так, чтобы в текущем цикле если файл содержит ошибку, то с него снимается эта пометка. Но после того, как найдется второй ошибочный файл, то пометка снимается со второго файла, а на первом восстанавливается. Подскажите, пожалуйста, как убрать пометку и с текущего файла, и со всех предыдущих ошибочных файлов?
    Код:
    Процедура СформСписФайлов()
    Тзс=СоздатьОбъект("ТаблицаЗначений");
    Тзс.НоваяКолонка("Наим");
    Тзс.НоваяКолонка("Дат");
    Тзс.НоваяКолонка("Ном");
    СпФайлов.УдалитьВсе();
    МаскаИмени="C:\Tunes\obmen8_7\02-ПУ-*.xml";
    Зн=ФС.НайтиПервыйФайл(МаскаИмени);
    Пока ПустаяСтрока(Зн)=0 Цикл
    Тзс.НоваяСтрока();
    Тзс.Наим=Зн;
    Тзс.Ном=Лев(Зн,12);
    Чис=Сред(Зн,14,2);
    Мес=Сред(Зн,17,2);
    Год=Сред(Зн,20,4);
    Тзс.Дат=Дата(Год,Мес,Чис);
    Зн=ФС.НайтиСледующийФайл();
    КонецЦикла;
    Тзс.Сортировать("Дат,Ном");
    Тзс.ВыбратьСтроки();
    I=1;
    Пока Тзс.ПолучитьСтроку()=1 Цикл
    СпФайлов.ДобавитьЗначение(Тзс.Наим);
    СпФайлов.Пометка(I,1);
    I=I+1;
    КонецЦикла;    
    КонецПроцедуры
    
    
    Процедура Загрузить()
    ------------------------------
    Для к=1 По СпФайлов.РазмерСписка() Цикл
    
    Если СпФайлов.Пометка(к)=0 Тогда
    Продолжить;
    КонецЕсли;
    Если ТипОперации= "ВыгрузкаАктовВыполненныхУслугПоНаселению" Тогда  
    ------------------------------------------------------
    ОшибкаЗагрузки=0;
    СоздатьДокументы();
    Если ОшибкаЗагрузки<>0 Тогда  
    Предупреждение("Загрузка прекращена, ошибка в файле "+ИмяФайла);
    СформСписФайлов();
    СпФайлов.Пометка(к,0);			   
    Возврат;
    Иначе ФС.УдалитьФайл(ИмяФайла);
    КонецЕсли;
    Иначе
    Предупреждение("В файле неверно задана Операция. Загрузка прекращается");
    Возврат;
    КонецЕсли;
    КонецЦикла;    
    СформСписФайлов();
    КонецПроцедуры	
    
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    я так понял файлы у вас подгружаются в реальном режиме времени...
    Если это так то только создавать дополнительный список значений с "больными" файлами и в СформСписФайлов() не ставить по ним метку
  3. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Из этого кода видно, что после окончания загрузки вызывается "СформСписФайлов()", а в нем список очищается, и формируется заново, проставляя все пометки.
    Так же при ошибке, опять формируется список, в котором вы снимаете пометку.

    1. Сильно сомневаюсь, что ваше снятие пометки работает корректно (если ошибка загрузки, условно в 3ем файле, а первые 2 загрузились нормально, то при формировании нового списка он будет первым, а вы снимаете пометку с третьего).

    2. Нужно переписывать процедуру формирования списка. Я бы делал по следующему алгоритму:
    - Создавал новый список значений
    - Добавлял значения по текущему алгоритму
    - Для каждого нового значения, если аналогичное есть в уже сформированном списке, проверял пометку
    - По окончании формирования переменной рабочего списка присваивал значение нового списка
  4. TopicStarter Overlay
    S0LNCE
    Offline

    S0LNCE

    Регистрация:
    28 окт 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    спасибо за советы =)

Поделиться этой страницей