Помогите с загрузкой данных из Эксель в 1с

1. skiopolitan 14.11.18 10:25 Сейчас в теме
Надо, чтобы загружалась 1 строчка из Эксель (203 строки) в табличную часть Товары документа Поступление (Акты, накладные) по отбору Колонка: Контрагент. Загружаются все 203 строки. Вот код и ниже скриншоты:
Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда    
		// Создание документа и заполнение реквизитов шапки
		НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
		НовыйДокумент.Дата = ТекущаяДата();
		НовыйДокумент.Контрагент = Объект.Контрагент;
		НовыйДокумент.Организация = Объект.Организация;
		НовыйДокумент.Склад = Объект.Склад;
		НовыйДокумент.ВидОперации = Объект.ВидОперации;
			//НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Информационные системы в образовании", Истина);
			//НовыйДокумент.Комментарий = "Загружено из файла " + Объект.ФайлExcel;
		// Заполнение табличной части "Товары"
		// Переменная СтрокаОтсчета - номер строки в Excel, с которой начинается заполнение
		Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл          
			НСтр = НовыйДокумент.Товары.Добавить();
			//НСтр.Валюта = НовыйДокумент.ТипЦен.ВалютаЦены;
			Для каждого СтрокаМассив из МассивКолонок Цикл 
				ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
				// Получение имени колонки
				ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
				
				Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
				
				СтавкаНДС = Excel.Cells(СтрокаОтсчета, 8).Value;
				
				Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;
								
				// Заполнение строки данными
				Если ЗначениеЗаполнено(Объект.Контрагент.Наименование) Тогда
					Объект.Контрагент =  Контрагент;
					ИначеЕсли ИмяКолонки = "Номенклатура" Тогда
						НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
					ИначеЕсли ИмяКолонки = "Количество" Тогда
						НСтр.Количество = ТекущееЗначение;
					ИначеЕсли ИмяКолонки = "Цена" Тогда
						НСтр.Цена = Значение;
					ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
						НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
					ИначеЕсли ИмяКолонки = "СчетУчета" Тогда
						НСтр.СчетУчета = ТекущееЗначение;
					КонецЕсли;
			КонецЦикла;
		КонецЦикла;
		// Запись и проведение документа
		НовыйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
		Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
	Иначе
		Сообщить("В Excel файле не достаточно данных для заполнения документа!");
	КонецЕсли;
	
	Excel.DisplayAlerts = 0; 
	Excel.Quit();
	Excel.DisplayAlerts = 1;
Показать
Прикрепленные файлы:
+
По теме из базы знаний
Найденные решения
30. acanta 14.11.18 12:18 Сейчас в теме
Напишите сразу после начала цикла все ЕСЛИ и ПРОДОЛЖИТЬ

Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда 
       Продолжить;
КонецЕсли;

Если Excel.Cells(СтрокаОтсчета, 24).Text  = 0 Тогда // например количество нулевое
    Продолжить;
КонецЕсли;


После блока условий пишите Добавитьстроку и далее по тексту
Krey_; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. _Driver_ 1 14.11.18 10:28 Сейчас в теме
Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда    
        // Создание документа и заполнение реквизитов шапки
        НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        НовыйДокумент.Дата = ТекущаяДата();
        НовыйДокумент.Контрагент = Объект.Контрагент;
        НовыйДокумент.Организация = Объект.Организация;
        НовыйДокумент.Склад = Объект.Склад;
        НовыйДокумент.ВидОперации = Объект.ВидОперации;
            //НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Информационные системы в образовании", Истина);
            //НовыйДокумент.Комментарий = "Загружено из файла " + Объект.ФайлExcel;
        // Заполнение табличной части "Товары"
        // Переменная СтрокаОтсчета - номер строки в Excel, с которой начинается заполнение
        СтрокаОтсчета = 2         
            НСтр = НовыйДокумент.Товары.Добавить();
            //НСтр.Валюта = НовыйДокумент.ТипЦен.ВалютаЦены;
            Для каждого СтрокаМассив из МассивКолонок Цикл 
                ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
                // Получение имени колонки
                ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
                
                Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
                
                СтавкаНДС = Excel.Cells(СтрокаОтсчета, 8).Value;
                
                Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;
                                
                // Заполнение строки данными
                Если ЗначениеЗаполнено(Объект.Контрагент.Наименование) Тогда
                    Объект.Контрагент =  Контрагент;
                    ИначеЕсли ИмяКолонки = "Номенклатура" Тогда
                        НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
                    ИначеЕсли ИмяКолонки = "Количество" Тогда
                        НСтр.Количество = ТекущееЗначение;
                    ИначеЕсли ИмяКолонки = "Цена" Тогда
                        НСтр.Цена = Значение;
                    ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
                        НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                    ИначеЕсли ИмяКолонки = "СчетУчета" Тогда
                        НСтр.СчетУчета = ТекущееЗначение;
                    КонецЕсли;
            КонецЦикла;
        
        // Запись и проведение документа
        НовыйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
        Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    Иначе
        Сообщить("В Excel файле не достаточно данных для заполнения документа!");
    КонецЕсли;
    
    Excel.DisplayAlerts = 0; 
    Excel.Quit();
    Excel.DisplayAlerts = 1;
Показать
+
3. YannikAlx 43 14.11.18 10:40 Сейчас в теме
Не проще все остальные просто вручную удалить из таблично части перед загрузкой?
+
4. skiopolitan 14.11.18 10:44 Сейчас в теме
Допустим надо 3 строки определенных, и чтобы отбор еще был по эксель, если вот то что я заполняю в обработке в поле контрагент = из таблицы эксель по наименованию. Допустим Контрагент: Ивс, он должен проверить колонку с контрагентами и если там есть тоже самое наименование Ивс, то вывести те строчки, где они совпадают.
+
5. YannikAlx 43 14.11.18 10:54 Сейчас в теме
Проще делать все предварительные отборы в Excel.
Отфильтруйте по этому наименованию и сохраните в отдельный файл, его потом загрузить.
Делать универсальный управляемый отбор по разным коллонкам в обработке 1С нецелесообразно.
Много трудов, а используемость практически нулевая
MikhT; +1
6. skiopolitan 14.11.18 11:03 Сейчас в теме
У меня задание такое, надо чтобы создавался документ + вносились данные в табличную часть товары определенные по отбору Контрагент.
+
7. antz 14.11.18 11:10 Сейчас в теме
    Если ЗначениеЗаполнено(Объект.Контрагент.Наименование) Тогда
                    Объект.Контрагент =  Контрагент;


Что делает этот код? В чем его смысл?
+
8. skiopolitan 14.11.18 11:15 Сейчас в теме
(7)Удалил уже код, рассмешил) А так он должен был делать отбор по Контрагенту из Экселя:
Если ЗначениеЗаполнено(Объект.Контрагент.Наименование) Тогда
Объект.Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;
+
9. antz 14.11.18 11:21 Сейчас в теме
(8) То есть, по-вашему, строчка

Объект.Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;


делает отбор по контрагенту из Экселя? Каким образом?
+
10. skiopolitan 14.11.18 11:35 Сейчас в теме
(9)А каким образом он должен быть? Помогите с кодом. Он сравнивает значения тип строка, если = Тогда что написать
Если ЗначениеЗаполнено(Объект.Контрагент.Наименование) = Excel.Cells(СтрокаОтсчета, 23).Text;
+
11. antz 14.11.18 11:39 Сейчас в теме
(10)

Получить наименование контрагента в объекте перед циклом:

НаименованиеКонтрагента = Объект.Контрагент.Наименование;
Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл


дальше в цикле по строкам:

Если не ПустаяСтрока(НаименованиеКонтрагента) Тогда
    Если НаименованиеКонтрагента = Excel.Cells(СтрокаОтсчета, 23).Text Тогда 
        НСтр = НовыйДокумент.Товары.Добавить();


и т.д.
+
12. skiopolitan 14.11.18 11:39 Сейчас в теме
(9)Пример: Объект.Контрагент.Наименование = "ИВС", Excel.Cells(СтрокаОтсчета, 23).Text = "ИВС"
+
14. YannikAlx 43 14.11.18 11:42 Сейчас в теме
(12) Вы передергивате в 9 нет Объект.Контрагент.Наименование
там Объект.Контрагент - а это 2 ОГРОМНЫЕ разницы!
Ибо Объект.Контрагент.Наименование - строка
А Объект.Контрагент - ссылка!
+
15. skiopolitan 14.11.18 11:50 Сейчас в теме
(14)Опечатка, не дописал, а так изначально было Объект.Контрагент.Наименование
+
13. YannikAlx 43 14.11.18 11:40 Сейчас в теме
Сравнивать все же нужно одинаковые сущности.
Не стоит сравнивать мягкое с теплым и гвозди с носорогами... )))
Слева и справа в выражении сравнения должны быть ОДИНАКОВЫЕ типы данных!
ЗначениеЗаполнено(Объект.Контрагент.Наименование)
Это Логическое выражение имеет значения Истина или Ложь
Вы сравниваете с текстом - что есть абсурд
+
16. YannikAlx 43 14.11.18 11:52 Сейчас в теме
Процесс обучения подразумевает, что обучаемый усвоил предыдущий материал...
Не обижайтесь пожалуйста.... Но,если вы не научились еще использовать сравнения, может стоит больше попрактиковаться именно в сравнениях ЕСЛИ?
Ибо если вы решите что уже мастер и начнете писать что-то серьезное , то ТАКОГО наваяете, что потом батальон 1С-ников разгребать будут...
+
17. YannikAlx 43 14.11.18 11:55 Сейчас в теме
Опечатки допускают все, даже супермастера... )))

Рекомендую выложить ваш текущий код (после исправления всех очепяток), если у вас по-прежнему не работает
+
18. skiopolitan 14.11.18 12:00 Сейчас в теме
(17)
МассивКолонок = Новый ТаблицаЗначений;
	МассивКолонок.Колонки.Добавить("НомерКолонки");
	МассивКолонок.Колонки.Добавить("НазваниеКолонки");
	Для КолонкаОтсчета = 1 по КоличествоКолонок Цикл
		ИмяКолонки = Excel.Cells(1, КолонкаОтсчета).Text;
		// Удаление лишних пробелов из имен колонок
		ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ",""); 
		 // Проверка наличия реквизитов табличной части "Товары" в документе "УстановкаЦен"
		Если НЕ НаличиеРеквизитаТЧ(ИмяБезПробелов, Метаданные.Документы.ПоступлениеТоваровУслуг, "Товары") Тогда  
			Сообщить("Не найден реквизит с именем " + ИмяБезПробелов + "! Колонка не будет загружена!");
		Иначе	
			НовСтрока = МассивКолонок.Добавить();	
			НовСтрока.НомерКолонки = КолонкаОтсчета;
			НовСтрока.НазваниеКолонки = ИмяБезПробелов;
		КонецЕсли;
	КонецЦикла;
	
	// Если есть колонки для загрузки 
	// и есть колонка "Номенклатура, которая является обязательным к заполнению реквизитом
	Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда    
		// Создание документа и заполнение реквизитов шапки
		НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
		НовыйДокумент.Дата = ТекущаяДата();
		НовыйДокумент.Контрагент = Объект.Контрагент;
		НовыйДокумент.Организация = Объект.Организация;
		НовыйДокумент.Склад = Объект.Склад;
		НовыйДокумент.ВидОперации = Объект.ВидОперации;
			//НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Информационные системы в образовании", Истина);
			//НовыйДокумент.Комментарий = "Загружено из файла " + Объект.ФайлExcel;
		// Заполнение табличной части "Товары"
		// Переменная СтрокаОтсчета - номер строки в Excel, с которой начинается заполнение
		НаименованиеКонтрагента = Объект.Контрагент.Наименование;
		Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл 
			Если не ПустаяСтрока(НаименованиеКонтрагента) Тогда
    Если НаименованиеКонтрагента = Excel.Cells(СтрокаОтсчета, 23).Text Тогда 
        НСтр = НовыйДокумент.Товары.Добавить();
	КонецЕсли;
	КонецЕсли;
		
			//НСтр.Валюта = НовыйДокумент.ТипЦен.ВалютаЦены;
			Для каждого СтрокаМассив из МассивКолонок Цикл 
				ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
				// Получение имени колонки
				ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
				
				Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
				
				СтавкаНДС = Excel.Cells(СтрокаОтсчета, 8).Value;
				
				Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;
								
				// Заполнение строки данными
					Если ИмяКолонки = "Номенклатура" Тогда
						НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
					ИначеЕсли ИмяКолонки = "Количество" Тогда
						НСтр.Количество = ТекущееЗначение;
					ИначеЕсли ИмяКолонки = "Цена" Тогда
						НСтр.Цена = Значение;
					ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
						НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
					ИначеЕсли ИмяКолонки = "СчетУчета" Тогда
						НСтр.СчетУчета = ТекущееЗначение;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			// Запись и проведение документа
		НовыйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
		Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
	Иначе
		Сообщить("В Excel файле не достаточно данных для заполнения документа!");
	КонецЕсли;
	
	Excel.DisplayAlerts = 0; 
	Excel.Quit();
	Excel.DisplayAlerts = 1;
Показать
+
20. skiopolitan 14.11.18 12:02 Сейчас в теме
(17)Только теперь он вставляет последнюю строчку из Экселя в табличную часть Товары
+
23. antz 14.11.18 12:09 Сейчас в теме
(20) Почему же он так делает? Наверно, потому, что, встретив наименование нужного контрагента, программа добавляет строку в документ, потом проходит весь цикл по строкам экселя, заполняя эту строку каждый раз, а остается в ней то, что попало туда последним.

А что нужно? Правильно, чтобы, встретив наименование нужного контрагента, она добавляла строку и заполняла ее, а если наименование не совпадает - она продолжала цикл. Но как же это сделать? Нет ли в языке 1С какого-нибудь оператора, напоминающего слово "продолжить"?
+
19. acanta 14.11.18 12:02 Сейчас в теме
(16) Процесс профессиональной подготовки не является процессом обучения. Предыдущего материала нет, мастер или предыдущий работник показывает элемент работы, выполняемый в данной точке конвейера и элемент вырабатывается до достижения автоматизма. После превышения порога усталости (при монотонной работе достигнутый автоматизм начинает давать сбои чаще и чаще) выбирается другая точка конвейера и начинается проф.подготовка с нуля.

Если нет возможности работать на автопилоте и пользоваться результатами профессионального роста, а постоянно работаешь в точке минимальной квалификации, зачем такая работа?
+
21. skiopolitan 14.11.18 12:06 Сейчас в теме
(19)Вот именно зачем такая работа? Я в технике хорошо разбираюсь, а в программе 1с только учусь, и мне не нравится эта программа. Я просто буду ждать и посмотрю, что ответят после стажировки, нужен ли я им такой?
+
24. antz 14.11.18 12:10 Сейчас в теме
(21) Если не нравится - тогда зачем это всё?
+
25. YannikAlx 43 14.11.18 12:11 Сейчас в теме
(21) Поверьте если вам не нравится такая работа, то лучше вообще не продолжать!
Ибо дальше будет только хуже
+
22. YannikAlx 43 14.11.18 12:08 Сейчас в теме
Не логично
Если НаименованиеКонтрагента = Excel.Cells(СтрокаОтсчета, 23).Text Тогда
НСтр = НовыйДокумент.Товары.Добавить();
КонецЕсли;

Вы только добавляете новую строчку если условие выполнилось.
А вот все заполнения делаете даже если не выполнилось

//НСтр.Валюта = НовыйДокумент.ТипЦен.ВалютаЦены;
Для каждого СтрокаМассив из МассивКолонок Цикл
ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
// Получение имени колонки
ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;

Значение = Excel.Cells(СтрокаОтсчета, 6).Value;

СтавкаНДС = Excel.Cells(СтрокаОтсчета, 8).Value;

Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;

// Заполнение строки данными
Если ИмяКолонки = "Номенклатура" Тогда
НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
ИначеЕсли ИмяКолонки = "Количество" Тогда
НСтр.Количество = ТекущееЗначение;
ИначеЕсли ИмяКолонки = "Цена" Тогда
НСтр.Цена = Значение;
ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли ИмяКолонки = "СчетУчета" Тогда
НСтр.СчетУчета = ТекущееЗначение;
КонецЕсли;
+
26. skiopolitan 14.11.18 12:12 Сейчас в теме
(22)Дак помоги написать код правильно и чтобы я понял в чем причина, я уже много вариантов перепробовал.
+
27. YannikAlx 43 14.11.18 12:14 Сейчас в теме
И кстати проблемы то не в программе!
А в способности логического мышления. В любом программировании нужно мыслить как машина, если будешь фантазировать как механик, то лучше остаться механиком
+
29. skiopolitan 14.11.18 12:17 Сейчас в теме
(27)Вот бы машина мыслила как человек. Тогда бы и мы не сдались бы.
+
33. YannikAlx 43 14.11.18 12:22 Сейчас в теме
(29) Вот подобными инсинуациями человечество и вымрет, ибо мыслящим машинам - люди не нужны!
+
28. YannikAlx 43 14.11.18 12:16 Сейчас в теме
Мы тут все и стараемся ПОМОЧЬ ,но помощь - это не сделать вместо тебя!
Мы показываем тебе конкретные ошибки . Ты их должен исправлять и тогда наберешь опыта.
А списывание опыта никогда не даст
+
35. skiopolitan 14.11.18 12:23 Сейчас в теме
(28)Списывание, еще как сказать. Можно скопировать и вставить, не разобравшись, а можно наоборот, написать от руки и понять что к чему идет. Я после стажировки подумаю еще, заключать трудовой договор на постоянной основе, и это зависит еще от руководителя, захочет ли он оставлять меня на месте, выгодно ли ему? Я хотел пойти работать консультантом техники, потому что как и писал ранее, хорошо в ней разбираюсь. Или же пойти мастером по сборке компьютеров. Но везде нужен опыт, да и потом вопрос в деньгах, сколько будут платить?
+
39. YannikAlx 43 14.11.18 12:37 Сейчас в теме
(35) Философия двоечника однозначно!
Еще неизвестно что подразумеваешь под "разбираюсь в технике", техника бывает очень разная и утверждение "разбираюсь в технике" по меньшей мере слишком самоуверенное. Уверен , что на мой вопрос по технике дашь верный ответ?
+
30. acanta 14.11.18 12:18 Сейчас в теме
Напишите сразу после начала цикла все ЕСЛИ и ПРОДОЛЖИТЬ

Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда 
       Продолжить;
КонецЕсли;

Если Excel.Cells(СтрокаОтсчета, 24).Text  = 0 Тогда // например количество нулевое
    Продолжить;
КонецЕсли;


После блока условий пишите Добавитьстроку и далее по тексту
Krey_; +1
32. YannikAlx 43 14.11.18 12:20 Сейчас в теме
(30) Не согласен - очень не красиво в данном случае получится...
Надо все что ниже перенести внутрь ЕСЛИ
+
34. acanta 14.11.18 12:22 Сейчас в теме
(32) причем тут красота, мы даже не знаем точно, вычисляет ли платформа все выражения внутри ЕСЛИ, а тут обращение к постороннему объекту.
+
36. YannikAlx 43 14.11.18 12:32 Сейчас в теме
(34) Ну хорошо убедили , но тогда уж в другой последовательности

Если не ПустаяСтрока(НаименованиеКонтрагента) Тогда
Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда
Продолжить;
КонецЕсли;
ИНАЧЕ Продолжить;
КонецЕсли;

НСтр = НовыйДокумент.Товары.Добавить();
+
37. skiopolitan 14.11.18 12:32 Сейчас в теме
(30) Вроде бы помог код, сейчас проверяю, спс.
Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда
Продолжить;
КонецЕсли;

Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
+
38. acanta 14.11.18 12:35 Сейчас в теме
Тогда сверху к (30) добавить еще
Если ПустаяСтрока(НаименованиеКонтрагента) Тогда 
Продолжить; 
КонецЕсли; 
+
40. YannikAlx 43 14.11.18 12:40 Сейчас в теме
(38) А кстати не смущает
Excel.Cells(СтрокаОтсчета, 24).Text = 0 ?
Текст с числом сравнивать...
Не сразу заметил....
+
31. YannikAlx 43 14.11.18 12:19 Сейчас в теме
Когда написал условие ЕСЛИ , то в нем должны выполняться все действия с твоими данными , которые ты вынес за пределы этого условия.
И получатся что ты сравниваешь одно , а заполняешь туда потом уже совсем другое и много раз.
вот оно у тебя и остается потом последнее
+
41. _Driver_ 1 14.11.18 13:07 Сейчас в теме
Про такой фильтр имел в виду:
Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда    
        // Создание документа и заполнение реквизитов шапки
        НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        НовыйДокумент.Дата = ТекущаяДата();
        НовыйДокумент.Контрагент = Объект.Контрагент;
        НовыйДокумент.Организация = Объект.Организация;
        НовыйДокумент.Склад = Объект.Склад;
        НовыйДокумент.ВидОперации = Объект.ВидОперации;
            //НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Информационные системы в образовании", Истина);
            //НовыйДокумент.Комментарий = "Загружено из файла " + Объект.ФайлExcel;
        // Заполнение табличной части "Товары"
        // Переменная СтрокаОтсчета - номер строки в Excel, с которой начинается заполнение
        КонтрагентСтрока = Строка(Объект.Контрагент);
        Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
            НужныйКонтрагент = Ложь;
            Для каждого СтрокаМассив из МассивКолонок Цикл               
               ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
                // Получение имени колонки
                ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
                НаимКонтрагента  = "";
                Если ИмяКолонки = "Контрагент" Тогда//Указать наименование колонки с контрагентами
                         НаимКонтрагента = ТекущееЗначение;
                КонецЕсли;
                Если КонтрагентСтрока = НаимКонтрагента Тогда
                         НужныйКонтрагент  = Истина;
                КонецЕсли;
            КонецЦикла;
            Если Не НужныйКонтрагент  Тогда 
                   Продолжить;
            КонецЕсли;
            НСтр = НовыйДокумент.Товары.Добавить();
            //НСтр.Валюта = НовыйДокумент.ТипЦен.ВалютаЦены;
            Для каждого СтрокаМассив из МассивКолонок Цикл 
                ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
                // Получение имени колонки
                ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
                
                Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
                
                СтавкаНДС = Excel.Cells(СтрокаОтсчета, 8).Value;
                
                Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;
                                
                // Заполнение строки данными
                   Если ИмяКолонки = "Номенклатура" Тогда
                        НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
                    ИначеЕсли ИмяКолонки = "Количество" Тогда
                        НСтр.Количество = ТекущееЗначение;
                    ИначеЕсли ИмяКолонки = "Цена" Тогда
                        НСтр.Цена = Значение;
                    ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
                        НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                    ИначеЕсли ИмяКолонки = "СчетУчета" Тогда
                        НСтр.СчетУчета = ТекущееЗначение;
                    КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        // Запись и проведение документа
        НовыйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
        Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    Иначе
        Сообщить("В Excel файле не достаточно данных для заполнения документа!");
    КонецЕсли;
    
    Excel.DisplayAlerts = 0; 
    Excel.Quit();
    Excel.DisplayAlerts = 1;
Показать
+
42. antz 14.11.18 13:16 Сейчас в теме
(41) маленький совет

НужныйКонтрагент = КонтрагентСтрока = НаимКонтрагента;


А вообще, лучше не лепить переменные, которые используются один раз.

Если КонтрагентСтрока <> НаимКонтрагента Тогда 
       Продолжить;
КонецЕсли;
+
43. _Driver_ 1 14.11.18 13:19 Сейчас в теме
(42) Несущественно но короче, согласен)

Там два цикла, не подойдет второе условие.
+
44. skiopolitan 14.11.18 13:20 Сейчас в теме
Еще такой вопрос пишу код, все выводит, кроме счета учета и ставка НДС, как их вывести? Вроде бы должен ТекущееЗначение брать, т.е. из Экселя по имени колонки, но ничего не выводит.
Для каждого СтрокаМассив из МассивКолонок Цикл 
				ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
				// Получение имени колонки
				ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
				Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
				// Заполнение строки данными
					Если ИмяКолонки = "Номенклатура" Тогда
						НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
					ИначеЕсли ИмяКолонки = "Количество" Тогда
						НСтр.Количество = ТекущееЗначение;
					ИначеЕсли ИмяКолонки = "Цена" Тогда
						НСтр.Цена = Значение;
					ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
						НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                                        ИначеЕсли ИмяКолонки = "Ссылка.Счет учета расчетов по авансам" Тогда
						НСтр.СчетУчета = ТекущееЗначение;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
Показать
+
45. acanta 14.11.18 17:46 Сейчас в теме
Попробуйте так:

Если ИмяКолонки = "Номенклатура" Тогда
            НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
    ИначеЕсли ИмяКолонки = "Количество" Тогда
             НСтр.Количество = ТекущееЗначение;
    ИначеЕсли ИмяКолонки = "Цена" Тогда
                        НСтр.Цена = Значение;
    Иначе
               НСтр = ТекущееЗначение;
   КонецЕсли;
Показать
+
Внимание! Тема сдана в архив

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