|
Помогите исправить ошибку в передаче данных в 1С из TXT Ø (Волшебник 27.09.2011 15:29) | ☑ | ||
---|---|---|---|---|
0
Blakangelos
27.09.11
✎
14:12
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика. КонецПроцедуры Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) // Отключение стандартной обработки СтандартнаяОбработка = Ложь; // Выбор файла Microsoft Excel ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ВыборФайла.Фильтр = "Документ Excel (*.txt)|*.txt"; ВыборФайла.ПроверятьСуществованиеФайла = Истина; ВыборФайла.ПолноеИмяФайла = ИмяФайла; Выбор = ВыборФайла.Выбрать(); Если НЕ Выбор Тогда Возврат; КонецЕсли; ИмяФайла = ВыборФайла.ВыбранныеФайлы[0]; КонецПроцедуры Процедура ЧтениеТХТФайла(Элемент) // Проверка на наличие имени файла Если ПустаяСтрока(ИмяФайла) Тогда Предупреждение("Для запуска обработки необходимо предварительно выбрать файл данных."); Возврат; КонецЕсли; // Открыть файл, создать текстовый документ, прочитать ПотокСтрок = ПолучитьПотокЧтенияСтрок(ИмяФайла); // Очистить предыдущие значения ТаблицаДокумента.Очистить(); ТаблицаДокумента.Колонки.Очистить(); // Создать колонки табличного документа ТаблицаДокумента.Колонки.Добавить("Номер",,"Номер",5); ТаблицаДокумента.Колонки.Добавить("Артикул",,"Артикул",11); ТаблицаДокумента.Колонки.Добавить("Номенклатура",,"Номенклатура",25); ТаблицаДокумента.Колонки.Добавить("Цена",,"Цена",6); // Последовательное чтение строк текстового файла КоличествоСтрок = ПотокСтрок.КоличествоСтрок(); Для Строка = 1 По КоличествоСтрок Цикл // Обработка нажатия Ctrl + Break ОбработкаПрерыванияПользователя(); // Чтение строки из файла тхт / csv СтрокаИзФайла = ПотокСтрок.ПолучитьСтроку(Строка); // Разбор строки в массив, используя в качествен символа-разделителя "|" МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";"); // Добавить данные в табличную часть экранной формы Стр=ТаблицаДокумента.Добавить(); Стр.Номер = Строка; Стр.Артикул = МассивСтрок[0]; Стр.Номенклатура = МассивСтрок[1]; Стр.Цена = МассивСтрок[2]; // Отобразить информацию о ходе выполнения обработки Состояние("Обработка строки файла : " + "строка " + Строка + " из " + КоличествоСтрок); КонецЦикла; // Отобразить результаты загрузки в форме элемента ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента; ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки(); КонецПроцедуры // ЧтениеTXTФайла(Элемент) Функция ПолучитьПотокЧтенияСтрок(Файл) Попытка // Используется для доступа к параметрам файлов или каталогов. ТекстовыйФайл = Новый Файл(Файл); Если ТекстовыйФайл.Существует() = Ложь Тогда Сообщить("Файла "+Файл+" не существует!"); Возврат Неопределено; КонецЕсли; // Текстовый документ предназначен для работы с текстами. // Объект позволяет получать и сохранять текст в файле, // работать со строками ПотокЧтенияСтрок = Новый ТекстовыйДокумент(); ПотокЧтенияСтрок.Прочитать(Файл); Исключение Сообщить("Файл не прочитан.", СтатусСообщения.Внимание); Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; // Возвращает текст, извлеченный из файла Возврат ПотокЧтенияСтрок; КонецФункции // ПолучитьПотокЧтенияСтрок Ошибка: {Форма.Форма.Форма(58,17)}: Переменная не определена (ОбщегоНазначения) МассивСтрок = <<?>>ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";"); (Проверка: Толстый клиент (обычное приложение)) |
|||
1
Blakangelos
27.09.11
✎
14:14
|
на 8.0 работает, а вот на 8.2 выдает эту ошибку :(
|
|||
2
mzelensky
27.09.11
✎
14:14
|
(0) ну значит нет у тебя этой функции! Что не ясно?
|
|||
3
Blakangelos
27.09.11
✎
14:15
|
как нету ?
|
|||
4
Wobland
27.09.11
✎
14:16
|
(0) опять ты секцию перепутал? наслаждаюсь чтением, спасибо
"Документ Excel (*.txt)|*.txt"; |
|||
5
ЧеловекДуши
27.09.11
✎
14:16
|
На 8.2 уже есть понятие Сервер и клиент
|
|||
6
ЧеловекДуши
27.09.11
✎
14:16
|
(3)Для сервера нет, а для клиента есть, и наоборот. :)
|
|||
7
Blakangelos
27.09.11
✎
14:17
|
Ой промахнулся, торопился
|
|||
8
Blakangelos
27.09.11
✎
14:17
|
что у меня не верно? на 8.0 пашет же
|
|||
9
Blakangelos
27.09.11
✎
14:18
|
не могу понять почему переменную не может определить
|
|||
10
Wobland
27.09.11
✎
14:18
|
(8) код не твой, разочаровал. модуль ОбщегоНазначения с клиента виден?
|
|||
11
Blakangelos
27.09.11
✎
14:19
|
да
|
|||
12
Wobland
27.09.11
✎
14:20
|
(11) что "да"? нет же
|
|||
13
Blakangelos
27.09.11
✎
14:20
|
Суть такая да код не мой я пытаюсь его адаптировать под 8.2 а потом буду менять алгоритм что бы из выгрузки стророней программы он переносил в 8.2 в документ
|
|||
14
Blakangelos
27.09.11
✎
14:21
|
как понять модуль общего назначения? модуль вижу это не он?
|
|||
15
Wobland
27.09.11
✎
14:23
|
(14) галки в свойствах клиент и сервер, если не ошибаюсь
|
|||
16
Blakangelos
27.09.11
✎
14:24
|
а эти &НаКлиенте &НаСервере?
|
|||
17
Wobland
27.09.11
✎
14:25
|
(16) а это не галки. ты в каком режиме на 8.2 работаешь?
|
|||
18
Blakangelos
27.09.11
✎
14:26
|
Обычное приложение
|
|||
19
Blakangelos
27.09.11
✎
14:28
|
и???
|
|||
20
Александр_
Тверь 27.09.11
✎
14:32
|
у тебя есть функция
"РазложитьСтрокуВМассивПодстрок" в модуле "ОбщегоНазначения" самый простой вариант, скопируй эту функцию (если она конечно не тянет за собой кучу других функций) в свою обработку и замени вызов с: ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";"); на: РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";"); |
|||
21
Wobland
27.09.11
✎
14:32
|
(19) ну или ОбщегоНазначения вообще убери
|
|||
22
Wobland
27.09.11
✎
14:33
|
(21) ага. у меня этот модуль глобальный, можно так писать
|
|||
23
Blakangelos
27.09.11
✎
14:38
|
Пишет
{Форма.Форма.Форма(58,17)}: Процедура или функция с указанным именем не определена (РазложитьСтрокуВМассивПодстрок) МассивСтрок = <<?>>РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,"|"); (Проверка: Толстый клиент (обычное приложение)) |
|||
24
Blakangelos
27.09.11
✎
14:47
|
ау
|
|||
25
Александр_
Тверь 27.09.11
✎
14:48
|
(24) чего ау? Чего ты хочешь?
|
|||
26
Blakangelos
27.09.11
✎
14:51
|
помоги исправить ошибку
|
|||
27
Blakangelos
27.09.11
✎
14:52
|
в самом верху написано
|
|||
28
Blakangelos
27.09.11
✎
14:54
|
и этот испугался и убежал :(
|
|||
29
Александр_
Тверь 27.09.11
✎
14:55
|
(26) ппц. тебе еще сколько раз надо повторить?
прочитай внимательно (20). "РазложитьСтрокуВМассивПодстрок" - ФУНКЦИЯ, которая не доступна в контесте выполнения твоей обработки. Почему она стала недоступной если раньше(в другой обработке, другой конфе и т.д.) была доступной? Есть куча разных причин. Самое простое - это скопировать эту функцию к себе в обработку. |
|||
30
Александр_
Тверь 27.09.11
✎
14:58
|
Обращение на которое ругается:
ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок - означает вызов функции "РазложитьСтрокуВМассивПодстрок" из общего модуля с именем "ОбщегоНазначения". Т.Е. этой функции в модуле который ты копировала НЕТ. ОНА В ДРУГОМ МЕСТЕ. Тебе надо сделать доступной эту функцию в твоей обработки. Как именно? есть разные варианты и зависит от того что где и как ты делаешь. Повторюсь еще раз - для тебя самое простое - скопировать к себе в обработку. |
|||
31
Wobland
27.09.11
✎
15:00
|
(30) переменная ОбщегоНазначения не обнаружено - это несколько о другом...
|
|||
32
Александр_
Тверь 27.09.11
✎
15:00
|
(30) чтобы скопировать к себе эту функцию тебе надо
открыть раздел конфирурации "Общие" --> "Общие модули" --> "ОбщегоНазначения" и там найти функцию "РазложитьСтрокуВМассивПодстрок" которую и надо скопировать. |
|||
33
Александр_
Тверь 27.09.11
✎
15:01
|
(31) о каком другом?
|
|||
34
Wobland
27.09.11
✎
15:02
|
(33) не виден общий модуль. оно ж не на РазложитьСтрокуВМассивПодстрок ругается
|
|||
35
Blakangelos
27.09.11
✎
15:02
|
а если у меня нету в общих ничего :(
|
|||
36
Wobland
27.09.11
✎
15:03
|
(35) после этого и (14) ухожу из ветки
|
|||
37
Александр_
Тверь 27.09.11
✎
15:04
|
(34) а как 1С узнает при обращении
"ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок" ты обращаешся к функции "РазложитьСтрокуВМассивПодстрок" модуля "ОбщегоНазначения" или ты просто к свойству "РазложитьСтрокуВМассивПодстрок" объекта "ОбщегоНазначения", если такого модуля как "ОбщегоНазначения" вообще нет? а? |
|||
38
Blakangelos
27.09.11
✎
15:04
|
щас торговлю открою и через неё запущу :)
|
|||
39
Александр_
Тверь 27.09.11
✎
15:05
|
(35) ты делаешь обработку путем копирования. Вот то место откудого ты копируешь ДОЛЖНО содержать эту функцию. Смотри внимательно.
|
|||
40
Blakangelos
27.09.11
✎
15:06
|
Александр все что я скопировала и вставила в эту тему это все что есть там в форме :(
|
|||
41
Александр_
Тверь 27.09.11
✎
15:07
|
(40) понимаешь, Код в форме содержит вызов функции которая находится не в форме а в другом месте. где именно смотри в (32) он там находится ОБЯЗАТЕЛЬНО. иначе бы оно не работало.
|
|||
42
Александр_
Тверь 27.09.11
✎
15:08
|
+(41) т.е. просто все скопировать из формы НЕ ДОСТАТОЧНО для переноса.
|
|||
43
Blakangelos
27.09.11
✎
15:09
|
ок щас посмотрю
|
|||
44
Ткачев
27.09.11
✎
15:10
|
(35)Значит это пустая конфигурация
|
|||
45
Blakangelos
27.09.11
✎
15:13
|
Да это пустая была, а как мне красиво данную функцию и з конфигурации перенести в обработку это чтобы ничего не запуталось?
|
|||
46
Blakangelos
27.09.11
✎
15:14
|
Через управление торговлей работает
|
|||
47
Александр_
Тверь 27.09.11
✎
15:16
|
(46) красиво и легко может получиться только в том случае, если функция "РазложитьСтрокуВМассивПодстрок" простая т.е. не содержит вызовов других функций в других модулях. Тогда тебе достаточно просто скопировать ее целиком и поместить к себе в обработку. см (20)
а если она сложная, и содержит кучу вызовов других процедур и функций то тебе надо скопировать их все. В таком случае проще всего сначала скопировать функцию "РазложитьСтрокуВМассивПодстрок" и проверить на ошибки. И далее последовательно копировать недостающие функции на которые 1С будет ругаться |
|||
48
davlen
27.09.11
✎
15:18
|
фото тебе поможет)))
|
|||
49
Александр_
Тверь 27.09.11
✎
15:18
|
Ща посмотрел в 10.3
функцию фигня :))) просто себе в обработку добавить вот этот код. Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции // глРазложить и не парься ) |
|||
50
Александр_
Тверь 27.09.11
✎
15:20
|
код из (49) полностью скопируй к себе в модуль (в любое место) и замени вызов
с: ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";"); на: РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";"); |
|||
51
Ткачев
27.09.11
✎
15:20
|
(49)Она открывает ее в пустой базе
|
|||
52
Александр_
Тверь 27.09.11
✎
15:20
|
(51) да пусть где угодно открывает. код я привел, добавляет себе в обработку и радуется )
|
|||
53
Blakangelos
27.09.11
✎
15:21
|
я нашла с помошью точки останова :)
|
|||
54
Александр_
Тверь 27.09.11
✎
15:23
|
(53) ужас, чего ты нашла с помощью точки останова? :) функцию?
еще можно F12 нажать когда курсор стоит на вызове и перейти в саму функцию (чтобы не искать) |
|||
55
Blakangelos
27.09.11
✎
15:24
|
ребят я щас домой дома спишемся :) или завтра, и скоро я буду МЕГА МОЗГОМ :)
|
|||
56
Blakangelos
27.09.11
✎
15:24
|
Все быстро темку в избранное добавили
|
|||
57
Александр_
Тверь 27.09.11
✎
15:24
|
(55) :) учись.
|
|||
58
PR
27.09.11
✎
15:26
|
(7) С полом ты ошибся я смотрю
|
|||
59
PR
27.09.11
✎
15:27
|
+(58) Или ты только с операции? :))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |