Нужно вытащить все документы в реквизитах которых есть сылка на справочник номенклатура, сделал так:
Для Каждого док из Метаданные.документы Цикл
ддд=Документы[Док.Имя];
// Сообщить(док.ПолноеИмя()+ТипЗнч(док));
Выборка = ддд.Выбрать();
Пока выборка.Следующий() Цикл
Для каждого сс Из выборка.ссылка.реквизиты Цикл
Если ТипЗнч(сс)=тип(«справочник.ссылка.номенклатура») Тогда
Сообщить(док.ПолноеИмя()+ТипЗнч(док));
//Сообщить(ТипЗнч(Выборка.Номер));
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
документы выбираются, реквизиты у каждого видны, но как их все перебрать программно чтобы определить где ТипЗнч(сс)=тип(«справочник.ссылка.номенклатура») ?
Перебор реквизтов документа
Автор Bitaxa, 02 мар 2018, 18:18
0 Пользователей и 1 гость просматривают эту тему.
Есть вот такая форма. В поле «документ» на форме пользователь выбирает один из документов в информационной базе. Нужно, чтобы из выбранного документа были взяты определенные реквизиты и записаны в txt. Не понимаю что мне в модуле формы нужно написать, чтобы получить документ, выбранный пользователем, и начать перебирать его реквизиты
Знаю, что надо метаданные использовать, но не понимаю как это все связать.
Цитата: Bitaxa от 02 мар 2018, 18:18
Есть вот такая форма. В поле «документ» на форме пользователь выбирает один из документов в информационной базе. Нужно, чтобы из выбранного документа были взяты определенные реквизиты и записаны в txt. Не понимаю что мне в модуле формы нужно написать, чтобы получить документ, выбранный пользователем, и начать перебирать его реквизиты
Знаю, что надо метаданные использовать, но не понимаю как это все связать.
Вообще задание звучит следующим образом:Разработать внешнюю обработку «ПерегрузкаДокументов». На ней должна быть возможность выбрать один из документов. При нажатии на кнопку информация, содержащиеся в выбранном документе, должна выгрузиться в указанный файл txt. Все сделать через Метаданные.
Готовое решение не нужно. просто хочу понять, какие темы для этого надо читать и что нужно понимать.
Документ = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
МетаданныеДокумента = Документ.Метаданные().Реквизиты;
Для Каждого Реквизит из МетаданныеДокумента Цикл
Сообщить(Реквизит.Имя);
КонецЦикла;
Цитата: AIFrame от 02 мар 2018, 19:01
Документ = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
МетаданныеДокумента = Документ.Метаданные().Реквизиты;
Для Каждого Реквизит из МетаданныеДокумента Цикл
Сообщить(Реквизит.Имя);
КонецЦикла;
Я так понимаю здесь идет обращение к конкретному документу?
Цитата: Bitaxa от 02 мар 2018, 18:36информация, содержащиеся в выбранном документе, должна выгрузиться в указанный файл txt
ТекстДляЗаписи = Новый ТекстовыйДокумент;
Документ = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
МетаданныеДокумента = Документ.Метаданные().Реквизиты;
Для Каждого Реквизит из МетаданныеДокумента Цикл
ТекстДляЗаписи.ДобавитьСтроку("" + Реквизит.Имя + ":" + Документ[Реквизит.Имя]);
КонецЦикла;
ТекстДляЗаписи.Записать("C:test.txt");
Чо еще надо то?
Цитата: AIFrame от 03 мар 2018, 00:25
Цитата: Bitaxa от 02 мар 2018, 18:36информация, содержащиеся в выбранном документе, должна выгрузиться в указанный файл txt
ТекстДляЗаписи = Новый ТекстовыйДокумент;
Документ = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
МетаданныеДокумента = Документ.Метаданные().Реквизиты;
Для Каждого Реквизит из МетаданныеДокумента Цикл
ТекстДляЗаписи.ДобавитьСтроку("" + Реквизит.Имя + ":" + Документ[Реквизит.Имя]);
КонецЦикла;
ТекстДляЗаписи.Записать("C:test.txt");
Чо еще надо то?
Просто не понимаю, здесь для конкретного документа или нет?)
У меня документ выбирается пользователем.
Добавлено: 03 мар 2018, 10:37
Цитата: AIFrame от 03 мар 2018, 00:25
Цитата: Bitaxa от 02 мар 2018, 18:36информация, содержащиеся в выбранном документе, должна выгрузиться в указанный файл txt
ТекстДляЗаписи = Новый ТекстовыйДокумент;
Документ = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
МетаданныеДокумента = Документ.Метаданные().Реквизиты;
Для Каждого Реквизит из МетаданныеДокумента Цикл
ТекстДляЗаписи.ДобавитьСтроку("" + Реквизит.Имя + ":" + Документ[Реквизит.Имя]);
КонецЦикла;
ТекстДляЗаписи.Записать("C:test.txt");
Чо еще надо то?
&НаКлиенте
Процедура Выгрузить(Команда)
ТекстДляЗаписи = Новый ТекстовыйДокумент;
//Документ = Документы.ОказаниеУслуг.ПустаяСсылка();
Документ = ЭтаФорма.Элементы.Документ.ПутьКДанным;
МетаданныеДокумента = Документ.Метаданные().Реквизиты;
Для Каждого Реквизит из МетаданныеДокумента Цикл
ТекстДляЗаписи.ДобавитьСтроку(«» + Реквизит.Имя + «:» + Документ[Реквизит.Имя]);
КонецЦикла;
ТекстДляЗаписи.Записать(«C:test.txt»)
КонецПроцедуры
Вот что сделал. Пишет «Свойство недоступно»
Цитата: Bitaxa от 03 мар 2018, 10:06Документ = ЭтаФорма.Элементы.Документ.ПутьКДанным;
Откуда вы такие ужасы вообще берете?
Док = Документ;
Или если это реквизит объекта
Док = Объект.Документ;
Не страдай ерундой.
Откуда вы такие ужасы вообще берете?
Док = Документ;
Или если это реквизит объекта
Док = Объект.Документ;
Не страдай ерундой.
[/quote]
Спасибо)))вот что пишет:{ВнешняяОбработка.ВнешняяОбработка1.Форма.ПерегрузкаДокумента.Форма(9)}: Метод объекта не обнаружен (Метаданные)
МетаданныеДокумента = Док.Метаданные().Реквизиты;
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Перебор реквизтов документа
Похожие темы (5)
Поиск
+1
1С 8.x : Реквизит ~ Перебор реквизитов Формы
//Перебор Основных Реквизитов формы
Для Каждого Рек из ЭтаФорма.Метаданные().Реквизиты Цикл
Сообщить(рек.Имя+" - "+рек.Синоним+" - "+Строка(рек.Тип));
КонецЦикла;
// или так
Для Каждого Рек из Метаданные().Реквизиты Цикл
Сообщить(рек.Имя+" - "+рек.Синоним+" - "+Строка(рек.Тип));
КонецЦикла;
//Реквизиты формы - Надписи, Поля Ввода и т.д
//можно и через ЭтаФорма.ЭлементыФормы
Для Каждого Рек из ЭлементыФормы Цикл
Сообщить(Строка(рек)+" - "+рек.имя);
КонецЦикла;
Перебор реквизитов определенного слоя формы:
Код 1C v 7.x
Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
ТекущаяСтраница = ЗначениеЗакладки;
Форма.ИспользоватьСлой("Кнопки,"+СокрЛП(ТекущаяСтраница), 2);
Если ТекущаяСтраница="зклдПодписание" Тогда
Для Инд = 1 По Метаданные.Справочник("ДоговораНов").Реквизит() Цикл
Реквизит = Метаданные.Справочник("ДоговораНов").Реквизит(Инд);
Если Форма.ПолучитьАтрибут(Реквизит).Видимость() = 1 Тогда
Форма.ПолучитьАтрибут(Реквизит).Доступность(0);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Перебор реквизитов ТЧ и все что с этим связано.
Beholder 0 — 28.04.2012 — 08:10 |
Всем привет. Возникла задача перебрать реквизиты табличной части документа и по определенному условию сохранить их, например в ТЗ. Перебрал примерно в таком цикле реквизиты: Для каждого РеквизитТЧ из Ссылка.Метаданные().ТабличныеЧасти.ТЧ.Реквизиты Цикл …. КонецЦикла. Теперь, по идее, нужно сделать вложенный цикл, операцию сравнения и, если реквизит нужный — записать его имя и значение. Прошу помощи в синтаксисе. Как по имени реквизита тч получить его значение? |
|
Beholder 1 — 28.04.2012 — 08:23 |
Всем спасибо, задача решена примерно следующим образом
|
|
Viking 2 — 28.04.2012 — 10:06 |
а чем «ВыгрузитьКолонки()» не понравилось?
|
|
Beholder 3 — 28.04.2012 — 10:31 |
(2), у меня есть список реквизитов, которые необходимо контролировать от изменения и писать, в случае изменения в регистр. Это не только реквизиты табличной части, но и реквизиты шапки. ПОэтому просто выгрузитьКолонки() ниче не даст.
|
//Перебор Основных Реквизитов формы
Для Каждого Рек из ЭтаФорма.Метаданные().Реквизиты Цикл
Сообщить(рек.Имя+" - "+рек.Синоним+" - "+Строка(рек.Тип));
КонецЦикла;
// или так
Для Каждого Рек из Метаданные().Реквизиты Цикл
Сообщить(рек.Имя+" - "+рек.Синоним+" - "+Строка(рек.Тип));
КонецЦикла;
//Реквизиты формы - Надписи, Поля Ввода и т.д
//можно и через ЭтаФорма.ЭлементыФормы
Для Каждого Рек из ЭлементыФормы Цикл
Сообщить(Строка(рек)+" - "+рек.имя);
КонецЦикла;
Код 1C v 7.x
//функция создаёт список реквизитов документа
Процедура гСписокРеквизитовДокумента(Список,Документ,ФлагПредставление=0) Экспорт
//Шапка
Для i=1 По Метаданные.Документ(Документ).РеквизитШапки() Цикл
Ж=Метаданные.Документ(Документ).РеквизитШапки(i);
Если ФлагПредставление=0 Тогда
Представление=Ж.Идентификатор;
Иначе
Представление=Ж.Представление();
КонецЕсли;
Список.ДобавитьЗначение(Ж.Идентификатор,"Ш: "+Представление);
КонецЦикла;
//Табличная часть
Для i=1 По Метаданные.Документ(Документ).РеквизитТабличнойЧасти() Цикл
Ж=Метаданные.Документ(Документ).РеквизитТабличнойЧасти(i);
Если ФлагПредставление=0 Тогда
Представление=Ж.Идентификатор;
Иначе
Представление=Ж.Представление();
КонецЕсли;
Список.ДобавитьЗначение(Ж.Идентификатор,"Т: "+Представление);
КонецЦикла;
//Общие
Для i=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Ж=Метаданные.ОбщийРеквизитДокумента(i);
Если ФлагПредставление=0 Тогда
Представление=Ж.Идентификатор;
Иначе
Представление=Ж.Представление();
КонецЕсли;
Список.ДобавитьЗначение(Ж.Идентификатор,"О: "+Представление);
КонецЦикла;
КонецПроцедуры
Хотите узнать больше по этому вопросу?
Подпишитесь на нашу рассылку новостей
Подписаться
Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:
Предложить статью
Andrey102019 5 / 4 / 1 Регистрация: 21.10.2019 Сообщений: 194 |
||||||||
1 |
||||||||
Как обойти все реквизиты справочника?21.11.2019, 16:12. Показов 11896. Ответов 8 Метки 1с 8.3 оф (Все метки)
Мне нужно обойти все реквизиты справочника номенклатура, что бы найти реквизиты определенного типа.
Добавлено через 8 минут
проверить, что текущий ТекОбъект сам является ссылкой из Справочника Номенкалатура?
0 |
Tklwegsd 841 / 604 / 211 Регистрация: 24.07.2013 Сообщений: 2,101 |
||||
21.11.2019, 20:28 |
2 |
|||
1 |
Andrey102019 5 / 4 / 1 Регистрация: 21.10.2019 Сообщений: 194 |
||||
22.11.2019, 15:03 [ТС] |
3 |
|||
как из реквизита прочитать значение?
Добавлено через 14 минут Добавлено через 8 минут
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
23.11.2019, 02:44 |
4 |
0 |
5 / 4 / 1 Регистрация: 21.10.2019 Сообщений: 194 |
|
25.11.2019, 13:07 [ТС] |
5 |
Как проверить есть ли в реквизитах справочника определенное наименование? Зачем вы меня отправили в мою тему?
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
27.11.2019, 00:16 |
6 |
как из реквизита прочитать значение? вот так
Andrey102019, Как проверить есть ли в реквизитах справочника определенное наименование? Добавлено через 22 секунды
Зачем вы меня отправили в мою тему? Затем и отправил что вопрос повторяется…
0 |
5 / 4 / 1 Регистрация: 21.10.2019 Сообщений: 194 |
|
27.11.2019, 09:22 [ТС] |
7 |
Затем и отправил что вопрос повторяется… он не то что повторятся, я же его просто создал, что бы понятнее объяснить, что хочется получить в итоге) В последствии оказалось, что такой вариант не подойдет, время выполнения будет огромное)
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
27.11.2019, 23:24 |
8 |
В последствии оказалось, что такой вариант не подойдет, время выполнения будет огромное) какой вариант, почему будет огромное время… Ничего не понял
0 |
5 / 4 / 1 Регистрация: 21.10.2019 Сообщений: 194 |
|
28.11.2019, 15:34 [ТС] |
9 |
какой вариант, почему будет огромное время… Ничего не понял Если в программе проверять вхождение Текущей ссылки в Справочник Номенклатура, по данной функции НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>) Почему может не работать Пример из Синт.пом?, то это займет много времени , близкое к минуте. Извините я кажется сам уже сбился в своих темах где и что спрашивал, из за вашей ссылки на мою же тему —
Andrey102019, Как проверить есть ли в реквизитах справочника определенное наименование? сам уже зациклился.
0 |
Нужно вытащить все документы в реквизитах которых есть сылка на справочник номенклатура, сделал так: Для Каждого док из Метаданные.документы Цикл документы выбираются, реквизиты у каждого видны, но как их все перебрать программно чтобы определить где ТипЗнч(сс)=тип(«справочник.ссылка.номенклатура») ?
там почитай — принцип один….
а надо перебрать в уже имеющихся документах? или просто определить какой вид документа имеет реквизит типа Номенклатура и что делать с составными?
Ужоснах. А составные типы что, не учитываем? А табличные части? Тебе вообще зачем это надо?
просто определить какой вид документа имеет реквизит типа Номенклатура
вроде так: ТипНоменклатура = Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»); Для Каждого Док из Метаданные.документы Цикл
о то что нужно, спасибо за помощь
Тэги:
Комментарии доступны только авторизированным пользователям