Реквизиты справочников

Тема в разделе "1C и всё что с ней связано", создана пользователем Butty, 3 апр 2007.

Статус темы:
Закрыта.
  1. Butty

    Butty Гость

    Доброго времени суток! :)
    Сталкнулась с такой вот задачкой. :(
    В реквизитах документа выбирается счет (любой), у счета может быть субконто, которое имеет вид справочника. У некоторых справочников есть реквизит "Цена". В документе тоже есть реквизит "Цена". Необходимо, чтобы значение из реквизита документа сохранялось в реквизите справочника, если у справоника есть реквизит "Цена". Я хмуро перечисляю все справоники, которые имеют такой реквизит:
    Код (Text):
    Тип = ВыбВид.ТипСубконто ();
    Если (Тип = "Справочник.ОС") или (Тип = "Справочник.НМА") или
    (Тип = "Справочник.Материалы") или (Тип = "Справочник.Товары") Тогда
    Спр = СоздатьОбъект (Тип);
    Наимен = Операция.Д*цензура*.Субконто (1);
    Если Спр.НайтиЭлемент (Наимен) = 1 Тогда
    Спр.Цена.Установить (ДатаДок, Цена);
    Спр.Записать ();
    КонецЕсли;
    КонецЕсли;
    Вопрос: можно ли каким либо образом проверить наличие реквизита (в данном случае "Цена") у пролученного справочника
    (Тип = ВыбВид.ТипСубконто ())? Ведь спраовники могут добавляться и удаляться, что ж каждый раз документ править? :huh:
    Спасибо за возможные ответы. B)
     
  2. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Можно! В плане "разрешаю". Берем ЖКК (или другую литературу) и внимательно читаем раздел работы с Метаданными.
     
  3. 77dpi

    77dpi Гость

    для разнообразия:
    Код (Text):
    Вид="ТМЦ";
    Для Ин=1 По Метаданные.Справочник(Вид).Реквизит() Цикл
    Периодический=0;
    Если Метаданные.Справочник(Вид).Реквизит(Ин).Идентификатор="Цена_Розн" Тогда
    Периодический=Метаданные.Справочник(Вид).Реквизит(Ин).Периодический;
    Если Периодический=1 Тогда
    //обработать
    Сообщить(Вид+ " -das ist fantastisch.");
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
     
  4. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для: 77dpi
    А я разве что-то другое посоветовал?
     
  5. Butty

    Butty Гость

    Для vitfil:

    Спасибо за благословление :(

    Если бы там было... :angry:
    В главе 10 "Работа со справочниками" Описания встроенного языка 7.7 описано только как получить доступ к реквизиту, а как проверить наличие реквизита (или его отсутствие) - нет.
    Уже перечитала все вдоль и попрек - нету!

    Ну подскажите девушке кто-нибудь... :eek:

    Р.S. А ЖКК это что?
     
  6. 77dpi

    77dpi Гость

    ну уже ж 2 раза подсказали
     
  7. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    ЖКК - Желто-Красные Книги.
    Я разве говорил про главу работы со справочниками? Я сказал про работу с метаданными. 77dpi даже не поленился и примерчик вам накидал. А вообще, в ТиС есть хороший пример в процедуре глЕстьРеквизитШапки(...), например.


    Для: 77dpi
    Бог троицу любит! Двух подсказок мало!
     
  8. Butty

    Butty Гость

    Для 77dpi
    Спасибо. Просто когда набирала ответ вашего сообщения еще не было.


    Для vitfil:
    P.S. А ТиС что такое?
     
  9. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для: Butty
    ТиС = Торговля и Склад. Типовая конфигурация.
     
  10. Butty

    Butty Гость

    Для vitfil
    Нету у меня такой :(

    Все равно ничего не понятно, 77dpi
     
  11. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для: Butty
    Настоятельно рекомендую почитать ЖКК или обратиться к программисту - он сделает. Еще можете почитать на мисте (www.mista.ru) уроки и курс лекций. ОЧЕНЬ много вопросов отпадет.
     
  12. Butty

    Butty Гость

    vitfil
    Спасибо, иду читать...
     
  13. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Хошь по простому? без мудрствований? (мне, правда, сейчас скажут, что я не прав, и делаю все не так...)
    Код (Text):
    Попытка
    НашаЦена = Справочник.Цена;
    Исключение
    // Хм... нет такого реквизита, но ведь ничего страшного;)
    КонецПопытки;
    // А может он периодический?
    Попытка
    НашаЦена = Справочник.Цена.Получить(КакаяНитьДата);
    Исключение
    // Хм... нет такого реквизита, но ведь ничего страшного;)
    КонецПопытки;
    Агу?
     
  14. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для: Zab
    <!--QuoteBegin-Zab+5:04:2007, 12:06 -->
    <span class="vbquote">(Zab @ 5:04:2007, 12:06 )</span><!--QuoteEBegin-->мне, правда, сейчас скажут, что я не прав, и делаю все не так...
    [snapback]61400" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Работать то оно будет, спору нет... Но дело в том, что Try крайне не рекомендуется использовать, потому как замедляет работу. Причем, не только в 1С. Оно то и предназначается для возможности отловить ошибки, которые невозможно предусмотреть. Фактически получается, что вы предлагаете каждый раз винде генерить ошибку, которую будет перехватывать и обрабатывать 1С... не комильфо.
     
  15. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Полностью с вами согласен. Но, думается мне, Butty так и сделает. :) Бо просто.
     
  16. LSH

    LSH Гость

    Решил внести свою лепту.
    Копипастинг и ТиС:

    Код (Text):
    Функция глЕстьРеквизитШапки(ИмяРеквизита, ВидДокумента) Экспорт
    Если ПустоеЗначение(ИмяРеквизита) = 1 Тогда
    Возврат 0;  
    ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1 Тогда
    Возврат 1;      
    ИначеЕсли ПустоеЗначение(ВидДокумента) = 1 Тогда
    Возврат 0;  
    ИначеЕсли Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1 Тогда
    Возврат 1;      
    Иначе
    Возврат 0;
    КонецЕсли;
    КонецФункции //глЕстьРеквизитШапки()
    Код (Text):
    Функция глЕстьРеквизитМнЧ(ИмяРеквизита,ВидДокумента) Экспорт
    Перем Реквизит;   
    Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
    (ПустоеЗначение(ИмяРеквизита) = 1) Тогда
    Возврат 0;
    КонецЕсли;
    Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
    Возврат Реквизит.Выбран();
    КонецФункции //глЕстьРеквизитМнЧ()
     
  17. Butty

    Butty Гость

    Для LSH:
    А эту функцию обязательно писать в глобальном модуле? :)
     
  18. LSH

    LSH Гость

    Для: Butty

    Нет. Копипастингом функций из типовых конфигураций я бы вообще советовал не заниматься, т.к. там ооочень криво написаны некоторые вещи. Данные функции к ним не относятся. Я их привел для примера.
     
  19. Butty

    Butty Гость

    Для LSH:
    Т.е. можно написать нечто подобное в модуле документа?
     
  20. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для: Butty
    Можно! Разрешаю!
    Все никак не могу понять, почему вы упорно не хотите читать литературу по 1С?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей