|
v7: Обработка выгрузки в дбф или хлс | ☑ | ||
---|---|---|---|---|
0
ColonelAp4u
15.09.15
✎
11:08
|
Добрый день уважаемые программисты. Ни когда ранее не сталкивался с кодом 7.7, но вот пришлось. Стоит Задача создать новую чистую БД с переносом долгов контрагентов. При загрузке из файла нужно создать док инвентаризация сальдо контрагента. А для начала выгрузить из базы ТиС файл с данными о контре и о взаиморасчете с ним. Нашел на мисте
//////////////////////////////////////////////////////// Процедура Выгрузить_в_Excel() xl=СоздатьОбъект("Excel.Application"); xl.Workbooks.Add(); //Добавляем новый документ xl.Visible=1; //Делаем его видимым row=1; //первая строка спр=СоздатьОбъект("Справочник.Контрагенты"); спр.ВыбратьЭлементы(); Пока спр.ПолучитьЭлемент() = 1 Цикл xl.Cells(row,1).Value=спр.Код; xl.Cells(row,2).Value=спр.Наименование; row=row+1;//переходим на следующую строку КонецЦикла; КонецПроцедуры |
|||
1
ColonelAp4u
15.09.15
✎
11:09
|
Но как я понял он просто возьмет из спр контра и занесет в таблицу код наименование. А как сделать так что бы он еще занес взаиморасчеты
|
|||
2
HawkEye
15.09.15
✎
11:10
|
(0) откроется ексель и выгрузиться код и наименование контрагентов и групп - для загрузки не пойдёт... Ищи дальше
|
|||
3
Рэйв
15.09.15
✎
11:10
|
(1)Запрос к регистру надо, а не справочник перебирать
|
|||
4
HawkEye
15.09.15
✎
11:11
|
(1) надо писать код
|
|||
5
Рэйв
15.09.15
✎
11:11
|
+(0)Лучше в текст выгружай. И проще и не будешь зависить от того установлен ексель или нет
|
|||
6
ColonelAp4u
15.09.15
✎
11:11
|
(2) для загрузки есть другая мне пока выгрузить нужно
|
|||
7
ColonelAp4u
15.09.15
✎
11:12
|
делать запрос в взаиморасчеты?
|
|||
8
Рэйв
15.09.15
✎
11:13
|
(7)Ну, если они у тебя хранятся гдето еще, то в "где-то еще":-)
|
|||
9
aka AMIGO
15.09.15
✎
11:14
|
Три варианта:
взять с ИТС TRANREF.ERT Использовать КД..2.. Перенести по OLE/COM |
|||
10
HawkEye
15.09.15
✎
11:16
|
(6) ну я не сомневался, что есть, я даже уверен, что она что-то даже и загружает, как и эта... Что-то выгружать, вопрос насколько это будет отвечать твоим требованиям))
Ну ты эта... держи нас в курсе) |
|||
11
ColonelAp4u
15.09.15
✎
11:55
|
Вроде как нашел откуда взять есть регистр контрагенты в нем есть контр и сальдо вот почему то ошибку выдает
спр=СоздатьОбъект("Регистры.Контрагенты"); {C:\USERS\ALBERT\DESKTOP\ВЫГРУЗКА В ЕХС.ERT(11)}: Неудачная попытка создания объекта (Регистры.Контрагенты) |
|||
12
ColonelAp4u
15.09.15
✎
11:57
|
может регистр нужно не создать а прочитать? просто справка 1с не работает
|
|||
13
ColonelAp4u
15.09.15
✎
12:00
|
как в 7 обратится к регистру?
|
|||
14
SiAl-chel
15.09.15
✎
12:04
|
||||
15
SiAl-chel
15.09.15
✎
12:05
|
||||
16
ColonelAp4u
15.09.15
✎
12:26
|
Подскажите пож запрос обязателен в регистр? методом не получится воспользоваться?
Метод Остатки()? |
|||
17
ColonelAp4u
15.09.15
✎
12:45
|
На основании данного примера пытаюсь сделать выборку данных
РегТовары = СоздатьОбъект("Регистр.Товары"); 1. Метод Остаток Синтаксис: Остаток(<Измерен1>,<Измерен2>...,<ИмяРесурса> Пример: //получить остаток данного товара на данном складе Колво = РегТовары.Остаток (ТекТовар, ТекСклад, "Количество"); //получить стоимость данного товара на данном складе Стоимость = РегТовары.Остаток (ТекТовар, ТекСклад, "Стоимость"); В измерения мне нужно подставлять измерения регистра? если да их 2 асКонтрагент, асАналитика. А ресурс у меня 1 чСальдо и получается пока я перебираю элементы справочника контрагенты я хочу подставить в измерение спр.наименование, спр.аналитика, а какой ресурс указать? |
|||
18
aka AMIGO
15.09.15
✎
12:48
|
Лучше так:
Колво = РегТовары.СводныйОстаток (ТекТовар, ТекСклад, "Количество"); |
|||
19
aka AMIGO
15.09.15
✎
12:49
|
проверь количество запятых на соответствие Измерениям регистра
|
|||
20
HawkEye
15.09.15
✎
12:50
|
(17) чсальдо...
Не надо в измерения строки сувать... Регистр.контрагенты, с измерениями контрагент, аналитика (реквизит контрагента) и ресурсом САЛЬДО - это ПЯТЬ |
|||
21
ColonelAp4u
15.09.15
✎
13:55
|
(20) хоть 25 не я писал
|
|||
22
SiAl-chel
15.09.15
✎
14:29
|
(17) В 1С есть такое понятие как Ссылка. И она есть ни код, ни наименование (для справочника), это уникальный идентификатор. В измерениях регистров обычно указывают ссылку на справочник, а не наименование или что другое из простых типов данных.
|
|||
23
ColonelAp4u
15.09.15
✎
15:23
|
Выгрузку сделал, помогите с загрузкой не могу понять что то
|
|||
24
ColonelAp4u
15.09.15
✎
15:24
|
Необходимо что бы для каждой строки из файла если сальдо больше или меньше 0 (но не =) Создать документ инвентаризация сальдо контрагента
|
|||
25
ColonelAp4u
15.09.15
✎
15:25
|
Процедура Сформировать()
//В одной транзакции запись элементов в базе DBF пойдет намного быстрее НачатьТранзакцию(); xl=СоздатьОбъект("Excel.Application"); //Получаем область с заполненными данными UsedRange=xl.ActiveSheet.UsedRange; //число строк в этой области rows=UsedRange.Rows.Count; спр=СоздатьОбъект("Справочник.Контрагенты"); //цикл по строкам Спр2 = СоздатьОбъект("Справочник.Пользователи"); Спр2.НайтиПоКоду("0000000001"); Для row = 1 По rows Цикл //читаем строку из ячейки Excel (значения должны располагаться в первой колонке) имя=СокрЛП(UsedRange.Cells(row,1).Value); Долг = СокрЛП(UsedRange.Cells(row,2).Value); Док = СоздатьОбъект("Документ.ИнвентаризацияСальдо"); Док.фсКонтрагент = спр.НайтиПоНаименованию(Имя); Док.асСотрудник =Спр2; Док.чОстаток = Долг; Док.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
26
ColonelAp4u
15.09.15
✎
15:26
|
ругается вот тут UsedRange=xl.ActiveSheet.UsedRange;
|
|||
27
ColonelAp4u
15.09.15
✎
15:26
|
Плохой тип переменной
|
|||
28
ColonelAp4u
15.09.15
✎
19:04
|
Помогите кто на работе еще
Процедура Сформировать() //В одной транзакции запись элементов в базе DBF пойдет намного быстрее НачатьТранзакцию(); xl=СоздатьОбъект("Excel.Application"); //Получаем область с заполненными данными UsedRange1=xl.ActiveSheet.UsedRange; //число строк в этой области rows=UsedRange1.Rows.Count; спр=СоздатьОбъект("Справочник.Контрагенты"); //цикл по строкам Для row = 1 По rows Цикл //читаем строку из ячейки Excel (значения должны располагаться в первой колонке) имя= UsedRange1.Cells(row,1).Value; Долг = UsedRange1.Cells(row,2).Value; Если Долг< 0 Тогда Док = СоздатьОбъект("Документ.ИнвентаризацияСальдо"); Док.асКонтрагент =имя; Док.чОстаток = Долг; Док.Записать(); ИначеЕсли Долг>0 Тогда Док = СоздатьОбъект("Документ.ИнвентаризацияСальдо"); Док.асКонтрагент = спр.НайтиПоНаименованию(Имя); Док.чОстаток = Долг; Док.Записать(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры Загрузка из хлс файла которая создает док инвентаризация сальдо, реквизит контрагент не заполняется подскажите как его заполнить |
|||
29
ColonelAp4u
15.09.15
✎
19:05
|
Пробую 2 варианта подставить просто имя(строка) и пытаюсь найти по имени но в 7 он возвращает не контра а 0 или 1 если найден или нет подскажите как заполнить реквизит если есть наименование
|
|||
30
Кочерга
15.09.15
✎
19:17
|
спр.НайтиПоНаименованию(Имя);
Док.асКонтрагент = спр.ТекущийЭлемент(); Если мне не изменяет мой склероз, то примерно около этого |
|||
31
HawkEye
16.09.15
✎
08:32
|
(28) я же предупреждал.
xl=СоздатьОбъект("Excel.Application"); //Получаем область с заполненными данными ничего ты тут не получаешь... просто объект создаешь, файл кто за тебя открывать будет? (30) это лишь вершина айсберга... |
|||
32
Остап Сулейманович
16.09.15
✎
08:40
|
(28) За "ActiveSheet", АктивЦелл и прочие актив в ВБА руки нужно обрывать по самое немогу. Из вне МСО нужно работать с конкретными книгами, листами, ячейками.
|
|||
33
ColonelAp4u
16.09.15
✎
12:22
|
Ребят не критикуйте меня по программированию на 7 вчера увидел ее 1 раз в жизни. Обработки дали мне. эксель открыт с нужным файлом и тогда он с него читает уже все сделал.
Базу очистил через Сервис Очистка БД , а в регистрах остались записи как их оттуда грохнуть? |
|||
34
palpetrovich
16.09.15
✎
12:29
|
мдя... на наших глазах происходит действие под названием " настоящему программисту пофик на чем писать" :)
|
|||
35
palpetrovich
16.09.15
✎
12:41
|
+(34) в общем, как уже говорили, хабудь про эксель, делай примерно так
// в базе источнике Процедура ПолучитьОстаткиВзаиморасчетов() Запрос = СоздатьОбъект("Запрос"); ТекстЗапр = " |ПЕРИОД С д1 По д2; |Контрагент = Регистр.ТвойРегистр.Контрагент; |ОстатокВзаиморасчетов = Регистр.ТовайРегистр.ТвойРессурс; |Функция Остаток = КонОст(ОстатокВзаиморасчетов); |Группировка Контрагент без групп;"; Если ЗапросПоПартиям.Выполнить(ТекстЗапр) = 0 Тогда Возврат; КонецЕсли; тбОстаткиВ = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(тбОстаткиВ,1,0); ЗначениеВФайл(КаталогИБ()+"Ost.txt",тбОстаткиВ,1); КонецПроцедуры // в базе приемнике Процедура ВводОстатков() Перем тзОст; ЗначениеИзФайла(КаталогИБ()+"OstPart.txt",тзОст,1); спр= СоздатьОбъект("Справочник.Контрагенты"); Док = СоздатьОбъект("Документ.ВводОстатковВзаиморасчетов"); тзОст.ВыбратьСтроки(); Пока тзОст.ПолучитьСтроку()=1 цикл Если спр.НайтиЭлемент(тзОст.Контрагент)=1 Тогда Док.Контрагент = спр.ТекущийЭлемент(); Док.Долг = число(тзОст.Остаток); КонецЕсли; КонецЦикла; Док.Записать(); КонецПроцедуры |
|||
36
Зеленый пень
16.09.15
✎
12:52
|
э....
А почему бы просто не сделать табличный документ и его сохранить в Ексель через Файл - Сохранить как? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |