v7: таблицу Excel в ТЧ документа 1С #568060


#0 by bijela
Даже не знаю, как обратиться. Поэтому как говорил товарищ О. Бендер: ближе к телу. Необходимо данные из таблиц Excel загрузить в табличную часть приходной накладной.Идея стара как мир.  Нашел всем известную внешнюю обработку, даже книжку Дубянского прикупил по случаю.  Сделать наскоком, убрав и заменив мне понятные места, не получилось. Видно запутался с реквизитами и идентификаторами.  Поэтому ниже привожу код обработки и задам несколько вопросов. Заранее прошу терпения, т.к. в этом вопросе  я «бей ведро». Поэтому «популярно для невежд». Функция ПолучитьЗначение(Excel,y,x) Стр=(СокрЛП(Строка(ПолучитьЗначение(Excel,i,1)))); Если ПустаяСтрока(Стр)=1 Then Как написано в книжке, первоначально в модуле добавил переменные Перем ИмяФайла, ИмяКаталога; Затем: 1.("Справочник.Номенклатура") заменил на ("Справочник.ТМЦ"), т.к. мой справочник где находится номенклатура имеет Идентификатор ТМЦ. 2. i=7 заменил на i=1, т.к. решил что все будет начинаться с первой строки. 3. дошел до строки кода Тов=Спр.Наименование; - наморщил репу, не знаю что делать дальше. Хелп.
#1 by G-Re
Что-то не совсем понятно, в коде, насколько я понял, из Ексел берутся данные, харакиеризующие некую запись справочника ТМЦ, на основании которых эта запись и создается. В теме же указана ТЧ документа. Так в чем же вопрос или проблема? Общий алгоритм примерно такой. 1. Создается новый документ(через СоздатьОбъект). (или в документе на форме, например, должна быть Кнопка типа "Создать ТЧ из Ексел" или что-то подобное). 2. В цикле считываются строки из Ексел, на основании значений ячеек которых формируется ТЧ., то есть что-то типа Цикл по строкам Ексел где стр - номер строки в Ексел-файле НомРх - номер ячейки Ексел, соответствующей РеквизитСтроких ТЧ документа. Где-то так.
#2 by bijela
сорри, сам дурак. это не внешняя обработка, а кусок который вставляется модуль форма-документа. в диалоге есть кнопка (Формула Загрузкапо которой происходит загрузка выбранного фай
#3 by G-Re
Так что, проблему решил, все понятно? или еще есть вопросы?
#4 by bijela
сорри, сам дурак. это не внешняя обработка, а кусок кода, который вставляется в модуль формы-документа ПриходнаяНакладная. в диалоге сделана кнопка Загрузка, по которой происходит выбор и должна происходить загрузка Excel файла.
#5 by G-Re
Да, дополнение к . Если в Екселе в ячейке нечто из справочника, например Наименование, то, конечно, нужно сначала найти этот элемент по наименованию или создать новый, если не найден и только потом присвоить этот элемент реквизиту ТЧ, например, так
#6 by bijela
Извините, но взятый за основу кусок работает судя по отзывам, а я пытаюсь его переделать под таблицу Excel с двумя столбцами: первый номенклатура второй количество. После Тов=Спр.Наименование; убрал все, что не касается количества после выбора и загрузки файла выдает сообщение Cell=Excel.Cells(y,x); {Документ.ПриходнаяНакладная.Форма.Модуль}: Значение не представляет агрегатный объект (Cells)
#7 by smaharbA
по поводу келсов - переписывай код заново Книги=Excel.Workbooks; Книга=Книги.Open(ИмяФайла,0,1); ... ПолучитьЗначение(Книга,i,2)
#8 by bijela
а теперь переведите фразу "по поводу келсов - переписывай код заново"
#9 by G-Re
Попробуй вставить в самом начале всего Перем Excel;
#10 by G-Re
Да, еще заморочка у тебя ожидается, если количество, то сразу вопрос ЕдиницаИзмерения!!! Как правило, это подчиненный к ТМЦ справочник, в котором ссылка на Перечисление. Если у тебя в Екселе будут ед.изм, то могут быть большие проблемы - Перечисление программно не модифицируется, поэтому, если встретится некорректно написанная или нестандартная(отсутствующая в Перечислении).
#11 by ЧеловекДуши
Лучше не через ексель все делать, а через моксель или адо.
#12 by bijela
первоначально Перем Excel не написал, в книжке про это не говорилось. получил ругательство при попытке открыть расходную накладную. прочитал ругательство, наморщил лоб и вписал там где и все Перем Excel. Манипуляции продвинулись вплоть до выбора файла Excel, а потом ошибка о которой писал раньше: Cell=Excel.Cells(y,x); {Документ.ПриходнаяНакладная.Форма.Модуль}: Значение не представляет агрегатный объект (Cells)
#13 by smaharbA
что тут переводит ? вы свой код посмотрите и
#14 by G-Re
Если на это ... РабочаяКнига.Open(ИмяФайла,0,1); ... не ругается(Текст скопипастил с твоего) и Перем Еxcel есть, посмотри 1. Одно ли это в тексте описание этой переменоой. Должно быть одно. Поставь его самым первым оператором в модуле Формы. 2. Проверь на буквы слово Excel, может где-то кириллица попалась. Скопипасти это имя из объявления Excel=СоздатьОбъект("Excel.Application"); ----- в Перем. Каких-то других причин вроде нет. Задачка в общем-то примитивная.
#15 by bijela
переменные в начале модуля в следующем виде Перем ИмяФайла, ИмяКаталога, Excel; , а кириллицу проверю.
#16 by smaharbA
Код переписывай, о такой наколке рано или поздно во всех ветках про ексель предупреждаю в все, что тебе нужно
#17 by bijela
кириллица подвела однозначно. переписал заново ошибка выше пропала. потом возникли локальные ошибки с реквизитами и идентификаторами, но в конечном итоге справился. больше не ругается. проверяет старые и создает новые наименования в справочнике ТМЦ. Но, и похоже это уже сильный геморой для меня: данные из таблицы Excel (второй столбец наименование товара, третий - его количество)в приходную накладную загоняет , но только без товара первой ячейки Excel. Повторюсь, в справочник ТМЦ товар попал, а в приходную накладную нет, есть только его количество, естественно там где оно и должно быть. с последующими товарами из Exel таблицы проблем нет - попадают все в нужном количестве. ниже показываю код, который получился: Стр=(СокрЛП(Строка(ПолучитьЗначение(Excel,i,1)))); Если ПустаяСтрока(Стр)=1 Then
#18 by smaharbA
код однозначно не верен и на грабли наступишь снова рано или поздно
#19 by Tatitutu
#20 by Tatitutu
+ внизу страницы, почти готовый вариант (рыба) бесплатно и открытым кодом
#21 by bijela
с этим прыгскоком ситуация аналогичная: не ругается, наименование первого товара в табличную часть документа (любого) 1с не пишет.
#22 by GreyK
Отладчик рулит в ситуациях "научного тыка".
#23 by G-Re
Присоединяюсь к . Код экстравагантен для такой простой задачки. Тебе уже обо всем рассказали и показали, выкинь все, подумай и структурно и осознанно напиши все снова... и все получится!
#24 by bijela
Коллеги, если я могу вас так назвать?, а скорей всего нет, так как я просто интересующийся. Проведя анализ я понял, что дело не в моем коде, а точнее позаимствованном, пусть даже и таком экстравагантном для такой простой задачки. аналогичную проблему я получал при использовании внешней обработки "прыгскок". Поэтому полез посмотреть свойства реквизита ТМЦ приходной накладной, где в поле Тип значения Справочник.ТМЦ поменял на просто Справочник. Представьте, заработала. Все мои ТМЦ попали в приходную накладную.
#25 by smaharbA
наколешся
#26 by G-Re
Не стОит, в неопределенных типах есть некоторые нюансы в работе. Все же перепиши код, очень понадобится в дальнейшем, потому что в этой кальке пишутся все обмены с чем угодно.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С