Имя: Пароль:
1C
1С v8
Вопрос по СпискуЗначений
,
0 Tumakota
 
07.08.13
16:14
Как получить объект из списка значений, т.е есть список документов при нажтии кнопки мне надо получить все печатные формы этих документов, но для этого мне надо получить кадый объект в цикле.
1 Нуф-Нуф
 
07.08.13
16:16
поток мыслей детектед (с)
2 Defender aka LINN
 
07.08.13
16:17
(0) Надо - получай.
3 Tumakota
 
07.08.13
16:26
Ну так вот и я не знаю как получить, не спрашивал бы если бы знал
4 pessok
 
07.08.13
16:27
в модуле объекта документов есть функция подготовитьструктурупечатныхформ() вот в ее сторону и кури
5 pessok
 
07.08.13
16:28
+(4) когда ж они уже в типовых вынесут это в модуль менеджера, эх...
6 Tumakota
 
07.08.13
16:31
Если НЕ ЗначениеЗаполнено(Дк) Тогда
        Возврат;
    КонецЕсли;
    // Сформировать дерево макетов печати
    Для каждого значения из Дк цикл
    СтруктураВнутреннихПечатныхФорм = ДК.ПолучитьОбъект().ПолучитьСтруктуруПечатныхФорм();
    ДеревоМакетовПечати = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(Дк, СтруктураВнутреннихПечатныхФорм,,,Ложь);    
    ТаблицаШаблоны.Очистить();
    Для каждого ТекущаяСтрока Из ДеревоМакетовПечати.Строки Цикл        
        Если ТипЗнч(ТекущаяСтрока.Расшифровка) = Тип("Структура") Тогда
            Стр=ТаблицаШаблоны.Добавить();
            Стр.Код             =    СокрЛП(ТекущаяСтрока.Расшифровка.СсылкаНаВнешнююОбработку.Код);
            Стр.Наименование =    ТекущаяСтрока.Текст;
            Стр.Расшифровка  =    ТекущаяСтрока.Расшифровка;
        КонецЕсли;    
    КонецЦикла;
КонецЦикла;

Вот код, ДК был как просто ссылка на документы, надо было переделать на то что бы вибарть не по одному документу а по не скольким. Я сделал ДК "СпискомЗначений", делаю цикл в котором выбираю по очереди каждый документ. Только потом не знаж как достать печатнные формы, так как не знаю как получитьобъект()
7 Tumakota
 
07.08.13
16:42
Что не кто мне может подсказать?
8 pessok
 
07.08.13
16:45
(7) что тебе надо сделать?
9 pessok
 
07.08.13
16:46
спрашиваю, потому что поток сознания в (0) и своеобразный код в (6) не дает этого понимая. только ты объясни словами, а-ля: "хочу вывести для пользователя список всех возможных печатных форм"
10 Жан Пердежон
 
07.08.13
16:51
(5) в типовых это уже в виде команд сделано, так что видимо никогда
11 Tumakota
 
07.08.13
16:52
Есть Поле - ДК, с типом значения список, Выбираю документы ну к примеру 4 реализации 5 счетов фактур, нажимаю кнопку и он внизу должен вывести в таблицу список всех печатных форм для документов! Если я делаю поле ДК не как список значений, а просто ссылку на документы то этот код, работает идеально, но мне надо переделать так чтобы можно было не по одному документу выбирать а по несколько штук
12 pessok
 
07.08.13
16:56
(10) не все типовые еще на УФ :) и кто мешает код команд выполнять в модуле менеджера, тащем-та? :)
13 pessok
 
07.08.13
16:59
(11) вот, больше похоже на истину.
создай массив, в который будешь помещать ТипЗнч(ЭлементДК)
создай массив, в который будешь помещать ссылки уникальных типов

если ТипЗнч(ЭлементДК) уже есть в первом массиве, то пропускай строку, если нет - пиши ЭлементДК во второй массив.

после окончания цикла обходи циклом второй массив, получай объект из ссылок (для твоего примера это будут только две ссылки, но большего и не надо) и для каждого из этих объектов выполняй ДК.ПолучитьОбъект().ПолучитьСтруктуруПечатныхФорм(), а потом циклом по структуре выводи
14 pessok
 
07.08.13
17:00
//если ТипЗнч(ЭлементДК) уже есть в первом массиве, то //пропускай строку, если нет - пиши ЭлементДК во второй массив.

и ТипЗнч(ЭлементДК) в первый массив, есессна
15 Tumakota
 
07.08.13
17:03
(14) Примерчик как это выглядит можешь подсказать буду очень признателен!
16 pessok
 
07.08.13
17:08
МассивТипов = Новый Массив;
МассивСсылок = Новый Массив;

Для Каждого ЭлСписка Из СЗ Цикл

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

Сообщить(ТекСтр.Значение);

КОнецЦикла
КонецЦикла