Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получить значение реквизита из ДокументаОснования
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
ZhenyaYa
Здравствуйте! Создаю документ Касса1, в который будут вытягиваться значения реквизитов с документов "РасходныйКассовый" и "ПриходныйКассовый" , которые в свою очередь создаются на основании ВедомостьПоКассе. У документа ВедомостьПоКассе есть реквизит "ЗаголовокПФ" типа Строка, который нужно вытянуть в тот же Касса1. То есть беру документ "РасходныйКассовый", вычисляю на основании какого документа "ВедомостьПоКассе" он создан, и с этого "ВедомостьПоКассе" должен вытянуть значение реквизита "ЗаголовокПФ".
Для этого создал в "РасходныйКассовый" реквизит "СсылкаНаДокОсн" типа Документ, в который передается ссылка на документ "ВедомостьПоКассе" на основании которого он создан.
В модуле Касса1 пишу :

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

        ДокументОснование=ТекущийДок.СсылкаНаДокОсн;
        НомерДокумент=ДокументОснование.НомерДок;
        ВидДокумент=ДокументОснование.Вид();
        ЗаголовокП=ДокументОснование.ЗаголовокПФ;
        Сообщить(НомерДокумент);
        Сообщить(ВидДокумент);
        Сообщить(ЗаголовокП);
        Ном=Ном+1;

    Иначе
        НоваяСтрока();    
        ПриходВКА=ТекущийДок.СуммаВал;
        ДатаДокумента=ТекущийДок.ДатаДок;
        НомерДокумента=ТекущийДок.НомерДок;
        ОснованиеНаДвижение=ТекущийДок.Основание;
        Аналитика=ТекущийДок.ПринятоОт;
        
        
        Ном=Ном+1;
        КонецЕсли;
    КонецЕсли;    
КонецЦикла
КонецПроцедуры


НомерДокумента и Вид вытягивает, ЗаголовокП и Остальные реквизиты шапки нет. Что я не так сделал?
mister-x
конфа самописна?
Vofka
Цитата(mister-x @ 02.10.12, 15:53) необходимо зарегистрироваться для просмотра ссылки
конфа самописна?

Это в корне меняет суть дела?
mister-x
Цитата(Vofka @ 02.10.12, 15:54) необходимо зарегистрироваться для просмотра ссылки
Это в корне меняет суть дела?

можлива оптимізація
Ardi
Видимо это не реквизит документа.
Это реквизит формы. Его нельзя вытянуть.
Его нужно заполнить так-же как он заполняется при отображении формы документа основания.
mister-x
а якщо це
ДокументОснование=ТекущийДок.СсылкаНаДокОсн;

так записати
ДокументОснование=ТекущийДок.СсылкаНаДокОсн.текущийДокумент();

або
...
НайтиДокумент(ТекущийДок.СсылкаНаДокОсн)
...

і тоді звертатись до реквізитів

або
Цитата(Ardi @ 02.10.12, 16:04) необходимо зарегистрироваться для просмотра ссылки
Это реквизит формы. Его нельзя вытянуть.

+1, поки писав, вже думку підхопили wink.gif
Vofka
Цитата(mister-x @ 02.10.12, 15:56) необходимо зарегистрироваться для просмотра ссылки
можлива оптимізація

А к поставленному вопросу это каким образом относится?
mister-x
Цитата(Vofka @ 02.10.12, 16:21) необходимо зарегистрироваться для просмотра ссылки
А к поставленному вопросу это каким образом относится?

даешь разборки rulez.gif
Vofka
Цитата(mister-x @ 02.10.12, 17:08) необходимо зарегистрироваться для просмотра ссылки
даешь разборки

Да нет, я просто хотел подсказать, что вы забыли спросить какой релиз платформы у автора, какая винда, СКЛ-ная ли база, ИНН, серию и номер паспорта.
Ardi
какая машина у директора, на какую сумму товаров на складе.
mister-x
Цитата(Vofka @ 02.10.12, 17:14) необходимо зарегистрироваться для просмотра ссылки
Да нет, я просто хотел подсказать, что вы забыли спросить какой релиз платформы у автора, какая винда, СКЛ-ная ли база, ИНН, серию и номер паспорта.

і поофтопити wink.gif, моє питання було по суті
ZhenyaYa
smile.gif

Цитата
Видимо это не реквизит документа.
Это реквизит формы. Его нельзя вытянуть.
Его нужно заполнить так-же как он заполняется при отображении формы документа основания.


в смысле реквизит формы? smile.gif да нет вродь, реквизит документа. Открываешь в конфигураторе документ, в одной колонке реквизиты шапки, в другой - реквизиты таб части, вот в первой колонке мои реквизиты, которые не вытягиваются smile.gif Заполняется этот ЗаголовокПФ руками...

Кстати, если таким же методом тянуть его с "РасходныйКассовый" , с процедуры ВводНаОсновании, то тянется

СсылкаНаДокОсн=ДокОсн.ТекущийДокумент();
ЗаголовокП=СсылкаНаДокОсн.ЗаголовокПФ;
Сообщить(ЗаголовокП);


А, и ошибка в первом варианте :

"ЗаголовокП=ДокументОснование.ЗаголовокПФ;
{Документ.KA1.Форма.Модуль(28)}: Поле агрегатного объекта не обнаружено (ЗаголовокПФ)"

и, не посчитайте меня за идиота, ну или посчитайте smile.gif , какая разница между реквизитом формы и реквизитом документа?

mister-x
Цитата(ZhenyaYa @ 02.10.12, 20:51) необходимо зарегистрироваться для просмотра ссылки
какая разница между реквизитом формы и реквизитом документа?

перший в базі не зберігається; отже, потрібно відкрити конфіг і подивитися реквізити шапки і табл.част. дока ВедомостьПоКассе і подивитись чи є там ЗаголовокПФ
ZhenyaYa
Есть

И это не только с ВедомостьПоКассе такая проблема.
В документе "ПриходныйКассовый" есть реквизит "Заказ", куда помещается ссылка документа, на основании которого он был создан. Например, создан он на основании "РеализацияЖивотных", с которого хочу вытянуть значение реквизита табличной части "ТМЦ"

пишу
ДокументОснование=ТекущийДок.Заказ;
ПолучаемСтроку=ДокументОснование.ПолучитьСтрокуПоНомеру(1);
Номенклатура=ПолучаемСтроку.ТМЦ.Наименование;
Сообщить(Номенклатура);


ошибка та же ,
Номенклатура=ПолучаемСтроку.ТМЦ.Наименование;
{Документ.KA1.Форма.Модуль(44)}: Значение не представляет агрегатный объект (ТМЦ)


Опять же НомерДокумента, ДатаДокумента при этом вытягиваются
Cthulhu
баттюшки-светы ужас то какой!
так ведь для получения реквизита таб.части - надо сначала спозиционироваться на строке, из которой этот реквизит надо дёрнуть.
в данном случае - спозиционироваться на той строке документа (ДокументОснование=ТекущийДок.СсылкаНаДокОсн;), по которой был свформирован (ТекущийДок). например, прямым перебором с проверкой некоего условия (соответствия строки таб.части) с прерыванием, типа
ДокументОснование.ВыбратьСтроки(); Пока ДокументОснование.ПолучитьСтроку()<>0
Цикл Если <По этой строке сформирован ТекущийДок> Тогда Прервать КонецЕсли КонецЦикла;
// и вот тут ЗаголовокП=ДокументОснование.ЗаголовокПФ; вернет вожделенное значение
mister-x
ДокументОснование=ТекущийДок.Заказ;
если ДокументОснование.КоличествоСтрок() > 0 тогда
ПолучаемСтроку=ДокументОснование.ПолучитьСтрокуПоНомеру(1);
...


а через
...
НайтиДокумент(ТекущийДок.СсылкаНаДокОсн)
...

пробували?
ZhenyaYa
баттюшки-светы ужас то какой!


Ну начнем с того что в первом примере я работаю не с табличной частью! То есть ничего позиционировать не нужно, но все равно не работает!
Во втором случае, когда я уже решил попытаться потянуть с табличной части , я спозиционировался
Цитата
ПолучаемСтроку=ДокументОснование.ПолучитьСтрокуПоНомеру(1);

...не работает


mister-x, да пытался, еще до того как на форум написал. Ошибка:
"НовДок=НайтиДокумент(ТекущийДок.Заказ);
{Документ.KA1.Форма.Модуль(42)}: Объект не может быть перепозиционирован!"

"Во втором случае, когда я уже решил попытаться потянуть с табличной части , я спозиционировался" - эти слова забираю обратно, там немного накорявил
mister-x
відлагоджувач (отладчик) - подивитись, що дає СсылкаНаДокОсн і СсылкаНаДокОсн.ЗаголовокПФ, а також перевірити інші реквізити шапки док-ту СсылкаНаДокОсн

+ якщо не допоможе: вивантаж./завантаж. бази, тестування бази
ZhenyaYa
Ок, буду разбираться. Заранее спасибо
mister-x
Цитата(ZhenyaYa @ 02.10.12, 22:00) необходимо зарегистрироваться для просмотра ссылки
В документе "ПриходныйКассовый" есть реквизит "Заказ", куда помещается ссылка документа, на основании которого он был создан.

в расх. кас. також таке є, в типовій конфі бух; якщо це така конфа, тоді
Цитата(ZhenyaYa @ 02.10.12, 15:28) необходимо зарегистрироваться для просмотра ссылки
Для этого создал в "РасходныйКассовый" реквизит "СсылкаНаДокОсн" типа Документ, в который передается ссылка на документ "ВедомостьПоКассе" на основании которого он создан.

в Заказ можна помістити документ "ВедомостьПоКассе" і нічого не потрібно добавляти, от до чого було це питання
Цитата(mister-x @ 02.10.12, 15:53) необходимо зарегистрироваться для просмотра ссылки
конфа самописна?

igmig65
Цитата(ZhenyaYa @ 02.10.12, 22:00) необходимо зарегистрироваться для просмотра ссылки
ПолучаемСтроку=ДокументОснование.ПолучитьСтрокуПоНомеру(1);
Номенклатура=ПолучаемСтроку.ТМЦ.Наименование;

Цитата
ПолучитьСтрокуПоНомеру(<?>)
Синтаксис:
ПолучитьСтрокуПоНомеру(<Номер>)
Назначение:
Устанавливает в качестве текущей строки строку с заданным номером.
Возвращает:
1 - если действие выполнено;
0 - если действие не выполнено.
Параметры:
<Номер> - номер строки.

Соответственно у вас ПолучаемСтроку = 0 или 1.
нужно просто спозиционировать документ на строке, и потом получать реквизит ДОКУМЕНТА
ДокументОснование.ПолучитьСтрокуПоНомеру(1)
Номенклатура=ДокументОснование.ТМЦ.Наименование;
Cthulhu
Цитата(ZhenyaYa @ 02.10.12, 21:41) необходимо зарегистрироваться для просмотра ссылки
Ну начнем с того что в первом примере я работаю не с табличной частью! То есть ничего позиционировать не нужно, но все равно не работает!

практика недвусмысленно свидетельствует о том, что в подобных случаях "ну начинать" лучше всего с отладчика.
например, поставить точку прерывания на операторе присвоения (в стартовом коде - на строке с "ЗаголовокП=ДокументОснование.ЗаголовокПФ;").
когда выполнение дойдет до точки останова - открыть табло (кнопка панели инструментов "открыть табло" или меню-Отладка-Табло), и в нем посмотреть значения (набрать вычисляемые выражения построчно), например такие:
Метаданные.Документ(ДокументОснование.Вид()).РеквизитШапки("ЗаголовокПФ").Выбран()
Метаданные.Документ(ДокументОснование.Вид()).РеквизитТабоичнойЧасти("ЗаголовокПФ").Выбран()
ТипЗначенияСтр(ДокументОснование.ЗаголовокПФ)
ДокументОснование.ЗаголовокПФ
// и т.п.

возможно что-то прояснится?..

прим.: я надеюсь, что ЗаголовокП - это все-таки переменная? описано через "Перем"? а то если реквизит - то при несовпадении типов/видов вполне себе может ничего не присвоить.
ZhenyaYa
Спасибо! пока забил на реквизиты шапки, вытягиваю реквизиты таб части...вытягиваются. С Шапкой после разберусь...Так вот , никто не подскажет, как определить есть ли у документа табличная часть?
пишу :

ДокОсн=ТекущийДок.Заказ;
            Если ПустоеЗначение(ДокОсн)=0 Тогда
                Если Метаданные.Документ(ДокОсн.Вид()).РеквизитТабличнойЧасти()>0 Тогда
                ДокОсн.ВыбратьСтроки();
                    Если ДокОсн.ПолучитьСтрокуПоНомеру(1)=1 Тогда
                    Номенклатура=ДокОсн.ТМЦ.Наименование;
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;


Ошибка :

Если Метаданные.Документ(ДокОсн.Вид()).РеквизитТабличнойЧасти()>0 Тогда
{Документ.KA1.Форма.Модуль(45)}: Поле агрегатного объекта не обнаружено (РеквизитТабличнойЧасти)

Нужно это потому что, когда попадает на документ без ТЧ, ругается на ДокОсн.ВыбратьСтроки() с такой же ошибкой...Я так понимаю потому что нечего выбирать, да?
mister-x
есть такая штука - попытка, вот ей и проверяйте
igmig65
проверку и обработку ТЧ вставьте в Попытка()
ZhenyaYa
спасиииибо 54000000.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.