Имя: Пароль:
1C
1С v8
Отбор стран в столбце документа Excel
↓ (Волшебник 25.10.2024 09:48)
0 iiwanc
 
25.10.24
08:10
Здравствуйте!
Только изучаю 1С, делаю задание из книги.
Загружаю данные из документа Excel.
&НаСервере
Процедура ЗагрузитьДанныеНаСервере(АдресВХ)
	
	ТабДок = Новый ТабличныйДокумент;
	ДанныеВХ=ПолучитьИзВременногоХранилища(АдресВХ); //получаем данные по указанному адресу из ВХ
	ПутьКФайлуНаСервере=ПолучитьИмяВременногоФайла("xlsx");
	ДанныеВХ.Записать(ПутьКФайлуНаСервере);
	
	Попытка
		ТабДок.Прочитать(ПутьКФайлуНаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
	Исключение
		Сообщение = Новый СообщениеПользователю; 
		Сообщение.Текст="Не удалось прочитать указанный файл!" + ОписаниеОшибки();
		Сообщение.Сообщить();
		Возврат;
	КонецПопытки;
	
	КоличествоСтрок=ТабДок.ВысотаТаблицы;
	
	ДанныеФайла = Новый ТаблицаЗначений;
	ДанныеФайла.Колонки.Добавить("Наименование");
	ДанныеФайла.Колонки.Добавить("ИНН");
	ДанныеФайла.Колонки.Добавить("Телефон");
    ДанныеФайла.Колонки.Добавить("КластерДоставки");
	ДанныеФайла.Колонки.Добавить("ТНВЭД");
	
	Для НомерСтроки=2 По КоличествоСтрок Цикл
		СтрокаДанных=ДанныеФайла.Добавить();
		СтрокаДанных.Наименование=ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки, "ЧГ=0")+"C"+13).ТекущаяОбласть.Текст;
		СтрокаДанных.ИНН=ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки, "ЧГ=0")+"C"+14).ТекущаяОбласть.Текст;
        СтрокаДанных.Телефон=ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки, "ЧГ=0")+"C"+25).ТекущаяОбласть.Текст; 
		СтрокаДанных.КластерДоставки=ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки, "ЧГ=0")+"C"+27).ТекущаяОбласть.Текст;
		СтрокаДанных.ТНВЭД=ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки, "ЧГ=0")+"C"+35).ТекущаяОбласть.Текст;
	КонецЦикла; 
	
	ЗагруженныеДанные.Загрузить(ДанныеФайла);
		
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
	ДвоичныеДанныеФайла=Новый ДвоичныеДанные(Файл); //получаем двоичные данные нашего файла
	АдресВременногоХранилища=ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла); //помещаем двоичные данные во временное хранилище
	ЗагрузитьДанныеНаСервере(АдресВременногоХранилища);
КонецПроцедуры

&НаСервере
Процедура СоздатьКонтрагентовНаСервере() 
	Для каждого Контрагент Из ЗагруженныеДанные Цикл    
			НовыйЭлемент=Справочники.Контрагенты.СоздатьЭлемент();
			НовыйЭлемент.Наименование=Контрагент.Наименование;
			НовыйЭлемент.ИННКлиент=Контрагент.ИНН;
			НовыйЭлемент.ТелефонКлиент=Контрагент.Телефон;
			НовыйЭлемент.КластерДоставки=Контрагент.КластерДоставки; 
			НовыйЭлемент.ТНВЭД=Контрагент.ТНВЭД;
			НовыйЭлемент.Записать();
	КонецЦикла;
КонецПроцедуры


В столбце КластерДоставки указаны города и страны. Нужно загрузить строки, содержащие только страны.
Создал справочник Страны, где перечислил страны.

Не подскажите, как это реализовать?
Понимаю, что нужно сравнить содержимое в столбце Excel со справочником Страны, и если есть совпадение, загрузить эти совпадения в базу.
Но вот как это реализовать в коде, не смогу сообразить.
Если нужны дополнительные данные, то готов предоставить.
Подскажите, пожалуйста.
Буду благодарен советам.
1 Волшебник
 
25.10.24
08:11
НайденнаяСтрана = Справочник.Страны.НайтиПоНаименованию(название, Истина);
Если НайденнаяСтрана.Пустая() Тогда
  // создать элемент
КонецЕсли;
2 Мультук
 
25.10.24
08:31
(0) (1)

Я бы еще обработал условие на пустую строку СокрЛП(название) <> ""

Функция ЭтоСтрана(название)
  Если ПустаяСтрока(название) Тогда
      Возврат Ложь;
  КонецЕсли; 


  НайденнаяСтрана = Справочник.Страны.НайтиПоНаименованию(название, Истина);
  Возврат не НайденнаяСтрана.Пустая();

КонецФункции
3 Мультук
 
25.10.24
08:37
(0)

P.S.

Для обучения код из (2) нормален.
Если (во взрослой жизни) нужно будет грузить сотни тыс строк (а может и раньше) -- это код нужно будет выбросить на помойку.

Переписать на запрос и не для каждой строки, а сразу для всего набора.
Но это уже потом

Для каждого Контрагент Из ЗагруженныеДанные Цикл   


Привыкайте называть итераторы строк "Строка", "СтрокаДанные" и т.п.
Иначе будете сами путаться.
Особенно неприятно будет, если у вас на форме будет реквзит формы с именем "Контрагент"
Вы его будете перезатирать
4 программистище
 
25.10.24
08:45
Человек 12 лет на форуме и только сейчас начал изучать 1с
и даже не знает как сделать проверку
очень странно
5 Волшебник
 
25.10.24
08:51
(4) Это бот, а ник он угнал на днях
6 maxab72
 
25.10.24
09:01
(5) а может кто-то наклепал 12 лет назад 100500 ников на Мисте про запас, а теперь ими торгует?
(3) "Привыкайте называть итераторы строк "Строка", "СтрокаДанные" и т.п." а меня учили подзатыльниками иначе:
Для каждого стрЗагруженныеДанные Из ЗагруженныеДанные Цикл
Тогда, если несколько вложенных циклов, понятнее что у тебя за строка.
7 iiwanc
 
25.10.24
09:02
(4) какое имеет отношение моя жизнь и вопрос по теме?
мне нужно предварительно рассказать драму жизни, чтобы задать свой вопрос?
8 craxx
 
25.10.24
09:16
(0) Твоя тема от 2019 года
500 ошибка при запуске сервера 1С
"Простите, если не сюда пишу.
1С только начинаю изучать."
Это ты 5 лет только начинаешь изучать?
9 программистище
 
25.10.24
09:19
(8) с тех пор все начинает изучать и никак не закончит начинать
10 Гена
 
25.10.24
09:34
Злые вы... недобрые...
Автору нужны деньги, а программист 1С сейчас в топе. Вот он и решил на старости лет переквалифицироваться. Кстати, фотку в профиле видели? Такого кекса аватарят те, кто на сексе повёрнуты. Не удивлюсь, если автор в сексшопе работает.
11 Волшебник
 
25.10.24
09:36
(10) Фотка явно сгенерированная
12 Гена
 
25.10.24
09:39
Упс! Поиск по нику и городу выдал:
https://www.weblancer.net/users/iiwanc/
13 Волшебник
 
25.10.24
09:43
(12) на фото американский актёр Закари Джон Куинто
wiki:Куинто,_Закари
14 Гена
 
25.10.24
09:44
(13) Да это понятно. По психологии данный тип людей не любит свои фото и всегда выкладывает чужие.
15 Гена
 
25.10.24
09:45
Я к чему... добрее надо... а вы сразу набросились на человека... как волки...
Мякше надо... тоньше...
16 Волшебник
 
25.10.24
09:46
(12) А вот вам ещё информация к размышлению.

Ссылку давать не буду, чтобы не продвигать мошенников.
17 Волшебник
 
25.10.24
09:47
(15) Он сгенерировал модуль и не может проверить на пустую ссылку? Пошёл он в жопу, такой красивый....
18 Гена
 
25.10.24
09:49
(17) Нет такого слова в русском языке...
19 yurikmellon2
 
25.10.24
09:56
(16) смешные люди... Нафига использовать чью-то реальную фотке, если можно легко сгенерить сеткой
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший