Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 июн 2021, 20:56

Программный код не работает в управляемом приложении.

Автор anonim1, 29 июн 2016, 13:34

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

anonim1

Доброго дня, помогите пожалуйста решить проблему. Я создал внешнюю обработку, которая должна делать запрос на выборку данных из 1C управление торговлей и экспортировать эти данные в эксель.Сначала я сделал внешнюю обработку для обычного приложения, все работало нормально, но у меня потребовали сделать так, чтобы работало в управляемом приложении. И  возникла проблема, если сделать на клиенте, возникает ошибка  "запрос не определено", если на сервере, то "режим диалога не определено", пробовал разделить процедуры, но запутался окончательно и появлялось еще больше ошибок. Подскажите пожалуйста, как переделать программный код для управляемого приложения:
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();
      Лист=Книга.WorkSheets(1);
      
      Запрос=Новый Запрос;
      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   ЗаказКлиента.Дата,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1,
                   |   ЗаказКлиента.СуммаДокумента
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков" ;
Выборка = Запрос.Выполнить().Выбрать();
     НомерСтроки=1;   
ВсегоВыборка = Выборка.Количество();
Пока Выборка.Следующий() Цикл
Состояние(Строка(НомерСтроки) + "/" + Строка(ВсегоВыборка));
Лист.Cells(НомерСтроки, 1).Value =Выборка.Номер;
Лист.Cells(НомерСтроки, 2).Value =Выборка.Дата;
Лист.Cells(НомерСтроки, 3).Value =Выборка.Код;
Лист.Cells(НомерСтроки, 4).Value =Выборка.Артикул;
//Лист.Cells(НомерСтроки, 5).Value = Выборка.Бренд;
Лист.Cells(НомерСтроки, 6).Value =Выборка.Наименование;
Лист.Cells(НомерСтроки, 7).Value =Выборка.ЦенаВключаетНДС1;
Лист.Cells(НомерСтроки, 8).Value =Выборка.СуммаДокумента;
//Лист.Cells(НомерСтроки, 9).Value = Выборка.Доставка;
//Лист.Cells(НомерСтроки, 10).Value = Выборка.ИтогоСебестоимость;
НомерСтроки=НомерСтроки+1;
КонецЦикла;               
диалог= новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

если диалог.Выбрать() тогда
               Попытка               
   Книга.SaveAs(диалог.ПолноеИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Эксель.Application.Quit();
КонецЕсли;
//Эксель.Application.Quit();

КонецПроцедуры
С уважением, Игорь.

vitasw

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

cska-fanat-kz

выбор файла - это интерфейсная задача взаимодействия с пользователем.
ее отсюда "выкусываем".
просто перед выгрузкой делаете заполнение строкового реквизита (например назовем ИмяФайла).
потом когда уже дойдете до сохранения в Эксель, имя файла у вас уже будет наготове.

непосредственно выборка данных и подключение к Экселю - это серверный код.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

anonim1

Благодарю за ответ, у меня возник еще 1 вопрос, как установить параметр запроса в управляемом приложении? На форме имеется 2 поля типа дата: начало периода и конец периода, чтобы запрос осуществлялся между этими датами. В обычном приложении обычно пишу ИмяПеременной=ЭлементыФормы.ИмяЭлементаФормы,  но в управляемом возникает ошибка, переменная Элементы формы не определена. Пробовал писать вместо ЭлементыФормы Объект, результат тот же, подскажите пожалуйста, как задать параметр запроса элемент формы поле дата в управляемом приложении,  ниже приведен код, где знак вопроса стоит там, где , как я полагаю, необходимо вставить ссылку на элемент формы тип дата,   
&НаСервереБезКонтекста
Процедура ВыгрузитьОтчетНаСервере()
   Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();
      Лист=Книга.WorkSheets(1);
      
Запрос=Новый Запрос;
НачалоПериода=?;
КонецПериода=?;
Запрос.УстановитьПараметр("НачалоПериода",?НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",?КонецПериода);

      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   ЗаказКлиента.Дата,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1,
                   |   ЗаказКлиента.СуммаДокумента
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков
                   |ГДЕ
                   |   ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
Выборка = Запрос.Выполнить().Выбрать();
НомерСтроки=1;   
ВсегоВыборка = Выборка.Количество();
Пока Выборка.Следующий() Цикл
//Состояние(Строка(НомерСтроки) + "/" + Строка(ВсегоВыборка));
Лист.Cells(НомерСтроки, 1).Value =Выборка.Номер;
Лист.Cells(НомерСтроки, 2).Value =Выборка.Дата;
Лист.Cells(НомерСтроки, 3).Value =Выборка.Код;
Лист.Cells(НомерСтроки, 4).Value =Выборка.Артикул;
//Лист.Cells(НомерСтроки, 5).Value = Выборка.Бренд;
Лист.Cells(НомерСтроки, 6).Value =Выборка.Наименование;
Лист.Cells(НомерСтроки, 7).Value =Выборка.ЦенаВключаетНДС1;
Лист.Cells(НомерСтроки, 8).Value =Выборка.СуммаДокумента;
//Лист.Cells(НомерСтроки, 9).Value = Выборка.Доставка;
//Лист.Cells(НомерСтроки, 10).Value = Выборка.ИтогоСебестоимость;
НомерСтроки=НомерСтроки+1;
КонецЦикла;                  
   ИмяФайла=Запрос.Выполнить().Выгрузить();
КонецПроцедуры

&НаКлиенте
Процедура ВыгрузитьОтчет(Команда)
       
   ВыгрузитьОтчетНаСервере();
    Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();

    диалог= новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

если диалог.Выбрать() тогда
               Попытка               
   Книга.SaveAs(диалог.ПолноеИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Эксель.Application.Quit();
КонецЕсли;
КонецПроцедуры

vitasw


Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск