|
Связанные документы | ☑ | ||
|---|---|---|---|---|
|
0
tishkir
30.07.26
✎
12:53
|
Здравствуйте.
Решаю задачу, чтобы программно найти подчиненные документы к Реализации. Запрос по критериям отбора и строка типа НайденныеСвязанныеДокументы = КритерииОтбора.СвязанныеДокументы.Найти(ДокументСсылка); возвращают только исходную реализацию. Прошу подсказать, кто сталкивался. Может в недрах 1с уже есть готовая процедура. 1С УТ 11.5 |
|||
|
1
tishkir
30.07.26
✎
12:58
|
мне надо все что внизу от реализации ))
|
|||
|
2
paramedic
30.07.26
✎
13:18
|
В недрах ЕРП (КА, УТ) есть общая форма СвязанныеДокументы. Там есть все для копипасты в свой код получения структуры подчиненности. Раздельно вверх и вниз.
|
|||
|
3
Fedor-1971
30.07.26
✎
13:57
|
(0) Попробуй посмотреть тут: ОбщаяФорма.СвязанныеДокументы.Форма.Модуль(822, 4)
|
|||
|
4
Garykom
гуру
30.07.26
✎
14:18
|
Отладка > Замер производительности
Выполняешь действия, останавливаешь замер, копаешься/ищешь в списке строк кода Находишь подходящие места, ставишь точки останова Снова запускаешь, "Стек вызова", изучаешь что происходит через отладку |
|||
|
5
Garykom
гуру
30.07.26
✎
14:27
|
Короче там на основе
Метаданные.КритерииОтбора.СвязанныеДокументы.Состав Строится кодом текст запроса и выполняется С условиями типа .ДокументОснование = &ЗначениеКритерияОтбора .ПервичныйДокумент = &ЗначениеКритерияОтбора и т.д. |
|||
|
6
Garykom
гуру
30.07.26
✎
14:26
|
Самое обидное что функции нифига не экспортные и в модуле формы
Когда писали нифига не подумали что такое надо в общий модуль выносить |
|||
|
7
tishkir
03.08.26
✎
11:49
|
Здравствуйте.
Спасибо большое всем, кто помогал. В виде запроса данную задачу решить нереально (для меня). Пришлось копировать реквизиты и текст модуля формы СвязанныеДокументы и допиливать под свои нужды. В результате у меня получилась процедура, которая по ссылке на любой документ выдает таблицу значений со всеми дочерними документами. Так или иначе нужный результат получен, жаль что при помощи костылей и гипса. 1с в очередной раз "удивила". Спасибо. |
|||
|
8
maxab72
03.08.26
✎
11:55
|
(7) В УТ10.3 там простой код для формирования запроса:
Процедура ЗаполнитьТаблицуСвязанныхДокументов() Таблица = ПолныеПрава.ПолучитьСписокДокументовПоКритериюОтбора("СвязанныеДокументы", Ссылка); КэшПоТипамДокументов = Новый Соответствие; Для Каждого СтрокаТаблицы ИЗ Таблица Цикл МетаданныеДокумента = СтрокаТаблицы.Ссылка.Метаданные(); Попытка Если Не ПравоДоступа("Чтение", МетаданныеДокумента) Тогда Продолжить; КонецЕсли; Исключение Продолжить; КонецПопытки; ИмяДокумента = МетаданныеДокумента.Имя; СинонимДокумента = МетаданныеДокумента.Синоним; ДополнитьКэшМетаданных(МетаданныеДокумента, ИмяДокумента); СтруктураТипа = КэшПоТипамДокументов[ИмяДокумента]; Если СтруктураТипа = Неопределено Тогда СтруктураТипа = Новый Структура("Синоним, МассивСсылок", СинонимДокумента, Новый Массив); КэшПоТипамДокументов.Вставить(ИмяДокумента, СтруктураТипа); КонецЕсли; СтруктураТипа.МассивСсылок.Добавить(СтрокаТаблицы.Ссылка); КонецЦикла; ЕСли КэшПоТипамДокументов.Количество() = 0 ТОгда Возврат; КонецЕсли; ТекстЗапросаНачало = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ ("; ТекстЗапросаКонец = ") КАК ПодчиненныеДокументы УПОРЯДОЧИТЬ ПО ПодчиненныеДокументы.Дата, ПодчиненныеДокументы.Номер"; Запрос = Новый Запрос; ТекстЗапроса = ""; Для Каждого КлючИЗначение ИЗ КэшПоТипамДокументов Цикл ТекстЗапроса = ТекстЗапроса + ?(ТекстЗапроса = "", " |ВЫБРАТЬ ", " |ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ") + " |Дата, Номер, Ссылка, Представление,"; Для каждого Реквизит из мМассивРеквизитов цикл ТекстЗапроса = ТекстЗапроса + " |"+?(мКэшРеквизитовДокумента[КлючИЗначение.Ключ][Реквизит], Реквизит, "NULL") + " КАК "+Реквизит+","; КонецЦикла; ТекстЗапроса = ТекстЗапроса + " | """+КлючИЗначение.Значение.Синоним+""" КАК ВидДокумента |ИЗ Документ." + КлючИЗначение.Ключ + " |ГДЕ Ссылка В (&" + КлючИЗначение.Ключ + ")"; Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение.МассивСсылок); КонецЦикла; Запрос.Текст = ТекстЗапросаНачало + ТекстЗапроса + ТекстЗапросаКонец; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если мУжеВСписке[Выборка.Ссылка] = Неопределено Тогда НоваяСтрока = ТаблицаСвязанныхДокументов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка); мУжеВСписке.Вставить(Выборка.Ссылка, Истина); КонецЕсли; КонецЦикла; КонецПроцедуры Функция ПолучитьСписокДокументовПоКритериюОтбора(ИмяКритерияОтбора, ЗначениеКритерияОтбора) Экспорт Запрос = Новый Запрос; ТекстЗапроса = ""; ТипЗначениеКритерияОтбора = ТипЗнч(ЗначениеКритерияОтбора); Запрос = Новый Запрос; ТекстЗапроса = ""; Для Каждого ЭлементСостава ИЗ Метаданные.КритерииОтбора[ИмяКритерияОтбора].Состав Цикл Если НЕ ЭлементСостава.Тип.СодержитТип(ТипЗначениеКритерияОтбора) Тогда Продолжить; КонецЕсли; ПутьКДанным = ЭлементСостава.ПолноеИмя(); СтруктураПутьКДанным = ОбщегоНазначения.РазобратьПутьКОбъектуМетаданных(ПутьКДанным); Попытка ЕСли НЕ ПравоДоступа("Чтение", СтруктураПутьКДанным.Метаданные) Тогда Продолжить; КонецЕсли; Исключение Продолжить; КонецПопытки; ИмяОбъекта = СтруктураПутьКДанным.ТипОбъекта + "." + СтруктураПутьКДанным.ВидОбъекта; СинонимОбъекта = СтруктураПутьКДанным.ТипОбъекта + СтруктураПутьКДанным.ВидОбъекта; ТекущаяСтрокаГДЕ = "ГДЕ " + СинонимОбъекта + "." +СтруктураПутьКДанным.ИмяРеквизита + " = &ЗначениеКритерияОтбора"; ИмяТЧ = Лев(СтруктураПутьКДанным.ИмяРеквизита, Найти(СтруктураПутьКДанным.ИмяРеквизита, ".")-1); ИмяРеквизита = Лев(СтруктураПутьКДанным.ИмяРеквизита, Найти(СтруктураПутьКДанным.ИмяРеквизита, ".")-1); ТекстЗапроса = ТекстЗапроса + ?(ТекстЗапроса = "", "ВЫБРАТЬ", "ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ") + " |" + СинонимОбъекта +".Ссылка ИЗ " + ИмяОбъекта + "." + СтруктураПутьКДанным.ИмяТаблЧасти + " КАК " + СинонимОбъекта + " |" + СтрЗаменить(ТекущаяСтрокаГДЕ, "..", ".") + " |"; КонецЦикла; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ЗначениеКритерияОтбора); Возврат Запрос.Выполнить().Выгрузить(); КонецФункции |
|||
|
9
paramedic
03.08.26
✎
15:12
|
(7) Это уже некромантией попахивает.)) Особенно, если вопрос был об УТ 11.
|
|||
|
10
maxab72
03.08.26
✎
15:40
|
(9) и там и там есть критерий отбора. Чем проще и примитивнее для данной задачи: чтоб человек разобрался - тем лучше.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |