Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/27: Рейтинг темы: голосов - 27, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
1C 7.x

Выгрузка номенклатуры для сайта

18.07.2012, 15:59. Показов 5318. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, проблема вот в чём: есть в 7 1С стандартная обработка Выгрузка номенклатуры.ert и необходимо по ней производить выгрузку списка каталогов для сайта из документа excel с подбором из номенклатуры, при этом вбивая все каталоги в выбор номенклатуры вручную и нажимать enter для ввода в таблицу группы. Можно ли связав с excel как нибудь автоматизировать данный процесс доработав код или у кого может быть есть похожие примеры?

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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
Перем ТаблицаДляПодбора;  // Имя таблицы в которую производится подбор номенклатуры
 
//******************************************************************************
// КаталогИмяФайла(ПолноеИмяФайла, Каталог, Файл)
//
// Параметры:
//  ПолноеИмяФайла - строка: каталог и имя файла.
//  Каталог        - если передан, в него будет возвращено имя каталога.
//  Файл           - если передан, в него будет возвращено имя файла.
//
// Возвращаемое значение:
//  0 - если указанного каталога не существует
//  1 - если указанный каталог существует
//
// Описание:
//  Если каталог не существует, то пользователю предлагается его создать.
//
Функция КаталогИмяФайла(ПолноеИмяФайла, Каталог, Файл)
    
    Каталог=""; 
    Файл=ПолноеИмяФайла;
    Если ПустоеЗначение(Файл) = 1 Тогда  // Файл еще не задан, сгенерим его из направления
        Если Направление.ТекущаяСтрока() = 1 Тогда
            Файл = "ves";
        ИначеЕсли Направление.ТекущаяСтрока() = 2 Тогда
            Файл = "prom";
        ИначеЕсли Направление.ТекущаяСтрока() = 3 Тогда
            Файл = "zap";
        Иначе
            Файл = "tech";
        КонецЕсли;
    КонецЕсли;
    Разд=Найти(Файл, "\");
    
    Пока 0 < Разд Цикл 
        Каталог=Каталог+Лев(Файл, Разд); Файл=Сред(Файл, Разд+1); Разд=Найти(Файл, "\");
    КонецЦикла;
    Каталог=Каталог+".";
 
    Если СтрДлина(Каталог)<4 Тогда
    ИначеЕсли ФС.СуществуетФайл(Каталог)=1 Тогда
    ИначеЕсли "Да"=Вопрос(Каталог+"
                          |Указанный каталог не существует! Создать?","Да+Нет") Тогда 
        ФС.СоздатьКаталог(Каталог);
    Иначе 
        Каталог=""; Возврат(0);
    КонецЕсли;
    
    Возврат(1);
    
КонецФункции // КаталогИмяФайла()
 
Процедура ПриВыбореНаправления()
    Если (ПустоеЗначение(ИмяФайлаВыгрузки1) = 1) и (ПустоеЗначение(ИмяФайлаВыгрузки1) = 1) Тогда
        Если Направление.ТекущаяСтрока() = 1 Тогда
            ИмяФайлаВыгрузки1 = "ves1";
            ИмяФайлаВыгрузки2 = "ves2";
        ИначеЕсли Направление.ТекущаяСтрока() = 2 Тогда
            ИмяФайлаВыгрузки1 = "prom1";
            ИмяФайлаВыгрузки2 = "prom2";
        ИначеЕсли Направление.ТекущаяСтрока() = 3 Тогда
            ИмяФайлаВыгрузки1 = "zap1";
            ИмяФайлаВыгрузки2 = "zap2";
        Иначе
            ИмяФайлаВыгрузки1 = "tech1";
            ИмяФайлаВыгрузки2 = "tech2";
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Функция ОбработатьСтроку(ТекСтрока = "")  // Удаляет пробелы и заменяет запятые на ;
    Результат = СтрЗаменить(СтрЗаменить(СокрЛП(ТекСтрока),";",","),"""","");
    Возврат Результат;
КонецФункции
 
// Обрабатывает цену, округляет до "круглого" значения если выбран соответствующий режим и отличие не превышает 5 копеек
Функция ОбработатьЦену(Цена)
Перем Результат;
    Результат = Окр(Цена,0);
    Если (ABS(Результат-Цена) > 0.05) Тогда
        Результат = Цена;
    КонецЕсли;
    Возврат Результат;
КонецФункции    // ОбработатьЦену  
 
Процедура Сформировать()
    
    Перем ТЗ; 
    Перем Вид, Часы, Минуты, Секунды, Кодир, Тип, Заголовок;
 
    Если КаталогИмяФайла(ИмяФайлаВыгрузки1, "", "") = 0 Тогда
        Активизировать(ИмяФайлаВыгрузки1);
        Возврат;
    КонецЕсли;
    
    Если КаталогИмяФайла(ИмяФайлаВыгрузки2, "", "") = 0 Тогда
        Активизировать(ИмяФайлаВыгрузки2);
        Возврат;
    КонецЕсли;
    
    Если ИмяФайлаВыгрузки1 = ИмяФайлаВыгрузки2 Тогда
        Предупреждение("Файлы должны быть разными");
        Возврат;
    КонецЕсли;
 
    Запрос = СоздатьОбъект("Запрос"); 
    ТекстЗапроса = 
    "Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
    | Обрабатывать НеПомеченныеНаУдаление;
    | ГруппаТМЦ    = Справочник.Номенклатура.Родитель;
    | Группировка ГруппаТМЦ упорядочить по ГруппаТМЦ.Код без групп;
    | Группировка Номенклатура упорядочить по Номенклатура.Код Без Групп;
    |";//}}ЗАПРОС
 
    Если Группы.РазмерСписка() > 0 Тогда
        ТекстЗапроса = ТекстЗапроса + "Условие (Номенклатура в Группы);"
    КонецЕсли;
 
    Если флТолькоВключаемые = 1 Тогда
        ТекстЗапроса = ТекстЗапроса + "Условие (Номенклатура.НеВключатьВпрайс = 0);"
    КонецЕсли;
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Сообщить("Ошибка выполнения запроса");
        Возврат;
    КонецЕсли;
    
    Рег = СоздатьОбъект("Регистр.ОстаткиТМЦ");
    
    Текст1=СоздатьОбъект("Текст");
    Текст1.КодоваяСтраница(Кодировка.ПолучитьЗначение(Кодировка.ТекущаяСтрока(), Кодир));
 
    ТекущееВремя(Часы, Минуты, Секунды);
    Время=Шаблон("[Часы#Ч(0)2]:[Минуты#Ч(0)2]:[Секунды#Ч(0)2]");
 
    //Текст1.ДобавитьСтроку("Кодировка="+Кодир);
    //Текст1.ДобавитьСтроку("ДатаСоздания="+Формат(ТекущаяДата(), "ДДДММГГГГ"));
    //Текст1.ДобавитьСтроку("ВремяСоздания="+Время);
    
    Текст2=СоздатьОбъект("Текст");
    Текст2.КодоваяСтраница(Кодировка.ПолучитьЗначение(Кодировка.ТекущаяСтрока(), Кодир));
 
    //Текст2.ДобавитьСтроку("Кодировка="+Кодир);
    //Текст2.ДобавитьСтроку("ДатаСоздания="+Формат(ТекущаяДата(), "ДДДММГГГГ"));
    //Текст2.ДобавитьСтроку("ВремяСоздания="+Время);
 
    // Вроде как шаблон
    СтрокаВыгрузки = "IE_XML_ID;IE_NAME;IE_ID;IE_ACTIVE;IE_ACTIVE_FROM;IE_ACTIVE_TO;IE_PREVIEW_PICTURE;IE_PREVIEW_TEXT;IE_PREVIEW_TEXT_TYPE;IE_DETAIL_PICTURE;IE_DETAIL_TEXT;IE_DETAIL_TEXT_TYPE;IE_CODE;IE_TAGS;";
    СтрокаСвойств = "";
    Если Направление.ТекущаяСтрока() = 1 Тогда
        СтрокаСвойств = "IP_PROP16;IP_PROP17;IP_PROP18;IP_PROP19;";
    ИначеЕсли Направление.ТекущаяСтрока() = 2 Тогда
        СтрокаСвойств = "IP_PROP24;IP_PROP25;IP_PROP26;IP_PROP27;";
    ИначеЕсли Направление.ТекущаяСтрока() = 3 Тогда
        СтрокаСвойств = "IP_PROP36;IP_PROP37;IP_PROP38;IP_PROP39;";
    Иначе
        СтрокаСвойств = "IP_PROP40;IP_PROP41;IP_PROP42;IP_PROP43;";
    КонецЕсли;
    СтрокаВыгрузки = СтрокаВыгрузки + СтрокаСвойств + "IC_GROUP0;IC_GROUP1";
    Текст1.ДобавитьСтроку(СтрокаВыгрузки);
    
    // Вроде как шаблон
    СтрокаВыгрузки = "IE_XML_ID;IE_NAME;IE_ACTIVE;IE_ACTIVE_FROM;IE_ACTIVE_TO;IE_SORT;IE_PREVIEW_TEXT;IE_PREVIEW_TEXT_TYPE;IE_DETAIL_TEXT;IE_CODE;CP_QUANTITY;CP_QUANTITY_TRACE;CP_WEIGHT;";
    СтрокаВыгрузки = СтрокаВыгрузки + СтрокаСвойств + "IC_XML_ID0;IC_GROUP0;IC_GROUP1;IC_CODE0;CV_PRICE_1;CV_CURRENCY_1;CV_PRICE_2;CV_CURRENCY_2";
    Текст2.ДобавитьСтроку(СтрокаВыгрузки);
    
    Форма.ИспользоватьСлой("Основной, Прогресс");
    Запрос.Выгрузить(ТЗ,3);
    глМаксЭлемент = ТЗ.КоличествоСтрок();
    ТекущийЭлемент = 0;
    КолвоСтрок = 0;
    Прогрессор = глСоздатьПрогрессор(Контекст);
 
    ТекЦена = СоздатьОбъект("Справочник.ТипыЦен");
    
    Пока Запрос.Группировка("ГруппаТМЦ") = 1 Цикл
        Пока Запрос.Группировка("Номенклатура") = 1 Цикл
            ТекущийЭлемент = ТекущийЭлемент + 1;
            ТМЦ = Запрос.Номенклатура;
            ТМЦ.ИспользоватьДату(РабочаяДата());
 
            Если (флАссортимент = 1) и (ТМЦ.МинОстаток <= 0) Тогда
                Продолжить;
            КонецЕсли;
    
            Если флОстаток = 1 Тогда
                Остаток = Рег.СводныйОстаток(,ТМЦ,,,"Количество");
                Если (Остаток <= 0) Тогда // Пропуск нулевых остатков
                    Продолжить;
                КонецЕсли;  
            КонецЕсли;
 
            флНовинка = 0; флСпецпредложение = 0;
            Если Новинки.НайтиЗначение(ТМЦ) > 0 Тогда
                флНовинка = 1;
            КонецЕсли;
            
            Если Спецпредложение.НайтиЗначение(ТМЦ) > 0  Тогда
                флСпецпредложение = 1;
            КонецЕсли;
            
            //  Розничная цена
            ЦенаОпт = 0; ПечЦенаОпт = "";
            Если ТекЦена.НайтиПоКоду("00004")=1 Тогда
                Если глВернутьЦену(ТМЦ, ТекЦена,РабочаяДата(),ЦенаОпт) =1 тогда  
                    ЦенаОпт = ОбработатьЦену(ЦенаОпт*(1+глНачисляемыйНДС(ТМЦ.СтавкаНДС)));
                    ПечЦенаОпт=глФРМ(ЦенаОпт);
                иначе
                    ПечЦенаОпт="";
                    Продолжить;
                КонецЕсли;
            Иначе
                Сообщить("Не найдена розничная цена");
                Продолжить;
            КонецЕсли;
 
            глОбновитьПрогрессор(Прогрессор,ТекущийЭлемент/глМаксЭлемент*100);
            Форма.Обновить(1);
    
            СтрокаКода = ТМЦ.Код;
            СтрокаНаименования =  СокрЛП(ТМЦ.ПолнНаименование);
            Описание = ОбработатьСтроку(СокрЛП(ТМЦ.КаталожныйНомер) + " "+СокрЛП(ТМЦ.Применяемость) + " " + СтрокаКода);
            Группа = СокрЛП(глВернутьРодителя(ТМЦ).Комментарий);
 
            Если СтрДлина(Группа) = 0 Тогда
                Сообщить("Группа для "+ ТМЦ.Код+" "+ТМЦ.Наименование+" не описана. Пропущена",".");
                Продолжить;
            КонецЕсли;
            
            Если Найти(Группа,"*") = 0 Тогда
                Группа1 = "";
                Группа0 = СокрЛП(Группа);
            Иначе
                Группа1 = СокрЛП(Прав(Группа,СтрДлина(Группа)-Найти(Группа,"*")));
                Группа0 = СокрЛП(Лев(Группа,Найти(Группа,"*")-1));
            КонецЕсли;
            ГруппаМА = ТМЦ.ГруппаМА;
            КолвоМА = ТМЦ.МинОстаток;
        
//  IE_XML_ID;
            СтрокаВыгрузки = ""+СтрокаКода+";";
//  IE_NAME;
            СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(СтрокаНаименования)+";";
//  IE_ID;
            СтрокаВыгрузки = СтрокаВыгрузки+ТекущийЭлемент+";";
//  IE_ACTIVE;
            СтрокаВыгрузки = СтрокаВыгрузки+"Y;";
//  IE_ACTIVE_FROM;
            СтрокаВыгрузки = СтрокаВыгрузки + Формат(ТекущаяДата(),"ДД.ММ.ГГГГ")+";";
//  IE_ACTIVE_TO;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IE_PREVIEW_PICTURE;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IE_PREVIEW_TEXT;
            СтрокаВыгрузки = СтрокаВыгрузки + Описание+";";
//  IE_PREVIEW_TEXT_TYPE;
            СтрокаВыгрузки = СтрокаВыгрузки + "text;";
//  IE_DETAIL_PICTURE;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IE_DETAIL_TEXT;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IE_DETAIL_TEXT_TYPE;
            СтрокаВыгрузки = СтрокаВыгрузки + "text;";
//  IE_CODE;
            СтрокаВыгрузки = СтрокаВыгрузки + СтрокаКода+";";
//  IE_TAGS;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IP_PROP16;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IP_PROP17;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IP_PROP18;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IP_PROP19;          
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IC_GROUP0;
            СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа0) + ";";
//  IC_GROUP1;
            СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа1) + ";";
 
            Текст1.ДобавитьСтроку(СтрокаВыгрузки);
 
//  Второй файл
//  IE_XML_ID;
            СтрокаВыгрузки = ""+СтрокаКода+";";
//  IE_NAME;
            СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(СтрокаНаименования)+";";
//  IE_ACTIVE;
            СтрокаВыгрузки = СтрокаВыгрузки+"Y;";
//  IE_ACTIVE_FROM;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IE_ACTIVE_TO;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IE_SORT;
            СтрокаВыгрузки = СтрокаВыгрузки + "500;";
//  IE_PREVIEW_TEXT;
            СтрокаВыгрузки = СтрокаВыгрузки + Описание+";";
//  IE_PREVIEW_TEXT_TYPE;
            СтрокаВыгрузки = СтрокаВыгрузки + "text;";
//  IE_DETAIL_TEXT;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IE_CODE;
            СтрокаВыгрузки = СтрокаВыгрузки + СтрокаКода+";";
//  CP_QUANTITY;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  CP_QUANTITY_TRACE;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  CP_WEIGHT;
            Вес = ТМЦ.БазоваяЕдиница.Вес*1000;
            СтрокаВыгрузки = СтрокаВыгрузки + Вес+";";
//  IP_PROP16;
            Признак = "";            
            Если флСпецпредложение = 1 Тогда
                Признак = "да";
            КонецЕсли;
            СтрокаВыгрузки = СтрокаВыгрузки + Признак+";";
//  IP_PROP17;
            Признак = "";            
            Если флНовинка = 1 Тогда
                Признак = "да";
            КонецЕсли;
            СтрокаВыгрузки = СтрокаВыгрузки + Признак+";";
//  IP_PROP18;
            Признак = "";
            Если ГруппаМА = Перечисление.ГруппаАссортимента.ГруппаА Тогда
                Признак = "да";
            КонецЕсли;
            СтрокаВыгрузки = СтрокаВыгрузки + Признак +";";
//  IP_PROP19;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IC_XML_ID0;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  IC_GROUP0;
            СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа0) + ";";
//  IC_GROUP1;
            СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа1) + ";";
//  IC_CODE0;
            СтрокаВыгрузки = СтрокаВыгрузки + ";";
//  CV_PRICE_1;
            СтрокаВыгрузки = СтрокаВыгрузки + ПечЦенаОпт+ ";";
//  CV_CURRENCY_1;
            СтрокаВыгрузки = СтрокаВыгрузки + "RUB;";
//  CV_PRICE_2;
            //  Оптовая цена
            ЦенаОпт = 0; ПечЦенаОпт = "";
            Если ТекЦена.НайтиПоКоду("00002")=1 Тогда
                Если глВернутьЦену(ТМЦ, ТекЦена,РабочаяДата(),ЦенаОпт) =1 тогда  
                    ЦенаОпт = ОбработатьЦену(ЦенаОпт*(1+глНачисляемыйНДС(ТМЦ.СтавкаНДС)));
                    ПечЦенаОпт=глФРМ(ЦенаОпт);
                иначе
                    ПечЦенаОпт="";
                КонецЕсли;
            КонецЕсли;
            СтрокаВыгрузки = СтрокаВыгрузки + ПечЦенаОпт+ ";";
//  CV_CURRENCY_2"
            СтрокаВыгрузки = СтрокаВыгрузки + "RUB;";
            Текст2.ДобавитьСтроку(СтрокаВыгрузки);
            КолвоСтрок = КолвоСтрок + 1;
        КонецЦикла;
    КонецЦикла;    
 
    Текст1.ДобавитьСтроку("");
    Текст2.ДобавитьСтроку("");
    
    глСтатусСтрока(Контекст,"Выгрузка завершена");
    глОбновитьПрогрессор(Прогрессор,100); 
 
    Текст1.Записать(ИмяФайлаВыгрузки1);
    Текст2.Записать(ИмяФайлаВыгрузки2);
 
    
    глСброситьПрогрессор(Прогрессор);
    Форма.ИспользоватьСлой("Основной,Подвал");
    Сообщить("Файлы сформированы. Выведено "+КолвоСтрок+" элементов номенклатуры","!!");
КонецПроцедуры
 
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриНачалеВыбораЗначения(ЭлементДиалога, ФлагОбработки)
    
    Перем Каталог, Файл; 
    
    Если ЭлементДиалога="ИмяФайлаВыгрузки1" Тогда
        КаталогИмяФайла(ИмяФайлаВыгрузки1, Каталог, Файл);
        Если ФС.ВыбратьФайл(0, Файл, Каталог, "Файл выгрузки", 
                            "C разделителями (*.csv)|*.csv", "csv")=1 Тогда
            ИмяФайлаВыгрузки1=Каталог+Файл; 
        КонецЕсли;
    ИначеЕсли ЭлементДиалога="ИмяФайлаВыгрузки2" Тогда
        КаталогИмяФайла(ИмяФайлаВыгрузки2, Каталог, Файл);
        Если ФС.ВыбратьФайл(0, Файл, Каталог, "Файл выгрузки", 
                            "C разделителями (*.csv)|*.csv", "csv")=1 Тогда
            ИмяФайлаВыгрузки2=Каталог+Файл; 
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры // ПриНачалеВыбораЗначения()      
 
//******************************************************************************
// Предопределенная процедура.
//
Процедура ПриОткрытии()
    Форма.ИспользоватьСлой("Основной,Подвал");
    Кодировка.ДобавитьЗначение(0, "Windows");
    Кодировка.ДобавитьЗначение(1, "DOS");
    
    Направление.ДобавитьЗначение(0, "Импортные товары");
    Направление.ДобавитьЗначение(1, "Промышленные товары");
    Направление.ДобавитьЗначение(2, "Запасные части");
    Направление.ДобавитьЗначение(3, "Сельхозтехника");
    
    флТолькоВключаемые = 1;
 
КонецПроцедуры // ПриОткрытии()
 
//******************************************************************************
// Процедуры управления добавления данных с списки значений
 
Процедура ПоКнопкеДобавитьГруппу(Режим)
    ТаблицаДляПодбора = Группы;
    ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим);
КонецПроцедуры     
 
Процедура ПоКнопкеДобавитьНовинки(Режим)
    ТаблицаДляПодбора = Новинки;
    ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим);
КонецПроцедуры     
 
Процедура ПоКнопкеДобавитьСпецпредложение(Режим)
    ТаблицаДляПодбора = Спецпредложение;
    ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим);
КонецПроцедуры     
 
Процедура ОбработкаПодбора(Элемент, Конт)
    Если ТаблицаДляПодбора = Группы Тогда
        Если (Элемент.Вид() = "Номенклатура") и (Группы.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 1) Тогда
            Группы.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование);
        КонецЕсли;
    Иначе
        Если (Элемент.Вид() = "Номенклатура") и (ТаблицаДляПодбора.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 0) Тогда
            ТаблицаДляПодбора.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Добавлено через 1 час 32 минуты
Если кто меня не до конца понял, то мне у меня есть окно Номенклатура(Подбор) в котором я вбиваю(ищу по коду) в области "код" номер каталога из 4 цифр и далее enter чтобы добавить каталог в таблицу для подбора, как можно сделать чтобы был автоматический подбор нужных каталогов и занесение их в таблицу для подбора? Подскажите пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2012, 15:59
Ответы с готовыми решениями:

Выгрузка номенклатуры из 7.7(торговля + склад для Укр) для SQL в 8.2(УТП)
Доброго времени суток, Форумчане! Как правильно выгрузить справочник номенклатуры с 1с:Предприятия 7.7 для SQL (Конфигурация...

Выгрузка номенклатуры из 1с 8.2 "Управление торговлей", редакция 10.3 (10.3.14.5)
Друзья!!! Мне необходимо выгрузить номенклатуру и контрагентов из 1с 8.2 &quot;Управление торговлей&quot;, редакция 10.3 (10.3.14.5), и...

Выгрузка приема из сайта в 1С 8.1
Здравствуйте, делаю выгрузку из сайта. Проблема: Если на сайте зарегистрировались на прием 2-3 человека в разное время. Пример: 1...

14
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
18.07.2012, 18:59

Каталог это из NTFS?
Код это в справочнике?
Каким образом
номер каталога из 4 цифр и далее enter
может связать что-то с таблицей дисковых каталогов?

Добавлено через 5 минут
текст нечитабельный (кавычки разные)
Сказал бы я, что он "не такой уж и длинный, конечно, если не спеша за ужином вместо кроссворда найти в нём зерно...", но не могу
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
19.07.2012, 09:30  [ТС]
Цитата Сообщение от duk337 Посмотреть сообщение

Каталог это из NTFS?
Код это в справочнике?
Каким образом может связать что-то с таблицей дисковых каталогов?
Каталог- это каталог товаров, а по коду товара вручную из справочника номенклатура я ищу катлоги, вбивая в ней товары. После, когда товар найден нажимаю ентер и они заносятся в "ТаблицаДляПодбора". Вот:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Предопределенная процедура.
//
Процедура ПриОткрытии()
    Форма.ИспользоватьСлой("Основной,Подвал");
    Кодировка.ДобавитьЗначение(0, "Windows");
    Кодировка.ДобавитьЗначение(1, "DOS");
    
    Направление.ДобавитьЗначение(0, "Импортные товары");
    Направление.ДобавитьЗначение(1, "Промышленные товары");
    Направление.ДобавитьЗначение(2, "Запасные части");
    Направление.ДобавитьЗначение(3, "Сельхозтехника");
    
    флТолькоВключаемые = 1;
 
КонецПроцедуры // ПриОткрытии()
 
//******************************************************************************
// Процедуры управления добавления данных с списки значений
 
Процедура ПоКнопкеДобавитьГруппу(Режим)
    ТаблицаДляПодбора = Группы;
    ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим);
КонецПроцедуры
А вот, как я понимаю, сама обработка добавляющая каталог из номенклатуры в "ТаблицаДляПодбора":

1C
1
2
3
4
5
6
7
8
9
10
11
Процедура ОбработкаПодбора(Элемент, Конт)
    Если ТаблицаДляПодбора = Группы Тогда
        Если (Элемент.Вид() = "Номенклатура") и (Группы.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 1) Тогда
            Группы.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование);
        КонецЕсли;
    Иначе
        Если (Элемент.Вид() = "Номенклатура") и (ТаблицаДляПодбора.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 0) Тогда
            ТаблицаДляПодбора.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Именно тут мне нужно переделать чтобы это было не вручную, а автоматом например были заранее забиты каталоги и они переносились в "ТаблицаДляПодбора" из справочника номенклатура.
0
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
19.07.2012, 11:03
То, что в текстах, и так понятно: "Если номенклатурина входит в список групп..."
По какому значению и откуда мы должны создать этот список?
Каталог- это каталог товаров, а по коду товара вручную из справочника номенклатура я ищу катлоги, вбивая в ней товары
Каталог - это группа в справочнике?
PS. "В ней" - это в ком? Это как у Вишневского "Я очень невсебяемый, когда я невтебяемый"
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
19.07.2012, 11:35  [ТС]
Цитата Сообщение от duk337 Посмотреть сообщение
По какому значению и откуда мы должны создать этот список?
Каталог - это группа в справочнике?
В ней, т. е. в номенклатуре. Имееться обработка Выгрузка номенклатуры.ert, в ней часть кода такая:

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
// Предопределенная процедура.
 
 
//
 
 
Процедура ПриОткрытии()
    Форма.ИспользоватьСлой("Основной,Подвал");
    Кодировка.ДобавитьЗначение(0, "Windows");
    Кодировка.ДобавитьЗначение(1, "DOS");
    
    Направление.ДобавитьЗначение(0, "Импортные товары");
    Направление.ДобавитьЗначение(1, "Промышленные товары");
    Направление.ДобавитьЗначение(2, "Запасные части");
    Направление.ДобавитьЗначение(3, "Сельхозтехника");
    
    флТолькоВключаемые = 1;
 
КонецПроцедуры // ПриОткрытии()
 
 
 
//******************************************************************************
 
 
// Процедуры управления добавления данных с списки значений
 
 
 
Процедура ПоКнопкеДобавитьГруппу(Режим)
    ТаблицаДляПодбора = Группы;
    ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим);
КонецПроцедуры
Тут мы выбираем из справочника номенклатура каталоги товаров, при этом производя выборку из списка путём ручного ввода(поиска) по каталогу и затем нажимаем enter чтобы добавить товар в ТаблицаДляПодбора, вот за это отвечает думаю этот код:

1C
1
2
3
4
5
6
7
8
9
10
11
Процедура ОбработкаПодбора(Элемент, Конт)
    Если ТаблицаДляПодбора = Группы Тогда
        Если (Элемент.Вид() = "Номенклатура") и (Группы.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 1) Тогда
            Группы.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование);
        КонецЕсли;
    Иначе
        Если (Элемент.Вид() = "Номенклатура") и (ТаблицаДляПодбора.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 0) Тогда
            ТаблицаДляПодбора.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Так вот сама задача состоит в том, можно ли сделать так чтобы из справочника номенклатура в ТаблицаДляПодбора, выборка происходила автоматически без ввода вручную, например заранне ввести весь список каталогов и чтобы оттуда черпались каталоги, сравнивались с теми что есть в номенклатуре и вносились в ТаблицаДляПодбора? Подскажите может есть что то подобное в качестве примера. Просто катлоги ч черпаю из файла excel и там их очень много что усложняет задачу ручного ввода.
0
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
19.07.2012, 14:13
Можно заранее, можно взять из ёкселя, можно сформировать таблицу синхронизации, можно написать запрос, загнав всю нужную номенклатуру в таблицу по кнопке, можно ...
А вменозно описать последовательных Ваших действий от начала до конца нельзя?
И просьба: не втыкайте эти исходники в комменты уже, объясните, что на входе, что на выходе.
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
19.07.2012, 15:19  [ТС]
Так устал описывать уже. Последовательность действий такая:
Открываю excel документ ссылка на excel. Вхожу в 1С:Предприятие 7.7, открываю обработку Выгрузка номенклатуры.ert ссылка на Выгрузка номенклатуры.ert , затем нажимаю на кнопку открытия подбора номенклатуры кнопка с 5-ю точками, там вбиваю по коду номер номенклатуры из excel и затем enter и номенклатура попадает в таблицу для отбора, и так нужно с каждым каталогом отдельно. Можно ли сделать считывание из excel циклом и вбивание автоматом? Схему последовательности действий наглядно ещё показал тут на рисунке: ЗАДАЧА
0
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
20.07.2012, 00:26
Это к вопросу импорта их ёкселя. Зачем подбор? Засосал, синхронизировал. Своей обработочкой. А с подбором утрахаешься .
Или мухи, или котлеты...

Добавлено через 1 минуту
Как спросить. Подразделы. Удалённый доступ. Импорт (и прочие факи)
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
20.07.2012, 08:36  [ТС]
Блин, неужели никто не может кодом помочь мне? Я не так силён в 1С и не знаю как это реализовать, примерно хотя бы. В ссылке выше есть выгрузка для екселя, но для 8, мне нужно именно для 7 1С предприятия, хотя бы что то.
0
34 / 34 / 3
Регистрация: 31.03.2011
Сообщений: 197
20.07.2012, 10:46
Цитата Сообщение от maxxxl-ms Посмотреть сообщение
Блин, неужели никто не может кодом помочь мне? Я не так силён в 1С и не знаю как это реализовать, примерно хотя бы.
Так может эта... не стоило и браться?

Гуглите импорт из excel в 1С по OLE, например. На инфостарте том же - на любой вкус, как платные так и бесплатные.
0
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
20.07.2012, 13:34
Цитата Сообщение от maxxxl-ms Посмотреть сообщение
Блин, неужели никто не может кодом помочь мне? Я не так силён в 1С и не знаю как это реализовать, примерно хотя бы. В ссылке выше есть выгрузка для екселя, но для 8, мне нужно именно для 7 1С предприятия, хотя бы что то.
к фрилансерам. Вам не совет нужен
, а тут страна советов, где не склонные к ремесленничеству советчики.

Добавлено через 3 минуты
Совет: В конфигураторе. Создай обработку или отчет. В макет копипастой закинь ёксель, напиши текст обработки ячеек. В ентерпрайзе запусти.
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
20.07.2012, 14:01  [ТС]
Цитата Сообщение от Танцор_С_Бубном Посмотреть сообщение
Так может эта... не стоило и браться?
Да браться надо, 1С популярный вообще то язык на предприятиях.
Всё с кодом разобрался сам уже и уже научился грузить из excel по наменклатуре и вбивать вот:
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
Процедура ГрузанутьНоменклатурку()
    лист = Направление.ТекущаяСтрока();
    Если  лист= 1 Тогда
        лист  = "импортные";
    ИначеЕсли лист = 2 Тогда
        лист  = "пром";
    ИначеЕсли лист = 3 Тогда
        лист  = "авто и сельхоз";
    ИначеЕсли лист = 4 Тогда
        лист  = "техника";
    Иначе
        Предупреждение("Ничего не выбрано!",60);
        Возврат;
    КонецЕсли;
   Если ФС.СуществуетФайл(СокрЛП(ИмяФайлаВыгрузки3))=0 Тогда
        Возврат;
    КонецЕсли;
    
    Адо=CreateObject("ADODB.Connection");
    Рекордсет=CreateObject("ADODB.recordset");                                   
    Адо.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(ИмяФайлаВыгрузки3)+";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;""";
    Адо.Open();
    Рекордсет.ActiveConnection = Адо;
    Рекордсет.CursorType = 3;
    Рекордсет.LockType = 2;
    Рекордсет.Source = "Select F1 from ["+лист+"$] ";
    Рекордсет.Open();
    спр = СоздатьОбъект("Справочник.Номенклатура");
    Пока Рекордсет.Eof()=0 Цикл
        Если Спр.НайтиПоКоду(Рекордсет.Fields("F1").Value,0)=1 Тогда
            Если Спр.ЭтоГруппа()=1 Тогда
                Группы.ДобавитьЗначение(Спр.ТекущийЭлемент());
            КонецЕсли;
        КонецЕсли;
        Рекордсет.MoveNext();
    КонецЦикла;
    Рекордсет.Close();
    Адо.Close();
 
КонецПроцедуры // ГрузанутьНоменклатурку
Но опять таки я рано обрадовался, специфиный язык 1С снова меня грузит, после того как я нажимаю сформировать, ошибка при обработке:
1C
1
2
Если (ABS(Результат-Цена) > 0.05) Тогда
{D:\1C\EXTFORMS\_НА_ВОТ.ERT(145)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
Ошибка тут где то:
1C
1
2
3
4
5
6
7
8
9
10
// Обрабатывает цену, округляет до "круглого" значения если выбран соответствующий режим и отличие не превышает 5 копеек
 
Функция ОбработатьЦену(Цена)
Перем Результат;
    Результат = Окр(Цена,0);
    Если (ABS(Результат-Цена) > 0.05) Тогда
        Результат = Цена;
    КонецЕсли;
    Возврат Результат;
КонецФункции    // ОбработатьЦену
Такая ошибка возникла после того как я написал автоматический подбор из номенклатуры, когда вручную вбиваю элементы формируються без проблем.
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
20.07.2012, 14:04  [ТС]
Цитата Сообщение от duk337 Посмотреть сообщение
к фрилансерам. Вам не совет нужен
, а тут страна советов, где не склонные к ремесленничеству советчики.
Ну вообще то я не просил за меня программу писать, я её сам написал и уже тут выложил, надеюсь другим в помощь также! Форумы для того и созданы помогать.
0
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
20.07.2012, 14:49
Спасибо. Одинэснику такое в голову не придёт. Но по взрослому.
PS. А суть-то не в обработке и не в каталогах таки, а в "Select F1 from ["+лист+"$] ", где надо сначала выбрать лист из списка направлений
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 11
20.07.2012, 17:31  [ТС]
Всё решил сам))) Ошиба такая была из за пустых процов, которые забыл заккоментить в начале.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2012, 17:31
Помогаю со студенческими работами здесь

внешняя обработка для изменения свойств номенклатуры
1С восьмерка занимаюсь совсем недавно, так что может вопрос и простой, но для меня сложный ) ситуация: нужно изменить одно из...

Обработка для загрузки из файла XLS или из Firebird 2.5 справочника номенклатуры с ценами и остатками
Обработка для загрузки из файла XLS справочника номенклатуры с ценами и остатками. Поделитесь информацией кто делал.

Выгрузка номенклатуры из 1с
Добрый день. 1С Предприятие 8.3. Конфигурация : Розница 8. Аптека , редакция 2.1. Хотел узнать, какие есть варианты выгрузки ...

Выгрузка части номенклатуры - двух подразделов
Здравствуйте. Выгружаю из базы остатки + цены, но файл формирует очень долго, грузится все остатки,--&gt; нужно убрать лишние разделы -...

Какой тип номенклатуры можно указать для вида номенклатуры?
сдавал экзамен проф УТ 8, попался вопрос: какой тип номенклатуры можно указать для вида номенклатуры? выбрал товар и услуга, результат...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru