Как программно найти связанные документы

С помощью выборки вот так это выглядит:

Выборка = Документы.ЗаказПокупателя.Выбрать();

    Пока Выборка.Следующий() Цикл

        ОбработкаПрерыванияПользователя();

        Если Выборка.ПочтовыйИдентификатор<>»» Тогда

            Сообщить(Выборка.ПочтовыйИдентификатор);

            СвязанныеДокументы = КритерииОтбора.СвязанныеДокументы.Найти(Выборка.Ссылка);

            Для Каждого ТекДок из СвязанныеДокументы Цикл

                Если   ТекДок.Метаданные().Имя=»ПриходныйКассовыйОрдер» и не ТекДок.Проведен Тогда

                Сообщить(ТекДок);

                КонецЕсли;

            КонецЦикла;

        КонецЕсли;

    КонецЦикла

Как сделать с помощью запроса не соображу. Что надо использовать   ? Вложенный запрос?

для оного документа запрос выглядит так:

    Запрос.Текст = »    ВЫБРАТЬ

    |   СвязанныеДокументы.Ссылка

    |ИЗ

    |   КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы»;

    Запрос.УстановитьПараметр(«ЗначениеКритерияОтбора»,ДокОснование);

Для всех документов оснований как сделать? Конструктором сделал вот такой запрос:

    Запрос.Текст =

        «ВЫБРАТЬ

        |    ЗаказПокупателя.Ссылка,

        |    ЗаказПокупателя.Представление,

        |    ЗаказПокупателя.ПочтовыйИдентификатор

        |ИЗ

        |    Документ.ЗаказПокупателя КАК ЗаказПокупателя,

        |    (ВЫБРАТЬ

        |        СвязанныеДокументы.Ссылка.Ссылка КАК СсылкаСсылка

        |    ИЗ

        |        КритерийОтбора.СвязанныеДокументы КАК СвязанныеДокументы) КАК ВложенныйЗапрос»;

Но не догоняю как передать параметр виртуальной талицы СвязанныеДокументы ?

Связанные документы

Поиск по критериям отбора связанных документов по ссылке
ВыбДок — документ для которого ищем связные

СвязанныеДокументы = КритерииОтбора.СвязанныеДокументы.Найти(ВыбДок);
Для Каждого ТекСвязанныйДокумент из СвязанныеДокументы Цикл
Сообщить(ТекСвязанныйДокумент);
КонецЦикла;

Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.

Комментарии

AlexMir

#1, 20 сентября 2019 17:35

Этот метод не выводит всю цепочку связанных документов. Выведет только пару связанных документов. Далее этим методом нужно перебрать все полученные документы по цепочке и зафиксировать всю цепочку в списке значений. Затем вывести готовый список значений.


0


Содержание:

1.       Критерии отбора в 1С

2.       Пример создания отбора в 1С 8

3.    Связанные документы в 1С 8.3

1.      Критерии отбора в 1С

Критерии отбора в 1С – это некоторый объект в метаданных, при помощи которого можно производить отборы информации внутри базы системы 1С по представленным параметрам поиска – условиям. Можно сказать, что критерии отбора – это сводка правил, согласно которым может быть произведён выбор информации по некоторому условию в пользовательском режиме.

Рассмотрим, как происходит отбор в журнале по критерию «Контрагент»:    

Рис. 1 Отбор по критерию «Контрагент»

Данный метод очень удобен для создания структуры с подчинённостями. Её можно посмотреть, кликнув на «Перейти к иерархическому списку связанных документов», как показано ниже:



Рис. 2 Перейти к иерархическому списку связанных документов в 1С

Рассмотрим, как происходит работа связанных критериев отбора в системе 1С. Запустим 1С как «Конфигурато и откроем в метаданных раздел с критериями, как показано ниже:

Рис. 3 Раздел с критериями отбора в 1С

В «Данных» будет задан «Тип», соответствующий типу значений, которые будут подлежать отбору для поиска.

Как пример, в «ДокументыПоКонтрагенту» – тип «СправочникСсылка.Контрагенты», отбору «ДокументыСотрудников» соответствует тип «СправочникСсылка.ФизическиеЛица», как можно увидеть на скриншотах ниже:

Рис. 4 Использование критериев отбора данных


Рис. 5 Пример с критериями отбора в 1С

Стоит учесть, что можно прописывать любой тип или же определять объект по древу конфигурации, указывая некоторую произвольную ссылку:

Рис. 6 Использование критериев отбора в 1С с произвольной ссылкой

Удобство критериев отбора данных заключается в том, что внутри критерия можно задействовать и реквизиты из различных таблиц.

Во вкладке «Состав» видны элементы, для которых соответствуют данные того типа, который был прописан для работы критерия отбора. В данном окне нужно проставить «галочки» около элементов, при помощи которых производится отбор. Как только данный перечень будет указан, отбор начнёт работать.

Рис. 7 Работа критерия отбора

Видов критериев по отбору может быть много, но для работы с ними необходимо создание форм, которые в последствии можно помещать на панель с инструментами и в меню пользователя. Критерии всех выделенных объектов можно будет просматривать, кликнув на «Ещё».

    Рис. 8 Форма критериев отбора в 1С

2.      Пример создания отбора в 1С 8

Рассмотрим на примере создание отбора в 1С 8. Создадим «ДокументыПоНоменклатуре», кликнув на «Добавить», как показано на скриншоте с примером ниже:   

Рис. 9 Создание отбора в 1С 8

На вкладке «Данные» прописываем его тип «СправочникСсылка.Номенклатура».

На вкладке «Состав» нужно проверить всю документацию и около необходимой проставить «галочки» в «Номенклатура». Это и есть те элементы, при помощи которых происходит отбор.

Рис. 10 Выбор элементов для отбора в 1С 8

Также стоит отметить, что для работы отбора в 1С 8 необходимо, чтобы он находился на рабочем экране у пользователя. Находим на древе справочник «Номенклатура», после чего открываем форму для элемента. На вкладке «Командный интерфейс» устанавливаем «галочку» около строки «Документы по номенклатуре», как показано на скриншоте ниже:



Рис. 11 Критерий отбора в 1С ДокументыПоНоменклатуре

Далее запускаем команду «Обновить конфигурацию базу данных» и делаем сверку работы отбора. Запускаем любой из элементов внутри справочника «Номенклатура» и переходим на ссылку «Ещё», где находится строка «Документы по номенклатуре», как можно увидеть ниже:



Рис. 12 Проверка работы отбора в 1С 8

Кликаем на вышеописанную ссылку, после чего появится перечень документов, внутри которых содержится выбранная позиция:

Рис. 13 Список документов с критерием отбора в 1С

При помощи критериев отбора происходит программно динамический отбор и отображаются все данные, которые являются результатом поиска. Для того чтобы результат был корректным, не стоит делать слишком много видов критериев по отбору.

3.      Связанные документы в 1С 8.3

Теперь, как только основные понятия были закреплены, можно перейти к основной теме статьи – связанным документам. Связанные документы в 1С 8.3 работают по схожему принципу. Связи между документами можно увидеть, нажав на «Перейти к иерархическому списку связанных документов». Данная кнопка располагается на панели с инструментами, как показано ниже на скриншоте:    



Рис. 15 Связанные документы в 1С 8.3

Чтобы связи между документами отображались и у пользователя, необходимо в настройках для критериев отбора «СвязанныеДокументы», которые находятся во вкладке «Данные», определить перечень нескольких связанных между собой документов, как продемонстрировано ниже:



Рис. 16 Перечень нескольких связанных между собой документов

Также на панели «Состав» определить те документы, которые могут стать документами-основаниями для других:

Рис. 17 Запрос связанные документы

При помощи механизмов для критериев можно получать связанные документы, а также получать список всех связанных элементов у пользователя. Также, стоит отметить, что при описании необходимых критериев в выборке автоматически будут созданы необходимые запросы для связанных документов. Данное свойство делает проще создание любых критериев по отбору данных, а также упрощает реализацию быстрой выборки по выбранным

параметрам.

Специалист компании «Кодерлайн»

Анна Лисовая

Критерий отбора связанные документы

Автор margo, 22 окт 2020, 09:28

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

Подскажите как из связанных документов получить выборку документов разных типов и обработать их?


если настроен Критерий отбора, подчиненные документы
тогда так, для того что бы выбрать все дерево, используйте это код в рекурсивном вызове
//а еще, самое простое, посмотрите или возьмите готовый код, в своей (любой типовой) базе отчет Структура подчиненности или отчет Связанные документы
в разных базах называется по разному



//***** Создание запроса
лкЗапрос=Новый Запрос;
лкЗапрос.УстановитьПараметр("Документ",прСтрДер.Ссылка);
лкЗапрос.Текст="ВЫБРАТЬ Ссылка ИЗ КритерийОтбора.ПодчиненныеДокументы(&Документ)";

//***** Выполнение и обход результата запроса
лкВыборка=лкЗапрос.Выполнить().Выбрать();
Пока лкВыборка.Следующий() Цикл
//лкВыборка.Ссылка - подчиненный документ;
//... здесь ваш код
КонецЦикла;

если помогло нажмите: Спасибо!


Цитата: LexaK от 22 окт 2020, 10:15
если настроен Критерий отбора, подчиненные документы
тогда так, для того что бы выбрать все дерево, используйте это код в рекурсивном вызове
//а еще, самое простое, посмотрите или возьмите готовый код, в своей (любой типовой) базе отчет Структура подчиненности или отчет Связанные документы
в разных базах называется по разному


//***** Создание запроса
лкЗапрос=Новый Запрос;
лкЗапрос.УстановитьПараметр("Документ",прСтрДер.Ссылка);
лкЗапрос.Текст="ВЫБРАТЬ Ссылка ИЗ КритерийОтбора.ПодчиненныеДокументы(&Документ)";

//***** Выполнение и обход результата запроса
лкВыборка=лкЗапрос.Выполнить().Выбрать();
Пока лкВыборка.Следующий() Цикл
//лкВыборка.Ссылка - подчиненный документ;
//... здесь ваш код
КонецЦикла;

дело в том,ч то у меня получается пакет выборок, их нужно посместить в одну и посортировать по дате, а потом перепровести. в чем проблема : 1. как поместить их все в одну выборку (результаты всех пакетов) 2. если у меня в связи нет Поступление безналичных денежных средств, тогда запрос вообще пустой в результате. вот мой код:
Заказ = Неопределено;

      Запрос = Новый Запрос;
   Запрос.Текст =
      //»ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|;
      //|
      //|////////////////////////////////////////////////////////////////////////////////
      //|ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.ВозвратТоваровОтКлиента
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|;
      //|
      //|////////////////////////////////////////////////////////////////////////////////
      //|ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.ВзаимозачетЗадолженности
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|;
      //|
      //|////////////////////////////////////////////////////////////////////////////////
      //|ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеЗадолженности
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|;
      //|
      //|////////////////////////////////////////////////////////////////////////////////
      //|ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.НалоговаяНакладная
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|;
      //|
      //|////////////////////////////////////////////////////////////////////////////////
      //|ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.Приложение2КНалоговойНакладной
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|;
      //|
      //|////////////////////////////////////////////////////////////////////////////////
      //|ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПоступлениеБезналичныхДенежныхСредств
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|   И СвязанныеДокументы.Ссылка.ХозяйственнаяОперация.Ссылка = ЗНАЧЕНИЕ(перечисление.хозяйственныеоперации.поступлениеоплатыотклиента)
      //|;
      //|
      //|////////////////////////////////////////////////////////////////////////////////
      //|ВЫБРАТЬ
      //|   СвязанныеДокументы.Ссылка
      //|ИЗ
      //|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
      //|ГДЕ
      //|   СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
      //|   И СвязанныеДокументы.Ссылка.ПометкаУдаления = ЛОЖЬ
      //|   И СвязанныеДокументы.Ссылка.ХозяйственнаяОперация.Ссылка = ЗНАЧЕНИЕ(перечисление.хозяйственныеоперации.возвратоплатыклиенту)»;

      Запрос.УстановитьПараметр(«Документ», Заказ);

      Результаты = Запрос.ВыполнитьПакет();

      //Таблица = новый массив;

      РТУ = Результаты[0].выбрать();

      //таблица.Добавить(рту);
   //Пока рту.

      //Результаты.Вы
   //ВыборкаРеализацияТоваровУслуг = Результаты[0].Выбрать();
   //ВыборкаРеализацияТоваровУслуг.Следующий();
   //
   //ВыборкаРасходныйОрдерНаТовары = Результаты[1].Выбрать();
   //ВыборкаРасходныйОрдерНаТовары.Следующий();

      //Возврат  (ВыборкаРеализацияТоваровУслуг <> Неопределено И ВыборкаРеализацияТоваровУслуг.КоличествоСвязанныхДокументов <> 0)
   //      ИЛИ  (ВыборкаРасходныйОрдерНаТовары <> Неопределено И ВыборкаРасходныйОрдерНаТовары.КоличествоСвязанныхДокументов <> 0)   


так оставьте один запрос, и вот это:

ЦитироватьСвязанныеДокументы.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг

— уберите!

попробуйте запрос сначала в консоли запросов!
в одну колонку Ссылка вам вернутся как раз документы разных типов (все какие есть подчиненные)

если помогло нажмите: Спасибо!


Цитата: LexaK от 22 окт 2020, 11:00
так оставьте один запрос, и вот это:

ЦитироватьСвязанныеДокументы.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг

— уберите!

попробуйте запрос сначала в консоли запросов!
в одну колонку Ссылка вам вернутся как раз документы разных типов (все какие есть подчиненные)

:) гы… точно) будем пробоавть)

Добавлено: 22 окт 2020, 13:25


Цитата: LexaK от 22 окт 2020, 11:00
так оставьте один запрос, и вот это:

ЦитироватьСвязанныеДокументы.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг

— уберите!

попробуйте запрос сначала в консоли запросов!
в одну колонку Ссылка вам вернутся как раз документы разных типов (все какие есть подчиненные)

в консоли все получилось, а вот в обработке выборка пустая почему-то :dfbsdfbsdf:


все получилось, спасибо большое


sergeyks
22.01.2012 19:19 Прочитано: 9451

Добрый вечер!!!
УТ 1С8
Необходимо при проведении документа реализация товаров и услуг
найти связанный документ расходный ордер на товары и устанавить
дату равной дате проводимого документа и перепровести расходный
ордер на товары.

Как найти связанный документ Расходный ордер на товары.

Документ Расходный ордер на товары введен на основании
документа Реализация товаров и услуг.


Изменено 24.01.12 19:28:15

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
24.01.2012 11:10 Ответ № 1

(0) sergeyks, а по какому признаку они связаны?

ad82117
25.01.2012 13:28 Ответ № 2

Код 1C v 8.2 УП

 
&НаСервере
Процедура ПровестиДокументыНаСервере()
ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(НачалоГода(ТекущаяДата()), КонецГода(ТекущаяДата()));
Пока ВыборкаДокументов.Следующий() Цикл
ДокР = ВыборкаДокументов.Ссылка.ПолучитьОбъект();//получаем реализацию как объект
Если ПустаяСтрока(ДокР.ЗаказКлиента) = Ложь Тогда//если есть документ основание
ДокЗ = ДокР.ЗаказКлиента.Ссылка.ПолучитьОбъект();//получаем заказ как объект
//1. проверим даты
Если Формат(ДокР.Дата, "ДЛФ=Д") <> Формат(ДокЗ.Дата, "ДЛФ=Д") Тогда//если именно даты не равны
Сообщить("Дата до изменения"+Символ(10)+ДокЗ+Символ(10)+" ---> "+Символ(10)+ДокР);//сообщаем
ДокЗ.Дата = НачалоДня(ДокР.Дата);//устанавливаем дату ДокЗ как у ДокР
//добавляем в комментарий отчёт о выполенных действиях
ДокЗ.Комментарий = ""+СокрЛП(ДокЗ.Комментарий) + Символ(10)+
"//***"+Символ(10)+
"Обработкой изменена дата по реализации в начало дня"+Символ(10)+
"";
ДокЗ.Записать(РежимЗаписиДокумента.Запись);//Записываем ДокЗ
Сообщить("Дата после изменения"+Символ(10)+ДокЗ+Символ(10)+" ---> "+Символ(10)+ДокР);//сообщаем
//2. проверим время
Если Формат(ДокР.Дата, "ДЛФ=В") = Формат(ДокЗ.Дата, "ДЛФ=В") тогда //если они оба в начале дня, у докР меняем время на +1 секунду
Сообщить("Время до изменения"+Символ(10)+ДокЗ+Символ(10)+" ---> "+Символ(10)+ДокР);//сообщаем
ДокР.Дата = ДокР.Дата + 1;//добавили секунду к дате реализации
//добавляем в комментарий отчёт о выполенных действиях
ДокР.Комментарий = ""+СокрЛП(ДокР.Комментарий) + Символ(10)+
"//***"+Символ(10)+"Обработкой изменено время на 1 секунду"+Символ(10)+"";
ДокР.Записать(РежимЗаписиДокумента.Запись);//Записываем ДокЗ
Сообщить("Время после изменения"+Символ(10)+ДокЗ+Символ(10)+" ---> "+Символ(10)+ДокР);//сообщаем
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла
КонецПроцедуры

Изменено 26.01.12 11:10:23 по причине: Разукрасил код

sergeyks
26.01.2012 04:52 Ответ № 3

Спасибо!!!
Жаль, что поздно ответили.
Уже сделал самостоятельно.
Очень грамотно написано, благодарю.

ad82117
27.01.2012 13:46 Ответ № 4

Вопрос закрыт!

Подсказка: Для быстрого поиска ответов — используйте ‘Поиск’

Понравилась статья? Поделить с друзьями:
  • Как найти коэффициент оборачиваемости всего капитала
  • Metro exodus как найти аню
  • Как составить план продвижения для сайта
  • Avon мои заказы как найти
  • Как составить рацион питания на неделю для подростка