Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 01:56

Как добраться до подчинённого справочника в 1С?

Автор mark2011, 30 июн 2011, 12:04

0 Пользователей и 1 гость просматривают эту тему.

mark2011

Цитата: prog1c7.7 от 30 июн 2011, 16:20
Во первых создаешь в диалоге поле с выбором
ТипЦеныТек в свойствах в "тип"  указываешь "справочник.ТипыЦен"
Зачем?? Я же писал:

Цитата: mark2011
мне просто нужно получить их значения, чтобы впоследствии записать их в XML. Проблема состоит только в получении значений, как бы так....

Цитата: prog1c7.7 от 30 июн 2011, 16:20
дальше ставишь в отчете или обработке в процедуре
выполнить:


   // Ищем цены на период отчета по типу цен
   Цены = СоздатьОбъект("Справочник.Цены");   
   Цены.ИспользоватьВладельца(СпрНом1.ТекущийЭлемент());
   Цены.ВыбратьЭлементы();
   
   Пока Цены.ПолучитьЭлемент()  = 1 Цикл  
      Если ТипЦеныТек.Рассчитывается = 1  тогда

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

      
       ИначеЕсли ТипЦеныТек.Рассчитывается <> 1 Тогда
         Если Цены.ТипЦен <> ТипЦеныТек Тогда
             Продолжить;
          КонецЕсли;
           РеалЦенаОб = Цены.ТекущийЭлемент();
            РеалЦена = РеалЦенаОб.Цена.Получить(ДатаОтчета);
//            Сообщить("РеалЦена  !!! " + РеалЦена);
   
       КонецЕсли;   
   КонецЦикла;


Так вытягиваешь то что тебе надо по ЛЮБОМУ ТИПУ ЦЕН выйдет значение которое на определенную дату (периодический по владельцу справочника)

Зачем??? Зачем делать на дату когда мне надо ПРОСТО ВЫТЯНУТЬ ДАННЫЕ ИЗ ИБ???

Цитата: prog1c7.7 от 30 июн 2011, 16:20
Во ВТОРЫХ (ЗАРАНЕЕ ИЗВИНЯЮСЬ ЗА МАТ)
Чо за нагонялово в личку? Наезд? Я так понял?

Нет. Я расценил этот пост как просто пинок в ж..пу, типа иди читай, нам тут и без тебя хватает. Вот как-то так.

Цитата: prog1c7.7 от 30 июн 2011, 16:20
Часом не ох...л?
На весь форум... no comments....

Я тебя не блокировал - это ррраз,
Блокирую как могу порнуху -это два.
Вопрос уже подымался - это не ко мне САЙТ НЕ МОЙ - полномочий от движка не давали, удаляют по пользователю, темы удаляют у нас только
глобальные модеры и ВЫШЕ, сами с ума сходим, прав просим,а нам не дают, знач пока не считают нужным,
структуру сайта не мы разрабатывали - допер?

Цитата: prog1c7.7 от 30 июн 2011, 16:20
В ТРЕТЬИХ  задачу правильно конечную пиши

Цитата: mark2011
мне просто нужно получить их значения, чтобы впоследствии записать их в XML. Проблема состоит только в получении значений, как бы так....
читать умеем?

Цитата: prog1c7.7 от 30 июн 2011, 16:20
В ЧЕТВЕРТЫХ не знаешь человека, не дерзи
А где ты увидел дерзость? Покажи мне, где ты в этой теме увидел дерзость?

Цитата: prog1c7.7 от 30 июн 2011, 16:20
В ПЯТЫХ УВАЖАЕМЫЙ - ПРАВИЛА ЧИТАЙ - КОНФИГУРАЦИЮ НАДО УКАЗЫВАТЬ
Ну да, не указал...

Цитата: prog1c7.7 от 30 июн 2011, 16:20
Извиняюсь перед всем форумом за грубость, а то в личку пишут,и винят не разобравшись.
А вот это отдельный разговор в личке.
Постараюсь грубостей больше не допускать.

prog1c7.7

ты в этой же обработке и запишешь их в хмл,тебе надо на дату вытянуть понял? (это элемент периодический)
я же сказал не константа, а как пример в обработке, там укажешь файл куда закинуть , научить как в хмл писать? (я на форуме объснял недавно)
Ты и получишь их значения на  дату,ок?

prog1c7.7

Это ка ПРИМЕР, НЕ создавай диалоге , а сделай с присвоением по типу равному оптовый, раз такой принципиальный, тебе решение предложили, не хошь не пользуйся.
Задачу не правильно поставил -значения периодические все хочешь чтоли получить, тогда хоровод с перебором по всем изменениям в периоде.

prog1c7.7

"А где ты увидел дерзость? Покажи мне, где ты в этой теме увидел дерзость?"
не в теме в личке

prog1c7.7

хотя шо ругюсь да парюсь.
Извини меня пожалуйста, ты победил, я неправильно понял задачу,в следующий раз буду читать внимательно.
прости пожалуйста,я больше не буду, честное слово.
А ответил я тебе неправильно - из за лени и некомпетентности.
Здаёёёёмсуууу...  ;)
Извини меня еще раз, отец двух детей а такие грубости пишу, прости пожалуйста,постараюсь исправиться.
Больше такого не повторится.

prog1c7.7

пример вежливого mark 2011 - он там даже даже на ВЫ
https://forum-baza.ru/index.php?topic=7811.msg28474#msg28474


А вот ишшо один, ужо умеющий с хмл работать mark 2011:
(цитата с лички после которой разнервничал старого меня больного - :) )
"У тебя порнуху гонят постоянно на форуме, ты бы лучше их блокировал! Я вообще не 1С-специалист, это разные вещи, ты мне сейчас такое говоришь. Давай я тебя заставлю что-то делать не по твоей специализации и не на твоём языке, а потом скажу "допиливай мозги" и "читай книжки". Понравится? ну так и мне не нравится! И как пользователю ОЧЕНЬ не нравится обилие порнухи на форуме, причём во всех разделах!  "

Итог: попробуй кому нить не помочь на куски разложат, э-э-эх 


progmikon

Вопрос к автору: как заблокировали? Какой ник?

П.С. Модеров (да и вообще остальных пользователей) просьба не обижать....
prog1c7.7 - у нас вообще золотой человек - практически один ветку тянет!

mark2011

Ещё один вопрос...

Вот код, который мне нужен и который делает именно то, что нужно:


Процедура Сформировать()
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
        Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
            Предупреждение("Компонента v7plus.dll не найдена!");
        КонецЕсли;
    КонецЕсли;

ФайлХМЛ = СоздатьОбъект("AddIn.XMLParser");
Корень =ФайлХМЛ.СоздатьДокумент();
    Данные =Корень.СоздатьПодчиненныйЭлемент("root");
    ТОПИК= Данные.СоздатьПодчиненныйЭлемент("Topic");
   СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");   
   СпрЦены    = СоздатьОбъект("Справочник.Цены");   
   СпрТипЦен    = СоздатьОбъект("Справочник.ТипыЦен");
 
 
   СпрНоменклатура.ВыбратьЭлементы();       
   
    Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл         

          Номенкл = ТОПИК.СоздатьПодчиненныйЭлемент("Nomenkl");
  ЭлементКод =    Номенкл.СоздатьПодчиненныйЭлемент("ELEMID");
РодитКод            =    Номенкл.СоздатьПодчиненныйЭлемент("RODITKOD");
ИМЯ1                =    Номенкл.СоздатьПодчиненныйЭлемент("NAME");
АртикулНазв = Номенкл.СоздатьПодчиненныйЭлемент("ARTICUL");   
МинОстаток = Номенкл.СоздатьПодчиненныйЭлемент("MIN_OST"); 
Описание = Номенкл.СоздатьПодчиненныйЭлемент("DESCR");
Комментарйи = Номенкл.СоздатьПодчиненныйЭлемент("COMMENT");
Уровень = Номенкл.СоздатьПодчиненныйЭлемент("LEVEL");   
ЦенаОптовая = Номенкл.СоздатьПодчиненныйЭлемент("PRICEOPT");
ЦенаРозничная = Номенкл.СоздатьПодчиненныйЭлемент("PRICEROZN");



РодНаим        =    СпрНоменклатура.ТекущийЭлемент().Родитель;
КодРод          = Роднаим.Код;                                   
ЭлементКод.Значение = СпрНоменклатура.ТекущийЭлемент().Код;       
АртикулНазв.Значение  =   ?(ПустоеЗначение(СпрНоменклатура.ТекущийЭлемент().Артикул)=1,0,СпрНоменклатура.ТекущийЭлемент().Артикул);
РодитКод.Значение   =    ?(ПустоеЗначение(КодРод)=1,0,КодРод);     
МинОстаток.Значение =    ?(ПустоеЗначение(СпрНоменклатура.ТекущийЭлемент().МинОстаток)=1,0,СпрНоменклатура.ТекущийЭлемент().МинОстаток);
 
            ИМЯ1.Значение     =    СпрНоменклатура.ТекущийЭлемент().Наименование;   
Символ   =   Найти(ИМЯ1.Значение, "*");                 
Описание.Значение = СпрНоменклатура.ТекущийЭлемент().ПолнНаименование;
Комментарий   =  СпрНоменклатура.ТекущийЭлемент().Комментарий;       

Если СпрНоменклатура.ЭтоГруппа()= 0 Тогда
            СпрЦены.ИспользоватьВладельца(СпрНоменклатура.ТекущийЭлемент());
            СпрЦены.ВыбратьЭлементы();
            Пока СпрЦены.ПолучитьЭлемент() = 1 Цикл 
// Если СпрТипЦен.НайтиПоНаименованию("Розничные") = 1 Тогда
//     ЦенаРозничная.Значение = СпрЦены.Цена.Получить(РабочаяДата());
// Иначе
// ЦенаОптовая.Значение = СпрЦены.Цена.Получить(РабочаяДата());
// КонецЕсли;
Если СпрТипЦен.НайтиПоКоду("00004") = 1 Тогда
    Сообщить("Розница");
ИначеЕсли СпрТипЦен.НайтиПоКоду("00002") = 1 Тогда
Сообщить("Опт");
КонецЕсли;
             
            КонецЦикла;
        КонецЕсли;


За одним исключением. Там где он должен сообщать "Розница" и "Опт" он всё время сообщает "Розница". Как-то странно... Пробовал так:

Если СпрТипЦен.НайтиПоНаименованию("Розничные") = 1 Тогда
    Сообщить("Розница");
ИначеЕсли СпрТипЦен.НайтиПоНаименованию("Оптовые") = 1 Тогда
Сообщить("Опт");
КонецЕсли;


Та же ситуация. Оптовая цена точно есть, и в справочнике точно такие же коды и точно так она пишется (со звёздочкой). Никак не могу взять в толк, почему именно опт не выводится...

mark2011

Вот так вот если делаю:

Если СпрТипЦен.НайтиПоКоду("00002") = 1 Тогда
    ЦенаОптовая.Значение = СпрЦены.Цена.Получить(РабочаяДата());
КонецЕсли;         

Если СпрТипЦен.НайтиПоКоду("00004") = 1 Тогда
    ЦенаРозничная.Значение = СпрЦены.Цена.Получить(РабочаяДата());
КонецЕсли;

то записывается и в опт и в розницу только розничная цена....

mark2011


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск