Имя: Пароль:
1C
1С v8
Помогите исправить ошибку в передаче данных в 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) Или ты только с операции? :))