Помогите с учебной задачей

1. KaterinaJun 23.11.23 10:13 Сейчас в теме
Добрый день! Помогите разобраться с учебной задачей начинающему разработчику.
Нужно сделать внешнюю обработку по загрузке эксель файла с контрагентами. Обработка работает, но есть нюанс, который не доходит до меня.
В поле ТЧ_НайденКонтрагент (Булево) должна ставиться галка если контрагент в базе найден, а строки с ненайденными контрагентами должны быть красного цвета. На каком этапе это делается, я проверяю по ИНН, сообщение что контрагент не найден выводится,а вот поле не заполняется. И в той ли процедуре я это делаю?
[&НаСервере
Процедура ЗагрузитьНаСервере()

МассивИНН = Новый Массив ;
Для Каждого СтрокаДанных Из Объект.ТЧ_Данные Цикл
МассивИНН.Добавить(Число(СтрокаДанных.ИНН));
КонецЦикла;

Запрос = Новый Запрос ;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ИНН КАК ИНН
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН В (&МассивИНН)";

Запрос.УстановитьПараметр( "МассивИНН" ,МассивИНН);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаКонтрагентов = РезультатЗапроса.Выгрузить();

Для Каждого СтрокаДанных Из Объект.ТЧ_Данные Цикл

НайденныйКонтрагент = ТаблицаКонтрагентов.Найти(Число(СтрокаДанных.ИНН));
Если НайденныйКонтрагент <> Неопределено Тогда

Продолжить
Иначе
Если НайденныйКонтрагент = Неопределено Тогда

ЭтаФорма.Элементы.ТЧ_ДанныеНайденКонтрагент = Истина;
Сообщить("Контрагент не найден : ИНН - " + СтрокаДанных.ИНН);
КонецЕсли ;
;
КонецЕсли;
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент() ;
НовыйКонтрагент.НаименованиеПолное = СтрокаДанных.НазваниеКонтрагента;
НовыйКонтрагент.ИНН = СтрокаДанных.ИНН;
НовыйКонтрагент.КПП = СтрокаДанных.КПП;
НовыйКонтрагент.КонтактнаяИнформация.КонтактнаяИнформация.ОсновнойМенеджер= СтрокаДанных.ОсновнойМенеджер;
НовыйКонтрагент.КонтактнаяИнформация.ФактическийАдрес = СтрокаДанных.ФактическийАдрес;

НовыйКонтрагент.Записать();
КонецЦикла;

Сообщить ( "Создание контрагентов завершено !" );
]
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. Said-We 23.11.23 16:06 Сейчас в теме
(1) Вот этот кусок плохой. Вы в цикле что-то ищите.
...
Запрос.УстановитьПараметр( "МассивИНН" ,МассивИНН);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаКонтрагентов = РезультатЗапроса.Выгрузить();
Для Каждого СтрокаДанных Из Объект.ТЧ_Данные Цикл
     НайденныйКонтрагент = ТаблицаКонтрагентов.Найти(Число(СтрокаДанных.ИНН));
...

Проще засунуть все ИНН в ТЗ и передать в запрос ТЗ и сразу по ТЗ получить всех найденных и не найденных Контрагентов. А потом раскрашивать их как угодно. Поиска в цикле не будет.
9. KaterinaJun 23.11.23 16:47 Сейчас в теме
(8)Спасибо за коммент, но я еще не очень понимаю как это сделать проще, поэтому пока так.Если не очень сложно покажите пример написания кода пожалуйста
2. antz 23.11.23 10:20 Сейчас в теме
вместо

ЭтаФорма.Элементы.ТЧ_ДанныеНайденКонтрагент = Истина; 


надо

СтрокаДанных.НайденКонтрагент = Истина


хотя колонка называется как-то нелогично, надо бы ее назвать КонтрагентНеНайден
3. KaterinaJun 23.11.23 10:22 Сейчас в теме
(2) Спасибо, сейчас попробую переименовать и переделать.)))
4. user1880116 23.11.23 11:25 Сейчас в теме
(2)
надо бы ее назвать КонтрагентНеНайден
Поубивал бы за отрицание в идентификаторе.
"Если Не КонтрагентНеНайден", ага.
KaterinaJun; FatPanzer_Job; +2 Ответить
5. soft_wind 23.11.23 11:46 Сейчас в теме
(4) этот программист из той эры когда в самой 1С была функция ЗначениеНеЗаполнено(..)
(тот еще гимор был)
12. Said-We 24.11.23 01:43 Сейчас в теме
(5)
этот программист из той эры когда в самой 1С была функция ЗначениеНеЗаполнено(..)
(тот еще гимор был)
Это про функцию:
Функция ЗначениеНеЗаполнено(пЗначение)
          Возврат НЕ ЗначениеЗаполнено(пЗначение)
КонецФункции
6. KaterinaJun 23.11.23 11:58 Сейчас в теме
Работает вариант "Контрагент найден" - галочки ставит, но после заполнения табличной части выходит ошибка -

"Преобразование значения к типу Число не может быть выполнено
{ВнешняяОбработка.ИмпортExcel.Форма.Форма.Форма(62)}:
Элементы.ТЧ_Данные.ТекущиеДанные.КПП = Формат(Число(СокрЛП(Excel.Cells(ТекущаяСтрока,3).Value)));" -
хотя все данные заполняются
Но КПП и ИНН выходят с пробелами, где я накосячила?
7. user1880116 23.11.23 12:26 Сейчас в теме
(6)
где я накосячила


На каках-то данных СокрЛП(Excel.Cells(ТекущаяСтрока,3).Value) возвращает значение, которое не может быть приведено к числу. Ваш К.О.
10. KaterinaJun 23.11.23 18:26 Сейчас в теме
Галочки в нужные поля ставит, цветом красит(спасибо за помощь). Но остался вопрос - это обработка для УТ11, в табличной части есть поля - Основной менеджер и фактический адрес, а в УТ в справочники Контрагенты таких полей нет. Вопрос - как внести эти данные и каким образом это связано с КонтактнойИнформацией справочника Контрагенты и БСП.
Извините за сумбур, просто сама не очень понимаю
11. Said-We 24.11.23 01:34 Сейчас в теме
(9) Примеров полно. Поищите поиском "запрос к таблице значений в 1С" или как-то так. Там самое главное, что бы ТЗ была с правильными типами колонок. Проще такую таблицу и создавать с помощью запроса.
Например: "Выбрать т.ИНН из Справочник.Контрагенты ГДЕ ЛОЖЬ". Что бы не думать какого типа ИНН, какой длины это строка и какой она будет завтра.
Запрос выполнить и выгрузить в ТЗ. Заполняете ТЗ. И передаете параметром в запрос. А далее простое левое соединение с тем же справочником контрагенты по ИНН. Контрагента берете максимального или минимального. Контрагенты могут иметь одинаковый ИНН, но разные КПП, например. Вам нужен сам факт нашелся или нет, поэтому не важно какой из контрагентов это будет. Там где контрагент не найдется будет NULL.

(10) Тот кто давал задание должен был дать вводные. И убедиться что вводные понятны.
С БСП это связано тем, что в БСП есть функционал работы с адресами. Контактную информацию можно поискать в табличных частях разных справочников - в том числе и контрагентов.
Основной менеджер - это контактное лицо.

В старых конфигурациях адреса хранились в одном регистре сведений, что более правильно. Но это не дает возможности использовать универсально для любого объекта без изменения этого регистра (составной тип на перечень объектов) и включения возможности изменения (многие называют это снятие с поддержки). Поэтому в новых конфигурациях занимаются копипастом структуры.

З.Ы. Кашеварам наверное грустно было бы видеть копипаст структуры (даже 20 лет назад, но кто их сейчас найдет этих кашеваров Cashe - хотя сама система уж очень шустрая, на тот момент конкурент Oracle на Биг датах того времени). У них ещё тогда была возможность объявлять сложные типы из нескольких полей и назначать этот тип реквизиту. По факту класс для хранения данных без привязки к объекту. Отдельно от объекта не хранится. Как только назначаешь реквизиту такой тип, то у объекта появляется сразу все "подполя". Меняешь тип и у всех что-то меняется.
13. KaterinaJun 24.11.23 18:06 Сейчас в теме
(8) Подскажите, заполнение справочника контрагентов должно проходить в процедуре ЗагрузитьНаСервере или нужно писать отдельной процедурой?
вот кусок кода из процедуры ЗагрузитьНаСервере-

НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = СтрокаДанных.НазваниеКонтрагента;
НовыйКонтрагент.Партнер.Наименование = Справочники.Партнеры.НайтиПоРеквизиту("ИНН");
НовыйКонтрагент.Партнер.Наименование = СсылкаНаПартнеры.ПолучитьОбъект();
НовыйКонтрагент.Партнер.Наименование = СтрокаДанных.НазваниеКонтрагента ;
НовыйКонтрагент.Партнер.Наименование.Записать();
НовыйКонтрагент.ИНН = СтрокаДанных.ИНН;
НовыйКонтрагент.КПП = СтрокаДанных.КПП;

НовыйКонтрагент.Партнер.ОсновнойМенеджер = СтрокаДанных.ОсновнойМенеджер;
//НовыйКонтрагент.Партнер.КонтактнаяИнформация. = СтрокаДанных.ФактическийАдрес;

уверена,что где-то ошибка. Подскажите где...пожалуйста .И если несложно подскажите алгоритм загрузки данных в справочник
14. Said-We 24.11.23 19:24 Сейчас в теме
(13) Для начала почитать про типы данных. И какие типы данных возвращают те или иные методы. Разобраться что такое объект и что такое ссылка. Есть ли у строки (наименование это строка) методы. В питоне есть. Так как в Питоне строка по факту это класс. В 1С, с точки зрения программиста 1С, строка это простейший тип данных.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот