Помогите с загрузкой данных из Эксель в 1с
Надо, чтобы загружалась 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;
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Загрузка бухгалтерских операций из шаблона Excel для Бухгалтерии 3.0
- Загрузка (импорт) из Эксель в 1С: Розница 2 (2.1, 2.2, 2.3) поступлений ТМЦ
- Быстрый старт в тестировании на платформе 1С (Vanessa-ADD)
- Несколько альтернативных универсальных способов подбора ссылок при переносах данных
- Сбилась нумерация счетов-фактур выданных? Решение
Найденные решения
Напишите сразу после начала цикла все ЕСЛИ и ПРОДОЛЖИТЬ
После блока условий пишите Добавитьстроку и далее по тексту
Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда
Продолжить;
КонецЕсли;
Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
После блока условий пишите Добавитьстроку и далее по тексту
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если МассивКолонок.Количество() <> 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 строки определенных, и чтобы отбор еще был по эксель, если вот то что я заполняю в обработке в поле контрагент = из таблицы эксель по наименованию. Допустим Контрагент: Ивс, он должен проверить колонку с контрагентами и если там есть тоже самое наименование Ивс, то вывести те строчки, где они совпадают.
Проще делать все предварительные отборы в Excel.
Отфильтруйте по этому наименованию и сохраните в отдельный файл, его потом загрузить.
Делать универсальный управляемый отбор по разным коллонкам в обработке 1С нецелесообразно.
Много трудов, а используемость практически нулевая
Отфильтруйте по этому наименованию и сохраните в отдельный файл, его потом загрузить.
Делать универсальный управляемый отбор по разным коллонкам в обработке 1С нецелесообразно.
Много трудов, а используемость практически нулевая
У меня задание такое, надо чтобы создавался документ + вносились данные в табличную часть товары определенные по отбору Контрагент.
Если ЗначениеЗаполнено(Объект.Контрагент.Наименование) Тогда
Объект.Контрагент = Контрагент;
Что делает этот код? В чем его смысл?
(10)
Получить наименование контрагента в объекте перед циклом:
дальше в цикле по строкам:
и т.д.
Получить наименование контрагента в объекте перед циклом:
НаименованиеКонтрагента = Объект.Контрагент.Наименование;
Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
дальше в цикле по строкам:
Если не ПустаяСтрока(НаименованиеКонтрагента) Тогда
Если НаименованиеКонтрагента = Excel.Cells(СтрокаОтсчета, 23).Text Тогда
НСтр = НовыйДокумент.Товары.Добавить();
и т.д.
Сравнивать все же нужно одинаковые сущности.
Не стоит сравнивать мягкое с теплым и гвозди с носорогами... )))
Слева и справа в выражении сравнения должны быть ОДИНАКОВЫЕ типы данных!
Вы сравниваете с текстом - что есть абсурд
Не стоит сравнивать мягкое с теплым и гвозди с носорогами... )))
Слева и справа в выражении сравнения должны быть ОДИНАКОВЫЕ типы данных!
ЗначениеЗаполнено(Объект.Контрагент.Наименование)
Это Логическое выражение имеет значения Истина или Ложь
Вы сравниваете с текстом - что есть абсурд
Процесс обучения подразумевает, что обучаемый усвоил предыдущий материал...
Не обижайтесь пожалуйста.... Но,если вы не научились еще использовать сравнения, может стоит больше попрактиковаться именно в сравнениях ЕСЛИ?
Ибо если вы решите что уже мастер и начнете писать что-то серьезное , то ТАКОГО наваяете, что потом батальон 1С-ников разгребать будут...
Не обижайтесь пожалуйста.... Но,если вы не научились еще использовать сравнения, может стоит больше попрактиковаться именно в сравнениях ЕСЛИ?
Ибо если вы решите что уже мастер и начнете писать что-то серьезное , то ТАКОГО наваяете, что потом батальон 1С-ников разгребать будут...
Опечатки допускают все, даже супермастера... )))
Рекомендую выложить ваш текущий код (после исправления всех очепяток), если у вас по-прежнему не работает
Рекомендую выложить ваш текущий код (после исправления всех очепяток), если у вас по-прежнему не работает
(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) Почему же он так делает? Наверно, потому, что, встретив наименование нужного контрагента, программа добавляет строку в документ, потом проходит весь цикл по строкам экселя, заполняя эту строку каждый раз, а остается в ней то, что попало туда последним.
А что нужно? Правильно, чтобы, встретив наименование нужного контрагента, она добавляла строку и заполняла ее, а если наименование не совпадает - она продолжала цикл. Но как же это сделать? Нет ли в языке 1С какого-нибудь оператора, напоминающего слово "продолжить"?
А что нужно? Правильно, чтобы, встретив наименование нужного контрагента, она добавляла строку и заполняла ее, а если наименование не совпадает - она продолжала цикл. Но как же это сделать? Нет ли в языке 1С какого-нибудь оператора, напоминающего слово "продолжить"?
(16) Процесс профессиональной подготовки не является процессом обучения. Предыдущего материала нет, мастер или предыдущий работник показывает элемент работы, выполняемый в данной точке конвейера и элемент вырабатывается до достижения автоматизма. После превышения порога усталости (при монотонной работе достигнутый автоматизм начинает давать сбои чаще и чаще) выбирается другая точка конвейера и начинается проф.подготовка с нуля.
Если нет возможности работать на автопилоте и пользоваться результатами профессионального роста, а постоянно работаешь в точке минимальной квалификации, зачем такая работа?
Если нет возможности работать на автопилоте и пользоваться результатами профессионального роста, а постоянно работаешь в точке минимальной квалификации, зачем такая работа?
Не логично
Если НаименованиеКонтрагента = Excel.Cells(СтрокаОтсчета, 23).Text Тогда
НСтр = НовыйДокумент.Товары.Добавить();
КонецЕсли;
Вы только добавляете новую строчку если условие выполнилось.
А вот все заполнения делаете даже если не выполнилось
//НСтр.Валюта = НовыйДокумент.ТипЦен.ВалютаЦены;
Для каждого СтрокаМассив из МассивКолонок Цикл
ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
// Получение имени колонки
ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
СтавкаНДС = Excel.Cells(СтрокаОтсчета, 8).Value;
Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;
// Заполнение строки данными
Если ИмяКолонки = "Номенклатура" Тогда
НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
ИначеЕсли ИмяКолонки = "Количество" Тогда
НСтр.Количество = ТекущееЗначение;
ИначеЕсли ИмяКолонки = "Цена" Тогда
НСтр.Цена = Значение;
ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли ИмяКолонки = "СчетУчета" Тогда
НСтр.СчетУчета = ТекущееЗначение;
КонецЕсли;
Если НаименованиеКонтрагента = Excel.Cells(СтрокаОтсчета, 23).Text Тогда
НСтр = НовыйДокумент.Товары.Добавить();
КонецЕсли;
Вы только добавляете новую строчку если условие выполнилось.
А вот все заполнения делаете даже если не выполнилось
//НСтр.Валюта = НовыйДокумент.ТипЦен.ВалютаЦены;
Для каждого СтрокаМассив из МассивКолонок Цикл
ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
// Получение имени колонки
ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
СтавкаНДС = Excel.Cells(СтрокаОтсчета, 8).Value;
Контрагент = Excel.Cells(СтрокаОтсчета, 23).Text;
// Заполнение строки данными
Если ИмяКолонки = "Номенклатура" Тогда
НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
ИначеЕсли ИмяКолонки = "Количество" Тогда
НСтр.Количество = ТекущееЗначение;
ИначеЕсли ИмяКолонки = "Цена" Тогда
НСтр.Цена = Значение;
ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли ИмяКолонки = "СчетУчета" Тогда
НСтр.СчетУчета = ТекущееЗначение;
КонецЕсли;
И кстати проблемы то не в программе!
А в способности логического мышления. В любом программировании нужно мыслить как машина, если будешь фантазировать как механик, то лучше остаться механиком
А в способности логического мышления. В любом программировании нужно мыслить как машина, если будешь фантазировать как механик, то лучше остаться механиком
Мы тут все и стараемся ПОМОЧЬ ,но помощь - это не сделать вместо тебя!
Мы показываем тебе конкретные ошибки . Ты их должен исправлять и тогда наберешь опыта.
А списывание опыта никогда не даст
Мы показываем тебе конкретные ошибки . Ты их должен исправлять и тогда наберешь опыта.
А списывание опыта никогда не даст
(28)Списывание, еще как сказать. Можно скопировать и вставить, не разобравшись, а можно наоборот, написать от руки и понять что к чему идет. Я после стажировки подумаю еще, заключать трудовой договор на постоянной основе, и это зависит еще от руководителя, захочет ли он оставлять меня на месте, выгодно ли ему? Я хотел пойти работать консультантом техники, потому что как и писал ранее, хорошо в ней разбираюсь. Или же пойти мастером по сборке компьютеров. Но везде нужен опыт, да и потом вопрос в деньгах, сколько будут платить?
(35) Философия двоечника однозначно!
Еще неизвестно что подразумеваешь под "разбираюсь в технике", техника бывает очень разная и утверждение "разбираюсь в технике" по меньшей мере слишком самоуверенное. Уверен , что на мой вопрос по технике дашь верный ответ?
Еще неизвестно что подразумеваешь под "разбираюсь в технике", техника бывает очень разная и утверждение "разбираюсь в технике" по меньшей мере слишком самоуверенное. Уверен , что на мой вопрос по технике дашь верный ответ?
Напишите сразу после начала цикла все ЕСЛИ и ПРОДОЛЖИТЬ
После блока условий пишите Добавитьстроку и далее по тексту
Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда
Продолжить;
КонецЕсли;
Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
После блока условий пишите Добавитьстроку и далее по тексту
(34) Ну хорошо убедили , но тогда уж в другой последовательности
Если не ПустаяСтрока(НаименованиеКонтрагента) Тогда
Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда
Продолжить;
КонецЕсли;
ИНАЧЕ Продолжить;
КонецЕсли;
НСтр = НовыйДокумент.Товары.Добавить();
Если не ПустаяСтрока(НаименованиеКонтрагента) Тогда
Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда
Продолжить;
КонецЕсли;
ИНАЧЕ Продолжить;
КонецЕсли;
НСтр = НовыйДокумент.Товары.Добавить();
(30) Вроде бы помог код, сейчас проверяю, спс.
Если НаименованиеКонтрагента <> Excel.Cells(СтрокаОтсчета, 23).Text Тогда
Продолжить;
КонецЕсли;
Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
Продолжить;
КонецЕсли;
Если Excel.Cells(СтрокаОтсчета, 24).Text = 0 Тогда // например количество нулевое
Продолжить;
КонецЕсли;
Когда написал условие ЕСЛИ , то в нем должны выполняться все действия с твоими данными , которые ты вынес за пределы этого условия.
И получатся что ты сравниваешь одно , а заполняешь туда потом уже совсем другое и много раз.
вот оно у тебя и остается потом последнее
И получатся что ты сравниваешь одно , а заполняешь туда потом уже совсем другое и много раз.
вот оно у тебя и остается потом последнее
Про такой фильтр имел в виду:
Если МассивКолонок.Количество() <> 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;
Показать
Еще такой вопрос пишу код, все выводит, кроме счета учета и ставка НДС, как их вывести? Вроде бы должен ТекущееЗначение брать, т.е. из Экселя по имени колонки, но ничего не выводит.
Для каждого СтрокаМассив из МассивКолонок Цикл
ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
// Получение имени колонки
ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
Значение = Excel.Cells(СтрокаОтсчета, 6).Value;
// Заполнение строки данными
Если ИмяКолонки = "Номенклатура" Тогда
НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
ИначеЕсли ИмяКолонки = "Количество" Тогда
НСтр.Количество = ТекущееЗначение;
ИначеЕсли ИмяКолонки = "Цена" Тогда
НСтр.Цена = Значение;
ИначеЕсли ИмяКолонки = "Ставка НДС" Тогда
НСтр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли ИмяКолонки = "Ссылка.Счет учета расчетов по авансам" Тогда
НСтр.СчетУчета = ТекущееЗначение;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Показать
Попробуйте так:
Если ИмяКолонки = "Номенклатура" Тогда
НСтр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекущееЗначение, Истина);
ИначеЕсли ИмяКолонки = "Количество" Тогда
НСтр.Количество = ТекущееЗначение;
ИначеЕсли ИмяКолонки = "Цена" Тогда
НСтр.Цена = Значение;
Иначе
НСтр = ТекущееЗначение;
КонецЕсли;
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот