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

заполнить из одной таблицы пустой реквизит 2ой таблицы

Автор Matana331, Сегодня в 10:20

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

Максим75

Matana331, Вы немного не так сделали.
блин, неудобно Вы текст выгрузили. можете не в виде картинки грузить, а в виде текста?

смотрите, в цикле где обходите ТабЗначений просто заполните ВерхРегФИО, уберите проверку, она не здесь должна быть.
Потом вроде в первом письме Вы выбирали Владельца, т.е. справочник Физлица. Я просто не помню, есть у сотрудников ФИО или оно тянется из Физлиц.

Matana331

Максим75, не умею вставлять красиво код :dfbsdfbsdf:
Условие вытащила и теперь не знаю куда его пристроить. Да, все тянется из Физлица
[&НаСервере
Процедура ПрочитатьФайлНаСервере(Адрес, Расширение)
   
  ДанныеФайла = ПолучитьИзВременногоХранилища(Адрес);
  ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение); 
  ДанныеФайла.Записать(ИмяВременногоФайла);

   ТаблДок = Новый ТабличныйДокумент;
   ТаблДок.Прочитать(ИмяВременногоФайла);
   КоличествоСтрок = ТаблДок.ВысотаТаблицы;
   
   Для Сч = 2 По КоличествоСтрок Цикл
      ФИО = ТаблДок.Область(Сч, 1).Текст;
      ТабельныйНомер = ТаблДок.Область(Сч, 2).Текст;
      
      НоваяСтрока = Таблица.Добавить();
      НоваяСтрока.ФИО = ВРег(ФИО);
      НоваяСтрока.ТабНомер = ТабельныйНомер;
            
   КонецЦикла;   
   
   
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
               |    Сотрудники.Ссылка КАК Ссылка,
               |   Сотрудники.ТабельныйНомер КАК ТабельныйНомер,
                  |   Сотрудники.Наименование КАК Наименование
                                    |ИЗ
                  |   Справочник.Сотрудники КАК Сотрудники
               |УПОРЯДОЧИТЬ ПО
               |   Наименование";
   
   Выборка = Запрос.Выполнить();
   СпособОбхода = ОбходРезультатаЗапроса.Прямой;
   ТабЗначений = Выборка.Выгрузить(СпособОбхода);
   ТабЗначений.Колонки.Добавить("ВерхРегФИО");
   Для Каждого ТекСтрока Из ТабЗначений Цикл;    
      ТекСтрока.ВерхРегФИО = ВРег(ТекСтрока.Наименование); 
         
   КонецЦикла;   
   Если ТекСтрока.ВерхРегФИО = НоваяСтрока.ФИО Тогда
      ТекСтрока.ТабельныйНомер = НоваяСтрока.ТабНомер; 
   КонецЕсли;
]

Максим75

Matana331, а в запросе у Вас что? где Физилица?

чтобы вставлять красиво, в ответе находите пиктограмку 1С (она красненькая вверху формы). Ее жмакаете и вставляете туда свой код скопированный.

Matana331

Максим75, да, владелец это ФизЛица, а от туда тянется уже наименование(ФИО). Поправила запрос
 &НаСервере
Процедура ПрочитатьФайлНаСервере(Адрес, Расширение)

  ДанныеФайла = ПолучитьИзВременногоХранилища(Адрес);
  ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение); 
  ДанныеФайла.Записать(ИмяВременногоФайла);

ТаблДок = Новый ТабличныйДокумент;
ТаблДок.Прочитать(ИмяВременногоФайла);
КоличествоСтрок = ТаблДок.ВысотаТаблицы;

Для Сч = 2 По КоличествоСтрок Цикл
ФИО = ТаблДок.Область(Сч, 1).Текст;
ТабельныйНомер = ТаблДок.Область(Сч, 2).Текст;

НоваяСтрока = Таблица.Добавить();
НоваяСтрока.ФИО = ВРег(ФИО);
НоваяСтрока.ТабНомер = ТабельныйНомер;

КонецЦикла;   


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | Сотрудники.Ссылка КАК Ссылка,
               | Сотрудники.ТабельныйНомер КАК ТабельныйНомер,
               | Сотрудники.Владелец.Наименование КАК Наименование
               |ИЗ
               | Справочник.Сотрудники КАК Сотрудники";

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

Максим75

Matana331,

теперь после цикла, где Вы заполнили наименование сотра делаете:



Для каждого СтрТаблицы из Таблица цикл

ФИО_для_поиска = СтрТаблицы.ФИО;
ТабельныйНомер = СтрТаблицы.ТабНомер;

НайденнаяСтрока = ТабЗначений.Найти(Врег(ФИО_для_поиска),"ВерхРегФио");
Если НайденнаяСтрока<>Неопределено тогда

ОбъектСотр = НайденнаяСтрока.Ссылка.ПолучитьОбъект();
ОбъектСотр.ТабельныйНомер = табельныйНомер;
ОбъектСотр.Записать();
КонецЕсли;
КонецЦикла;

Вы в цикле обходите Таблицу, ФИО тоже переводите в верхний регистр, по этому ФИО ищите в ТабЗначений, если находите, то из нужной строки ТабЗначений берете ссылку на элемент справочника Сотрудники, получаете по ссылке объект, у объекта меняете табельный номер и записываете.

Теги:

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

Рейтинг@Mail.ru

Поиск