Имя: Пароль:
1C
1С v8
Вывод на печать параметров, после сравнения
,
0 Chuvaschow
 
05.11.15
09:07
Здравствуйте!

Прошу помощи. Ситуация следующая: есть документ http://s017.radikal.ru/i413/1511/f8/19e3adaca00a.jpg с табличной частью ОтветственныеЛица, куда я выбираю лиц, которые подпишут документ. В этой  ТЧ реквизит Роль - перечисление, остальные - справочники. Необходимо на макет http://s017.radikal.ru/i422/1511/4b/39b7abab8feb.jpg вывести эти лица в нужных местах, в зависимости от перечисления, которое с этими лицами указано в ТЧ. То есть, в ТЧ указано "Представитель лица, осуществляющего подготовку проектной документации", то и в макете это лицо необходимо вывести в нужное место.
Правильно ли я рассуждаю, необходимо циклом пробежаться по результатам запроса, для каждой строки выполнить сравнение и назначить через Лист.Параметры необходимый параметр?
1 Горогуля
 
05.11.15
09:23
я думаю, необходимо циклом пробежаться по результатам запроса и назначить через Лист.Параметры необходимый параметр. скрины не смотред
2 Chuvaschow
 
05.11.15
09:27
Я тоже так думаю, но что-то сравнение не выходит сделать.
3 Горогуля
 
05.11.15
09:33
какое такое сравнение?
4 Chuvaschow
 
05.11.15
11:04
Необходимо из этой ТЧ вывести определенные значения в определенные места на макете
5 Горогуля
 
05.11.15
11:06
Область.Параметры...
ТабДокумент.Вывести(Область)

вперёд
6 Chuvaschow
 
05.11.15
11:22
Например. В ТЧ мы выбрали так

Проектировщик      Иванов А.А.
Мастер цеха        Слесарев А.А.

Циклом мы получим эти строки. Но как на макет в нужное место поставить именно Проектировщика, а в другое место Мастера цеха ??
7 Горогуля
 
05.11.15
11:24
параметрами
8 Горогуля
 
05.11.15
11:25
ОбластьМакета.Параметры.ДолжностьИНазваниеОрганизации     = ДолжностьИНазваниеОрганизации;
    ОбластьМакета.Параметры.ЗаместительПоПриказу             = ЗаместительПоПриказу;
    ТабДокумент.Вывести(ОбластьМакета);
9 Chuvaschow
 
05.11.15
11:39
ВыборкаОтветственныеЛица = Выборка.ОтветственныеЛица.Выгрузить();
        Для Каждого Строка Из ВыборкаОтветственныеЛица Цикл
            ОбластьПодписи.Параметры.ПредставительЗастройщикаИлиЗаказчика = ВыборкаОтветственныеЛица.Найти("ПредставительЗастройщикаИлиЗаказчика","РольОтветственногоЛица");
            ТабДок.Вывести(ОбластьПодписи);
        КонецЦикла;
10 Chuvaschow
 
05.11.15
11:39
не работает
11 Горогуля
 
05.11.15
11:40
(10) хм.. похоже, что ты не врёшь
12 Горогуля
 
05.11.15
11:41
а обязательно только один параметр заполнять?
13 Chuvaschow
 
05.11.15
11:43
не понял. Параметров столько же, сколько в перечилении значений, около 20 шт.
14 Горогуля
 
05.11.15
11:45
ладно-ладно. чем заполнять хочешь? и чем заполняешь?
15 Chuvaschow
 
05.11.15
11:47
эммм...

вот что у меня модуле менеджера

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

    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьАкт = Макет.ПолучитьОбласть("Акт");
    ОбластьПодписи = Макет.ПолучитьОбласть("Подписи");

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

        ОбластьШапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(ОбластьШапка, Выборка.Уровень());

        ОбластьАкт.Параметры.Заполнить(Выборка);
        
        Номер = УбратьЛидирующиеНули(Выборка.Номер);
        ОбластьАкт.Параметры.Номер = Номер;
        ТабДок.Вывести(ОбластьАкт, Выборка.Уровень());

        //ТабДок.Вывести(ОбластьРаботыШапка);
        
        //ВыборкаРаботы = Выборка.Работы.Выбрать();
        //Пока ВыборкаРаботы.Следующий() Цикл
        //    ОбластьРаботы.Параметры.Заполнить(ВыборкаРаботы);
        //    ТабДок.Вывести(ОбластьРаботы, ВыборкаРаботы.Уровень());
        //КонецЦикла;

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

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры
16 Горогуля
 
05.11.15
11:48
(15) пофих, это не работает
17 Lexey_
 
05.11.15
11:55
(15) ОбластьПодписи.Параметры.ПредставительЗастройщикаИлиЗаказчика = ВыборкаОтветственныеЛица.Найти(...
посмотри в СП, что возвращает метод Найти() для таблицы значений
18 Chuvaschow
 
05.11.15
11:57
Неопределено однако...
19 Горогуля
 
05.11.15
12:00
(18) иногда. чем заполнять хочешь?
20 Chuvaschow
 
05.11.15
12:17
(19) Простите, не понимаю вопроса. Новичок-с...
21 Горогуля
 
05.11.15
12:19
а не хочешь ли ты заполнить два параметра про должность и фамилию в цикле по соответствующей ТЧ значениями реквизитов каждой строки?
22 Chuvaschow
 
05.11.15
12:23
Наверное да :)
23 Chuvaschow
 
05.11.15
12:28
Можно пример? Не могу сам составить....
24 Горогуля
 
05.11.15
12:33
Для Каждого ТекСтрока Из ТЧ Цикл
Область.Параметры.Заполнить(ТекСтрока);
ТабДокумент.Вывести(Область);
25 Chuvaschow
 
05.11.15
12:43
Нет. вот что получается запросом из табличной части
http://s018.radikal.ru/i527/1511/fb/d7fd3b514e04.jpg

Теперь необходимо, скажем, ОтветственноеЛицо, у которого роль "Представитель лица, осуществляющего строительство" (в данном случае Борисков А.В.) вывести в конце печатной формы, другие лица совсем в другие места, в другие области.
26 Горогуля
 
05.11.15
12:50
Область.Параметры.ФИОПредставителяЛицаОсуществляющегоСтроительство=ЗаранееЗаготовленнаяСтрока
27 Chuvaschow
 
05.11.15
12:52
Да, но как получить эту заранее заготовленную строку. Необходимо ведь в ТЧ выполнить некое сравнение,отбор, чтобы отобрать именно ту строку, которая нам нужна.
28 Горогуля
 
05.11.15
12:55
Найти() найдёт тебе немножко строк ТЗ, из которых потом можно будет её собрать
29 Горогуля
 
05.11.15
12:55
(28) *НайтиСтроки
30 Chuvaschow
 
05.11.15
13:23
Отбор1 = Новый Структура;
        Отбор1.Вставить("РольОтветственногоЛица", "Представитель лица, осуществляющего строительство");
        ПредставительЛицаОсуществляющегоСтроительство = ВыборкаОтветственныеЛица.Скопировать(Отбор1);
31 Chuvaschow
 
05.11.15
13:24
Увы ничего в новую ТЗ не складывается.
32 Горогуля
 
05.11.15
13:25
теперь можешь попробовать найти в ТЗ строки с нужной ролью
33 Горогуля
 
05.11.15
13:27
(31) это всё потому, что нет ни одной строки, в которой РольОтветственногоЛица была бы равна "Представитель лица, осуществляющего строительство". внезапно, правда?
34 cw014
 
05.11.15
13:29
Схожу за попкорном
35 Chuvaschow
 
05.11.15
13:32
(33) Конечно внезапно, ведь в ТЗ по которой отбираем РольОтветственногоЛица  с таким значением есть
http://s018.radikal.ru/i527/1511/fb/d7fd3b514e04.jpg
36 Горогуля
 
05.11.15
13:32
(35) они просто похожи, типы разные
37 Chuvaschow
 
05.11.15
13:37
Понял :)

Отбор1 = Новый Структура;
        Отбор1.Вставить("РольОтветственногоЛица", Перечисления.РолиОтветственныхЛиц.ПредставительЛицаОсуществляющегоСтроительство);
        ПредставительЛицаОсуществляющегоСтроительство = ВыборкаОтветственныеЛица.НайтиСтроки(Отбор1);

Получили массив. Что дальше?
38 cw014
 
05.11.15
13:38
(37) Попробуй посмотреть что в массиве, а так же почитать, как работать с массивом. Там все просто
39 Горогуля
 
05.11.15
13:41
(37) а что ты хочешь сделать с этими двумя сотнями строк ТЗ, у которых есть нужная роль?
40 cw014
 
05.11.15
13:41
(39) Не двумя, а тремя
41 Горогуля
 
05.11.15
13:41
(40) сойдёмся на двух с половиной ;)
42 cw014
 
05.11.15
13:43
(41) Не вопрос
43 Chuvaschow
 
05.11.15
13:44
Столько не будет. Запрещено в доке выбирать более одной роли.
А если бы такого условия не было - как правильно делать такие вещи?
44 cw014
 
05.11.15
13:44
(43) а) Руками б) кодом
45 Горогуля
 
05.11.15
13:46
(43) запрещено перед записью, надеюсь?
46 Горогуля
 
05.11.15
13:47
да и пофих, бери нулевого
47 Chuvaschow
 
05.11.15
13:47
угу
48 cw014
 
05.11.15
13:47
+(46) Даже если там нету нулевого
49 Горогуля
 
05.11.15
13:50
(48) а я так надеялся в самом конце посоветовать убрать нужную роль...
50 cw014
 
05.11.15
13:51
(49) Ааааа, прости. Буду молчать и наблюдать за происходящим
51 Горогуля
 
05.11.15
13:54
задача на специалиста, самая первая. контроль остатков. человек 4 часа пыхтит, потеет, делает. всё работает. ура! я самая умная!
ага. сколько там на остатке? пять? введи пять порстигаров и ещё один. провелось?
надо было видеть это лицо. сгруппировать человек не догадался
52 cw014
 
05.11.15
13:55
(51) Хммм, у меня бы провелось ))))
53 Chuvaschow
 
05.11.15
14:01
Все работает. Много кода, не красиво. Пока так, как временное решение. Осталось решить проблему с пустым массивом, дабы в ошибку не вываливалось.
А так я все понял. Затея изначально глуповатая.
Спасибо что попинали и научили :)
54 cw014
 
05.11.15
14:03
(53) Почитай про массивы
55 Горогуля
 
05.11.15
14:03
(53) а вот тут уже пригодится то самое сравнение
56 Chuvaschow
 
05.11.15
14:10
Решил через Массив.Количество() <> 0 Тогда
2 + 2 = 3.9999999999999999999999999999999...