Имя: Пароль:
1C
1С v8
Данные из двух справочников в Эксель (ключ - Сотрудник)
0 листопад
 
12.05.14
23:06
Создан справочник "Сторонние банки", ревизиты:
- Сотрудник
- ЛицевойСчет
- БИКБанка
- НаименованиеБанка

Как мне подгрузить эти данные в Эксель? Сейчас в Эксель выгружается инф-ция из спр.Сотрудники в отдельных столбцах. Мне надо добавить еще столбцы данными из спр.СторонниеБанки. В 1С8 можно было сделать два запроса и сделать связь по Сотруднику. А в 1С77 как? Вот код, как сейчас выгружаются данные (из спр.Сотрудники только):


Процедура ВыгрузитьСотрудников()
    
Попытка
x=СоздатьОбъект("Excel.Application");
Исключение
    Сообщить(ОписаниеОшибки(),"!!!");
    Сообщить("Возможно, MS Excel не установлен на этом компьютере.");
    Возврат;
КонецПопытки;

x.Workbooks.Add();   //книга
x.WorkSheets(1).Cells(1,1).Value="TAB_NOMER";                                        
x.WorkSheets(1).Cells(1,2).Value="FIO";                        
x.Worksheets(1).Cells(1,3).Value="ROZHD_DATA";                        
x.WorkSheets(1).Cells(1,4).Value="POL";                                
x.WorkSheets(1).Cells(1,7).Value="INN";                            
x.WorkSheets(1).Cells(1,8).Value="PFR";                                
x.WorkSheets(1).Cells(1,9).Value="LIC_SCHET";                    

x.Worksheets(1).Name = ИмяФайла;

Сотрудники = СоздатьОбъект("Справочник.Сотрудники");

Сотрудники.ВыбратьЭлементы(1);
    
ИтераторСотр = 1;

Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл

    Если Сотрудники.ЭтоГруппа() + Сотрудники.ПометкаУдаления() <> 0 тогда
    Продолжить;
КонецЕсли;

ИтераторСотр = ИтераторСотр + 1;


    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,1).Value        = "'"+Сотрудники.Код;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,2).Value        = "'"+Сотрудники.Наименование;  
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,3).Value        = "'"+Формат(Сотрудники.ДатаРождения,"ДФ=dd.MM.yyyy");
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,4).Value        = "'"+Сотрудники.Пол;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,7).Value        = "'"+Сотрудники.ИНН;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,8).Value        = "'"+Сотрудники.СтраховойНомерПФР;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,9).Value        = "'"+Сотрудники.НомерЗарплатногоСчета;
    
    КонецЦикла;


x.Quit();

Сообщить("Выгрузка завершена", "!");    

КонецПроцедуры
1 листопад
 
12.05.14
23:14
Ап!
2 kobzon
 
12.05.14
23:20
Через реквизит который на справочник Сторонние банки ссылается.
3 листопад
 
12.05.14
23:25
(2) Нет такого реквизита. В спр.СторонниеБанки есть реквизит "Сотрудники" (ссылка на спр.Сотрудники). И вот как мне их тепрь связать в Экселе?
4 листопад
 
12.05.14
23:28
Модераторы, исправьте, пож-та в заголовке с v8 на v7.
5 kobzon
 
12.05.14
23:34
Хм, ну тогда наверное как-нибудь через Сотрудники.Владелец.
6 Мигало
 
12.05.14
23:52
(0) Прям специалист-многостаночник )))
7 листопад
 
12.05.14
23:54
(5) спр.СторонниеБанки независимый. Он не является подчиненным никакому справочнику.
8 листопад
 
12.05.14
23:54
(6) Стараюсь )))
9 листопад
 
13.05.14
00:02
Я так думаю, надо выгружать в ТабЗначений спр.Сотрудники. А затем если ФИО сотрудника совпадает в двух справочниках, то добавлять колонки в ТЗ с данными уже из Спр.СторонниеБанки. Только как это реализовать в 1С77???
10 листопад
 
13.05.14
00:06
Или как вариант: набрать одну таблицу по справочнику, а второй по циклу сверить, и недостающие элементы набрать в список. Только как это теперь написать...
11 kobzon
 
13.05.14
00:08
(9) А как из ТЗ в Эксцель выгрузить знаешь?
12 kobzon
 
13.05.14
00:15
Перебирай первый справочник, добавляй строки в ТЗ.НоваяСтрока(), перебирай второй справочник, так же добавляй строки реквизитов. Потом свернуть ТЗ по сотруднику.
13 Фокусник
 
13.05.14
00:19
(7) если в справочнике СторонниеБанки несколько элементов по данному сотруднику, какой нужно выбирать для выгрузки в Эксель?
14 листопад
 
13.05.14
00:23
(13) такого точно не будет. Сотрудник в этом справочнике - один.
15 листопад
 
13.05.14
00:24
(11) Незнаю... Замкнутый круг, блин...
16 kobzon
 
13.05.14
00:28
(15) Да там все просто)
Но как то странно что связи нет.
17 Фокусник
 
13.05.14
00:31
(14) варианты: если для реквизита Сотрудник справочника СторонниеБанки включён признак отбора по реквизиту (см.в конфигураторе свойства этого реквизита), то можно воспользоваться НайтиПоРеквизиту()
Другой вариант:
Собрать в ТЗ все значения Сотрудник, СторонниеБанки. А потом делать ТЗ.НайтиЗначение() по сотруднику: находить номер строки этой ТЗ и получать из найденной строки значение СторонниеБанки для искомого Сотрудника
18 листопад
 
13.05.14
00:59
(17) Спасибо. А пример не напишите, а то боюсь, что всю ночь мне сидеть придется...
19 листопад
 
13.05.14
01:01
(17) признак отбора по реквизиту - включен.
20 Фокусник
 
13.05.14
08:09
(18) Если еще актуально:

создаем объект (перед циклом) "Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл":


спрСторонниеБанки = СоздатьОбъект("Справочник.СторонниеБанки");


//делаем поиск по справочнику СторонниеБанки в теле цикла:

Если спрСторонниеБанки.НайтиПоРеквизиту("Сотрудник", Сотрудники.ТекущийЭлемент(), 1) = 0 Тогда
    Сообщить("Не найден элемент справочника Сторонние банки по сотруднику: " + Сотрудники.ТекущийЭлемент());
    ЛицевойСчет = "";
    БИКБанка = "";
    НаименованиеБанка = "";
Иначе
    //берем данные из найденного "стороннего банка":
    ЛицевойСчет = спрСторонниеБанки.ЛицевойСчет;
    БИКБанка = спрСторонниеБанки.БИКБанка;
    НаименованиеБанка = спрСторонниеБанки.НаименованиеБанка;
КонецЕсли;


Далее работаем с переменными: ЛицевойСчет, БИКБанка, НаименованиеБанка
21 Torquader
 
13.05.14
20:33
Как странно - вас ещё отсюда не выгнали.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.