• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Butty
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

Butty

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

vitfil

Можно! В плане "разрешаю". Берем ЖКК (или другую литературу) и внимательно читаем раздел работы с Метаданными.
 
7

77dpi

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

vitfil

Для: 77dpi
А я разве что-то другое посоветовал?
 
B

Butty

Для vitfil:

Можно! В плане "разрешаю".
Спасибо за благословление :(

Берем ЖКК (или другую литературу) и внимательно читаем раздел работы с Метаданными.

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

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

Р.S. А ЖКК это что?
 
V

vitfil

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


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

Butty

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


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

vitfil

Для: Butty
ТиС = Торговля и Склад. Типовая конфигурация.
 
B

Butty

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

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

vitfil

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

Zab

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

vitfil

Для: 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С... не комильфо.
 
Z

Zab

Для: Zab

Работать то оно будет, спору нет... Но дело в том, что Try крайне не рекомендуется использовать, потому как замедляет работу. Причем, не только в 1С. Оно то и предназначается для возможности отловить ошибки, которые невозможно предусмотреть. Фактически получается, что вы предлагаете каждый раз винде генерить ошибку, которую будет перехватывать и обрабатывать 1С... не комильфо.
Полностью с вами согласен. Но, думается мне, Butty так и сделает. :) Бо просто.
 
L

LSH

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

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

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

Butty

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

LSH

Для: Butty

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

Butty

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

vitfil

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!