Имя: Пароль:
1C
1С v8
Загрузка справочника через тонкого клиента
0 Svirepy
 
07.10.11
18:17
Сделал внешнюю обработку. В форме, в командной панели сделал кнопку "Загрузить". Привязал к ней команду формы. Текст:
&НаСервере
Процедура Загрузить(Команда)
   Если Объект.ТабНоменклатуры.Количество()=0 Тогда
       //грузим из файла
       Возврат;
   Иначе
       //грузим в 1с
       Номенклатура = Справочники.Номенклатура;
       Для ном=1 По Объект.ТабНоменклатуры.Количество() Цикл
           ТекСтр=Объект.ТабНоменклатуры.Получить(ном);
           Ном = Номенклатура.НайтиПоРеквизиту("Артикул",ТекСтр.Артикул);
           Если НЕ Ном=Номенклатура.ПустаяСсылка() Тогда
               Сообщить("Найдена "+Ном.Наименование);
               Продолжить;
           КонецЕсли;
           ГрНом = Номенклатура.НайтиПоНаименованию(ТекСтр.Группа);
           Если ГрНом=Номенклатура.ПустаяСсылка() Тогда
               ГрНом = Номенклатура.СоздатьГруппу();
               ГрНом.Наименование = ТекСтр.Группа;
               ГрНом.Записать();
           КонецЕсли;
           
           Ном = Номенклатура.СоздатьЭлемент();
           Ном.Артикул = ТекСтр.Артикул;
           Ном.Наименование = ТекСтр.Наименование;
           Ном.НаименованиеПолное = ТекСтр.Наименование;
           Ном.Родитель = ГрНом.Ссылка;
           Ном.Записать();
           
       КонецЦикла;
       Сообщить("Загрузка окончена!");
   КонецЕсли;
   
КонецПроцедуры

Полное ощущение, что процедура вообще не вызывается нажатием кнопки... Хэлп, плиз!!
1 Amra
 
07.10.11
18:19
Видимо всегда Объект.ТабНоменклатуры.Количество()=0
2 Svirepy
 
07.10.11
18:20
ЗЫ. В форме есть таблица значений с именем "ТабНоменклатуры", которая заполняется из сsv-файла. В форме весь список номенклатуры появляется...
3 Svirepy
 
07.10.11
18:21
Пробовал поставить Сообщить в самом начале процедуры - не сообщает ничего...
4 Mort
 
07.10.11
18:21
(2) Ты забыл ещё упомянуть что после "Привязал к ней команду формы." поставил ей директиву на сервере.
5 Amra
 
07.10.11
18:21
(3) И кому сервер должен чтото "сообщить"?
6 shuhard
 
07.10.11
18:22
(4) + 100500
7 Svirepy
 
07.10.11
18:31
Моrt, что ты имеешь в виду?
Амра, пусть хоть кому-нить сообщит! :)
8 shuhard
 
07.10.11
18:39
(7) вызов Загрузить в коде формы модуля покажи
9 Svirepy
 
07.10.11
18:42
Так его и показал в самом первом сообщении. Это он и есть.
10 shuhard
 
07.10.11
18:44
(9) а теперь внимательно читай (4)
11 Mort
 
07.10.11
18:44
(9) У тебя к событию кнопки привязана процедура, которая живет только на сервере. Раздели на две процедуры. &НаКлиенте событие, а оттуда вызов уже процедуры &наСервере.
12 Svirepy
 
07.10.11
18:45
Ага... Заработало вот так:

&НаСервере
Функция ДобавитьНоменклатуру(Артикул,Наименование,Группа)
       Номенклатура = Справочники.Номенклатура;
       Ном = Номенклатура.НайтиПоРеквизиту("Артикул",Артикул);
           Если НЕ Ном=Номенклатура.ПустаяСсылка() Тогда
               Возврат 0;
           КонецЕсли;
           ГрНом = Номенклатура.НайтиПоНаименованию(Группа);
           Если ГрНом=Номенклатура.ПустаяСсылка() Тогда
               ГрНом = Номенклатура.СоздатьГруппу();
               ГрНом.Наименование = Группа;
               ГрНом.Записать();
           КонецЕсли;
           
           Ном = Номенклатура.СоздатьЭлемент();
           Ном.Артикул = Артикул;
           Ном.Наименование = Наименование;
           Ном.НаименованиеПолное = Наименование;
           Ном.Родитель = ГрНом.Ссылка;
           Ном.Записать();
Возврат 1;
КонецФункции

&НаКлиенте
Процедура Загрузить()
   Если Объект.ТабНоменклатуры.Количество()=0 Тогда
       //грузим из файла
       ЗаполнитьТаблицуФормы();
   Иначе
       //грузим в 1с
       Для ном=1 По Объект.ТабНоменклатуры.Количество() Цикл
           ТекСтр=Объект.ТабНоменклатуры.Получить(ном);
           ДобавитьНоменклатуру(ТекСтр.Артикул,ТекСтр.Наименование,ТекСтр.Группа);
       КонецЦикла;
       Сообщить("Загрузка окончена!");
   КонецЕсли;
   
КонецПроцедуры
13 Svirepy
 
07.10.11
18:48
Спасибо огромное всем!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн