|
DBF и ТЗ | ☑ | ||
---|---|---|---|---|
0
Singenor
13.11.12
✎
17:20
|
нужно выгружать данные из дбф в таблицу значений на форме, как это сделать? почитал как просто выгружать данные, что то вроде:
ФайлДанных = Новый XBase(ИмяФайла); ФайлДанных.Кодировка = Кодировка; Если Не ФайлДанных.Открыта() Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не удалось открыть файл " + ИмяФайла; Сообщение.Сообщить(); Возврат Неопределено; КонецЕсли; ну это просто для открытия дбф, потом нам нужно создать ТЗ: ТабЗнач = Новый ТаблицаЗначений; Для Каждого Поле из ФайлДанных.Поля Цикл тут создаем поля для выгрузки данных КонецЦикла; Ну и затем заполняем его. Вроде все не сложно, только встает вопрос: Если у меня на форме есть табличное поле с типом таблица значений, как мне именно в эту форму выгружать данные? |
|||
1
Vladal
13.11.12
✎
17:23
|
ЭлементыФормы.ТабличноеПоле1.Значение = ТаблицаДанных;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки(); |
|||
2
Singenor
13.11.12
✎
17:25
|
(1) это вместо пункта 2 получается, где мы создаем тз?
|
|||
3
Singenor
13.11.12
✎
17:27
|
точнее мы создаем тз, забиваем колонками, и потом прописываем как раз ЭлементыФормы.ТабличноеПоле1.Значение = ТЗ так?
|
|||
4
Vladal
13.11.12
✎
17:30
|
(2) Это мы визуализируем. А тебе надо именно как пройти по всем полям ДБФ и создать колонки в ТЗ? Просто я прочитал "это несложно" и подумал "странно, это не сложно, а показать сложно ("
|
|||
5
Singenor
13.11.12
✎
17:32
|
ну вот у меня в дбф есть куча колонок, мне нужно вытащить только 2 колонки, одна АРТ, вторая Ном, к примеру, и эти колонки нужно перенести в обработку, у которой есть табличноеполе1
|
|||
6
shuhard
13.11.12
✎
17:33
|
(5) будь мужиком
сделай у обработки ТЧ с двумя колонками |
|||
7
Singenor
13.11.12
✎
17:36
|
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("Артикул"); ТаблицаЗначений.Колонки.Добавить("Наименование") ЭлементыФормы.ТабличноеПоле1.ТипЗначения = ТаблицаЗначений; можно и так ведь не? |
|||
8
vicof
13.11.12
✎
17:38
|
(7) нет
|
|||
9
shuhard
13.11.12
✎
17:39
|
(7)[ЭлементыФормы.ТабличноеПоле1.ТипЗначения = ТаблицаЗначений]
я бы на месте 1С послал матом |
|||
10
salvator
13.11.12
✎
17:42
|
(7) Почитай Радченко чтоль для начала. Да и на форуме поиском научись пользоваться, полно примеров.
|
|||
11
salvator
13.11.12
✎
17:43
|
||||
12
Singenor
13.11.12
✎
17:47
|
(11) я этот пост видел уже сегодня)
у меня тут паралельно еще вопросик: делаю полеввода(Загрузка), для выбора дбф файла, размещаю его на форму обработки, создаю реквизит, называю его путьКФайлу, затем передаю полею ввода тип реквизит путь к файлу, т.е. Загрузка имеет тип ПутьКФайлу пишу код для выбора файла: Процедура ВыборФайла(Элемент) ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Фильтр = "Файл данных (*.dbf)|*.dbf"; ДиалогВыбора.Расширение = "xls"; ДиалогВыбора.Заголовок ="Выберите файлы для загрузки"; ДиалогВыбора.ПредварительныйПросмотр = Ложь; ДиалогВыбора.ИндексФильтра = 0; ДиалогВыбора.ПолноеИмяФайла = Элемент.Значение; ДиалогВыбора.ПроверятьСуществованиеФайла = Ложь; ДиалогВыбора.МножественныйВыбор = Ложь; Если ДиалогВыбора.Выбрать() Тогда Элемент.Значение = ДиалогВыбора.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры И затем вызваю эту функцию Процедура ЗагрузкаНачалоВыбора(Элемент, СтандартнаяОбработка) ВыборФайла(Элемент); КонецПроцедуры но ничего не происходит, почему? |
|||
13
salvator
13.11.12
✎
17:53
|
1. Почему расширение экселевское?
2. Лучше ПроверятьСуществованиеФайла поставь в Истина |
|||
14
Singenor
13.11.12
✎
17:53
|
да точно, расширение дбф, мозг кипит) щас попробуем
|
|||
15
Singenor
13.11.12
✎
17:54
|
(13) нет, все равно пустое поле, без возможности выбора
|
|||
16
Singenor
13.11.12
✎
17:58
|
отладчиком не попадает даже на этот кусок кода
|
|||
17
salvator
13.11.12
✎
18:00
|
(16) К полю ввода точно назначена процедура ЗагрузкаНачалоВыбора на событие Начало выбора?
|
|||
18
Singenor
13.11.12
✎
18:02
|
да
|
|||
19
Singenor
13.11.12
✎
18:03
|
||||
20
Singenor
13.11.12
✎
18:05
|
||||
21
Singenor
13.11.12
✎
18:06
|
||||
22
salvator
13.11.12
✎
18:09
|
(19) Лол.
Думай. Подсказка: ответ в последнем слове в (17) |
|||
23
Singenor
13.11.12
✎
18:11
|
(22) Так процедура ведь указана на событие Началовыбора оО
|
|||
24
Singenor
13.11.12
✎
18:14
|
во я лох то) надо просто галочку было воткнуть)
|
|||
25
salvator
13.11.12
✎
18:17
|
(24) я даже боюсь предположить, как ты собирался выбирать файл...
|
|||
26
Singenor
13.11.12
✎
18:34
|
25 с бубном))
|
|||
27
Vladal
13.11.12
✎
18:40
|
(26) Тебе просто говорят в свойствах реквизита указать обработчик.
|
|||
28
Singenor
13.11.12
✎
18:43
|
(27) где в свойствах реквизита обработчик? я добавил на свойствах поле ввода просто в Использовании Кнопкавыбора, и все, работает ведь
|
|||
29
salvator
13.11.12
✎
18:44
|
(27) не, все проще. он кнопку выбора в поле ввода не поставил.
|
|||
30
Vladal
13.11.12
✎
18:50
|
Да поможет тогда Ctrl+Shift+F4
|
|||
31
Singenor
14.11.12
✎
10:56
|
а как сделать проверку на наличие уже значений? то есть я загрузил данные из ДБФ в ТП, они загрузились, потом загружаю еще раз, они опять грузятся, чтобы в общем не было дублирований?
|
|||
32
Singenor
14.11.12
✎
10:58
|
Вот процедура:
Процедура ОсновныеДействияФормыЗагрузитьДанныеИзДБФ(Кнопка) База = Новый XBase; База.Кодировка=КодировкаXBase.OEM; База.ОткрытьФайл(ПутьКФайлу); Если База.Открыта() тогда База.Первая(); Пока Не База.ВКонце() Цикл НоваяСтрока = ТабличноеПоле1.Добавить(); НоваяСтрока.Артикул = База.Art; НоваяСтрока.Наименование = База.IKT; База.Следующая(); КонецЦикла; КонецЕсли; База.ЗакрытьФайл(); КонецПроцедуры |
|||
33
Singenor
14.11.12
✎
11:40
|
блин, запутался, выдает ошибку:
{Форма.Форма.Форма(81)}: Значение не является значением объектного типа (Артикул) ТекСтраница.Артикул = СтрокаТаблицыЗагрузки.Артикул; |
|||
34
Singenor
14.11.12
✎
11:42
|
Процедура ОсновныеДействияФормыЗагрузитьДанныеИзДБФ(Кнопка, Отказ)
База = Новый XBase; База.Кодировка=КодировкаXBase.OEM; База.ОткрытьФайл(ПутьКФайлу); Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда Сообщить("Не указан DBF файл, для загрузки"); Возврат; КонецЕсли; База.Первая(); ТаблицаЗагрузки = Новый ТаблицаЗначений; ТаблицаЗагрузки.Колонки.Добавить("Артикул"); ТаблицаЗагрузки.Колонки.Добавить("Наименование"); Пока Истина Цикл СтрокаТаблицыЗагрузки = ТаблицаЗагрузки.Добавить(); СтрокаТаблицыЗагрузки.Артикул = База.Art; СтрокаТаблицыЗагрузки.Наименование = База.IKT; Если Не База.Следующая() Тогда Прервать; КонецЕсли; КонецЦикла; ТаблицаЗагрузки.Сортировать("Артикул"); ТекСтраница = Неопределено; Для каждого СтрокаТаблицыЗагрузки из ТаблицаЗагрузки Цикл СоздатьНовуюЗапись = Ложь; Если ТекСтраница = Неопределено Тогда СоздатьНовуюЗапись = Истина; Иначе Если НЕ ТекСтраница.Артикул = СтрокаТаблицыЗагрузки.Артикул Тогда СоздатьНовуюЗапись = Истина; КонецЕсли; КонецЕсли; Если ТекСтраница = Неопределено Тогда СоздатьНовуюЗапись = Истина; Иначе Если Не ТекСтраница.Наименование = СтрокаТаблицыЗагрузки.Наименование Тогда СоздатьНовуюЗапись = Истина; КонецЕсли; КонецЕсли; Если СоздатьНовуюЗапись Тогда ТекСтраница.Артикул = СтрокаТаблицыЗагрузки.Артикул; ТекСтраница.Наименование = СтрокаТаблицыЗагрузки.Наименование; КонецЕсли; Новаястрока = ТекСтраница.Добавить(); Новаястрока.Артикул = СтрокаТаблицыЗагрузки.Артикул; Новаястрока.Наименование = СтрокаТаблицыЗагрузки.Наименование; КонецЦикла; КонецПроцедуры |
|||
35
Singenor
14.11.12
✎
11:51
|
что не так?)
|
|||
36
Singenor
14.11.12
✎
12:10
|
Текстраница = неопределено, из за этого мб? нужно ведь задать что Текстраница это по сути запись в ТП не?
|
|||
37
1Сергей
14.11.12
✎
12:15
|
(36) почитай книжки уже. А ещё посмотри как в других конфах это сделано
|
|||
38
hhhh
14.11.12
✎
12:22
|
(36) что за страница такая и почему она всегда равна Неопределено?
|
|||
39
Singenor
14.11.12
✎
12:23
|
(38) для начала она неопределно, а вообще эта страница это табличноеполе, в которое у меня выводятся данные из дбф,
Текстраница = ЭлементыФормы.ТабличноеПоле1; но так тоже неверно |
|||
40
Singenor
14.11.12
✎
12:26
|
как то нужно чтобы, если значение в ТЗ, в которую я выгрузил данные из ДБФ уже существует то ничего не делать, если в ТЗ нет еще такого значения, то загрузить его)
|
|||
41
Singenor
14.11.12
✎
12:27
|
ТаблицаЗагрузки = Новый ТаблицаЗначений;
ТаблицаЗагрузки.Колонки.Добавить("Артикул"); ТаблицаЗагрузки.Колонки.Добавить("Наименование"); Пока Истина Цикл СтрокаТаблицыЗагрузки = ТаблицаЗагрузки.Добавить(); СтрокаТаблицыЗагрузки.Артикул = База.Art; СтрокаТаблицыЗагрузки.Наименование = База.IKT; Если Не База.Следующая() Тогда Прервать; КонецЕсли; КонецЦикла; Вот запись данных из ДБФ в ТЗ |
|||
42
Singenor
14.11.12
✎
12:27
|
потом пишем условие для проверки наличия записей:
Для каждого СтрокаТаблицыЗагрузки из ТаблицаЗагрузки Цикл тут и нужно задать проверку, но я не совсем понимаю как КонецЦикла; |
|||
43
Singenor
14.11.12
✎
12:30
|
ТекСтраница = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
|
|||
44
salvator
14.11.12
✎
12:34
|
Ёперный театр. Я тебе в (11) ссылку давал, там есть проверка на наличие значения. Глаза разуй.
|
|||
45
salvator
14.11.12
✎
12:35
|
Жду не дождусь, когда на форуме введут месячный ридонли за неумение пользоваться поиском.
|
|||
46
Singenor
14.11.12
✎
12:36
|
(45) ты про это?
Если ТЗ_.Найти(СокрЛП(База_.NomerD))=Неопределено Тогда НоваяТЗ = ТЗ_.Добавить(); НоваяТЗ.Документ = СокрЛП(База_.VIDDoc); НоваяТЗ.НомерДокумента = СокрЛП(База_.NomerD); НоваяТЗ.Дата = СокрЛП(База_.DataDoc); НоваяТЗ.Состояние = ?(База_.Proveden=1,"Проведен","Не Проведен"); КонецЕсли; |
|||
47
salvator
14.11.12
✎
12:41
|
(46) Почитай СП про метод Найти.
|
|||
48
salvator
14.11.12
✎
12:42
|
+(47) Разрешаю так же использовать метод НайтиСтроки. Тут он полезнее будет, чтобы 2 условия не писать.
|
|||
49
Singenor
14.11.12
✎
12:54
|
так вроде получилось, щас проверю
|
|||
50
Singenor
14.11.12
✎
12:57
|
ПараметрыПоиска = Новый Структура;
ПараметрыПоиска.Вставить("Артикул", База.Art); ПараметрыПоиска.Вставить("Наименование", База.IKT); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Артикул"); ТЗ.Колонки.Добавить("Наименование"); Если База.Открыта() тогда База.Первая(); НомерСтр = 1; Пока Не База.ВКонце() Цикл Если ТЗ.Найти(ПараметрыПоиска)=Неопределено Тогда НоваяТЗ = ТЗ.Добавить(); НоваяТЗ.Артикул = СокрЛП(База.Art); НоваяТЗ.Наименование = СокрЛП(База.IKT); КонецЕсли; База.Следующая(); КонецЦикла; ЭлементыФормы.ТабличноеПоле1.Значение = ТЗ; ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки(); КонецЕсли; Вот, может кому еще пригодиться) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |