Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
A3B9
0 / 0 / 0
Регистрация: 04.02.2019
Сообщений: 15
1

Внешняя обработка. Загрузка данных для создания заказов из CSV в 1С 8.3

04.02.2019, 17:10. Просмотров 614. Ответов 4

Здравствуйте. Я новичок в 1С. Нужно создать обработку, которая будет формировать заказы клиента из файла CSV.

На просторах интернета нашла такую заготовку programmist1s.ru/zagruzka-iz-csv-v-1s/ Которая, как оказалась, создана для 8.2 и в 8.3 не открывается. Попыталась переделать. В модуль объекта дописала код:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение Тогда
 
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
    ПараметрыРегистрации.Вставить("Наименование", "ЗагрузкаЗаказовИзВнешнегоФайла");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Загрузка заказов из внешнего файла");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    ДобавитьКоманду(ТаблицаКоманд,
    "Загрузка заказов из внешнего файла",
    "ЗагрузкаЗаказовИзВнешнегоФайла",
    "ОткрытиеФормы",
    //<Показывать оповещение>,
    //<Модификатор>
    );
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции
 
Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции
 
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры  
 
Процедура ПриСозданииНаСервере()
    Форма= ПолучитьФорму("ФормаНовая");
    Форма.Открыть();
КонецПроцедуры
 
#КонецЕсли
В модуле новой формы скопировала код из старой (с некоторыми изменениями, вместо "ЭлементыФормы" поставила просто "Элементы", на первое конфигуратор ругался):

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.
КонецПроцедуры
 
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    // 1c:8.2
    //ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    //ДиалогВыбора.Заголовок = "Выберите файл";
    //
    //Если ДиалогВыбора.Выбрать() Тогда
    //  ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
    //КонецЕсли;
    
    ПрочитанныйТекст = Новый ЧтениеТекста(ИмяФайла);
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    Сообщить(СтрокаТекстовогоФайла);
    Пока СтрокаТекстовогоФайла <> Неопределено Цикл
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    Сообщить(СтрокаТекстовогоФайла);
    КонецЦикла;
 
ПрочитанныйТекст.Закрыть();
    
КонецПроцедуры
 
Процедура ПрочитатьНажатие(Элемент)
    
    //очищаем таблицу и удаляем колонки 
    Таблица.Очистить();
    Таблица.Колонки.Очистить();
    Элементы.Таблица.Колонки.Очистить();
    
    // чтение файла
    ЗагружаемыйФайл = Новый ТекстовыйДокумент;
    ЗагружаемыйФайл.Прочитать(ИмяФайла);
    
    //шапка по умолчанию 1 строка, из первой строки делаем колонки таблицы
    Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1);
    
    //раскладываем строку в массив
    МассивКолонок = РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель);
    
    //генерируем колонки    
    Для Каждого ИмяКолонки Из МассивКолонок Цикл
        
        ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ",""); // убираем из имени колонок пробелы
        Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);       
        НоваяКолонка = Элементы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки);
        НоваяКолонка.Данные = ИмяБезПробелов;
        
    КонецЦикла;
    
    
    Для НомерСтроки=2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл
        
        //Состояние("Обрабатывается "+Строка(Формат(?(ЗагружаемыйФайл.КоличествоСтрок()=0,0,((100*НомерСтроки)/ЗагружаемыйФайл.КоличествоСтрок())),"ЧЦ=3; ЧДЦ=0"))+" %");
        //ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break
        
        // получить строку файла с указанным номером и преобразуем её в массив
        Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
        МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);
        НоваяСтрока = Таблица.Добавить();
        
        Если МассивКолонок.Количество() <> Таблица.Колонки.Количество() Тогда
            Сообщить("Ошибка со строкой " + Строка);
            Продолжить; // скорее всего в тексте содержит разделитель
        КонецЕсли;
        
        Для НомерКолонки = 1 по МассивКолонок.Количество() Цикл 
            //заполняем строку значениями
            ТекущееЗначение = МассивКолонок[НомерКолонки-1];
            ИмяКолонки = Таблица.Колонки[НомерКолонки-1].Имя;           
            НоваяСтрока[ИмяКолонки] = ТекущееЗначение;          
        КонецЦикла;         
        
    КонецЦикла;   
    
    
 
    
КонецПроцедуры
 
// Функция "расщепляет" строку на подстроки, используя заданный 
//      разделитель. Разделитель может иметь любую длину. 
//      Если в качестве разделителя задан пробел, рядом стоящие пробелы 
//      считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//      игнорируются.
//      Например, 
//      РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов, 
//      три из которых - пустые строки, а 
//      РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
//
//  Параметры: 
//      Стр -           строка, которую необходимо разложить на подстроки. 
//                      Параметр передается по значению.
//      Разделитель -   строка-разделитель, по умолчанию - запятая.
//
//
//  Возвращаемое значение:
//      массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
    
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункции
 
 
Разделитель = ";";
Открыла обработку в тонком клиенте. Никаких ошибок не выскакивает но и ничего не происходит (новая вкладка, совершенно пустая и без названия открывается). Часа 1.5 чесала интернет, нашла совет вставить

1C
1
2
3
4
Процедура ПриСозданииНаСервере()
    Форма= ПолучитьФорму("ФормаНовая");
    Форма.Открыть();
КонецПроцедуры
несработало...

Как заставить работать обработку?

Структура обработки и форма:

(А еще на форму почему-то не хочет вставать таблица...)
0
Миниатюры
Внешняя обработка. Загрузка данных для создания заказов из CSV в 1С 8.3  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2019, 17:10
Ответы с готовыми решениями:

Внешняя обработка для создания документа
Нужно создать внешнюю обработку для созданию общего заказа поставщику из остальных заказов с...

Внешняя обработка для создания одного документа на основании другого.
Друзья, хееелп!!! Есть Док1 с реквизитами Склад и Поставщик. Мне нужно для каждой такой пары...

Загрузка данных из csv
Добрый день! Есть файл .csv с количеством строк &gt; 40 млн. (данные о паспортах). Стоит задача...

1С 8.3 Внешняя обработка "Выгрузка/Загрузка документов"
Здравствуйте! Срочно стало нужно изучить 1с. Нужно выполнить задание: внешняя обработка, форма с 2...

Загрузка данных из csv в DGV
Добрый вечер, уважаемые программисты! Прошу вашей помощи. Имеется файлик csv, там данные разделены...

4
_ЕГОР_
Тест
Эксперт 1С
373 / 158 / 52
Регистрация: 26.02.2010
Сообщений: 1,165
05.02.2019, 07:51 2
Ох уж эти проблемы при переходе с обычных форм на управляемые...
Цитата Сообщение от A3B9 Посмотреть сообщение
Как заставить работать обработку?
Прикажи ей в грубой форме)

там в обработке можно указать Основную форму объекта. У вас там новая или старая форма?
0
A3B9
0 / 0 / 0
Регистрация: 04.02.2019
Сообщений: 15
05.02.2019, 09:22  [ТС] 3
там в обработке можно указать Основную форму объекта.
Как это сделать?

У вас там новая или старая форма?
ФормаНовая должна открываться.

Старая в конфигураторе хоть и показывается, но ни одной настройки нет
0
_ЕГОР_
Тест
Эксперт 1С
373 / 158 / 52
Регистрация: 26.02.2010
Сообщений: 1,165
05.02.2019, 09:27 4
Здесь выбрать
1
Миниатюры
Внешняя обработка. Загрузка данных для создания заказов из CSV в 1С 8.3  
A3B9
0 / 0 / 0
Регистрация: 04.02.2019
Сообщений: 15
05.02.2019, 10:23  [ТС] 5
Спасибо)
0
05.02.2019, 10:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2019, 10:23

Загрузка данных из csv в access
ДОбрый день всем) вообщем проблема у меня такая. есть файл csv с огромных количеством строк около...

Внешняя обработка для УФ
делаю внешнюю обработку для бухгалтерии 3.0, подключил ее как внешнюю, указал ссылку на документ в...

Внешняя обработка для документа
Типовая конфигурация бухгалтерии. Есть документ &quot;Комплектация номенклатуры&quot; Нужно добавить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru