8.х Не получается сделать нумерацию подчиненного справочника

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем alekse, 22 апр 2010.

  1. TopicStarter Overlay
    alekse
    Offline

    alekse

    Регистрация:
    9 окт 2007
    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    Делаю справочник ЗначенияСвойствТипМ, подчиненный справочнику ЗначенияСвойствОбъектов.

    Настройки справочника ЗначенияСвойствТипМ:
    Иерархия - нет
    Владельцы - Справочник.ЗначенияСвойствОбъектов
    Длина кода 9, наименования 25
    Нумерация - автонумерация, контроль уникальности
    Серии кодов - В пределах подчинения владельцу
    остальное по умолчанию.

    Проблема: При записи нового элемента справочника нумерация не уникальна (можно сделать несколько элементов с кодом 000000001 и одинаковым наименованием), а также нумерация начинается с начала, а нужно чтобы нумерация была привязана к нумерации справочника-владельца.
  2. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Ну так в пределах одного владельца уникальна?
    у вас же стоит
    поясните
  3. TopicStarter Overlay
    alekse
    Offline

    alekse

    Регистрация:
    9 окт 2007
    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    В общем с нумерацией разобрался, в пределах владельца уникальна, я новичек и не понял значение "В пределах подчинения владельцу", думал нумерация кодов для подчиненного справочника и для справочника владельца будет одинакова, а оказывается в пределах подчинения определенного объекта справочника-владельца. Но вопрос остается открытым, перефразирую:
    Нужно в двух справочниках сделать единую нумерацию кода.
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Как вы представляете, ведь в подчиненом справочнике может быть несколько объектов, как их код будет совпадать с кодом владельца если у вас контроль уникальности?
    А как задача полностью звучит? Для чего вам это?
  5. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    та же мысль.
    Что значит "единую"?
    чтобы код владельца совпадал с кодом подчиненного?
    Если да, тогда возникают вопросы.
    Если подчиненных несколько - коды будут не уникальны.
    Если подчиненный будет только один - тогда вместо подч. справочника - просто реквизит номенклатуры.
  6. TopicStarter Overlay
    alekse
    Offline

    alekse

    Регистрация:
    9 окт 2007
    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    Есть значение свойства номенклатуры "3GP, MP4, AVI, ASF, codecs: H.263, H.264, MPEG-4". Его нужно выгрузить в другую базу данных, но каждое значение разделенное запятой отдельно, т.е. вместо одной строки "3GP, MP4, AVI, ASF, codecs: H.263, H.264, MPEG-4" будет выгружаться несколько "3GP", "MP4", "AVI", "ASF" и т.д. Разделить значения при выгрузке не проблема, но кроме значений также выгружается код, а если разделить значения при выгрузке, то у них не будет кода. Поэтому перед выгрузкой я хочу разделить строку значения и записать их в другой справочник, указав в качестве владельца значение свойства, но нумерация кода в этих двух справочниках должна быть общей.
    Например значение свойства из справочника ЗначенияСвойствОбъектов - "3GP, MP4, AVI, ASF, codecs: H.263, H.264, MPEG-4" с кодом 1650, при разделении данной строки получится 7 значений, которые нужно записать в подчиненный справочник ЗначенияСвойствТипМ с кодами "3GP" - 1651, "MP4" - 1652 ... "MPEG-4" - 1657. Далее при добавлении элемента в справочник-владелец ЗначенияСвойствОбъектов у него код будет 1658.
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Выгружайте код владельце - вся проблема-то...
  8. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Берите информацию из РС "Значения свойств объектов"
  9. TopicStarter Overlay
    alekse
    Offline

    alekse

    Регистрация:
    9 окт 2007
    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    Вот мой код. Что нужно изменить?
    Код:
     Процедура СписокЗначенийНовый()
    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("ТипСвойства", "M");
    Запрос.Текст = "ВЫБРАТЬ
    |	ЗначенияСвойств.Значение КАК Значение
    |ИЗ
    |	РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств
    |ГДЕ
    |	ЗначенияСвойств.Свойство.ТипСвойстваНоменклатуры = &ТипСвойства";
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    Пока РезультатЗапроса.Следующий() Цикл
    //Получаем значение свойства и разбиваем его на несколько значений (разделитель запятая)		
    МассивЗначений = Новый Массив();
    МассивЗначений = РазложитьСтрокуВМассивПодстрок(РезультатЗапроса.Значение.Наименование, ",");
    //Каждое полученное значение из строки из запроса записываем в подчиненный справочник		
    Для Индекс=0 По МассивЗначений.ВГраница() Цикл
    Владелец = РезультатЗапроса.Значение;
    Нашли = Справочники.ЗначенияСвойствДополнительно.НайтиПоНаименованию(МассивЗначений[Индекс], Истина, ,Владелец);
    Если Не ЗначениеЗаполнено(Нашли) Тогда
    НовоеЗначение = Справочники.ЗначенияСвойствДополнительно.СоздатьЭлемент();
    Если Владелец <> Неопределено Тогда
    НовоеЗначение.Владелец = Владелец.Ссылка;
    КонецЕсли;
    НовоеЗначение.Наименование = МассивЗначений[Индекс];
    НовоеЗначение.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    КонецПроцедуры
    
    //Функция разделения строки значения свойства
    
    Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
    Стр = СокрЛП(Стр);
    Пока 1=1 Цикл
    Поз = Найти(Стр,Разделитель);
    Если Поз=0 Тогда
    МассивСтрок.Добавить(Стр);
    Возврат МассивСтрок;
    КонецЕсли;
    МассивСтрок.Добавить(Лев(Стр,Поз-1));
    Стр = СокрЛ(Сред(Стр,Поз));
    КонецЦикла;
    Иначе
    ДлинаРазделителя = СтрДлина(Разделитель);
    Пока 1=1 Цикл
    Поз = Найти(Стр,Разделитель);
    Если Поз=0 Тогда
    МассивСтрок.Добавить(Стр);
    Возврат МассивСтрок;
    КонецЕсли;
    МассивСтрок.Добавить(Лев(Стр,Поз-1));
    Стр = Сред(Стр,Поз+ДлинаРазделителя);
    КонецЦикла;
    КонецЕсли;	
    КонецФункции
    
    
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Структура той базы данных куда будете выгружать будет такой-же? Т.е. в ней тоже заведете подчиненный справочник, или в целевой базе данных вы хотите все это о5 собрать в один справочник "ЗначенияСвойствОбъектов"?
    Почему спрашиваю: если в целевой базе также будет новый подчиненый справочник - то не совсем понятно зачем вы паритесь с кодами, пусть будут уникальными в пределах подчинения владельцу (хотя вам конечно виднее что как у вас по логике происходит и где у вас эти коды используются), либо вообще заведите отдельный регистр сведений куда перенесите значение всех ваших отдельных свойств.
    Если же будете снова все собирать в один справочник, то если все-таки сделаете как хотите у вас ведь исходное свойство не удаляется, т.е. в итоговой базе получится
    1650 "3GP, MP4, AVI, ASF, codecs: H.263, H.264, MPEG-4"
    1651 "3GP"
    1652 "MP4"
    и.т.д.
    оно так и должно быть?

    Просто если логика работы программы завязана на конкретном коде какого-то объекта - как-то это не очень.

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