Имя: Пароль:
1C
 
1C 8 Как из Таблицы значений выгрузить данные в Табличную часть документа
0 DrGennadiy
 
04.05.09
17:05
Есть Таблица значений в ней все поля которые нужны для документа поступление товаров и услуг как из нее выгрузить данные в табличную часть документа .
1 sam_sam
 
04.05.09
17:07
Товары.Загрузить(ТаблицаТоваров);

развод?
2 Serg_1960
 
04.05.09
17:11
(1) Неа, не развод :( Бурные праздники, однако, виноваты :))
3 DrGennadiy
 
04.05.09
17:15
Ребят совсем не варит голова. В документе поступленияв табличной части товары есть реквизит номенклатура. В таблице значений это колонка "Т2"
Пишу вот так.
Докум = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Докум.Товары.Номенклатура = ТЗ.Т2;
Это Правильно?
4 hhhh
 
04.05.09
17:19
(3) неправильно. Слишком большой оптимист.
5 DrGennadiy
 
04.05.09
17:21
Ну подскажите как начало главное дальше сам!
6 Zlodey1С
 
04.05.09
17:24
А почему у тебя на фото маленькая девочка?
7 Mitriy
 
04.05.09
17:24
(5) либо перебором, либо переименуй Т2 в Номенклатура и как в (1)
8 DrGennadiy
 
04.05.09
17:26
Переименовать не могу так как все это в ТабЗнач сливается из ДБФ файла.
А как перебором
9 Просто Лёха
 
04.05.09
17:27
Переименовывай после того как сольешь всё, ТабЗнач.Колонки.Найти("Т2").Имя = "Номенклатура"
10 Mitriy
 
04.05.09
17:29
(9) а почему не ТабЗнач.Колонки.Т2.Имя = "Номенклатура" ??
11 Zlodey1С
 
04.05.09
17:29
(8) Циклом
Докум = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Для каждого Стр Из ТвояТЗ Цикл
НоваяСтрокаТовара=Докум.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);//Заполняем одинаковые колонки
НоваяСтрока.Номенклатура=Стр.Т2; // дополняешь различающиеся по кимени колонки
КонецЦикла
12 hhhh
 
04.05.09
17:39
(5) переименовать колонку в ТЗ и дальше смотри (1).
13 hhhh
 
04.05.09
17:40
(12)+ всё проспал
14 DrGennadiy
 
04.05.09
18:36
Ребят не получается вот что пишу
Процедура ЗагрузитьНажатие(Элемент)
Докум = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Докум.Дата = ТекущаяДата();
Для НомерСтроки = 1 По ТабЗнач.Количество() Цикл
ТабЗнач.Получить(НомерСтроки);
Докум.Товары.Номенклатура = ТабЗнач.Т3 // Т3- Т три колонка ТабЗнач
КонецЦикла;
Докум.Записать();
КонецПроцедуры
А мне в ответ вот что выходит
Форма.ФормаОтчета(272)}: Поле объекта не обнаружено (Номенклатура)

Помогите как правильно нужно
15 DrGennadiy
 
04.05.09
18:49
Вот это праздники в упор монитор не вижу
16 takefive
 
04.05.09
18:52
НайденнаяСтрока = ТабЗнач.Получить(НомерСтроки - 1);
НайденнаяСтрока.Номенклатура = ТабЗнач.Т3
17 DrGennadiy
 
04.05.09
18:53
Процедура ЧтениеФайла(Спросить=Ложь)
   
   Если СокрЛП(фФайлДанных)="" Тогда
       Возврат;
   КонецЕсли;
   
   База= Новый XBase;
   База.Кодировка=ЭлементыФормы.фКодировка.Значение;
   База.ОткрытьФайл(фФайлДанных);
   Если База.Открыта()=Ложь Тогда
       Предупреждение("Не могу открыть файл "+СокрЛП(фФайлДанных)+"!");
       Возврат;
   КонецЕсли;
   
   База.ОтображатьУдаленные=Ложь;
   ИмяФайла=СокрЛП(фФайлДанных);
   Записей=База.КоличествоЗаписей();
   ТЗ.Очистить();
   ТЗ.Колонки.Очистить();


   ТЗ.Колонки.Добавить("НомерЗаписи",,"№",5);
   ТЗ.Колонки.Добавить("Del",,,2);
   ВидыСортировки.Очистить();
   
   Для Каждого Поле из База.Поля Цикл
       ТЗ.Колонки.Добавить(Поле.Имя,,Поле.Имя, Поле.Длина);
       ВидыСортировки.Добавить(Поле.Имя);
   КонецЦикла;
   ЭлементыФормы.ТЗ.СоздатьКолонки();
   ЭлементыФормы.ТЗ.Колонки.НомерЗаписи.ЦветФонаПоля=Новый Цвет(234,229,216);
   ЭлементыФормы.ТЗ.Колонки.Del.ЦветФонаПоля=Новый Цвет(234,229,216);        
   
   //Если Спросить Тогда
   //    Если Вопрос("Прочитать данные?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
   //        Возврат;
   //    КонецЕсли;
   //КонецЕсли;
   
   ЭлементыФормы.ИндикаторБД.Видимость=1;
   ЭлементыФормы.СправкаОбОстановке.Видимость=1;
   Для А=1 По Записей Цикл
       Процент=Цел(А/Записей*100);    
       ЭлементыФормы.ИндикаторБД.Значение=Процент;
       Состояние("Выводится запись "+А+" из "+Записей);
       База.Перейти(А);
       Стр=ТЗ.Добавить();
   Стр.НомерЗаписи=А;
       Стр.Del=?(База.ЗаписьУдалена(),"*","");
       Для Ы=0 По База.Поля.Количество()-1 Цикл
           Стр.Установить(Ы+2,База.ПолучитьЗначениеПоля(Ы));
       КонецЦикла;    
       ЭлементыФормы.СправкаОбОстановке.Видимость=0;
       ОбработкаПрерыванияПользователя();
       ЭлементыФормы.СправкаОбОстановке.Видимость=1;
   КонецЦикла;
   ЭлементыФормы.СправкаОбОстановке.Видимость=0;
   ЭлементыФормы.ИндикаторБД.Видимость=0;
   
   //База.ЗакрытьФайл();
   

КонецПроцедуры
18 DrGennadiy
 
04.05.09
18:54
Вот такая процедура у меня читает из файла дбф и загоняет его т Табл Знач
19 DrGennadiy
 
04.05.09
18:54
Это правильно?
20 DrGennadiy
 
04.05.09
18:57
А эта пытается загрузить из ТаблЗнач В табличную часть документа Значения
Процедура ЗагрузитьНажатие(Элемент)
Докум = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Для каждого Стр Из ТЗ Цикл
НоваяСтрокаТовара=Докум.Товары.Добавить();
НоваяСтрокаТовара.Номенклатура=Стр.Т2A; // дополняешь различающиеся по кимени колонки
Докум.Записать();
КонецЦикла
КонецПроцедуры

Значений много привожу только одно поле пока однако при попытке пишет


{Форма.ФормаОтчета(271)}: Поле объекта не обнаружено (Т2A)
НоваяСтрокаТовара.Номенклатура=Стр.Т2A; // дополняешь различающиеся по кимени колонки
21 sur0k
 
04.05.09
19:01
(20) Переименуя колонку "Т2" в ТЗ, можно загрузить в Таб. часть

ТаблицаСКривойКолонкой.Колонки.Т2.Имя = "Номенклатура";
Документ.Товары.Загрузить(ТаблицаСКривойКолонкой);

быстрее работает. если в ДБФ будет 100к строк, будет ой как заметна разница
22 DrGennadiy
 
04.05.09
19:08
Все равно пишет
Форма.ФормаОтчета(241)}: Поле объекта не обнаружено (Т2)
   ТЗ.Колонки.Т2.Имя = "Номенклатура";
Нет такого поля в ТАблЗнач.
Не понятно может гдето у меня ошибка в процедуре
ЧтениеФайла()
23 sur0k
 
04.05.09
19:10
Варианта два:
1. Колонки Т2 дейсвительно не существует. Точку останова, смотрим состав ТЗ.Колонки в отладчике
2. Это никакая не таблица значений
24 DrGennadiy
 
04.05.09
22:57
добился того что заполняются колонки количество и колонка цена, однако колонка номенклатура остается пустой Тоесть из ТабЗнач в табличную часть документа  загружаются столько строк сколько в ТаблЗнач при этом поле ввода номенклатура пустое а поле количество и цена заполнены в чем тут проблема подскажите плиз
Код ТАкой:






Процедура ЗагрузитьНажатие(Элемент)
   
Докум = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Для каждого Стр Из ТЗ Цикл
Докум.Дата = ТекущаяДата();    
НоваяСтрока = Докум.Товары.Добавить();
НоваяСтрока.Номенклатура= Стр.T2;
НоваяСтрока.Количество = Стр.T11;
НоваяСтрока.ЕдиницаИзмерения = Стр.T5;
НоваяСтрока.СтавкаНДС = Стр.T16;
НоваяСтрока.Цена = Стр.T6;

// дополняешь различающиеся по кимени колонки
Докум.Записать();
КонецЦикла
КонецПроцедуры
25 H A D G E H O G s
 
04.05.09
23:04
(24) У тебя.
В НоваяСтрока.Номенклатура - тип "СправочникСсылка.Номенклатура"
В Стр.T2 - тип Строка.

Чего хотим?
26 H A D G E H O G s
 
04.05.09
23:06
(25)
<<В Стр.T2 - тип Строка. >>
Ориентировочно СТРОКА. Это, для всяких дотошных.
27 DrGennadiy
 
04.05.09
23:08
Да тип строка однако не понимаю должно же грузиться как правильно подскажите пожалуйсто прошу что должно быть вместо этой строки.
НоваяСтрока.Номенклатура= Стр.T2;
28 H A D G E H O G s
 
04.05.09
23:23
(27) Ну ты найди в базе эту номенклатуру.
Что у тебя в DBF - ке хранится?
Код?
Наименование?
Идентификатор?
29 DrGennadiy
 
04.05.09
23:28
Вот так пройдет
Процедура ЗагрузитьНажатие(Элемент)
   
Докум = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Спр = Справочники.Номенклатура;
Для каждого Стр Из ТЗ Цикл
Докум.Дата = ТекущаяДата();    
НоваяСтрока = Докум.Товары.Добавить();
НоваяСтрока.Номенклатура= Спр.НайтиПоНаименованию(Стр.T2);
НоваяСтрока.Количество = Стр.T11;
НоваяСтрока.ЕдиницаИзмерения = Стр.T5;
НоваяСтрока.СтавкаНДС = Стр.T16;
НоваяСтрока.Цена = Стр.T6;

// дополняешь различающиеся по кимени колонки
Докум.Записать();
КонецЦикла
30 H A D G E H O G s
 
04.05.09
23:32
"Откуда дровишки?" ©

Ну а если в базе:
"Палка-копалка МК1"
а в ДБФ:
"Палка-копалка"

Тогда что?

Или в базе вообще Палок-копалок нет.
31 DrGennadiy
 
04.05.09
23:36
Прости за тупые вопросы. Сделал так как написал выше все загрузилось только вот проблема точно такая как ты сказал в последнем посте и еще есть повторяющиеся позиции в ТаблЗнач они тоже загрузились по одной штуке как можно это свернуть тоесть сворачивать номенклатуру по количеству в ТаблицеЗначений? А с тем вопросом каоторый ты задал эта проблема стала сейчас как ее решить нужно или создавать при этом новую номенклатуру или как то определять что это таже как это сделатьочень прошу подскажи неучю!
32 H A D G E H O G s
 
04.05.09
23:38
Проблема изначальна.
Откуда ты файл ДБФ берешь?
33 DrGennadiy
 
04.05.09
23:45
Выгрузили из какой то другой программы в которой ведут учет не 1С
34 H A D G E H O G s
 
04.05.09
23:51
Ну тогда - только по наименованию.

В качестве совета:

1. Ищи по точному сравнению: не  Спр.НайтиПоНаименованию(Стр.T2), а Спр.НайтиПоНаименованию(Стр.T2,Истина)
2. Обрезай пробелы вокруг наименования до поиска: Стр.T2=СокрЛП(Стр.T2)
3. Если не удалось найти по исходному тексту, можно попробовать найти и убрать из наименования двойные пробелы:
Стр.T2=СокрЛП(Стр.T2);
Элемент=Спр.НайтиПоНаименованию(Стр.T2,Истина);
Если Элемент.Пустая() Тогда
ТекНаименование="";
Пока ТекНаименование<>Стр.T2 Цикл
Стр.Тз=СтрЗаменить(Стр.T2,"  "," ");
КонецЦикла;
Элемент=Спр.НайтиПоНаименованию(Стр.T2,Истина);
КонецЕсли;

Ну если ничего не помогает - создавай новую номенклатуру.
35 H A D G E H O G s
 
04.05.09
23:52
<<Стр.T2=СокрЛП(Стр.T2);
Элемент=Спр.НайтиПоНаименованию(Стр.T2,Истина);
Если Элемент.Пустая() Тогда
ТекНаименование="";
Пока ТекНаименование<>Стр.T2 Цикл
Стр.Тз=СтрЗаменить(Стр.T2,"  "," ");
КонецЦикла;
Элемент=Спр.НайтиПоНаименованию(Стр.T2,Истина);
КонецЕсли;>>

Алгоритм немного неоптимален, оптимизируй его, если можешь :-)
36 DrGennadiy
 
05.05.09
00:49
Я туплю вроде теперь не могу загрузить Единицу измерения с типом справочникСсылка Единицы измерения.Беру ее из ТаблЗнач а она не грузиться пытаюсь найти по наименованию в чем тут проблема?

НоваяСтрока.Номенклатура=Спр.НайтиПоНаименованию(Стр.T2,Истина);
ЕдИзм = Справочники.ЕдиницыИзмерения;
Стр.T5 = СокрЛП(Стр.T5);
НоваяСтрока.ЕдиницаИзмерения =ЕдИзм.НайтиПоНаименованию(Стр.T5);
37 sur0k
 
05.05.09
17:54
(36) ЕдиницыИзмерения - это подчиненный справочник. Вообще, должно по идее работать, даже если владелец у единицы неправильный.
Программист всегда исправляет последнюю ошибку.