|
Загрузка данных из ПТИУ в тхт файл 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) ясно, спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |