|   |   | 
| 
 | Загрузка данных из ПТИУ в тхт файл 1с 8.2 комплексная | ☑ | ||
|---|---|---|---|---|
| 0
    
        Валидатор 07.11.13✎ 10:47 | 
        Нужно сделать загрузку данных из документа поступление товаров и услуг в тхт файл. Написал запрос, выгрузил нужные данные в ТЗ. Потом прохожусь по этой тз и записываю данные в файл, разделителя в файле нет. Но возникает проблема, нужно чтобы при загрузке данных длина первого поля была 10 символов (поле артикул), а если в 1ске самой поле артикул более 10 символов, то обрезать, если короче, то добавлять пробелы, как это сделать?
 // файл в формате Unicode Текст = Новый ЗаписьТекста(ПутьКФайлу, "cp866"); // перебор элементов документа Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслугТовары.Количество, | ПоступлениеТоваровУслугТовары.Цена, | ПоступлениеТоваровУслугТовары.Номенклатура.Артикул КАК Артикул, | ПоступлениеТоваровУслугТовары.Ссылка.Номер КАК НомерНакладной, | ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК ДатаНакладной |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары |ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл // выводим в файл код и наименование, разделенные // каким-либо разделителем Текст.ЗаписатьСтроку(""+Выборка.Артикул+""+Выборка.ДатаНакладной +""+ Выборка.НомерНакладной +""+Выборка.Количество+""+Выборка.Цена+""+"Конверт"); КонецЦикла; // запись в текстовый файл Текст.Закрыть(); Сообщить("Данные были перенесены в файл"); КонецПроцедуры | |||
| 1
    
        Валидатор 07.11.13✎ 10:48 | 
        точнее никаких ТЗ, просто выборкой по запросу прохожусь     | |||
| 2
    
        Cube 07.11.13✎ 10:51 | 
        ВЫРАЗИТЬ(ПоступлениеТоваровУслугТовары.Номенклатура.Артикул КАК СТРОКА(10)) КАК Артикул,     | |||
| 3
    
        Валидатор 07.11.13✎ 10:53 | 
        (2) а такой же вопрос с датой, у меня грузится дата документа, но формат выгрузки такой: 01.01.01 00:00:00 и т.д., а нужно чтобы выгружалась так: 01/01/01     | |||
| 4
    
        Валидатор 07.11.13✎ 10:54 | 
        (3) - в самом запросе всмысле как так указать?     | |||
| 5
    
        Cube 07.11.13✎ 10:55 | 
        (4) Да
 (3) Это уже не в запросе надо делать. Кури функцию Формат() | |||
| 6
    
        Валидатор 07.11.13✎ 10:57 | 
        (5) про функцию формат я знаю, так и думал сделать, но хотел указать в запросе. Вопрос к (2) мы указалаи что артикул 10 символов, а если у меня артикул 5 символов, мне еще 5 элементов нужно пробелами забить, как это сделать?     | |||
| 7
    
        Cube 07.11.13✎ 10:58 | 
        (6) "как это сделать?"
 Ты удивишься, но ВЫРАЗИТЬ() это сделает сама... :) | |||
| 8
    
        Валидатор 07.11.13✎ 10:59 | 
        (7) при загрузке в файл я вижу что у меня артикул 5 символов в тхт файле, и потом нет еще 5 пробелов в нем вот и спрашиваю     | |||
| 9
    
        Cube 07.11.13✎ 11:01 | 
        (8) Принято говорить "Выгружаю в файл" и "Загружаю из файла".     | |||
| 10
    
        Cube 07.11.13✎ 11:03 | 
        (7) Ой, что-то я погорячился...     | |||
| 11
    
        Валидатор 07.11.13✎ 11:03 | 
        (9) Когда я Выгружаю в файл, номенклатура с артикулом 78345 получается в таком виде:
 7834501012013-//- где 01012013 это уже дата, то есть следующее поле, а нужно так: 78345 01012013 (пробел между 78345 и датой должен заполнять пустыми пробелами до количества в 10 символов) вот про что я спрашиваю :) | |||
| 12
    
        Cube 07.11.13✎ 11:04 | 
        +(7) Сделай так:
 ВЫРАЗИТЬ(ПоступлениеТоваровУслугТовары.Номенклатура.Артикул + " " КАК СТРОКА(10)) КАК Артикул, | |||
| 13
    
        Валидатор 07.11.13✎ 11:04 | 
        (12) там 5 пробелов в " "?     | |||
| 14
    
        Cube 07.11.13✎ 11:05 | 
        (13) Десять. Ведь если артикул пустой, то должно быть десять нулей-то...     | |||
| 15
    
        Валидатор 07.11.13✎ 11:05 | 
        Артикул может содержать 10 символов, может 5, может 4, но при выгрузке он должен занимать 10 символов, если функция выразить обрежет его после 10 символа это понятно, то вот как с недостающим количеством символов до 10 от начала артикула не совсем понятно((     | |||
| 16
    
        Cube 07.11.13✎ 11:07 | 
        (15) Ответ в (12)     | |||
| 17
    
        Валидатор 07.11.13✎ 11:08 | 
        (14) ага, да, вроде нормально теперь стало, с артикулами понятно, теперь мини вопрос по функции формат, касаемо выгрузки даты, пишу так:
 Формат(Выборка.ДатаНакладной, "dd/MM/yy") но дату он мне не выдает через /, а по прежнему пишет через точку | |||
| 18
    
        Cube 07.11.13✎ 11:10 | 
        (17) На "dd/MM/yy" нажми ПКМ -> "Конструктор форматной строки" -> Закладка "Дата".     | |||
| 19
    
        Cube 07.11.13✎ 11:11 | 
        +(18) Ты "ДФ=" забыл.     | |||
| 20
    
        Валидатор 07.11.13✎ 11:12 | 
        (16) для строковых типов понятно с пробелами через выразить, можно ли так же сделать для числовых? 
 ВЫРАЗИТЬ(ПоступлениеТоваровУслугТовары.Цена КАК ЧИСЛО(14, 0)) вот после цены нельзя же тут ввести -//-.Цена + " " Как число(14,0)? | |||
| 21
    
        Cube 07.11.13✎ 11:16 | 
        (20) Нет, для числа в запросе так сделать нельзя. Обрабатывай в коде. Тебе нули надо спереди от числа или сзади?     | |||
| 22
    
        Валидатор 07.11.13✎ 11:17 | 
        (21) только в конце, длина цены - 14 символов     | |||
| 23
    
        Валидатор 07.11.13✎ 11:21 | 
        (21) и количество так же, только количество символов другое, понять бы как для одного из этих полей сделать, остальные то там так же)     | |||
| 24
    
        Cube 07.11.13✎ 11:26 | 
        (22) (23) Да просто напиши функцию, которая дополняет строку нулями до нужно длины и во всех полях её юзай. В чем проблема-то? Не оптимально, конечно, но у тебя и формат обмена не фонтан... :)     | |||
| 25
    
        Валидатор 07.11.13✎ 11:27 | 
        (24) блин, как все сложно((     | |||
| 26
    
        Cube 07.11.13✎ 11:30 | 
        (25) Да что сложного?
 Вот функция из типовой ЗиУП: // Дополняет строку символами слева или справа до заданной длины и возвращает ее. // Незначащие символы слева и справа удаляются. По умолчанию функция дополняет строку символами "0" (ноль) слева. // // Параметры: // Строка - Строка - исходная строка, которую необходимо дополнить символами; // ДлинаСтроки - Число - требуемая результирующая длина строки; // Символ - Строка - символ, которым необходимо дополнить строку; // Режим - Строка - "Слева" или "Справа" - режим добавления символов к исходной строке. // // Возвращаемое значение: // Строка - строка, дополненная символами. // // Пример 1: // Строка = "1234"; ДлинаСтроки = 10; Символ = "0"; Режим = "Слева" // Возврат: "0000001234" // // Пример 2: // Строка = " 1234 "; ДлинаСтроки = 10; Символ = "#"; Режим = "Справа" // Возврат: "1234######" // Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева") Экспорт // длина символа не должна превышать единицы Символ = Лев(Символ, 1); // удаляем крайние пробелы слева и справа строки Строка = СокрЛП(Строка); КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина(Строка); Если КоличествоСимволовНадоДобавить > 0 Тогда СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить); Если ВРег(Режим) = "СЛЕВА" Тогда Строка = СтрокаДляДобавления + Строка; ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда Строка = Строка + СтрокаДляДобавления; КонецЕсли; КонецЕсли; Возврат Строка; КонецФункции | |||
| 27
    
        Валидатор 07.11.13✎ 11:36 | 
        (26) и потом при заполнении тхт файла ее вызывать так?     | |||
| 28
    
        Cube 07.11.13✎ 11:42 | 
        (27) Ну да.     | |||
| 29
    
        Валидатор 07.11.13✎ 11:45 | 
        (28) ясно, спасибо)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |