Имя: Пароль:
1C
1С v8
Как получить ссылку на этот же объект?
,
0 Sorento
 
15.05.24
12:18
На форме вот такой код:
    Запрос = Новый Запрос;
    Запрос.Текст =
       "ВЫБРАТЬ
       |    РеализацияТоваровУслуг.Номер КАК Номер,
       |    РеализацияТоваровУслуг.Дата КАК Дата,
       |    РеализацияТоваровУслуг.Склад КАК Склад,
       |    РеализацияТоваровУслуг.Организация КАК Организация,
       |    РеализацияТоваровУслуг.Контрагент КАК Контрагент,
       |    РеализацияТоваровУслуг.МестоСоставленияДокумента КАК МестоСоставленияДокумента
       |ИЗ
       |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
       |ГДЕ
       |    РеализацияТоваровУслуг.Ссылка = &ТекДок";
    
    Запрос.УстановитьПараметр("ТекДок", Объект.СсылкаНаОбъект);
    РезультатРТУ = Запрос.Выполнить().Выгрузить();
    мОрг=РезультатРТУ[0].Организация;
1 Sorento
 
15.05.24
12:20
Добавляю как печатную форму, открываю с документа реализация , получаю ошибку "индекс находится за границами массива"
2 Amra
 
15.05.24
12:22
СсылкаНаОбъект там тип скорее всего ДокументОбъект, а не ДокументСсылка....
3 Builder
 
15.05.24
12:24
ну хоть посмотри что там у тебя и тип правильный установи. Наверняка не заполнил ничего.
Сообщить(Объект.СсылкаНаОбъект)
4 lEvGl
 
гуру
15.05.24
12:26
или строка или справочник или число, типов много, кто знает что там
5 Fedor-1971
 
15.05.24
12:28
(3) чуть не так Сообщить("Тип ссылки: " + Строка(ТипЗнч(Объект.СсылкаНаОбъект)));
(0) надо бы проверить наличие СсылкаНаОбъект в Объекте
6 Михаил Козлов
 
15.05.24
12:28
Реквизиты документа прямо из Объект.ТекДок получить неохота?
7 Sorento
 
15.05.24
12:28
Здесь если заполнил ничего не изменилось
8 Sorento
 
15.05.24
12:28
там если не ошибаюсь и должно быть произвольный
9 Amra
 
15.05.24
12:30
(7) Тогда смотри (5) прям внимательно....
10 Sorento
 
15.05.24
12:31
(6), Если пишу Объект. (могу подставить только СсылкаНаОбъект) тоисть реквизит с обробки своей, но там значение произвольное, тоисть я ничего не получаю, если я правильно понимаю
11 Builder
 
15.05.24
12:32
СсылкаНаОбъект как и где заполняешь?
12 lEvGl
 
гуру
15.05.24
12:32
копать-копать... нах-нах.
(6) прям снайпер, если так попасть получится. снайпер-ванга - название новой профессии
13 Sorento
 
15.05.24
12:33
(9), получил сообщение реализация товаров и услуг
14 Sorento
 
15.05.24
12:34
(11), ну добавил реквизит + тип произвольный, и с запроса хочу чтоб он заполнился
15 Sorento
 
15.05.24
12:34
(11),   Запрос.УстановитьПараметр("ТекДок", Объект.СсылкаНаОбъект);
16 Sorento
 
15.05.24
12:35
не понимаю как присвоить ему значение именно текущего открытого
17 lEvGl
 
гуру
15.05.24
12:35
ыыыыыы
18 DJ Anthon
 
15.05.24
12:37
(6) в типовых не так сделано, лучше учиться с типовых конфигураций
19 Sorento
 
15.05.24
12:40
а если произвольный тип поставил тогда тип ссылки неопределено
20 DJ Anthon
 
15.05.24
12:41
(15) в форме документа Объект - это твой документ, а в твоей печатной форме Объект - это обработка, СсылкаНаОбъект - ссылка на документ. хочешь обратиться к реквизиту этого документа - пиши Объект.СсылкаНаОбъект.МойРеквизит. Но у тебя не получится, потому что Объект.СсылкаНаОбъект должно передаваться в функцию, которая уже работает с параметром. код, который работает в форме документа, во внешней печатной форме должен быть модифицирован под неё. Есть же куча ВПФ в инете, скачай и сделай по подобию.
21 Мультук
 
