Имя: Пароль:
1C
 
Как во внешней ПФ выбрать макет в зависимости от организации?
0 Медвеедка
 
24.12.19
10:35
Делаю ВПФ для не типовой БП3.0. Делаю впервые, разбираюсь потихоньку.
В программе несколько организаций. В зависимости от организации необходимо выбрать макет. Как это сделать понять не могу. В остальном вроде всё ок, кроме выбора макета. Сейчас делаю так:

Функция СформироватьПечатнуюФормуРеестраПлатежей(МассивСсылок, СтавитьОграничениеВОплату = Ложь)

// Получаем макет.
    
    Запрос = Новый Запрос;
    Запрос.Текст =
      "ВЫБРАТЬ
     |    бит_РеестрПлатежей.Организация.Наименование КАК ОрганизацияНаименование
     |ИЗ
     |    Документ.бит_РеестрПлатежей КАК бит_РеестрПлатежей";
     ОрганизацияНаименование = Запрос.Выполнить();//.Выгрузить();
        
    Если ОрганизацияНаименование = "Рога и копыта" Тогда
        
        Макет = ПолучитьМакет("РеестрПлатежейВПФ1");
        
    Иначе
        
        Макет = ПолучитьМакет ("РеестрПлатежейВПФ0")    

    КонецЕсли;
        Если ОрганизацияНаименование = "Рога и копыта2" Тогда
        
        Макет = ПолучитьМакет("РеестрПлатежейВПФ2");
        
    Иначе
        
        Макет = ПолучитьМакет ("РеестрПлатежейВПФ0")    

    КонецЕсли;
    
Он у меня в любом случае выбирает РеестрПлатежейВПФ0, если делать без иначе то ошибка:
Значение не является значением объектного типа (ПолучитьОбласть)

Пробовала ее так, результат тот же:

Если ДокументСсылка.бит_РеестрПлатежейЗаявки.Заявка.Организация = "Рога и копыта" Тогда        
      Макет = ПолучитьМакет("РеестрПлатежейВПФ1")
      Иначе
          Макет = ПолучитьМакет("РеестрПлатежейВПФ0")
    КонецЕсли;  
  Если Организация.Наименование = "Рога и копыта 2" Тогда
      Макет = ПолучитьМакет("РеестрПлатежейВПФ2")
  Иначе
      Макет = ПолучитьМакет ("РеестрПлатежейВПФ0")
КонецЕсли;

Тут пробовала без запроса. КАк мне правильно поставить условие по организации?
1 Arh01
 
24.12.19
10:37
Например по ИНН
2 Медвеедка
 
24.12.19
10:39
(1) делать запрос на ИНН?
3 ColonelAp4u
 
24.12.19
10:39
(0) что вот это такое?  ОрганизацияНаименование = Запрос.Выполнить();//.Выгрузить();
Где выборка запроса и обход этой выборки?
ясен пень что у тебя в наименовании организации выполнение запроса а не результат.
4 Медвеедка
 
24.12.19
10:39
(1) а в остальном верно?
5 ColonelAp4u
 
24.12.19
10:43
(4) у тебя есть ДокументСсылка.бит_РеестрПлатежейЗаявки.Заявка.Организация.Наименование Вот его и сравнивай без запроса.
6 ColonelAp4u
 
24.12.19
10:44
(4) а ты сравниваешь справочник ссылку организации с строкой ДокументСсылка.бит_РеестрПлатежейЗаявки.Заявка.Организация = "рога и копыта", так делать нельзя
7 SadrArt
 
24.12.19
10:46
(5) не надо новичка учить плохому
8 Медвеедка
 
24.12.19
10:47
Если пишу так:

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

Пишет переменная не определена ДокументСсылка.
9 ColonelAp4u
 
24.12.19
10:47
(7) поверь говнокодят и не только новички!
10 ColonelAp4u
 
24.12.19
10:48
(8) СсылкаНаОбъект есть реквизит?
11 Медвеедка
 
24.12.19
10:48
Не понимаю пока как сделать обход результата запроса. Ну выгружу я.
А дальше?:

Для Каждого текСтрока и ОргнизацияНаименование Выбрать...
или как?
12 Медвеедка
 
24.12.19
10:48
(10) неа. Доавить и попробовать так?
13 SadrArt
 
24.12.19
10:50
Вот вместо этого
ОрганизацияНаименование = Запрос.Выполнить();

Должна быть след конструкция

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ОрганизацияНаименование = Выборка.ОрганизацияНаименование;
14 SadrArt
 
24.12.19
10:51
(13) Но в целом код, конечно не правилен в корне. Опыта наберетесь - вернетесь к этой своей поделке соответствующими выводами )
15 SadrArt
 
24.12.19
10:52
а в запросе кстати и отбора нет... О_О
16 SadrArt
 
24.12.19
10:53
Если ОрганизацияНаименование = "Рога и копыта" Тогда
        
        Макет = ПолучитьМакет("РеестрПлатежейВПФ1");
        
    //Иначе
        
        //Макет = ПолучитьМакет ("РеестрПлатежейВПФ0")    

    //КонецЕсли;
    ИначеЕсли ОрганизацияНаименование = "Рога и копыта2" Тогда
        
        Макет = ПолучитьМакет("РеестрПлатежейВПФ2");
        
    Иначе
        
        Макет = ПолучитьМакет ("РеестрПлатежейВПФ0")    

    КонецЕсли;
17 ColonelAp4u
 
24.12.19
10:53
(15) хотел об этом написать)
18 Медвеедка
 
24.12.19
10:54
(13) всё равно не получается ребят. Все равно РеестрПлатежей0 выводит, если убирать конструкцию Иначе ошибка Значение не является значением объектного типа (ПолучитьОбласть)
19 Медвеедка
 
24.12.19
10:55
(17) эмммм. А как его добавить?)
20 SadrArt
 
24.12.19
10:56
Если в эту Функцию закидывается МассивСсылок, вангую, что этот массив обрабатывается, и в данные для печати уже получается Организация, возможно и наименование и ИНН....
21 Медвеедка
 
24.12.19
10:56
(14) думаю да, специально оставлю для будущей себя хороший тако комментарий) ахаха. Пристыжу будущую себя)
22 ColonelAp4u
 
24.12.19
10:56
(12) давай с начало, откуда у тебя вызывается ВПФ? из документа через команду печать? если да то нужен реквизит СсылкаНаОбъект в самой ВПФ, в запросе когда выбираешь организацию нужно указать отбор ссылаясь на этот реквизит.
23 ColonelAp4u
 
24.12.19
10:57
(22) а точнее сформировать массив ссылок, и сделать отбор по нему.
24 Медвеедка
 
24.12.19
10:59
(22) реквизит я добавила. Откуда вызывается сказать мне сложно)
Формировать массив ссылок говорите. А обход так же необходимо будет делать?
25 Медвеедка
 
24.12.19
11:00
Есть тут примерный запрос с Массивом:
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    бит_УстановленныеВизы.Объект КАК Ссылка,
    |    бит_УстановленныеВизы.Виза,
    |    бит_УстановленныеВизы.ФизическоеЛицо КАК ФИО
    |ИЗ
    |    РегистрСведений.бит_УстановленныеВизы КАК бит_УстановленныеВизы
    |ГДЕ
    |    бит_УстановленныеВизы.Объект В(&МассивСсылок)
    |    И НЕ бит_УстановленныеВизы.Виза.РежимПечати = ЗНАЧЕНИЕ(Перечисление.бит_РежимПечатиВиз.НеВыводить)
    |
    |УПОРЯДОЧИТЬ ПО
    |    бит_УстановленныеВизы.КодСортировки";
    
    ТаблицаПоВизам = Запрос.Выполнить().Выгрузить();

попробовать аналогично сделать?
26 Медвеедка
 
24.12.19
11:02
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
    "ВЫБРАТЬ
     |    бит_РеестрПлатежей.Организация.Наименование КАК ОрганизацияНаименование
     |ИЗ
     |    Документ.бит_РеестрПлатежей КАК бит_РеестрПлатежей";
     |ГДЕ
     |    ОрганизацияНаименование В(&МассивСсылок);
    
    
    ТаблицаПоОрганизациям = Запрос.Выполнить().Выгрузить();

Не? Херню сказала?
27 ColonelAp4u
 
24.12.19
11:03
28 ColonelAp4u
 
24.12.19
11:03
29 ColonelAp4u
 
24.12.19
11:04
или тут
30 Медвеедка
 
24.12.19
11:05
(29) вот по второму гайду я и работала
31 Renium
 
24.12.19
11:10
(26) Если выгрузить() то получиться таблица значений.
Обход делается в Цикле
Для Каждого СтрокаТЗ из ТаблицаПоОрганизациям Цикл
СтрокаТЗ.ОрганизацияНаименование = "РогаИКопыта" Тогда
*****
ИначеЕсли
СтрокаТЗ.ОрганизацияНаименование = "РогаИКопыта2" Тогда
*****
КонецЦикла;

Если Выбрать(), то получается массив.

Пока ТаблицаПоОрганизациям.Следующий() Цикл
ТаблицаПоОрганизациям.ОрганизацияНаименование = "РогаИКопыта" Тогда
*****
КонецЦикла;
32 Renium
 
24.12.19
11:13
(30) Можно без запроса.

ОргНаименов = СокрЛП(СсылкаНаОбъект.Организация.Наименование);

Если ОргНаименов = "РогаИКопыта" Тогда
ИначеЕсли  ОргНаименов = "РогаИКопыта2" Тогда
Иначе
КонецЕсли;
33 Медвеедка
 
24.12.19
11:24
(32) чет всё равно не выходит, не так, не так.
Пробовала так:
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
    Запрос.Текст =
      "ВЫБРАТЬ
     |    бит_РеестрПлатежей.Организация.Наименование КАК ОрганизацияНаименование
     |ИЗ
     |    Документ.бит_РеестрПлатежей КАК бит_РеестрПлатежей
     |ГДЕ
     |    бит_РеестрПлатежей.Организация.Наименование В(&МассивСсылок)";
     ОрганизацияНаименование = Запрос.Выполнить().Выгрузить();

    
    Для Каждого СтрокаТЗ из ОрганизацияНаименование Цикл
Если СтрокаТЗ.ОрганизацияНаименование = "РКС_Пенза" Тогда
Макет = ПолучитьМакет("РеестрПлатежейВПФПенза")
ИначеЕсли
СтрокаТЗ.ОрганизацияНаименование = "РКС-Сочи" Тогда
Макет = ПолучитьМакет("РеестрПлатежейВПФСочи")
КонецЕсли;
КонецЦикла;


Иии нет. Хм. Буду смотреть дальше.
34 ColonelAp4u
 
24.12.19
11:32
(33) так а что у тебя в массиве ссылок?
35 Renium
 
24.12.19
11:36
Проверь После Выполнить().Выгрузить();
КоличествоСтрок = ОрганизацияНаименование.Количество();
какое значение вернет? Если ноль то в результате выполнения запроса нет ни одной строки и разбирайся почему так. Отладчиком умеешь пользоваться?
36 SadrArt
 
24.12.19
11:45
(31) >>>Если Выбрать(), то получается массив.

Хм, уверен?
37 Медвеедка
 
24.12.19
11:45
(35) не дописала. при данном запросе ошибка такая:
{ВнешняяОбработка.РеестрПлатежей.МодульОбъекта(194)}: Значение не является значением объектного типа (ПолучитьОбласть)
    ОблЗаголовок         = Макет.ПолучитьОбласть("Заголовок");
38 Медвеедка
 
24.12.19
11:46
и как мне поставить и отработать точку останова на ВПФ? я ставлю точку, загружаю в базу, ставлю режим отладка и точка не срабатывает.
39 Renium
 
24.12.19
11:47
(36) Выборка получается , еще есть вопросы?
40 SadrArt
 
24.12.19
11:48
(39) а что, есть ответы?
41 Renium
 
24.12.19
11:48
(38) В процедуре или функции , где точка не срабатывает перед текстом процедцры или функции написано #НаСервере   ?
42 Медвеедка
 
24.12.19
11:50
(41) не написано
43 Renium
 
24.12.19
11:53
(42) Скорее всего, не включена отладка на сервере. Надо включить
44 Медвеедка
 
24.12.19
11:57
(41) скорее всего да, почитала как включить - сейчас точно такой возможности не будет. ууууххх как я замоталась с этим. жееесть.
Ща гляну консолью запроса
45 Медвеедка
 
24.12.19
12:01
в консоли запросов результат пустой
46 Renium
 
24.12.19
12:01
(44) Как вариант... Только как в параметр передать МассивСсылок? )
47 Renium
 
24.12.19
12:02
Запрос Пустой значит цикл не отрабатывает...
48 Renium
 
24.12.19
12:03
В клиенте просмотри записи это регистра - он вообще заполнен?
49 Медвеедка
 
24.12.19
12:13
(48) какого регистра?
Сейчас попробовала так (в консоли запросв показывает реузльтат, т.е. Оргнизации ищет):

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
     |    бит_РеестрПлатежей.Организация КАК ОрганизацияНаименование
     |ИЗ
     |    Документ.бит_РеестрПлатежей КАК бит_РеестрПлатежей";
     РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    ОрганизацияНаименование = Выборка.ОрганизацияНаименование;
    Если ОрганизацияНаименование = "xxx" Тогда
        Макет = ПолучитьМакет("РеестрПлатежейВПФПенза");
    ИначеЕсли  ОрганизацияНаименование = "yyy" Тогда
        Макет = ПолучитьМакет("РеестрПлатежейВПФСочи");
    Иначе
        Макет = ПолучитьМакет("РеестрПлатежейВПФ");
    КонецЕсли;
50 Медвеедка
 
24.12.19
12:14
но нет же. Я открываю документ где явно  оргнизация ххх, но он мне сует макет РеестрПлатежейВПФ. Хотя в консоли показывает, что оргнизации разные... А. Это жесть. Не думала, что так сложно.
51 Renium
 
24.12.19
12:17
(50) бит_РеестрПлатежей.Организация КАК ОрганизацияНаименование

должно быть

бит_РеестрПлатежей.Организация.Наименование КАК ОрганизацияНаименование
52 SadrArt
 
24.12.19
12:22
(0) Стесняюсь спросить, а макеты сильно отличаются? Может лучше Получением разных областей одного и того же макета разобраться проще будет?
53 SadrArt
 
24.12.19
12:24
(49) еще раз повторю: в запросе нет отбора, соответственно получаешь все организации, а так как обходишь не в цикле получаешь одну (первую попавшуюся)
54 SadrArt
 
24.12.19
12:28
В запросе попытка (неудачная) получить Организацию документа бит_РеестрПлатежейЗаявки, а без запроса попытка получения Организации из реквизита Заявка. Почему так?
55 Медвеедка
 
24.12.19
12:29
(53) а дописать этот отбор никак нельзя?) получением разных областей не легче, всё равно необходимо от оргнизации отталкиваться. Отбор по ней всё равно надо делать.
56 Медвеедка
 
24.12.19
12:30
(54) насчет заявка скажу: смотрела как уже сущетсвующиие запросы делаются, и там как раз фигурирует заявка эта. Вот пример из этой же функции:

// Получим таблицу по итогам.
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    бит_РеестрПлатежейЗаявки.Ссылка,
    |    бит_РеестрПлатежейЗаявки.Заявка.Организация КАК Организация,
    |    СУММА(бит_РеестрПлатежейЗаявки.СуммаКОплате) КАК Сумма,
    |    бит_РеестрПлатежейЗаявки.Валюта
    |ИЗ
    |    Документ.бит_РеестрПлатежей.Заявки КАК бит_РеестрПлатежейЗаявки
    |ГДЕ
    |    бит_РеестрПлатежейЗаявки.Ссылка В(&МассивСсылок)
    |
    |СГРУППИРОВАТЬ ПО
    |    бит_РеестрПлатежейЗаявки.Заявка.Организация,
    |    бит_РеестрПлатежейЗаявки.Валюта,
    |    бит_РеестрПлатежейЗаявки.Ссылка
    |
    |УПОРЯДОЧИТЬ ПО
    |    Организация";
57 Медвеедка
 
24.12.19
12:31
(54) я кажется неверно интерпретировала Ваш вопрос. Почему там заявка честно хз.
58 SadrArt
 
24.12.19
12:31
Есть вариант такой:

НаименованиеМакета = СтрЗаменить(ДокументСсылка.бит_РеестрПлатежейЗаявки.Организация.Наименование, " ", "");
НаименованиеМакета = СтрЗаменить(НаименованиеМакета , """""", "");

//тут СтрЗаменить() еще можно добавить, если есть еще какие либо символы....

ПолучитьМакет(ДокументСсылка.бит_РеестрПлатежейЗаявки.Организация.Наименование);

Ну и соответственно назвать Макеты
59 Медвеедка
 
24.12.19
12:34
(58) немного не поняла с параметрами. Например в первой строчке что писать в первые скобки и вторые?
60 SadrArt
 
24.12.19
12:34
(56) ну вот же у тебя запрос, получающий все что нужно!

Зачем ты перед ним еще городишь что то???
61 SadrArt
 
24.12.19
12:36
(59) это не скобки, а кавычки
62 Медвеедка
 
24.12.19
12:37
(60) этот запрос идет после получения макета. И тогда после данного запроса дописывать получение макета?
63 Медвеедка
 
24.12.19
12:37
(61) извиняюсь, да
64 SadrArt
 
24.12.19
12:40
(62) >>> И тогда после данного запроса дописывать получение макета?

да
65 SadrArt
 
24.12.19
12:41
(64) + в процессе обхода выборки.
66 Медвеедка
 
24.12.19
12:50
(65) чет я не поняла как в данном случае сделать обход. Если у меня всё выгружается в ТаблицаПоИтогам:

....
        |
    |УПОРЯДОЧИТЬ ПО
    |    Организация";
    
    ТаблицаПоИтогам = Запрос.Выполнить().Выгрузить();
        //ВОТ ТУТ НЕОБХОДИМО КАК Я ПОНЯЛА СДЕЛАТЬ ВЫБОРКУ И ДАЛЕЕ:
        Если Организация = "РКС_Пенза" Тогда
        Макет = ПолучитьМакет ("РеестрПлатежейВПФПенза");
67 Renium
 
24.12.19
12:58
(66) Для каждого СтрокаТЗ из ТаблицаПоИтогам Цикл

Писал же уже
68 SadrArt
 
24.12.19
12:58
(66) нет, не правильно

Макет должен получаться внутри обхода. (В этом случае наверное Что то типа Для Каждого Из Цикл)
Так как может быть разные организации в коллекции.

По идее он должен быть очень близок (по тексту кода) к первой в этой функции ПолучитьОбласть()
69 Медвеедка
 
24.12.19
12:59
(67) Попробовала так:
ТаблицаПоИтогам = Запрос.Выполнить().Выгрузить();
    
    Для Каждого СтрокаТЗ из ТаблицаПоИтогам Цикл
    Если СтрокаТЗ.Организация = "РКС_Пенза" Тогда
    Макет = ПолучитьМакет("РеестрПлатежейВПФПенза")
    ИначеЕсли
    СтрокаТЗ.Организация = "РКС-Сочи" Тогда
    Макет = ПолучитьМакет("РеестрПлатежейВПФСочи")
    Иначе
    Макет = ПолучитьМакет("РеестрПлатежейВПФ");
    КонецЕсли;
    КонецЦикла;
70 Медвеедка
 
24.12.19
12:59
не получилось. Выводится конструкция иначе
71 Renium
 
24.12.19
13:00
(66) А ты в курсе что у тебя получается в Организация вот здесь "бит_РеестрПлатежейЗаявки.Заявка.Организация КАК Организация"?
72 SadrArt
 
24.12.19
13:00
НЕ Организация А Организация.Наименование !!! Сколько повторять то?
73 Renium
 
24.12.19
13:02
И желательно Если СокрЛП(СтрокаТЗ.Организация) = "РКС_Пенза" Тогда

С учетом "НЕ Организация А Организация.Наименование !!! Сколько повторять то?"
74 Медвеедка
 
24.12.19
13:04
(72) дааааааааа... У меня уже мозг опух. Вроде всё вышло. Спасибо. Блин, тема на 73 сообщения. Парни, Вы лучшие!
75 Renium
 
24.12.19
13:14
(74) Неее... это  SadrArt лучший.
76 Медвеедка
 
24.12.19
13:22
(75) я удивляюсь его терпению)
77 Renium
 
24.12.19
13:31
(76) Аха....
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.