Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 07:35

1С УПП не работает обработка по загрузки в отчет списка значений отбора из Excel

Автор jyurik, 14 мар 2019, 15:21

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

jyurik

Добрый день
У меня есть обработка «ФормаНастройка» я ее добавил в конфигурацию, а на форме внешнего отчета установил кнопку для вызова этой формы. Данная обработка должна подгрузит список из excel файла в форму настройки отчета значения в виде списка. В итоге вместо нужных мне названий в строке написано: <Пустое значение>.



jyurik

Не получается картинку добавить

Добавлено: 14 мар 2019, 15:34


Код ФормаНастройка:


Процедура ОсновныеДействияФормыОК(Кнопка)

   Закрыть();
   
КонецПроцедуры

Функция ПолучитьПараметрыЗагрузки(Элемент)      
   рекв  = Неопределено;
   ФормаВыбораРеквизита = Обработки.м_ФормаНастройка.ПолучитьФорму("ФормаВыбораРеквизита");
   рекв = ФормаВыбораРеквизита.ОткрытьМодально();
   Возврат рекв;     
КонецФункции

Процедура ЗагрузитьДанные(СтрукПараметров,РеквизитДляЗаполнения)
   Попытка
      Эксель = Новый COMОбъект("Excel.Application");
   Исключение
      Сообщить("Ошибка работы с Excel!");
      Возврат;
   КонецПопытки;
   Книга   = Эксель.Workbooks.Open(СтрукПараметров.Файл);

   ТекЛист = Книга.WorkSheets(1);
   Область = ТекЛист.Cells.CurrentRegion;
   КолвоСтрок  = Область.Rows.Count;

   
   РеквизитДляЗаполнения.Очистить();
   

   Для Инд = СтрукПараметров.Строка по КолвоСтрок Цикл
         Значение = СокрЛП(ТекЛист.Cells(Инд, СтрукПараметров.Колонка).Value);
         Если СтрукПараметров.Реквизит = Неопределено Тогда
            РеквизитДляЗаполнения.Добавить(Значение);
         Иначе
         КонецЕсли;          
   КонецЦикла;
   Эксель.Quit();
КонецПроцедуры

Процедура ОтборЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка)

   Если ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.ВСписке или
       ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.ВСпискеПоИерархии или
       ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.НеВСписке или
       ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.НеВСпискеПоИерархии Тогда

      СтандартнаяОбработка = Ложь;
       СтрукПараметров = ПолучитьПараметрыЗагрузки(ЭлементыФормы.Отбор.ТекущаяСтрока.ЗначениеС);       
      
      Если  СтрукПараметров =  Неопределено Тогда
         Возврат;
      КонецЕсли;
      ЗагрузитьДанные(СтрукПараметров,ЭлементыФормы.Отбор.ТекущаяСтрока.Значение);
   КонецЕсли;
   
КонецПроцедуры



Код ФормаВыбораРеквизита:


Процедура КнопкаВыполнитьНажатие(Кнопка)
   ВозвратПарам = Новый Структура;
   ВозвратПарам.Вставить("Файл",ЭлементыФормы.ФайлЗагрузки.Значение);
    ВозвратПарам.Вставить("Реквизит",?(ЭлементыФормы.ИспользоватьРеквизит.Значение,ЭлементыФормы.Реквизит.Значение,Неопределено));
   ВозвратПарам.Вставить("Колонка",ЭлементыФормы.Колонка.Значение);
   ВозвратПарам.Вставить("Строка",ЭлементыФормы.Строка.Значение);
   
   Закрыть(ВозвратПарам);
КонецПроцедуры

Процедура ФайлЗагрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)
   ДиалогФыбораФайла                        =   Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);   
   ДиалогФыбораФайла.Фильтр                  =   "Файл данных (*.XLS)|*.XLS|Все|*.*";
   ДиалогФыбораФайла.Заголовок                  =   "Выберите файл Excel";
   ДиалогФыбораФайла.ПредварительныйПросмотр      =   Ложь;
   ДиалогФыбораФайла.Расширение               =   "";
   ДиалогФыбораФайла.ИндексФильтра               =   0;
   ДиалогФыбораФайла.ПроверятьСуществованиеФайла   =   Ложь;
   ДиалогФыбораФайла.Выбрать();
   
    ЭлементыФормы.ФайлЗагрузки.Значение = ДиалогФыбораФайла.ПолноеИмяФайла;
КонецПроцедуры

Процедура ИспользоватьРеквизитПриИзменении(Элемент)
   Если Элемент.Значение  Тогда
       ЭлементыФормы.НадписьРеквизит.Видимость = Истина;
      ЭлементыФормы.Реквизит.Видимость = Истина;
    Иначе
       ЭлементыФормы.НадписьРеквизит.Видимость = ложь;
      ЭлементыФормы.Реквизит.Видимость = ложь;
   КонецЕсли;
КонецПроцедуры

  ЭлементыФормы.Строка.Значение = 2;
  ЭлементыФормы.Колонка.Значение = 1;

Добавлено: 14 мар 2019, 15:43



Добавлено: 14 мар 2019, 15:45



antoneus

В excel файле что находится? А в списке что должно находиться?

jyurik

Цитата: antoneus от 14 мар 2019, 15:54
В excel файле что находится? А в списке что должно находиться?

В excel один столбец со списком контрагентов, соответственно он же должен попасть в отбор - списком

LexaK

ЦитироватьВ excel один столбец со списком контрагентов
скорее всего это просто наименование контрагента, (тип:строка)

вот вы эту "строку" получаете и помещаете в список где должны быть ссылки!

(только для вас) вам можно попробовать сделать минимальное изменение настройки
при условии что имена контрагентов совпадают с Екселевскими

там где у вас отбор сделать
Контрагент.Наименование В списке ВашСписок
т.е. делать отбор не по ссылке контрагентов а по наименованию
и в Параметрах укажите что ваш список значений содержит элементы Тип: Строка
(попробуйте должно заработать)

или если все по правильному делать, при (или после) загрузки данных из Екселя, ищите Контрагентов и помещайте ссылки в ваш список.

если помогло нажмите: Спасибо!

jyurik

Цитата: LexaK от 14 мар 2019, 16:19
ЦитироватьВ excel один столбец со списком контрагентов
скорее всего это просто наименование контрагента, (тип:строка)

вот вы эту "строку" получаете и помещаете в список где должны быть ссылки!

(только для вас) вам можно попробовать сделать минимальное изменение настройки
при условии что имена контрагентов совпадают с Екселевскими

там где у вас отбор сделать
Контрагент.Наименование В списке ВашСписок
т.е. делать отбор не по ссылке контрагентов а по наименованию
и в Параметрах укажите что ваш список значений содержит элементы Тип: Строка
(попробуйте должно заработать)

или если все по правильному делать, при (или после) загрузки данных из Екселя, ищите Контрагентов и помещайте ссылки в ваш список.


Спасибо за ответ
буду пробовать
Добавлено: 14 мар 2019, 16:41


там где у вас отбор сделать
Контрагент.Наименование В списке ВашСписок
т.е. делать отбор не по ссылке контрагентов а по наименованию
и в Параметрах укажите что ваш список значений содержит элементы Тип: Строка
(попробуйте должно заработать)

или если все по правильному делать, при (или после) загрузки данных из Екселя, ищите Контрагентов и помещайте ссылки в ваш список.

[/quote]
Я добавил эту обработку в конфу, чтобы этот отбор был универсален для разных вариантов отчетов (контрагент, заказ или еще что-то), а так если указать только Контрагент.Наименование уже не универсален
Как же доработать для универсальности?

LexaK

ЦитироватьКак же доработать для универсальности?
надо идти от простого к сложному! :befhbt:

добейтесь сначала что бы у вас этот (один) вариант заработал, потом второй, (3,4,...)
а затем уже и универсальный легко сделаете.
если помогло нажмите: Спасибо!

jyurik

Цитата: LexaK от 14 мар 2019, 16:19
ЦитироватьВ excel один столбец со списком контрагентов
там где у вас отбор сделать
Контрагент.Наименование В списке ВашСписок
т.е. делать отбор не по ссылке контрагентов а по наименованию
и в Параметрах укажите что ваш список значений содержит элементы Тип: Строка
(попробуйте должно заработать)

я правильно понял Вас:

Процедура ОтборЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка)

   Если ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.Контрагент.Наименование или
       ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.ВСпискеПоИерархии или
       ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.НеВСписке или
       ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.НеВСпискеПоИерархии Тогда

      СтандартнаяОбработка = Ложь;
       СтрукПараметров = ПолучитьПараметрыЗагрузки(ЭлементыФормы.Отбор.ТекущаяСтрока.ЗначениеС);       
     
      Если  СтрукПараметров =  Неопределено Тогда
         Возврат;
      КонецЕсли;
      ЗагрузитьДанные(СтрукПараметров,ЭлементыФормы.Отбор.ТекущаяСтрока.Значение);
   КонецЕсли;
   
КонецПроцедуры

LexaK

это что?
ЦитироватьЕсли ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.Контрагент.Наименование или
вы вообще понимаете что вы пишите?
если помогло нажмите: Спасибо!

jyurik

Цитата: LexaK от 15 мар 2019, 12:13
это что?
ЦитироватьЕсли ЭлементыФормы.Отбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.Контрагент.Наименование или
вы вообще понимаете что вы пишите?


Вы меня извините, я не настолько силен в этом вопросе и не совсем понял Вас, как это переделать

Теги:

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

Рейтинг@Mail.ru

Поиск