7.7 Проблема с ОткрытьПодбор в обработке

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем dimas_downloader, 16 апр 2008.

  1. TopicStarter Overlay
    dimas_downloader
    Offline

    dimas_downloader

    Регистрация:
    16 апр 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Подскажите пожалуйста.
    У меня возникла такая проблема: Я начал делать обработку для автоматической загрузки заявок на товар покупателей из документа EXEL. В этом документе соответственно идут колонки Товар Артикул Количество Покупатель. Мне нужно, чтобы создавались документы для каждого покупателя. Но одно но. Иногда в этой заявке как-нибудь по извращенному названы покупатели, не так как в базе. Поэтому я решил, что если обработка не находит нужного покупателя в базе, то вылетает подбор, где вручную можно выбрать покупателя. Но такая пробла - подбор находиться в цикле и поэтому после того как вылетает подбор, обработка не дожидается пока выбирится покупатель и дальше продолжает выполнять алгоритм. Подскажите как можно реализовать, чтобы обработка продолжалась только после быбора.

    вот код:
    Код:
     Перем ИмяФайла, ExcelApp, Осталось;
    
    Функция НайтиПосл(Знач Стр,Что) 
    Поз=0;
    Пока 1=1 Цикл
    ЛокПоз = Найти(Стр,Что);
    Если ЛокПоз=0 Тогда
    Возврат Поз;
    КонецЕсли;
    Поз = Поз+ЛокПоз;
    Стр = Сред(Стр,ЛокПоз+1);
    КонецЦикла;
    КонецФункции
    
    Функция __ФИмя(ИмяФайла) 
    Стр = ИмяФайла;
    Пока Найти(Стр,"�")<>0 Цикл
    Стр = Сред(Стр,Найти(Стр,"�")+1);
    КонецЦикла;
    Возврат Стр;
    КонецФункции
    
    Функция __ФКаталог(ИмяФайла) 
    Возврат Лев(ИмяФайла,НайтиПосл(ИмяФайла,"�"));
    КонецФункции
    
    Процедура ОбработкаПодбора(ВыбЗнач, КонтФормыПодбора)   
    ПокупательСправ  =СоздатьОбъект("Справочник.Контрагенты");
    ОткрытьПодбор("Справочник.Контрагенты",ПокупательСправ,0);   
    ПолучитьЗначениеИзПодбора("Наименование");  
    КонецПроцедуры    
    
    
    Процедура ВыбратьФайл()
    __Ф = __ФИмя(ИмяФайла);
    __К = __ФКаталог(ИмяФайла);
    Если ФС.ВыбратьФайл(0,__Ф,__К,"Выбрать файл с данными для импорта","XLS файлы (*.xls)|*.xls")=1 Тогда
    ИмяФайла = __К+__Ф;
    Файл = ИмяФайла;
    КонецЕсли;
    КонецПроцедуры   
    
    Процедура Выполнить()
    
    Если Вопрос("Выполнить загрузку заявок в базу?","Да+Нет")="Нет" Тогда
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;   
    
    ExcelApp  =СоздатьОбъект("Excel.Application");    
    Workbook  =ExcelApp.WorkBooks.Open(ИмяФайла);
    Sheet     =Workbook.Worksheets(1);
    Range     =Sheet.UsedRange;
    RowCount  =Range.Rows.Count;
    ColCount  =Range.Columns.Count;  
    
    Row = 0;
    Для Row = 1 По RowCount Цикл
    Col = 0;
    Таб="";
    Для Col = 1 По ColCount Цикл
    Таб=Таб+Sheet.Cells(Row,Col).Value+", ";
    КонецЦикла;
    Сообщить("Строка="+Строка(Row)+' = '+Таб);
    КонецЦикла; 
    
    Сообщить("Строк="+Строка(RowCount)+", Столбцов="+Строка(ColCount),"i");      
    
    ПокупательСправ  =СоздатьОбъект("Справочник.Контрагенты");   
    Пользователь     =СоздатьОбъект("Справочник.Пользователи");
    Документ         =СоздатьОбъект("Документ.ЗаявкаПокупателя");
    Единицы          =СоздатьОбъект("Справочник.Единицы"); 
    ТипыЦен          =СоздатьОбъект("Справочник.ТипыЦен");  
    Товары           =СоздатьОбъект("Справочник.Номенклатура");
    
    Пользователь.НайтиЭлемент(глПользователь);
    ПредПокупательСправ="";  
    
    Для Row = 3 По RowCount Цикл
    Col = 0;
    Таб="";
    
    Наименование  =Sheet.Cells(row,1).Value;    
    Артикул       =Sheet.Cells(row,2).Value;
    Количество    =Sheet.Cells(row,5).Value;   
    Покупатель    =Sheet.Cells(row,6).Value;     
    
    Если ПустоеЗначение(Покупатель)=0 Тогда 
    Если ПокупательСправ.НайтиПоНаименованию(Покупатель,1)=0 Тогда   
    Вопрос("Не найден покупатель ==>" +Покупатель+ "<== в справочнике! Выбирите покупателя вручную","ОК"); 
    ОбработкаПодбора(ПокупательСправ, НАименование);
    
    
    
    Если ПредПокупательСправ<>ПокупательСправ.ТекущийЭлемент() Тогда
    Если ПустоеЗначение(ПокупательСправ)=0 Тогда       
    Документ.Записать(); 
    Сообщить("Создан документ: " +Строка(Документ));
    КонецЕсли;    
    
    Документ.Новый();
    Документ.ВидОперации=Операция;
    Документ.Фирма=Фирма;
    Документ.Склад=Склад;
    Документ.Договор=ПокупательСправ.ОсновнойДоговор.ТекущийЭлемент();
    Документ.Контрагент=ПокупательСправ.ТекущийЭлемент(); 
    ПредПокупательСправ=ПокупательСправ.ТекущийЭлемент();
    КонецЕсли;
    
    Документ.НоваяСтрока();
    Документ.Номенклатура=Товары.НайтиПоНаименованию(Наименование,0); 
    Документ.Количество=Число(Количество);
    Документ.Единица=Товары.БазоваяЕдиница;  
    Документ.СтавкаНДС=Товары.СтавкаНДС;
    Документ.СтавкаНП=Товары.СтавкаНП;
    Документ.СтавкаНДС=Документ.Номенклатура.СтавкаНДС;
    ПроцНДС=глНачисляемыйНДС(Документ.Номенклатура.СтавкаНДС);
    Документ.Коэффициент=1;
    Сообщить("Добавлена строка: "+Товары+"...ОК"); 
    
    Осталось=rowcount-row;
    Состояние("Осталось строк: "+Осталось+" из "+rowcount);    
    
    
    КонецЕсли;
    
    КонецЕсли;
    
    КонецЦикла;
    
    Если ПустоеЗначение(ПредПокупательСправ)=0 Тогда
    Документ.Записать();
    Сообщить("Создан документ: " +Строка(Документ));
    КонецЕсли;   
    
    ExcelApp.Visible = 1;
    УдалитьОбъекты(ExcelApp);
    Сигнал();
    Вопрос("Загрузка завершена!","ОК");    
    КонецПроцедуры 
    
    
  2. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Открыть форму подбора модально?
  3. TopicStarter Overlay
    dimas_downloader
    Offline

    dimas_downloader

    Регистрация:
    16 апр 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Форму то подбора можно открыть модально, но как сделать, чтобы нужное значение можно было выбрать, а не открывалась фоорма редектирования этой позиции?
  4. Akulina
    Offline

    Akulina Опытный в 1С

    Регистрация:
    30 авг 2007
    Сообщения:
    87
    Симпатии:
    0
    Баллы:
    26
    В форме списка справочника контрагентов надо прописать условие
    Код:
    Если ПустоеЗначение(Форма.Параметр)=1 Тогда 
    //т.е. форма открывается не для подбора
    Форма.ОбработкаВыбораСтроки(0);
    Иначе //форма открыта для подбора
    Форма.ОбработкаВыбораСтроки(1);
    КонецЕсли;
    
    Что-то типа этого.


    !НЕ ЗАБЫВАЕМ про тэг
    Код:
    
    
  5. WaRDeR
    Offline

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

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

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