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

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

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

Автор: lolmatrix 26.12.19, 11:13

Здравствуйте уважаемые программисты, подскажите пожалуйста начинающему специалисту, как скоприрорвать данные из одного реквизита справочника в другой есть два о справочника Должности и ДолжностиСКодами, в обоих есть наименование должности а код заполнен только во втором. как скопировать этот самый код из Должности в ДолжностиСКодами, заранее благодарен(в типовой конфигурации) хочу расширением сделать

Автор: lolmatrix 26.12.19, 12:20

lolmatrix @ Сегодня, 12:13 * ,
сделал так:

    выборка =Справочники.Должности.Выбрать();
    Пока выборка.Следующий() Цикл
    ЗаполняемыйОбъект =выборка.ПолучитьОбъект();        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОКПДТР.Наименование КАК Наименование,
        |    ОКПДТР.КОДОКПДТР КАК КОДОКПДТР
        |ИЗ
        |    Справочник.ОКПДТР КАК ОКПДТР
        |ГДЕ
        |    ОКПДТР.Наименование = &Наименование";
    
    Запрос.УстановитьПараметр("Наименование", выборка.Наименование);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
     ЗаполняемыйОбъект.ОКПДТРКод = ВыборкаДетальныеЗаписи.КОДОКПДТР;
     ЗаполняемыйОбъект.Записать();
     Сообщить("Заполнен:"+" "+ЗаполняемыйОбъект.Ссылка+"Код:"+ВыборкаДетальныеЗаписи.КОДОКПДТР);
    КонецЦикла;
КонецЦикла;

Но встает вопрос как добавить в запросе условие где если не найден, тосообщить не найден

Автор: sava1 26.12.19, 12:36

Цитата(lolmatrix @ 26.12.19, 11:13) *
в типовой конфигурации) хочу расширением сделать


судя по коду - не надо.

Автор: lolmatrix 26.12.19, 13:20

sava1 @ Сегодня, 13:36 * ,
почему, нужно один раз коды перенести и все, я ж писал только начинаю,

sava1,
поясните , пожалуйста, что не так в моем коде

Автор: sava1 26.12.19, 13:38

не надо - это про Расширение.

по коду -
запрос - выборка из справочникаБезКодов+левое соединение справочника с кодами
прошли по выборке - получили объект - записали.

Автор: lolmatrix 26.12.19, 13:50

sava1 @ Сегодня, 14:38 * ,
Спасибо, а как если не расширением, временно

Автор: sava1 26.12.19, 13:59

внешней обработкой

Автор: fly 26.12.19, 14:51

lolmatrix @ Сегодня, 13:50 * ,
Есть Инструменты разработчика - где то на просторах инета можно скачать,
можете через этот инструмент пробовать, для текой задачи очень даже подходит.

Автор: Anderson 26.12.19, 16:33

lolmatrix @ Сегодня, 12:20 * ,

Цитата(lolmatrix @ 26.12.19, 12:20) *
сделал так:
    выборка =Справочники.Должности.Выбрать();
    Пока выборка.Следующий() Цикл
    ЗаполняемыйОбъект =выборка.ПолучитьОбъект();        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОКПДТР.Наименование КАК Наименование,
        |    ОКПДТР.КОДОКПДТР КАК КОДОКПДТР
        |ИЗ
        |    Справочник.ОКПДТР КАК ОКПДТР
        |ГДЕ
        |    ОКПДТР.Наименование = &Наименование";
    
    Запрос.УстановитьПараметр("Наименование", выборка.Наименование);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
     ЗаполняемыйОбъект.ОКПДТРКод = ВыборкаДетальныеЗаписи.КОДОКПДТР;
     ЗаполняемыйОбъект.Записать();
     Сообщить("Заполнен:"+" "+ЗаполняемыйОбъект.Ссылка+"Код:"+ВыборкаДетальныеЗаписи.КОДОКПДТР);
    КонецЦикла;
КонецЦикла;

Больше так не делай. Цикл в цикле очень плохой подход. Если запросом, то учи соединения. А если просто, то выведи нужный справочник в таблицу и воспользуйся универсальной обработкой загрузки табличных документов.

Автор: lolmatrix 27.12.19, 6:55

fly @ Вчера, 15:51 * ,
подскажите, пожалуйста, чем он подходит и подробней про этот инструмент я в нем не совсем разобрался, в чем его преимущество

Anderson @ Вчера, 17:33 * ,
Спасибо огромное за советы сделал так:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Должности.Ссылка КАК Долж,
        |    ЕСТЬNULL(Должности.Наименование, 0) КАК Наименование,
        |    ЕСТЬNULL(ОКПДТР.КОДОКПДТР, 0) КАК КОДОКПДТР,
        |    ЕСТЬNULL(ОКПДТР.Категория, 0) КАК Категория
        |ИЗ
        |    Справочник.ОКПДТР КАК ОКПДТР
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности КАК Должности
        |        ПО (Должности.Наименование = ОКПДТР.Наименование)
        |ГДЕ
        |    Должности.ВведенаВШтатноеРасписание = ИСТИНА";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Если не ВыборкаДетальныеЗаписи.Долж=Неопределено и не ТипЗнч(ВыборкаДетальныеЗаписи.Долж)=Тип("Null") тогда
        Об =ВыборкаДетальныеЗаписи.Долж;
    Нужныйэлемент= Об.ПолучитьОбъект();
        Сообщить("Получил:"+Нужныйэлемент);
  
        
        Нужныйэлемент.ОКПДТРКод = ВыборкаДетальныеЗаписи.КОДОКПДТР;
         Нужныйэлемент.ОКПДТРКатегория = ВыборкаДетальныеЗаписи.Категория;
          Нужныйэлемент.Записать();
          Сообщить("Записал:"+Нужныйэлемент);
    КонецЕсли;
      
    КонецЦикла;


lolmatrix @ Сегодня, 7:40 * ,
Теперь встал вопрос как вывести в таблицу те должности соответствие которым не найдены во втором справочнике

Автор: Petre 27.12.19, 9:43

QUOTE (Anderson @ 26.12.19, 16:33) *
Цикл в цикле очень плохой подход.

Чем плох цикл в цикле? Возможно вы хотели сказать "запрос в цикле"?

Автор: lolmatrix 27.12.19, 10:50

В результате этого запроса много пустых строк, как их убрать, пожалуйста подскажите

Автор: fly 27.12.19, 17:36

lolmatrix @ Сегодня, 10:50 * ,
В запросе вы выбирате все Справочник.ОКПДТР и только те которые совпадают в Справочник.Должности
поэтому у вас пустые строки....
меняйте на

Цитата
Справочник.Должности КАК Должности
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОКПДТР КАК ОКПДТР
ПО (ОКПДТР.Наименование = Должности.Наименование)


Цитата(lolmatrix @ 27.12.19, 6:55) *
подскажите, пожалуйста, чем он подходит и подробней про этот инструмент я в нем не совсем разобрался, в чем его преимущество


начнете пользоваться - найдете преимущества, а может и нет.
это не реклама, это просто то чем пользуюсь часто, посоветовали и реально помогает.

Основное - это сразу в пользовательском режиме 1с можно делать обратки, которые в обычно требовали создания внешней обработки.
так же есть тот же консоль запросов, но более удобный - можно видеть результаты Временных таблиц и т.д. - чтоб посмотреть почему данные так сформировались в итоговой.
и прочие вещи

Автор: lolmatrix 28.12.19, 11:12

fly @ Вчера, 18:36 * ,
часть полей теперь имеет тип null, как программно изменить тип на строковой

Автор: sava1 28.12.19, 11:51

IsNULL(ИмяПоля,"") как Поле

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