Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблема с ОткрытьПодбор в обработке
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 7.7" > (7.7) Отчеты и обработки для платформы "1С:Предприятие 7.7"
dimas_downloader
Подскажите пожалуйста.
У меня возникла такая проблема: Я начал делать обработку для автоматической загрузки заявок на товар покупателей из документа 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);
Сигнал();
Вопрос("Загрузка завершена!","ОК");
КонецПроцедуры

lazy
Открыть форму подбора модально?
dimas_downloader
Цитата(lazy @ 16.4.2008, 13:17) *

Открыть форму подбора модально?


Форму то подбора можно открыть модально, но как сделать, чтобы нужное значение можно было выбрать, а не открывалась фоорма редектирования этой позиции?
Akulina
В форме списка справочника контрагентов надо прописать условие
Код

Если ПустоеЗначение(Форма.Параметр)=1 Тогда
//т.е. форма открывается не для подбора
Форма.ОбработкаВыбораСтроки(0);
Иначе //форма открыта для подбора
Форма.ОбработкаВыбораСтроки(1);
КонецЕсли;


Что-то типа этого.


!НЕ ЗАБЫВАЕМ про тэг [code]
WaRDeR
1. Если клиентов не слишком много то можно сформировать список значений, а потом выбирать из них.
2. Можно предварительно просмотреть всех загружаемых клиентов, потом попросить указать на них соответствие (ТЗ), потом выполнять загрузку.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.