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

Автор Тема: Как перебрать значения реквизита во всех документах?  (Прочитано 10469 раз)

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

Оффлайн wildman

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 1
  • КПД: 5%
  • Регистрация: 2011-04-12
  • Сайт: 
  • Профессия: Ученик 1С
Есть переменная "НомДоговора" в которой имеется некоторое значение.
Есть Документ "Договор" с реквизитом "НомерДоговора". Мне необходимо перебрать все документы и сравнить, есть ли документ с реквизитом "НомерДоговора" = "НомДоговора".
Или это можно сделать как-то иначе?


Оффлайн wildman

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

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Договор.НомерДоговора ИЗ Документ.Договор КАК Договор";
ТабличноеПоле1 = Запрос.Выполнить().Выгрузить();
ЭлментыФормы.ТабличноеПоле1.СоздатьКолонки():
ТаблЗнач =  Запрос.Выполнить().Выгрузить();

Не пойму как перебрать все значения строки ТаблЗнач.

Оффлайн Klyacksa

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

Тогда так:
ДоговораВыборка=Документы.Договор.Выбрать(,,Новый Структура("НомерДоговора",НомДоговора));

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

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

Оффлайн wildman

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 1
  • КПД: 5%
  • Регистрация: 2011-04-12
  • Сайт: 
  • Профессия: Ученик 1С

Оффлайн zkolenko

  • **
  • Сообщений: 50
  • РЕПУТАЦИЯ: 17
  • КПД: 34%
  • Регистрация: 2010-08-02
  • Сайт: 
  • Профессия: Программист 8.1
Наиболее эффективно для данных целей использовать запрос, так как для пользователя время ожидания имеет очень важное значение то данный вариант с запросом будет наиболее предпочтителен:

&НаКлиенте
Процедура НайтиПоНомеру()
   НомерДоговора = "ЗначениеСТипомЗначенияКакВРеквизитеНомерДоговора";   
   НайтиДокументПоНомеруДоговора(НомерДоговора);
КонецПроцедуры

&НаСервере
Процедура НайтиДокументПоНомеруДоговора(НомерДоговора)
   
   запрос = новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |   Договор.Ссылка,
                  |   Договор.НомерДоговора
                  |ИЗ
                  |   Документ.Договор КАК Договор
                  |ГДЕ
                  |   Договор.НомерДоговора = &НомерДоговора";
   Запрос.УстановитьПараметр("НомерДоговора", НомерДоговора);
   Результат = Запрос.Выполнить();
   ТаблицаЗначений = Результат.Выгрузить();
   
   //В ТаблицаЗначений вы выгружаете ссылки тех документов, у
   //которых реквизит НомерДоговора равен переменной НомерДоговора
   //а дельше имея таблицу значений с ссылками на нужные документы
   //делайте с этими документами все что хотите, например
   Для Каждого Док Из ТаблицаЗначений Цикл
      Документ = Док.Ссылка;
      Сообщить("Документ с номером: "+Документ.Номер);
      Сообщить("И датой: "+Документ.Дата);
      Сообщить("Имеет значение реквизита НомерДоговора = "+Документ.НомерДоговора);
      ДокументДляИзменения = Документ.ПолучитьОбъект();
      ДокументДляИзменения.Удалить();
   КонецЦикла;
   
   
КонецПроцедуры

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1101
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
То есть сперва через метаданные перебрать все реквизиты всех документов и сформировать список имен документов, у которых имеется реквизит НомерДоговора?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн zkolenko

  • **
  • Сообщений: 50
  • РЕПУТАЦИЯ: 17
  • КПД: 34%
  • Регистрация: 2010-08-02
  • Сайт: 
  • Профессия: Программист 8.1
То есть сперва через метаданные перебрать все реквизиты всех документов и сформировать список имен документов, у которых имеется реквизит НомерДоговора?
Формируем список документов, естественно этот код должен быть в серверной процедуре, так:

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

Оффлайн zkolenko

  • **
  • Сообщений: 50
  • РЕПУТАЦИЯ: 17
  • КПД: 34%
  • Регистрация: 2010-08-02
  • Сайт: 
  • Профессия: Программист 8.1
В этой строчке вместо реквизита с названием "ПодотчетноеЛицо" напишите название того реквизита, который вы ищите, например "НомерДоговора"
Было так:
Если РеквизитыДок.Найти("ПодотчетноеЛицо")<>Неопределено Тогда

а станет так:
Если РеквизитыДок.Найти("НомерДоговора")<>Неопределено Тогда

Оффлайн zkolenko

  • **
  • Сообщений: 50
  • РЕПУТАЦИЯ: 17
  • КПД: 34%
  • Регистрация: 2010-08-02
  • Сайт: 
  • Профессия: Программист 8.1
   //вот полный пример где я искал все докменты где есть реквизит валюта и
   //потом выбирал из них те, где есть та валюта которую я хочу найти
   массивПодходящихДокументов = новый Массив;
   Для Каждого Документ Из Документы Цикл
      РеквизитыДок = Документ.ПустаяСсылка().Метаданные().Реквизиты;
      Если РеквизитыДок.Найти("Валюта")<>Неопределено Тогда
         массивПодходящихДокументов.Добавить(Документ.ПустаяСсылка());
      КонецЕсли;
   КонецЦикла;
   
   переменнаяЗначенияПоиска = Справочники.Валюты.НайтиПоНаименованию("RUB");;
   перемНазваниеРеквизитаПоиска = "Валюта";
   
   ТекстЗапроса = "ВЫБРАТЬ
   |   Документ.Ссылка
   |ИЗ
   |   [НаименованиеДокумента] КАК Документ
   |ГДЕ
   |   Документ.[названиеРеквизитаДляПоиска] = &Значение";
   
   РазделительПакетногоЗапроса = "
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |";

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

   
   Запрос = новый Запрос;
   Запрос.Текст = ТекстПакетногоЗапроса;
   Запрос.УстановитьПараметр("Значение", переменнаяЗначенияПоиска);
   массивРезультат = новый Массив;
   массивРезультат = запрос.ВыполнитьПакет();
   
   //получили массив результатов пакетного запроса
   //теперь можем перебрать массив и выбрать все найденные документы вот так
   
   Для Каждого Результат из массивРезультат Цикл
      Выборка = Результат.Выбрать();
      Пока Выборка.Следующий() Цикл
         Сообщить(Выборка.Ссылка);
         Сообщить("Комментарии: "+Выборка.Ссылка.Метаданные().Комментарий);
      КонецЦикла;
   КонецЦикла;


Теги:
 

Значения некоторых колонок являются суммами некоторых колонок, которые в свою очередь так же являются суммами других. Как упорядочить?

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

Ответов: 2
Просмотров: 603
Последний ответ 26 Июн 2017, 14:32
от AsadRoman
Что быстрее: Загрузить табличную часть в запрос и там добавить колонки, или пробежаться циклом по ТЧ и добавить значения в колонки

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

Ответов: 1
Просмотров: 1420
Последний ответ 11 Июл 2016, 09:00
от vitasw
как получить значение реквизита "Код" в обработке "ПодборНоменклатуры" в УТ10.3

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

Ответов: 2
Просмотров: 1669
Последний ответ 02 Дек 2016, 12:58
от Jalib
Заполнение табличной части при выборе реквизита другой табличной части в документе.

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

Ответов: 5
Просмотров: 1695
Последний ответ 25 Окт 2017, 14:15
от Vlad-93
Очищается один реквизит объекта на форме при изменении другого реквизита объекта на форме

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

Ответов: 10
Просмотров: 500
Последний ответ 03 Авг 2018, 17:37
от AsadRoman

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

oleg-x
69 Сообщений
AIFrame AIFrame
60 Сообщений
wise wise
51 Сообщений
alex0402
46 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
46 Сообщений
alexandr_ll
45 Сообщений
BuhRust
27 Сообщений
andron81_81
24 Сообщений
LexaK
22 Сообщений
byte777
21 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal