|
Как во внешней ПФ выбрать макет в зависимости от организации? | ☑ | ||
---|---|---|---|---|
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
|
https://1s83.info/programmirovanie/sozdanie-pechatnoy-formyi-dlya-upravlyaemogo-prilozheniya-v-1s-8-3.html
почитай перед созданием впф |
|||
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) Аха....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |