Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=67538)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Запись нового элемента справочника в определенную группу

Автор: kostya77 29.04.24, 8:11

Добрый день. Подскажате, как при записи нового элемента справочника, записать его в определенную группу.

Автор: Gazulo 29.04.24, 8:37

Цитата(kostya77 @ 29.04.24, 8:11) *
Добрый день. Подскажате, как при записи нового элемента справочника, записать его в определенную группу.

Добрий день.
Спр.Родитель = Родитель; не підходить?

Автор: kostya77 29.04.24, 8:39

Gazulo @ Сегодня, 9:37 * ,
Элемент еще не записан

Автор: denis84 29.04.24, 9:00

kostya77 @ Сегодня, 9:39 * ,

//Данная обработка заполняет справочник Места Хранения из файла ДБФ
//******************************
Процедура Выполнить()
СпрМеста    = СоздатьОбъект("Справочник.МестаХранения");

Попытка
    ДБФ=СоздатьОбъект("XBase");
Исключение
    Предупреждение("Не удачная попытка создания файла.","!");
    Возврат;
КонецПопытки;

ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта()=0 тогда
    Предупреждение("Не могу открыть базу");
    Возврат;
КонецЕсли;

Если ДБФ.Открыта()=1 Тогда  
    ДБФ.ДобавитьИндекс("sklad","kod",0,0,"");
    ДБФ.СоздатьИндексныйФайл("C:\user\1c\dbf\sklad.CDX");
    ДБФ.ТекущийИндекс("sklad");
    //**устанавливаем указатель на первую запись
    ДБФ.Первая();
    Пока ДБФ.ВКонце() = 0 Цикл
        
    код  = Строка(ДБФ.KOD);
    наим = ДБФ.NAME;

    СтрокаПоиска1=Лев(код,2);
    //=================Создание групп
    Если СпрМеста.НайтиПоКоду(СтрокаПоиска1, 0)=0 Тогда
        СпрМеста.НоваяГруппа();
        СпрМеста.Код = СтрокаПоиска1;
        СпрМеста.Наименование = наим;
        СпрМеста.Записать();
    КонецЕсли;

    //=================В созданой группе создаем элементы
    СтрокаПоиска=Лев(код,4);
    Если спрМеста.НайтиПоКоду(СтрокаПоиска, 0) <> 1 Тогда
        СпрМеста.Новый();
        Босс = СоздатьОбъект("Справочник.МестаХранения");
        Босс.НайтиПоКоду(СтрокаПоиска1, 0);

        СпрМеста.Родитель     = Босс.ТекущийЭлемент();
        СпрМеста.Код          = СтрокаПоиска;
        СпрМеста.Наименование = ДБФ.Name;
        СпрМеста.ВидСклада    = Перечисление.ВидыСкладов.Оптовый;
        СпрМеста.Тип          = Перечисление.ТипыМестХранения.Склад;
        СпрМеста.Записать();
    КонецЕсли;    
    
    ДБФ.Следующая();
КонецЕсли;  

ДБФ.ЗакрытьФайл();
Предупреждение("Склады заведены!");
КонецЦикла;

Автор: kostya77 29.04.24, 9:03

denis84 @ Сегодня, 10:00 * ,
Мне нужно после записи элемента справочника поместить его в определенную Группу

Автор: sava1 29.04.24, 9:08

kostya77 @ Сегодня, 10:03 * ,
почему После Записи ? а не сразу - при создании?

Автор: kostya77 29.04.24, 9:34

sava1 @ Сегодня, 10:08 * ,
а как при создании? Элемент создается из формы списка справочника

Автор: volodya1122 29.04.24, 9:53

kostya77 @ Сегодня, 10:03 * ,
Ось код, яким я переношу записаний елелемент справочника в конкретну групу (непотрібні єлементи переношу в групу "мусор")

    клиент= ТекущийЭлемент();
    груп=СоздатьОбъект("Справочник.Контрагенти");
    ТекСпр=СоздатьОбъект("Справочник.Контрагенти");
    Если груп.найтипоКоду("__",0) =1 тогда
        Група=Груп.ТекущийЭлемент();
    ТекСпр.найтиЭлемент(клиент);
    ТекСпр.Родитель=Група;
    ТекСпр.Записать();  
    КонецЕсли;



Цитата(kostya77 @ 29.04.24, 10:34) *
а как при создании? Элемент создается из формы списка справочника


При створенні їз форми елемент справочника і так по замовчуванню створюєтьсь в тій групі яка зараз відкрита.
Звісно можна прописати щоб сворюванся в конкретній групі, незалежно від того яка зараз відкрита група. Але думаю що це неправильний підхід, так як є декілька нюансів:
1. Елемент завжди буде створюватись тільки в одній конкретній групі. А Вам думаю потрібно створювати єлементи кожен в своїй групі.
2. Після створення цей елемент, як правило потрібно зразу використати в якомусь документі. Незручно буде коли ви створили єлемент в одній групі, а знаходитесь в іншій, і небачите для вибору в документ нового створеного елемента.

Якщо всеж таки жочете реалізувати це при своренні, то це можна прописати в процедурі
Процедура ВводНового(ПризнКопирования)

Автор: kostya77 29.04.24, 10:01

volodya1122 @ Сегодня, 10:53 * ,
на формі елемента є реквізит Группа. Користувач буде його заповняти "руками". Як зробити щоб єлемент записався в вибрану групу?

Автор: volodya1122 29.04.24, 10:20

Цитата(kostya77 @ 29.04.24, 11:01) *
на формі елемента є реквізит Группа. Користувач буде його заповняти "руками". Як зробити щоб єлемент записався в вибрану групу?

Перевірив. Ніяк не получиться. Змінити групу таким чином неможливо. Так як при створенні єлемента він автоматично прописується в поточній групі яка зараз відкрита. І перезаписати в іншу групу таким чином неможливо (Помилка Объект заблокирован для редагування програмно - так як редагується інтерактивно).

Хоча якщо хочете заморочитись це можна зробити обманним шляхом:
при створенні відкривати не форму справочника, а звіт який імітує вігляд цього справочника і так заповнювати. І при натисненні кнопки "Записати" на формі звіту записати всі дані в справочник. Але це дуже багато потрібно переписувати

Автор: volodya1122 29.04.24, 16:30

Цитата(volodya1122 @ 29.04.24, 11:20) *
Хоча якщо хочете заморочитись це можна зробити обманним шляхом:


Реалізував простенький приклад як це можна зробити (через звіт який імітує повідінку довідника)

https://pro1c.org.ua/redirect.php?https://fex.net/ru/s/rsy8tpl

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua