Имя: Пароль:
1C
1С v8
Как в запросе преобразовать Число в строку
0 lirt82
 
08.01.26
14:28
Всем привет, делаю загрузку данных из файла эксель в таб. часть, и столкнулся с проблемой когда в файле эксель колонка ИНН тип общий а после передачи в запрос для последующей обработки в качестве параметра таблицы значении поле преобразуется в число, и ВЫРАЗИТЬ очищает поле.
///////////////
Данные = ПолучитьИзВременногоХранилища(Адрес);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеExcelФайла);
    Данные.Записать(ИмяВременногоФайла);
    
    Документ = Новый ТабличныйДокумент;
    Документ.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    
    ПЗ = Новый ПостроительЗапроса;
    ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(Документ.Область(1, 1, Документ.ВысотаТаблицы, 6));
    ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
    ПЗ.ЗаполнитьНастройки();
    ПЗ.Выполнить();
    
    ТЗ_Excel = Новый ТаблицаЗначений;
    ТЗ_Excel.Колонки.Добавить("ФИО", Новый ОписаниеТипов("Строка"));
    ТЗ_Excel.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка"));
    ТЗ_Excel = ПЗ.Результат.Выгрузить();

/////////////////////
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТаблицаExcel.ФИО КАК СотрудникИзExcel,
        |    ТаблицаExcel.ИНН КАК ИНН_Сотрудника
        |ПОМЕСТИТЬ ВТ_ТаблицаExcel
        |ИЗ
        |    &ТЗ_ТаблицаExcel КАК ТаблицаExcel
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_ТаблицаExcel.СотрудникИзExcel КАК СотрудникИзExcel,
        |    ВЫРАЗИТЬ(ВТ_ТаблицаExcel.ИНН_Сотрудника КАК СТРОКА(19)) КАК ИНН_Сотрудника
        |ИЗ
        |    ВТ_ТаблицаExcel КАК ВТ_ТаблицаExcel";
    
    Запрос.УстановитьПараметр("ТЗ_ТаблицаExcel", ТЗ_Excel);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
1 Волшебник
 
08.01.26
14:12
ИНН - это не число
задайте тип этой колонки "Строка" (формат=Текст) ещё в Ecxel
2 lirt82
 
08.01.26
14:24
(1) сделал не помогло, в запросе поле числовое почему-то и очищается
3 Волшебник
 
08.01.26
14:34
(2) сказки
4 lirt82
 
08.01.26
14:42
(3) Что-то Построитель колдует при загрузке если цифру увидел то в ТЗ добавляет как число
5 Маленький Вопросик
 
08.01.26
15:27
СокрЛП()
6 shuhard
 
08.01.26
15:28
(4) ну да, проще всего в цикле по ТЗ форматом окучить
если акция разовая - в xls слева прилепить префикс из одной буквы, потом отрезать
7 Garykom
 
гуру
08.01.26
16:20
(0) сделай значения в экселе настоящими строками (а не числами)
добавь ' (или ` уже не помню точно) впереди в каждой ячейке перед ИНН
8 Garykom
 
гуру
08.01.26
16:22
Или тупо постобработай ТЗ после построителя перед передачей в запрос
Через Формат(Значение, "ЧГ=0")
9 Timon1405
 
08.01.26
17:34
(0)    ТЗ_Excel.Колонки.Добавить("ИННСтрокой", Новый ОписаниеТипов("Строка"));
и в цикле как в (8) обойти
(7) если разово нужно в текст то в экселе есть формула '=ТЕКСТ(ячейка,"0")', она точно помогает без '
10 craxx
 
08.01.26
18:47
ТЗ_Excel = Новый ТаблицаЗначений;
    ТЗ_Excel.Колонки.Добавить("ФИО", Новый ОписаниеТипов("Строка"));
    ТЗ_Excel.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка"));
    ТЗ_Excel = ПЗ.Результат.Выгрузить();

Ничего не понимаю, а зачем добавляешь колонки, если все равно потом ТЗ_Excel получаешь из построителя?
11 lirt82
 
09.01.26
09:17
(8) да, теперь помогло, благодарю

Для Каждого Стр Из ТЗ_Excel Цикл
        Если ТипЗнч(Стр.ИНН) = Тип("Число") Тогда
            Стр.ИНН = СтрЗаменить(Строка(Стр.ИНН), Символы.НПП, "")
        КонецЕсли;
12 lirt82
 
09.01.26
08:35
(10) если сразу ТЗ передавать в запрос в качестве параметра то будет ошибка "Содержимое объекта данных может быть выбрано только во временную таблицу", так как сначала нужно явно описать типы значении в ТЗ, иначе запрос не понимает что за таблица с какими свойствами.
13 Garykom
 
гуру
09.01.26
10:18
(12) У тебя какие-то дикие заблуждения
1. Построитель затирает нахрен твои типы колонок и ставит свои
2. Тебе уже сказали про Формат в (8) какого хрена ты говнокодишь в (11)?
С чего взял что символом разделителем групп всегда будет НПП?
Основная теорема систематики: Новые системы плодят новые проблемы.