Помогите с загрузкой данных из Эксель в 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 Тогда // например количество нулевое
    Продолжить;
КонецЕсли;


После блока условий пишите Добавитьстроку и далее по тексту
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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С нецелесообразно.
Много трудов, а используемость практически нулевая
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 Тогда // например количество нулевое
    Продолжить;
КонецЕсли;


После блока условий пишите Добавитьстроку и далее по тексту
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 Сейчас в теме
Попробуйте так:

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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)