Имя: Пароль:
1C
1С v8
Помогите разобраться с методом "НачатьПомещениеФайлаНаСервер"
0 Kuo
 
18.06.21
17:19
Вроде бы все работает корректно,но при повторном вызове данного метода при проверке Номера получаемого файла сбивается нумерация и никак не могу понять с чем это связанно (КОД ПРИЛАГАЮ)

&НаКлиенте
Процедура ПродолжитьЗаполнениеБезСоздания(Файлы, Парам2) Экспорт
    
    МассивФайлов = Новый Массив;
    
    НомерФайла = 0;
    
    Для Каждого Файл Из Файлы Цикл
        
        //ОтладкаОтправитьФайл(Файл);
        НомерФайла = НомерФайла + 1;
        Попытка
            СтруктураФайлов = Новый Структура;
            
            СтруктураФайлов.Вставить("НазваниеКаталога",Парам2.НазваниеКаталога);
            СтруктураФайлов.Вставить("Путь",Парам2.Путь);
            СтруктураФайлов.Вставить("СтрокаНазваниеКаталога",Парам2.СтрокаНазваниеКаталога);
            
            СтруктураФайлов.Вставить("ИмяФайла",Файл.Имя);;
            СтруктураФайлов.Вставить("Новый",Ложь);
            СтруктураФайлов.Вставить("Путь",Файл.Путь);
            СтруктураФайлов.Вставить("Расширение",Файл.Расширение);
            СтруктураФайлов.Вставить("ПутьПолныйКФайлу",Файл.ПолноеИмя);
            СтруктураФайлов.Вставить("НомерФайла",НомерФайла);
            СтруктураФайлов.Вставить("КоличествоФайлов",Файлы.Количество());
            
            НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ПослеПолученияДвойкиБезСоздания",ЭтаФорма,СтруктураФайлов),,,, Файл.ПолноеИмя,ЭтаФорма.УникальныйИдентификатор);    
            
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
        
        СтруктураФайлов.Очистить();
    КонецЦикла;
    
    
КонецПроцедуры

&НаКлиенте
Процедура ПослеПолученияДвойкиБезСоздания(АдресФайла, СтруктураФайлов) Экспорт
    СтруктураФайлов.Вставить("АдресХранища",АдресФайла.Адрес);
    МассивФайлов.Добавить(СтруктураФайлов);
        
    Если СтруктураФайлов.КоличествоФайлов = СтруктураФайлов.НомерФайла Тогда
        НайтиСтраницу(СтруктураФайлов.НазваниеКаталога,СтруктураФайлов.СтрокаНазваниеКаталога,МассивФайлов,СтруктураФайлов.Путь);
        ПроверитьСканыВДокументоре(Ложь);
    
        Обновляем = Ложь;
        ПодключитьОбработчикОжидания("ЗаполнитьПоступленияИРеализацииКлиент", 0.1, Истина);        
    КонецЕсли;
КонецПроцедуры
1 Жан Пердежон
 
18.06.21
17:50
дичь какая-то, да еще в цикле, есть же
НачатьПомещениеФайловНаСервер()
2 Жан Пердежон
 
18.06.21
17:57
а вообще, процедура асинхронная - то есть не факт, что файл, который ты помещаешь последним, загрузится последним
3 Kuo
 
18.06.21
18:32
(1)т.е. ты предлашь почитать про процедуру начатьПомещениеФайловНаСервер и мой вариант нормально не отработает?
4 ДедМорроз
 
18.06.21
19:13
Глобальная переменная МассивФайлов это очень некрасиво.
Вариант отработает, просто,обработчик ожидания нужно подключать только при получении последнего файла,так как если его подключать каждый раз,то он может и сработать между получениями файла.
5 sikuda
 
18.06.21
21:14
Нужен не цикл, а после второго вызова рекурсия

&НаКлиенте
Процедура КопироватьСервер(Команда)
    
    МассивФайлов = ПолучитьВыделенныеФайлыСервера(Истина);
    МассивАдресов = ПолучитьМассивАдресовФайлов(МассивФайлов);
    МассивИмен   = ПолучитьВыделенныеФайлыСервера(Ложь);
    Директория = ПолучитьТекущуюДиректориюСервер();
    
    ДопПараметры = Новый Структура("ном, МассивИмен, МассивФайлов");
    ДопПараметры.Вставить("ном", 0);
    ДопПараметры.Вставить("МассивИмен", МассивИмен);
    ДопПараметры.Вставить("МассивАдресов", МассивАдресов);
    ДопПараметры.Вставить("Директория", Директория);
    НачатьПолучениеФайлаССервера(Новый ОписаниеОповещения("ПолучениеФайла", ЭтаФорма, ДопПараметры),МассивАдресов[0],Директория + МассивИмен[0]);

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

&НаКлиенте
Процедура ПолучениеФайла(ПолученныйФайл, ДопПараметры) Экспорт
    Если ПолученныйФайл <> Неопределено Тогда    
        
        ном =  ДопПараметры.ном;
        Директория = ДопПараметры.Директория;
        //КопироватьФайл(ПолученныйФайл.ПолноеИмя, ДопПараметры.Директория + ДопПараметры.МассивИмен[ном]);
        Если ном < ДопПараметры.МассивФайлов.Количество()-1 Тогда
            ДопПараметры.Вставить("ном", ном+1);
            НачатьПолучениеФайлаССервера(Новый ОписаниеОповещения("ПолучениеФайла", ЭтаФорма, ДопПараметры),ДопПараметры.МассивАдресов[ном+1],Директория + ДопПараметры.МассивИмен[ном+1]);
        Иначе
            //Обновить все
            ДеревоПапокСервер.ПолучитьЭлементы().Очистить();
            ДобавлениеДисковСервера();
        КонецЕсли;    
        
    КонецЕсли;    
КонецПроцедуры
6 sikuda
 
18.06.21
21:20
(5) Если действительно критично принимать файлы по одному, а если без разницы то зачем тебе вообще нумерация?

Но больше всего понравился шедевр
"ПодключитьОбработчикОжидания("ЗаполнитьПоступленияИРеализацииКлиент", 0.1, Истина);"
Это когда сразу не получится, а через 0,1 секунды точно сработает ;)
7 Cthulhu
 
18.06.21
23:17
тут с НачатьПомещениеФайлаНаСервер прикол в файловой версии вдруг обнаружился. ну как "прикол".
в режиме отладки, включить замер производительности - запустить НачатьПомещениеФайлаНаСервер с обработчиками - дождаться окончания копирования - отключить замер производительности... и хобана - в процедуре описания оповещения "перед началом" вообще нет отметок хронометража как будто туда вообще не заходит - НО при этом оно заходит и отрабатывает (спецом воткнутое сообщение выводится)... в процедурах других использованных описаний оповещения, кстати - всё ок, отметки хронометража есть...
немного недоумеваю.
8 Cthulhu
 
18.06.21
23:18
ЗЫ: и - да, брейкпойнт в этой процедуре - пофиг, как будто действительно не заходит от слова вообще
9 Жан Пердежон
 
19.06.21
16:40
(8) в одной из последних версий был баг с отладкой
10 Cthulhu
 
19.06.21
18:31
(9): проверь на своем?
у меня на 15-м так. и на 14-м.
11 Guk
 
19.06.21
18:43
(10) для хохлов 1С выпустила специальную версию движка. оно в отладчик не заходит, а на любые попытки пишет "Крым-наш"...
12 Kuo
 
19.06.21
18:45
Всем спасибо в принципе понял куда идти дальше
13 Cthulhu
 
19.06.21
19:00
(11) ваня в своем репертуаре - пукн бомбит а по сути ноль.
14 Guk
 
19.06.21
19:05
а ссуть они в песок...
15 Cthulhu
 
20.06.21
01:01
мндя, ваня похоже опять в алкашню подался...
16 Guk
 
20.06.21
08:09
да куда мне до дури зеленского ;)...
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн