Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
12 Дек 2017, 11:21
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Как обратиться к табличной части справочника  (Прочитано 15295 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lilitana

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-19
  • Сайт: 
  • Профессия: Программист 1С
Здравствуйте! Я только начинаю программировать, и сейчас делаю выгрузку данных справочника из 1С 8.0 в 7.7. Возник вопрос, как выгрузить Наименование из определенной табличной части?Дело в том, что реквизит Наименование есть и в реквизитах и в табличных частях, и содержащаяся в них информация разная. Мне нужна информация из табличной части БухДанные. Помогите, пожалуйста!!! Вот код:
Процедура КнопкаВыполнитьНажатие(Кнопка)
ИмяФайла= "c:\Мои документы\Выгрузка.xml";
Запись = Новый ЗаписьXML;
УдалитьФайлы(ИмяФайла);
Запись.ОткрытьФайл(ИмяФайла);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Трубы");
Выборка = Справочники.Трубы.Выбрать();
НомерСтроки = 1;
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Объект=Выборка.ПолучитьОбъект();
Запись.ЗаписатьНачалоЭлемента("Строка");
Запись.ЗаписатьАтрибут("Номер",Формат(НомерСтроки,"ЧДЦ=0;Чг="));
Запись.ЗаписатьНачалоЭлемента("Наименование",Строка(Объект.Наименование));
Запись.ЗаписатьТекст(Объект.Наименование);
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("ИнвентарныйНомер",Строка(Объект.ИнвентарныйНомер));
Запись.ЗаписатьТекст(Объект.ИнвентарныйНомер);
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("Протяженность",Формат(Объект.Протяженность,"ЧДЦ=2;ЧГ=;ЧН="));
Запись.ЗаписатьТекст(Формат(Объект.Протяженность,"ЧДЦ=2;ЧГ=;ЧН="));
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
Сообщить("Справочник Трубы выгружен в файл "+ИмяФайла+"!");
КонецПроцедуры


Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Зря получаете объект, объект получают только если нужно его модифицировать, в других случаях эта операция не нужна, вдобавок она еще и тяжеловесна:
Объект=Выборка.ПолучитьОбъект();

Достаточно обращаться ко всем полям объекта от элемента "Выборка":
Выборка.Наименование;

И табличная часть так же, только для получения значений строк табличной части, придется их перебирать циклом:
ТабЧасть=Выборка.ИмяТабЧастиОбъекта;
Для каждого СтрокаТабЧасти из ТабЧасть Цикл
     ТабЧастьНаименование=СтрокаТабЧасти.Наименование;
КонецЦикла;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Lilitana

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-19
  • Сайт: 
  • Профессия: Программист 1С
Спасибо за совет! Сделала этот цикл, но все равно обработка не идет, ссылается на ошибку:
 Форма.Форма(21)}: Значение не является значением объектного типа (Наименование) Запись.ЗаписатьНачалоЭлемента("Наименование",Строка(СтрокаТабЧасти.Наименование));
Я уже чего только в эту строку не писала, все равно ошибка.В чем может быть ошибка?
Процедура КнопкаВыполнитьНажатие(Кнопка)
ИмяФайла= "c:\Мои документы\Выгрузка.xml";
Запись = Новый ЗаписьXML;
УдалитьФайлы(ИмяФайла);
Запись.ОткрытьФайл(ИмяФайла);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Трубы");
Выборка = Справочники.Трубы.Выбрать();
НомерСтроки = 1;
Пока Выборка.Следующий() Цикл
ТабЧасть=Выборка.БухДанные;
Для каждого СтрокаТабЧасти из ТабЧасть Цикл
ТабЧастьНаименование=СтрокаТабЧасти.Наименование;
КонецЦикла;
      Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("Строка");
Запись.ЗаписатьАтрибут("Номер",Формат(НомерСтроки,"ЧДЦ=0;Чг="));
Запись.ЗаписатьНачалоЭлемента("Наименование",Строка(СтрокаТабЧасти.Наименование));
Запись.ЗаписатьТекст(СтрокаТабЧасти.Наименование);
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("ИнвентарныйНомер",Строка(Выборка.ИнвентарныйНомер));
Запись.ЗаписатьТекст(Выборка.ИнвентарныйНомер);
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("Протяженность",Формат(Выборка.Протяженность,"ЧДЦ=2;ЧГ=;ЧН="));
Запись.ЗаписатьТекст(Формат(Выборка.Протяженность,"ЧДЦ=2;ЧГ=;ЧН="));
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
Сообщить("Справочник Трубы выгружен в файл "+ИмяФайла+"!");
КонецПроцедуры


Оффлайн Lilitana

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-19
  • Сайт: 
  • Профессия: Программист 1С
Сейчас немного переделала, вроде-бы правильно выгружает, вот только грузит не все, может я напутала с циклами?
Процедура КнопкаВыполнитьНажатие(Кнопка)
ИмяФайла= "c:\Мои документы\Выгрузка протяженности.xml";
Запись = Новый ЗаписьXML;
УдалитьФайлы(ИмяФайла);
Запись.ОткрытьФайл(ИмяФайла);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Трубы");
Выборка = Справочники.Трубы.Выбрать();
НомерСтроки = 1;
Пока Выборка.Следующий() Цикл
ТабЧасть=Выборка.БухДанные;
Для каждого СтрокаТабЧасти из ТабЧасть Цикл
//ТабЧастьНаименование=СтрокаТабЧасти.Наименование;
      Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("Строка");
Запись.ЗаписатьАтрибут("Номер",Формат(НомерСтроки,"ЧДЦ=0;Чг="));
Запись.ЗаписатьНачалоЭлемента("Наименование",Строка(СтрокаТабЧасти.Наименование));
Запись.ЗаписатьТекст(СтрокаТабЧасти.Наименование);
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("ИнвентарныйНомер",Строка(Выборка.ИнвентарныйНомер));
Запись.ЗаписатьТекст(Выборка.ИнвентарныйНомер);
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("Протяженность",Формат(Выборка.Протяженность,"ЧДЦ=2;ЧГ=;ЧН="));
Запись.ЗаписатьТекст(Формат(Выборка.Протяженность,"ЧДЦ=2;ЧГ=;ЧН="));
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
Сообщить("Справочник Трубы выгружен в файл "+ИмяФайла+"!");
КонецПроцедуры

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Что значит не все грузит?

Да, в первый раз был не правильный цикл, но в последнем посте нормальный
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Lilitana

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-19
  • Сайт: 
  • Профессия: Программист 1С
у меня больше 16 тыс. наименований, а выгружено 6 тыс. Первый раз, когда выгружалось наименование не из табличной части, было правильно

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Так надо наименование из таб.части или из самого элемента?
Сейчас у Вас пропускаются все элементы, которые являются Группой и у которых в табличной части ничего нет.
Если нужно выгружать элементы без таб.частей (да и вообще, для уменьшения выходного файла), то рекомендую вынести выгружаемые поля элемента (кроме таб.части) перед цикл.

Ну и проверку на Группу тоже лучше делать перед циклом, чтобы лишний раз не заходить туда:

Пока Выборка.Следующий() Цикл
        Если Выборка.ЭтоГруппа Тогда
             Продолжить;
        КонецЕсли;

        ТабЧасть=Выборка.БухДанные;
        Для каждого СтрокаТабЧасти из ТабЧасть Цикл
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Lilitana

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-19
  • Сайт: 
  • Профессия: Программист 1С
Спасибо огромное!!! У меня в этом справочнике половина табличных частей не заполнено, поэтому выгружались только те элементы, у которых в табличной части что-то было. Теперь бьюсь с загрузкой этого файла в 1С 7.7. Не подскажите, почему при чтении элемента появляется ошибка: Значение не представляет агрегатный объект (Значение)? Может быть потому что  в XML-файле в названиях элементов добавлено d3p1: (Например: d3p1:Протяженность)? Пробовала в коде при чтении значения добавлять  d3p1: , но появляется другая ошибка: Ошибка исполнения метода.
Вот часть XML:
<Трубы>

<Строка Номер="1">
<d3p1:Наименование> г Липецк ул Ленина</d3p1:Наименование>
<ИнвентарныйНомер/>
<d3p1:НомерДокументации>13007-Д</d3p1:НомерДокументации>
<d3p1:Протяженность>1,00</d3p1:Протяженность>
</Строка>

<Строка Номер="2">
<d3p1:Наименование> г Липецк ул 300 лет Рос.Флота</d3p1:Наименование>
<ИнвентарныйНомер/>
<d3p1:НомерДокументации>12760-Д</d3p1:НомерДокументации>
<d3p1:Протяженность>51,60</d3p1:Протяженность>
</Строка> 
...
<Строка Номер="16894">
<d3p1:Наименование>ул. Советская</d3p1:Наименование>
<d3p1:ИнвентарныйНомер>52700</d3p1:ИнвентарныйНомер>
<d3p1:НомерДокументации>3-С</d3p1:НомерДокументации>
<d3p1:Протяженность>1478,80</d3p1:Протяженность>
</Строка>
</Трубы>

Вот код:
		ФайлДанных=Анализатор.СоздатьДокумент();
ФайлДанных.Загрузить(ИмяФайла);
ВсеУзлы=ФайлДанных.ВыбратьУзлы("Трубы");

Данные=ВсеУзлы.ПолучитьУзел(0);

Справочник = Данные.ПолучитьПодчиненныйПоНомеру(1);
Трубы= СоздатьОбъект("Справочник.ОсновныеСредства");

Для х = 1 по Данные.КоличествоПодчиненных() Цикл
Элемент = Данные.ПолучитьПодчиненныйПоНомеру(х);
ТекущийЭлемент = Элемент.Наименование;
Если ТекущийЭлемент = "Строка" Тогда 

ИнвентарныйНомер=СокрЛП(Строка(Элемент.ВыбратьУзел("ИнвентарныйНомер").Значение));
Протяженность=СокрЛП(Строка(Элемент.ВыбратьУзел("Протяженность").Значение));
НомерДокументации=СокрЛП(Строка(Элемент.ВыбратьУзел("НомерДокументации").Значение));
Наименование=СокрЛП(Строка(Элемент.ВыбратьУзел("Наименование").Значение));

КонецЕсли;
Если Трубы.НайтиПоКоду(ИнвентарныйНомер) = 0 Тогда
Сообщить("При загрузке файла не найдено " + Наименование + "с инвентарным номером "+ ИнвентарныйНомер + "и Номером архивного дела "+НомерДокументации+". Протяженность не записана!");
Продолжить;
Иначе Трубы.Кол = Протяженность;
Трубы.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры     


Оффлайн Lilitana

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-19
  • Сайт: 
  • Профессия: Программист 1С
Добрый день! Изаините, что предыдущий пост был не в тот раздел ))) Скажите пожалуйста, а можно выгружать наименование из табличной части, но пустые наименования при этом не пропускать?


Теги:
 

Как вызвать "Анализ субконто" из справочника "Контрагенты"

Автор EnigManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6487
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2029
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Изменение цвета при подборе сотрудника в форме списка справочника "Сотрудники организации" для документа "Зарплата к выплате организаций" ЗУП 2.5

Автор ksander-farsРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 263
Последний ответ 12 Окт 2017, 14:02
от wise
Работа с формой Справочника "Физ.Лица" в ЗУП 2.5

Автор Митя_Просто_МитяРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3886
Последний ответ 15 Дек 2011, 00:04
от Vit1501
Чистка справочника "Налоги и взносы"

Автор dim3740Раздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 394
Последний ответ 17 Май 2017, 17:55
от Геннадий ОбьГЭС

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
168 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
46 Сообщений
andron81_81
42 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
BuhRust
29 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 871
  • Точка Скрытых: 0
  • Точка Пользователей: 12
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal