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

Доработка Обработки

Автор Erkhan, 15 мар 2023, 14:38

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

Erkhan

Дорогие коллеги помогите пожалуйста разобраться с кодом. Мне нужно загруженные файлы из Excel положить табл часть. И вывести в табл часть из запроса одинаковые с контрагентами в файле excel контрагенты из справочника контрагенты.
Написал вот такую процедуру:
Процедура ДобавитьНажатие(Элемент)
    Попытка
        Ексел = Новый COMОбъект("Excel.Application");
        Ексел.Workbooks.Open(ФайлЭксель);
        ТекЛист  = Ексел.Worksheets(НомерЛиста);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
   
    //Для Сч=ПерваяСтрока по НижняяСтрока цикл
    //    Попытка
    //        НовТЗ=ТЗ.Добавить();
    //        НовТЗ.Код= СокрЛП(ТекЛист.Cells(Сч, 1).Value);
    //        НовТЗ.Наименование= ТекЛист.Cells(Сч, 2).Value;
    //        НовТЗ.Харка= ТекЛист.Cells(Сч, 3).Value;
    //        НовТЗ.НаименованиеКЗ= ТекЛист.Cells(Сч, 4).Value;
    //        НовТЗ.ХаркаКЗ= ТекЛист.Cells(Сч, 5).Value;
    //    Исключение
    //        Сообщить(ОписаниеОшибки());
    //    КонецПопытки;
    //КонецЦикла;
   
    Для Сч=ПерваяСтрока по НижняяСтрока цикл
        Попытка
            НовТЗ=ТЗ.Добавить();
            //НовТЗ.КодАМГ= Формат(Число(СтрЗаменить(СокрЛП(ТекЛист.Cells(Сч, 2).Value)," ","")),"ЧГ=0"); ;
            НовТЗ.НаименованиеКЗ= ТекЛист.Cells(Сч, 2).Value;
            //НовТЗ.НомерСтроки = Формат(Число(СтрЗаменить(СокрЛП(ТекЛист.Cells(Сч, 3).Value)," ","")),"ЧГ=0"); ;
            //НовТЗ.Харка= ТекЛист.Cells(Сч, 3).Value;
            //НовТЗ.НаименованиеКЗ= ТекЛист.Cells(Сч, 4).Value;
            //НовТЗ.ХаркаКЗ= ТекЛист.Cells(Сч, 5).Value;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
   
    Попытка
        Ексел.Quit();
    Исключение
    КонецПопытки;
    //Предупреждение("Данные загружены в таблицу",10);
    Запрос1= Новый Запрос("ВЫБРАТЬ
                          |    Контрагенты.Ссылка КАК Ссылка,
                          |    Контрагенты.Наименование КАК Наименование
                          |ИЗ
                          |    Справочник.Контрагенты КАК Контрагенты
                          |ГДЕ
                          |    Контрагенты.Наименование = &Наименование");
    //ТЗ.Очистить();
    Найдено=0;
    Для Каждого текС Из ТЗ Цикл
        Запрос1.УстановитьПараметр("Наименование", НовТЗ.НаименованиеКЗ);
        Выборка1=Запрос1.Выполнить().Выбрать();
        Если Выборка1.Следующий() Тогда
            текС.Наименование = Выборка1.Ссылка;
        КонецЕсли;
    КонецЦикла;
    Сообщить("Обработано строк: "+Строка(ТЗ.Количество())+"; из них найдено кодов: "+Строка(Найдено));
   
КонецПроцедуры

Что здесь не так потому что колонка табл части где должны быть контрагенты из запроса выводит пустое значение?

Kvark5d

Цитата: Erkhan от 15 мар 2023, 14:38Запрос1.УстановитьПараметр("Наименование", НовТЗ.НаименованиеКЗ);
заменить на
Запрос1.УстановитьПараметр("Наименование", текС.НаименованиеКЗ);

Kvark5d

Erkhan, еще лучше сразу при заполнении данных из Excel заполнять
НовТЗ.Наименование= Справочники.Контрагенты.НайтиПоНаименованию(НовТЗ.НаименованиеКЗ,истина);

Erkhan

Kvark5d, спасибо большое

Erkhan

Kvark5d, а еще такой вопрос я вот получил эти данные теперь мне надо заменить значения реквизита "видпоставщика" на "рекомендовано" где Справочники.Контрагенты = ФайлExcel.НаименованиеКонтрагентов

Kvark5d

Цитата: Erkhan от 15 мар 2023, 14:58Kvark5d, а еще такой вопрос я вот получил эти данные теперь мне надо заменить значения реквизита "видпоставщика" на "рекомендовано" где Справочники.Контрагенты = ФайлExcel.НаименованиеКонтрагентов

Вопрос вообще не понятен. Что заменить? Где заменить? Условия замены?

Erkhan

Kvark5d, Для каждого Контр из Справочники.Контрагенты Цикл
      Для каждого тз1 Из ТЗ Цикл
         Если Контр = тз1.НаименованиеКЗ Тогда
            Контр.ВидПоставщика = Перечисления.ВидыПоставщиков.РекомендованныйПоставщик;
         КонецЕсли;
      КонецЦикла;
   КонецЦикла;
вот что я сейчас пытаюсь делать, так может станет понятнее

Kvark5d

Erkhan,
На сколько я понял смысл следующий:
Первая часть:
Заполняем ТЗ данными из Excel. Для контрагентов из Excel которым по наименованию нашелся соответствующий контрагент из справочника заполняем колонку Наименование (в ней будет ссылка на справочник Контрагенты). Это сделано.
Вторая часть:
Если в нашей ТЗ заполнена колонка Наименование (т.е. в справочнике нашелся (или был выбран позже руками) контрагент), то этому контрагенту надо изменить реквизит.

//СписокКонтрагентов - будет содержать всех найденных контрагентов
СписокКонтрагентов=ТЗ.Скопировать();
СписокКонтрагентов.Свернуть("Наименование");
Для каждого СтрСписокКонтрагентов из СписокКонтрагентов Цикл
   Если НЕ ЗначениеЗаполнено(СтрСписокКонтрагентов.Наименование) Тогда
      продолжить;
   КонецЕсли;

   Контрагент=СтрСписокКонтрагентов.Наименование.ПолучитьОбъект(); //получим объект справочника контрагента
   Контрагент.ВидПоставщика = Перечисления.ВидыПоставщиков.РекомендованныйПоставщик;    // установим нужное значение
   Контрагент.Записать(); // запишем изменения
КонецЦикла;

Afinogen

НайтиПоНаименованию так себе вариант
 B)
ЦитироватьСправочникМенеджер.<Имя справочника> (CatalogManager.<Catalog name>)
НайтиПоНаименованию (FindByDescription)
Синтаксис:
НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)
Параметры:
<Наименование> (обязательный)
Тип: Строка.
Строка, содержащая искомое наименование.
<ТочноеСоответствие> (необязательный)
Тип: Булево.
Определяет режим поиска по полному соответствию.
Поиск будет успешным, если строка поиска: в случае значения параметра Ложь - будет соответствовать левой части наименования; в случае значения параметра Истина - будет полностью совпадать с наименованием (за исключением "хвостовых" пробелов в наименовании).
Значение по умолчанию: Ложь.
<Родитель> (необязательный)
Тип: СправочникСсылка.<Имя справочника>.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)
Тип: СправочникСсылка.<Имя справочника>.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Возвращаемое значение:
Тип: СправочникСсылка.<Имя справочника>, Неопределено.
Ссылка на найденный элемент справочника.
Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.
Если для справочника наименование не задано (длина = 0) и поиск выполняется по полному соответствию, то будет возвращено Неопределено.
Описание:
Осуществляет поиск элемента по его наименованию.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Если существует несколько элементов с указанным наименованием, то будет найден только один из них.

Erkhan

Kvark5d, можете подсказать где можно почитать про расшифровку ячеек отчета?

Теги:

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

Рейтинг@Mail.ru

Поиск