7.7 Подчиненые справочники

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем daylight, 19 июл 2011.

  1. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    разбираюсь в обработке експорта справочников в excel. Нашел обработку которая экспортирует все как надо, кроме подчиненных справочников. У меня например есть Подчиненный справочник Состав продукции, но увы его я не могу экспортировать. Подскажите как переписать обработку что бы подчиненные справочники экспортировать.

    Вложения:

    • export.ert
      Размер файла:
      19,5 КБ
      Просмотров:
      40
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Смотрите метод ИспользоватьВладельца
  3. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Может кто то тыкнет меня носом в готовую обработку выгрузки подчиненных справочников в excel? Уверен что такие есть, просто поиск не дал положительних результатов.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В вашей обработке достаточно добавить всего несколько строк что экспортировались подчиненные справочники
  5. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Я понимаю, просто новичек я еще, вот и сложновато разобраться.
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну так учитесь.... А то никогда из категории новичков и не выбиритесь......

    Для начала нужно создать ДВА дополнительных элемента формы типа СписокЗначений.
    1 - подчиненные спроавочники
    2 - их реквизиты
  7. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Создал. Я так понимаю что теперь надо поставить условие, если справочник Номенклатура то выводить в эти новоиспеченные формы список подчиненных справочников и соответственно список реквизитов каждого подчиненного справочника?
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не совсем. Вам же нужна универсальная обработка. Тем более что сделать ее просто. В процедуре УпрДоступ() есть цикл по метаданниым (справочники). Вот в этой процедуре и нужно организовать еще один цикл для заполнения первого из созданных списков. Изучите метод Владелец
  9. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Хотелось бы уточнить еще один нюанс. Дело в том что выше описаный справочник Состав продукции впринцыпе пуст. И значения в нем появляются только при выделении какого то элемента справочника ТМЦ. При этом в Справочник Состав продукции элементы выбираются тоже из справочника ТМЦ(хотя возможен выбор из любого). Справочник Состав Продукцыи подчинен справочнику ТМЦ? Или там какая то другая связь?
  10. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Перехотелось мне как то ориентироваться на готовые обработки. Сложновато там все написано. Нашел просто процедуру которая выгружает наименования и коды из справочников.


    Код:
    
    перем kol;
    Процедура Сформировать()
    
    kol = 3;
    
    xl=СоздатьОбъект("Excel.Application");
    xl.Workbooks.Add(); //Добавляем новый документ
    xl.Visible=1; //Делаем его видимым
    
    row=1; //первая строка
    спр=СоздатьОбъект("Справочник.ТМЦ");
    спр.ВыбратьЭлементы();
    //    Спр.ИспользоватьРодителя();
    Пока спр.ПолучитьЭлемент() = 1 Цикл
    xl.Cells(row,1).Value=спр.Код;
    xl.Cells(row,2).Value=спр.Наименование;  
    //        Пока Спр.ИспользоватьВладельца(Спр.ТекущийЭлемент()) = 1 цикл
    //        xl.Cells(row,kol).Value=спр.Код;
    //       kol=kol+1;            
    //    конеццикла;    
    row=row+1;//переходим на следующую строку
    КонецЦикла;
    
    КонецПроцедуры
    
    
    
    

    Добавил туда закоментированый код. Подскажите плз почему не проходит условие
    Код:
     Пока Спр.ИспользоватьВладельца(Спр.ТекущийЭлемент()) = 1 цикл 
    
    
    Смысл был в том что бы цикл крутился пока не закончатся элементы подчиненного справочника(пока что только коды, а там я уже определюсь что надо).
  11. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Немного не так.
    Код:
    перем kol;
    Процедура Сформировать()
    
    kol = 3;
    
    xl=СоздатьОбъект("Excel.Application");
    xl.Workbooks.Add(); //Добавляем новый документ
    xl.Visible=1; //Делаем его видимым
    
    row=1; //первая строка
    спр=СоздатьОбъект("Справочник.ТМЦ");
    СпрСостав = СоздатьОбъект("Справочник.Состав"); // или как он называется
    спр.ВыбратьЭлементы();
    Пока спр.ПолучитьЭлемент() = 1 Цикл
    xl.Cells(row,1).Value=спр.Код;
    xl.Cells(row,2).Value=спр.Наименование; 
    СпрСостав.ИспользоватьВладельца(Спр.ТекущийЭлемент());
    СпрСостав.ВыбратьЭлементы();
    Пока СпрСостав.ПолучитьЭлемент() = 1 цикл
    xl.Cells(row,kol).Value=СпрСостав.Код;
    kol=kol+1;            
    Конеццикла;    
    row=row+1;//переходим на следующую строку
    КонецЦикла;
    КонецПроцедуры
    
  12. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Уже лучше. Спасибо. Кстати может подскажите заразом почему не получается сделать перебор только в нужной группе? Я вот пробовал пользоваться
    Код:
    Спр.ИспользоватьРодителя("ПРОДУКЦІЯ");
    
    
    
    но все равно выводит всю номенклатуру а не ту группу которая мне нужна.
  13. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Потому что значение родителя должно быть не текст, а объект справочника.
    Код:
    СпрРодитель = СоздатьОбъект("Справочник.ТМЦ");
    СпрРодитель.НайтиПоНаименованию("ПРОДУКЦІЯ", 0, 1);
    Спр.ИспользоватьРодителя(СпрРодитель.ТекущийЭлемент());
    
  14. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Подскажите можно ли сравнивать в внешней обработке значение в ячейке excel и реквизите справочника?

    Я например хотел бы построить условие типа
    Код:
    Если xl.Cells(row,kol).Value="" тогда
    xl.Cells(row,kol).Value=СпрСостав.Наименование;
    конецесли;
    
    
    Но судя по всему проверка условия не проходит.
  15. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Сравнивать можно базовые типы.

    Так попробуйте:
    Код:
    Если СокрЛП(xl.Cells(row,kol).Value) = "" тогда
    xl.Cells(row,kol).Value = СпрСостав.Наименование;
    Конецесли;
    
    
    
    Ну или в отладчике гляньте, какое значение выдается в коде.

    [off]P.S. Кстати ваш вопрос к приведенному коду (примеру) никакого отношения не имеет. :angry: [/off]
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Лучше так:

    Код:
    Если ПустоеЗначение(xl.Cells(row,kol).Value) = 1 тогда
    
    
  17. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Уже почти довел до желаемого результата. Осталось только правильно построить цикл. И вот не получается.
    Хочется получить таблицу вида:


    ---------------------------------------- Наим. элем. подч. справоч.--------Наим. элем. подч. справоч.
    наименование элемента ТМЦ------знач. элем. подч. справоч.------------знач. элем. подч. справоч.
    наименование элемента ТМЦ------знач. элем. подч. справоч.------------знач. элем. подч. справоч.
    наименование элемента ТМЦ------знач. элем. подч. справоч.------------знач. элем. подч. справоч.
    наименование элемента ТМЦ------знач. элем. подч. справоч.------------знач. элем. подч. справоч.
    наименование элемента ТМЦ------знач. элем. подч. справоч.------------знач. элем. подч. справоч.

    При этом я понимаю все так:
    В цикле перебора элементов подчиненного справочника я ставлю условия:

    Если ячейка в строке с наименованиями элементов подчиненного справочника пуста
    Тогда занести в нее текущее наименование, а в текушюю строку на позицыю этой ячейки занести значение элемента подчиненного справочника(так заполнится первая строчка таблицы),
    ИначеЕсли ячейка в строке с наименованиями элементов подчиненного справочника не пуста и ее значение ровно значению Наименования элемента подчиненного справочника,
    Тогда присвоить значение ячейке с текущей позицыей,
    ИначеЕсли ячейка в строке с наименованиями элементов подчиненного справочника не пуста И ее значение не ровно значению Наименования элемента подчиненного справочника(тоесть еще не было такого наименования), в последнюю ячейку в строке наименований элементов подчиненного справочника добавить значение наименования текущего элемента подч. справочника и на позицыю этой ячейки подставить значение.

    вот мой код
    Код:
    
    СпрСостав.ВыбратьЭлементы();
    Пока СпрСостав.ПолучитьЭлемент() = 1 цикл
    
    
    Если ПустоеЗначение(xl.Cells(1,kol).Value) = 1 тогда
    
    xl.Cells(1,kol).Value=СпрСостав.Наименование;
    xl.Cells(row,kol).Value=СпрСостав.Кво; 
    
    ИначеЕсли ПустоеЗначение(xl.Cells(1,kol).Value) = 0 тогда
    для kol=3 по kolmax цикл
    Если СокрЛП(xl.Cells(1,kol).Value) = СпрСостав.Наименование <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">тогда	</span>
    xl.Cells(row,kol).Value=СпрСостав.Кво;
    
    конецесли;
    конеццикла;
    ИначеЕсли  (ПустоеЗначение(xl.Cells(1,kol).Value) = 0) и (СокрЛП(xl.Cells(1,kol).Value) <> СпрСостав.Наименование) тогда
    xl.Cells(1,kolmax+1).Value=СпрСостав.Наименование;
    xl.Cells(row,kolmax+1).Value=СпрСостав.Кво;
    
    конецесли;
    //ИначеЕсли	(ПустоеЗначение(xl.Cells(row,kol).Value) = 0) и  (СокрЛП(xl.Cells(1,kol).Value)<>СпрСостав.Наименование) тогда
    //	для kol=3 по kolmax цикл
    //		Если	(ПустоеЗначение(xl.Cells(row,kol).Value) = 0) и  (СокрЛП(xl.Cells(1,kol).Value)<>СпрСостав.Наименование) тогда
    //	xl.Cells(1,kolmax).Value=СпрСостав.Наименование;
    //	xl.Cells(row,kolmax).Value=СпрСостав.Кво;
    //Конецесли;
    //    конеццикла;
    //Конецесли;
    kol=kol+1;
    
    
    Конеццикла;
    Если kol>kolmax тогда
    kolmax=kol;
    КонецЕсли;
    row=row+1;//переходим на следующую строку
    kol = 3;
    КонецЦикла;
    
    
    В итоге полная ахинея, заполняет нормально только 1ую строку.

    Отлично понимаю что сделано не грамотно. Подскажите алгоритм что бы все было правильно.
    P.S. не прошу за меня переписывать просто алгоритм роботы подскажите.
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Обязательно заменять старый?
    Не легче ли создать новый?
    К тому же в вашем алгоритме не предусмотрено что ранбше по элементу было больше состава (старый не очищается совсем)
  19. TopicStarter Overlay
    daylight
    Offline

    daylight

    Регистрация:
    29 июн 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1

    Как то я уже торможу, это к чему вопросы относятся?
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    К вашему желанию получить таблицу вида.....

    Проще ведь на новом листе нарисовать. И не нужно мучиться с проверками

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