гуру
15.05.24
13:10
(0)

Если внешняя печатная форма, например, для УТ10 -- это одно.
И СсылкаНаОбъект (насколько помню из этой оперы)

А для УТ 11.x -- это уже другое.


P.S.
Автор, ты или дальше играй в партизана или пиши имя и версию конфигурации
22 maxab72
 
15.05.24
13:18
А я бы еще добавил
Если РезультатРТУ.Количество() Тогда
мОрг=РезультатРТУ[0].Организация;
Иначе
Сообщить("Все в сад!");
КонецЕсли
23 Sorento
 
15.05.24
13:19
(21), Business automation software for accounting CORP, edition 2.1 (2.1.25.5)// 8.3 (8.3.22.2411)
24 Sorento
 
15.05.24
13:23
(22), зачем?
25 Мультук
 
гуру
15.05.24
13:26
(23)

Круто. Судя по всему управляемые формы ?
https://www.youtube.com/watch?v=YyHKH93apgI


Ну тогда придется читать, например
https://www.1s-up.ru/sozdanie-vneshnej-pechatnoj-formy-v-tipovyh-konfiguracijah-1s-8-3/
26 maxab72
 
15.05.24
13:26
(24) Потому что если запрос ничего не возвращает, он выдаект "индекс находится за границами массива" на команде РезультатРТУ[0]. Попытка спозиционировать на первом элементе пустой список.
27 Мультук
 
гуру
15.05.24
13:29
(26)

Непонятно только как такое может произойти в печатной форме.

Пока Вася нажимал кнопку "Печать" в документе,
Маня успела нажать сделать этому документу Shift+Del на другом компьютере ? Или как ?
28 maxab72
 
15.05.24
13:32
(27) А документ записан?
Я бы перед печатью, ради чистого извращения, доюавил бы начало транзакции, записал бы документ, отпечатал, и откатил бы транзакцию назад... чтоб при обращении к запросу ссылка существовала бы. А откат транзакции позволил бы существующей ссылке существовать, а несуществующей несуществовать далее.
29 Sorento
 
15.05.24
13:33
(28), документ записан и проведен
30 kubik_live
 
15.05.24
13:34
"Добавляю как печатную форму, открываю с документа реализация" - вот отсюда копать надо - в ВПФ МассивОбъектов как правило передается
31 Sorento
 
15.05.24
13:34
(25),
"Ну тогда придется читать, например
https://www.1s-up.ru/sozdanie-vneshnej-pechatnoj-formy-v-tipovyh-konfiguracijah-1s-8-3/"
Сейчас прочитаю, похоже то что нужно, если найду решение-напишу сюда
32 1Снеговик
 
гуру
15.05.24
13:35
(1) а с чего ты взял, что в таблице РезультатРТУ есть хоть одна строка, что ты так нагло и без проверки пишешь РезультатРТУ[0] ?? Вот и получай ошибку индекса. Я бы таких увольнял)
33 maxab72
 
15.05.24
13:35
(29) Тогда смотреть, что содержится здесь "Объект.СсылкаНаОбъект", как и рекомендовали выше.
34 1Снеговик
 
гуру
15.05.24
13:40
(2) поэтому надо писать что-то типа

Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(СсылкаНаОбъект, "Ссылка") Тогда
     ТекДок = СсылкаНаОбъект.Ссылка;
Иначе
     ТекДок = СсылкаНаОбъект;
КонецЕсли;
35 Sorento
 
15.05.24
13:43
(32), потому, что когда я присвоил тип реквизита СсылкаНаОбъект реализация товаров и услуг, поставил на форму кнопку выбора документа реализации, и выбирал реализацию, по дебагу пробежался и посмотрел что получаю, информация там содержиться, потом добавил в 1ску внешнюю обработку, и получаеться как: открываю документ - печатать - выбираю обработку - открываеться окно формы, там выбираю еще раз этот документ и получаю то что нужно
36 Pprog151713
 
15.05.24
13:41
Так у тебя Объект.СсылкаНаОбъект это не реализация. )
37 Sorento
 
15.05.24
13:45
(36), ну я убрал потому что хочу избавиться от 2го раза выбора документа
38 Sorento
 
15.05.24
13:50
(34), если добавляю твой код, тогда вообще не понимает что такое СсылкаНаОбъект, сразу 3 ошибки
39 Sorento
 
15.05.24
13:52
сейчас прочитаю " https://www.1s-up.ru/sozdanie-vneshnej-pechatnoj-formy-v-tipovyh-konfiguracijah-1s-8-3/ " Если найду решение - напишу его сюда
40 kubik_live
 
15.05.24
13:53
(39) Процедура Печать(МассивОбъектов....)
см (30)
41 1Снеговик
 
гуру
15.05.24
13:55
(38) потому что конечно Объект.СсылкаНаОбъект

Но ты сделал чушь, когда добавил произвольный реквизит.
Там должен быть ДокументСсылка.РеализацияТоваровУслуг
Ну в крайнем случае ДокументСсылка.
42 Sorento
 
15.05.24
14:02
(41), если поменять на ДокументСсылка.РеализацияТоваровУслуг выдает ошибку: Переменная не определена (ДокументСсылка)
    Запрос.УстановитьПараметр("ТекДок", <<?>>ДокументСсылка.РеализацияТоваровУслуг);
43 maxab72
 
15.05.24
14:04
(42) А как во внешнюю печатную форму передаете ссылку на документ?
44 Sorento
 
15.05.24
14:04
если присвоить тип СсылкаНаОбъект = ДокументСсылка.РеализацияТоваровУслуг , и потом вызвать  Объект.СсылкаНаОбъект) тогда ошибка "индекс находится за границами массива"
45 Builder
 
15.05.24
14:04
(42) Все, это провал.... :)
46 Sorento
 
15.05.24
14:07
(43) Делал  так, присвоил реквизиту СсылкаНаОбъект = тип реализация товаров и услуг. Потом вытянул его на форму, и на форме уже выбираеш какой тебе именно документ нужен с реализации и все работает
47 maxab72
 
15.05.24
14:08
(46) А дальше что сделали?
48 Sorento
 
15.05.24
14:08
ну правда сам факт того что это не удобно, тоисть ты выбираеш документ, потом нажимаеш печатать, потом опять выбираеш документ нажимаеш печать и только тогда получаеш ВПФ, а я хочу сразу получать ВПФ
49 maxab72
 
15.05.24
14:10
(48) Хотеть не запрещено. Вопрос остается открытым. Как вы передаете ссылку на документ в ВПФ?
50 Sorento
 
15.05.24
14:10
(47), дальше посмотрел видео на ютубе там поставили произвольный тип, в Запросе делают так как я сделал
  
        |ГДЕ
       |    РеализацияТоваровУслуг.Ссылка = &ТекДок";
    
    Запрос.УстановитьПараметр("ТекДок", Объект.СсылкаНаОбъект);

и у них работает а у меня ошибка  "индекс находится за границами массива"
51 Sorento
 
15.05.24
14:12
(49), да получаеться что никак, в этом и проблема, я не понимаю как передать ссылку открытого документа в реквизит
52 maxab72
 
15.05.24
14:12
(50) Переформулирую вопрос. Откуда ВПФ должна знать, к какому документу она является печатной формой?
53 maxab72
 
15.05.24
14:15
(51) Попробуйте передать ее при вызове формы ВПФ. Вы же вызываетет ее из формы конкретного документа. Способов масса. Как типовых (через БСП), так и не типовых. Например можно что-то дописать в функции по нажатии на кнопку Печать.
54 Sorento
 
15.05.24
14:15
(52), ну это логично, вот и я не понимаю "откуда она должна знать к какому документу она является печатной формой" как передать ей даные, кроме как добавить реквизит на форму в поле выбора
55 Sorento
 
15.05.24
14:16
(53), хм
56 maxab72
 
15.05.24
14:17
(54) Свяжите этот реквизит на форме с реквизитом обработки и при ее вызове передавайте в него ссылку.
57 Builder
 
15.05.24
14:32
(54) Что написано в модуле обработки в функции СведенияОВнешнейОбработке() ?
58 Sorento
 
15.05.24
14:42
(57),
59 Prog_man
 
гуру
15.05.24
14:54
(58) скачай какую ни будь готовую форму, и посмотри как сделано.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.