Имя: Пароль:
1C
 
Способы хранения данных во внешнем файле
0 selenat
 
04.04.06
12:31
Предполжим, что нам необходимо хранить во внешнем файле, например, таблицу значений. Какой формат предпочтительней - текстовый (все делается командами ЗначениеВФайл,ЗначениеИзФайла) или ДБФ? Как они соотносятся по скорости и надежности?
1 Стрелок
 
04.04.06
12:32
Скорее - здесь работает внутренняя предубеждённость. Я предпочитаю dbf
2 User_212
 
04.04.06
12:33
Мы используем расширение DAT
3 Рупор абсурда
 
04.04.06
12:34
Для тз лучше ЗначениеВФайл()
4 selenat
 
04.04.06
12:34
(1) Т.е. нет объективных критериев для выбора?
(2) Я тоже. Все равно он по сути текстовый.
5 Simod
 
04.04.06
12:34
(0) Попробуй свернуть (ЗначениеВФайл()) таблицу из 15 колонок и 10000 строк. Увидишь, как там со скоростью. Насчет надежности плохо в обоих вариантах. Отсутствует контроль ссылочной целостности.
6 selenat
 
04.04.06
12:35
(3) Почему?
7 Рупор абсурда
 
04.04.06
12:36
(6) Быстрее ...
8 selenat
 
04.04.06
12:36
(5) В ДБФ лучше? Какая ссылочность? Вопрос о ТЗ.
9 selenat
 
04.04.06
12:38
(7) Тестил на больших объемах?
(5) Насчет надежности - есть что-то лучше этих вариантов?
10 Рупор абсурда
 
04.04.06
12:39
(9) Что я больной?
11 selenat
 
04.04.06
12:40
(10) А откуда знаешь?
12 Рупор абсурда
 
04.04.06
12:43
(11) Чтоб выгрузить тз в ДБФ нужно процедуру строк на 50 написать, а в ТХТ - это одной строкой делается ...
Разве не очевидно, что одну строку написать будет быстрее ...
13 Asmody
 
04.04.06
12:43
вы что обкурились все? все прогрессивное человечество давно уже хранит все нужные данные в BLOB-полях СУБД Oracle
14 Asmody
 
04.04.06
12:44
(13)+ в формате xml
15 selenat
 
04.04.06
12:44
(12) Это однозначно. Я думал - ты говоришь о том, что быстрее работает.
16 selenat
 
04.04.06
12:45
(14) И чем это лучше?
17 Asmody
 
04.04.06
12:45
(16) это круто, модно и современно!
18 selenat
 
04.04.06
12:47
(17) По репликам в других ветках я сделал вывод, что этот формат медленней обоих вышеназванных.
19 Рупор абсурда
 
04.04.06
12:58
(18) Причем медленней он в обоих наших пониманиях ...
20 Asmody
 
04.04.06
13:02
(18,19) это не формат медленый, это компы у вас медленные
21 selenat
 
04.04.06
13:06
(20) Забавно...
(Олл) Т.е. по поводу сравнения скорости и надежности явных преимуществ у какого-то из этих методов видимо нет.
22 skunk
 
04.04.06
13:06
почемуто мне кажется, что Рупор здесь не врет
23 Рупор абсурда
 
04.04.06
13:08
(22) А когда это Рупор врал?
24 selenat
 
04.04.06
13:08
(22) Если речь только о простоте реализации способа, то я и сам знаю, что не врет. Одним оператором все делается...
25 Asmody
 
04.04.06
13:09
а если серьезно, то заковыка кроется во фразе из (9) [Тестил на больших объемах?].
Вот с объемами никто и не разобрался. Ясен перец, что из-за 10 строчковой ТЗ нефиг заморачиваться. А вот если речь идет хотя бы о нескольких тысячах, то я бы вообще поостерегся такое хранить во внешних файлах...
26 selenat
 
04.04.06
13:11
(25) Вот это уже интереснее.
27 skunk
 
04.04.06
13:11
тестил... проблем нет...
28 skunk
 
04.04.06
13:11
хотя понятие больших объем субъективно
29 Парижская фанера
 
04.04.06
13:12
Положить её на SQL, только не ввиде ЗначениеСтрВнутр("ТЗ от 1С"), а в нормальном виде, в полях нормальной таблицы...
30 GrayT
 
04.04.06
13:13
31 selenat
 
04.04.06
13:13
(27) Какого порядка объемы?
(29) не вариант. Хотелось бы что-то универсальное.
32 iSeRG
 
04.04.06
13:17
(31) А в чем ты понимаешь универсальность хранения ТЗ?
33 selenat
 
04.04.06
13:19
(32) В данном контексте - не зависящее от СКЛ. Мало у кого из моих клиентов он стоит.
34 Рупор абсурда
 
04.04.06
13:20
(30) Ишь ты ...
Ну, ладно ..., сознаюсь ...
Врал! ...
35 selenat
 
04.04.06
13:24
(25) Конечно, вариант - хранить инфу в справочнике в составе конфы. Но хотелось бы, чтоб обработка, кот использует эти данные ставилась сбоку от конфы, не требовала вносить изменение в структуру конфы. Тоже из соображений универсальности. Поэтому хотелось если нет проблем с надежностью использовать внешний файл.
36 Парижская фанера
 
04.04.06
13:40
Такие "сам себе создаю проблемы" от неверного проектирования...
37 selenat
 
04.04.06
13:49
(36) То есть? В чем ты усмотрел неправильное проектирование? Пока вопрос о том - как надежно и удобно хранить инфу.
38 insider
 
04.04.06
14:00
(37) для обмена данными юзаю ТЗ или СЗ, состоящий из ТЗ, однако на объеме около 2М (размер результирующего файла) 1С вешается (экспериментально проверял) и уже нифига не выгружает, т.е. если данных много - разбивать на части. посчитал это для себя удобнее, в т.ч. из-за небольшого объема необходимого кода и готовых инструментов для работы с ТЗ во встроенном языке, хотя наверное грамотнее обмениваться данными в dbf(?).
что касается хранения (не просто для обмена данными) - однозначно выбрать сложно, опиши что хранить будем и как это должно использоваться.
39 selenat
 
04.04.06
14:03
(38) Да. Речь об обмене. Т.е. ты делал через ТХТ, и большой объем не прокатывал?
40 selenat
 
04.04.06
14:06
(27) Скунк, какие у тебя объемы прокатывали? Ориентировочно?
41 insider
 
04.04.06
14:13
(39) файл более 2 метров - уже было критично, плюс были траблы с распаковкой таких файлов обратно в объект ТЗ, если на компе было до 256М памяти (в процессе памяти съедалось до 70 метров, причина мне неясна). для себя выяснил, что передача 300-500 средних доков (мне сложно назвать другие параметры, понимаю, что абстрактное значение пишу) еще работает, больше - нет.
42 selenat
 
04.04.06
14:17
(41) Спасибо, понял. Ценная информация. Т.е. Если хранить накапливающуюся инфу (например, соответствия доков двух баз), то - не вариант.
43 insider
 
04.04.06
14:18
(42) ни в коем случае, не откроешь потом. я юзаю только для разовой выгрузки/загрузки (ну типа самописный автообмен), т.е. объем данных ограничен и обмен довольно частый (до нескольких раз в день, т.е. объем поддается прогнозированию).
44 Simod
 
04.04.06
14:19
(42) А что мешает самому попробовать?
45 selenat
 
04.04.06
14:22
(43) Понял. Но по идее ДБФ должно пркатить?
(44) Ничто не мешает. На то и форум, чтобы можно было быстрее получить инфу, даже если можно проверить самому.
46 insider
 
04.04.06
14:34
(45) ну да, там до предела дойти слегка сложнее, плюс свои индексы и все такое (хотя переиндексация здорового файла тоже не быстро).
P.S. не вполне понимаю задачу, зачем хранить изменения в доках, их же передавать можно по необходимости, а анализ обработкой при передаче и делать или я что-то не понимаю?
47 selenat
 
04.04.06
14:41
(46) Нет. Речь о том, что стандартные выгрузки находят соответствующие объекты по кодам и номерам доков, что не очень надежно. Вопрос об отслеживании измененности доков я здесь не затрагивал.
48 Гений 1С
 
гуру
04.04.06
14:52
А че, XML не учитывается?
Что касается TXT vs DBF, то если много строк, лучше юзать TXT, т.к. под строки в DBF занимается поле фиксированного размера.
49 Гений 1С
 
гуру
04.04.06
14:53
В случае выгрузки в ТЗ можно пройтись по колонкам и ЗначениеВСтроку использовать для значения ячеек, а не для всей таблицы, если лень кодер писать.
А ваще значениеВСтроку лучше тока для строк юзать, чтобы переводы строк правильно замочить.
50 selenat
 
04.04.06
14:59
(48) Про ХМЛ немого было в этой ветке. Вроде как медленно работает на больших объемах. А по ТХТ - видишь инсайдер проверял - не прокатывает для больших объемов.
51 insider
 
04.04.06
14:59
(47) ну пускай по ИДД ищут, я к тому, что зачем это хранить, почему не передавать почаще - не будет с объемами проблемы?
(49) переведи первое предложение, нифига не понял, зачем это.
кстати мы о ЗначениеВФайл() вообще-то
52 insider
 
04.04.06
15:00
(50) а все-таки, какие объемы будут?
53 selenat
 
04.04.06
15:06
(50) Пока интерес в основном теоретический. Делал выгрузки, заточенные под конкретного клиента. Хотелось сделать что-то более универсальное. Написал вот обработки синхронизации справочников контров и номенклатуры (два варианта - через справочник соответствий и через файл ТХТ). Теперь думаю - как это развивать. Объемы будут зависеть от конкретных баз у клиентов. Но хочется, чтоб работоспособность обработок от этого не страдала.
54 selenat
 
04.04.06
15:07
(53)-> (52)
55 insider
 
04.04.06
15:10
(53) а... ну тогда ТЗ подойдет не всегда, а сколько будет открыватся большой файл типа "текст" (ну не ТЗ во внутр. формате, а просто текст, с разделителями например) - я не проверял.
56 selenat
 
04.04.06
15:14
(55) Это понятно. Но все рано ТХТ получается не подойдет для накапливаемых данных (неважно - будет это ТЗ или что-то еще)
57 Гений 1С
 
гуру
04.04.06
15:23
(56) Юзайт запись текста от v7plus.dll там траблов и ограничений нет
58 insider
 
04.04.06
15:24
(56) ну да, в общем смысле наверное так.
59 Гений 1С
 
гуру
04.04.06
15:25
Хотя для больших данных XML занимает больше места, но в сжатом виде почти то же самое (по объему).
Единственно, для больших данных лучше юзать не парсер от мелкософта, а парсер от мисты или от 1С8 (последовательный разбор, а не разбор в дерево).
60 selenat
 
04.04.06
15:25
(57) А подробнее? Я думал v7plus.dl - компонента для ХМЛ выгрузок.
61 selenat
 
04.04.06
15:29
(59) Не хочу завязываться с ХМЛем. Или ты хочешь сказать, что v7plus.dl позволяет работать с ТХТ и снимает ограничения на него? (не понял)
62 zxcvb
 
04.04.06
15:58
Вот цитаты из переписки по поводу ежедневного обмена:
Формат файла обмена - txt. Размер ~6Mb
Справочники, Документы, все при помощи ЗначениеВФайл()
Загрузка, в разделеном режиме, идет 5 часов, в монопольном 40 минут.

Админ:
Что странно...память есть нещадно... Во время загрузки.
190 мб...200... Из 256... Винда вообще не рыпается...

Добавили ОЗУ, монопольный режим:

Админ:
За 4 минуты...
Размер ОП - 512
Рзмер файла подкачки 1.5 Гб...использовалось 600 мб
Вобщем вывод простой... Заказываем память...
---------

Хотя там основная нагрузка была при записи, но все же на больших объемах,
да на слабых машиках, ИМХО предпочтительнее использовать дбф.
Тут нужно понять, что дешевле время прога или память.:)
63 insider
 
04.04.06
16:00
(62) да, все именно так, на своих тестах юзал машину с гигом памяти и проблем не было, а вот на слабых - такая же фигня.
64 selenat
 
04.04.06
16:05
(62-63) Все-таки написать 50 строк кода не такая большая проблема. Если это позволит использовать большие объемы без сбоев ИМХО это предпочтительней.
65 zxcvb
 
04.04.06
16:23
(64)
Это не сбои, все же работает, это - ТОРМОЗА.
:)
66 selenat
 
04.04.06
16:31
(65) у инсайдера не работало (41)
(51) (пропустил этот пост) по ИДД и ищу. Речь об справочнике (или ТЗ) соответствия ИДД в двух базах.
67 insider
 
04.04.06
16:40
(66) а зачем такой справочник? ИДД же перегружаться будут, т.е. объект созданный в 1-й базе перегрузиться во 2-ю с тем же ИДД, и наоборот, а уникальность я отслеживаю по комбинации ID и код базы, т.е. ИДД состоит из этих двух параметров - все просто вообщем-то.
(65) вот именно, что не работало, на 256М ОЗУ просто вылетала 1С с ошибкой.
68 selenat
 
04.04.06
16:46
(67) Поясни пожалуйста, как ты записываешь ИДД в базу приемник и где при этом хранится код базы.
69 insider
 
04.04.06
16:57
(68) код базы в константе, тип - справочник с ними, справочник для того, чтобы еще хранить параметры подключения к инет (диалап), параметры почтовых учетных записей и т.п., ИДД пишется при записи объекта однократно и далее не изменяется.
при изменении объекта изменяется его флаг отправки, флаги такие: "отправлять","не отправлять","отправлено, ждем подтверждения" (ну это число ессно), дополнительно хранится номер пакета (чтобы потом при подтверждении флаги поснимать). документы имеют признак, точнее включаются в списки необходимых к отправке, неоходимых к получению и игнорируемых. для тех, которые мы только получаем - автоматом запрещается редактирование, если входит в оба списка сразу или в список отправляемых - значит редактируется, если в список игнорируемых (т.е. не мигрирующих) - флаги и пр. реквизиты не выставляются вовсе.
примерно так.
70 selenat
 
04.04.06
17:03
(69) А разве есть возможность присваивать ИД по своему усмотрению (речь о 7 или 8)? А что делать, если соответствующие объекты создаются параллельно в обоих базах (ведь у них ИД уже сформированы)?
71 insider
 
04.04.06
17:05
(70) есть ID (он в dbf), есть IDD (конкатенация код базы+ID), IDD не повторятся, т.к. в них фигурирует место создания.
речь о 7.7
72 selenat
 
04.04.06
17:09
(71) А ИДД нигде физически не хранится  (в ДБФ)? ИДД не повторяется - это понятно. Но в базе приемнике ты записываешь ИД в ДБФ при создании элемента? Тогда ИД в приемнике может стать не уникальным?
73 insider
 
04.04.06
17:15
(72) хранится, это реквизит спр. или общий рекв. док-тов.
никак не может повториться, если для первой базы ИД "1"+9 символов ID, а для второй - "2"+..., т.е. никак они не повторятся.
74 selenat
 
04.04.06
17:23
(73) В смысле, ты создал свой реквизит для хранения ИДД?
Ты записываешь ИД непосредственно в соответствующее поле ДБФ? А как же длина? Если у тебя ИД определенной длины, и в базе 1 он сформирован автоматически, то как добавить к длине ИД еще символ, чтобы отслеживать базы (1 или 2)?
75 selenat
 
04.04.06
17:51
(73) Сейчас убегаю. Если не сильно надоел своими вопросами, хочу потом поднять ветку еще.
76 insider
 
04.04.06
17:56
(74) ну я же написал, что IDD - это реквизит документа и/или справочника, соотв. 1С его хранит в своих dbf (если это база dbf), длина ID для объекта 1С определенного вида - 9 символов, значит в моем IDD - 10 (1 символ - код базы), за формирование ID отвечае сама 1С, а я лишь беру его и добавляю код базы.
например так:

ИД=СокрЛП(Константа.БД.Код)+MDW.ValueToDBString(ТекущийДокумент());

где MDW - это:

MDW=CreateObject("MetaDataWork");

(объект из 1cpp.dll)

можно из без ВК:

Функция глПолучитьИД(Объект) экспорт
   Перем Стр;
   
   СЗ=СоздатьОбъект("СписокЗначений");
   СЗ.ДобавитьЗначение("",Объект);
   СЗ.ПолучитьЗначение(1,Стр);
         
   Возврат _idtostr(Стр);
КонецФункции
77 insider
 
04.04.06
17:56
(75) заходи, пообщаемся :)
78 romix
 
модератор
04.04.06
18:06
XML-хороший переносимый формат.
http://x-romix.narod.ru
79 aka MIK
 
04.04.06
18:16
(0) Чувак, ты реально ленишься! Что мешает тебе написать
Стр=...;
Текст.ДобавитьСтроку(Стр);

или сделать так же с v7.textfie?

На крайняк
Текст.ДобавитьСтроку(Сп.ВСтрокуСРазделителями());

PS Правда я тоже иногда делаю через ТЗ в силу природной лени, но хотя бы отдаю в этом себе отчет =)
80 Гений 1С
 
гуру
04.04.06
19:16
А еще можно разбить текстовик на файлы по 1000 строк, например и хранить в каталоге. :)
81 Гений 1С
 
гуру
04.04.06
19:16
(70) У 8-ки каждая ссылка - уникальный GUID. :)
82 LaMEN
 
04.04.06
20:07
Пошли все на хуй
83 selenat
 
04.04.06
21:49
(76) Если я правильно понял, ты добавил собственный реквизит ИДД (в файле 1св7.дд я его не нашел, нашел только ИД длиной 9символов) и написал механизм его заполнения (скорее всего ПриЗаписи, если ввод нового). Но это существенные доработки конфы, которые при обновлении базы придестя поднимать вручную. При первом своем опыте выгрузки я делал такое, даже не используя ИД (просто уникальный реквизит, кот формировал сам). Но ради чего это все? Если мы используем справочник соответствий, то даже если хранить его в составе базы, это не влияет на поднятие конфы. А если во внешнем файле, то доработка конфы не требуется вообще. Кроме того, я так понимаю, что при синхронизации через одинаковые ИД в базе-приемнике надо запретить создание элементов. Они должны только приходить из базы-источника. Это достаточно серьезное ограничение. Вопрос - в чем серьезное преимущество синхронизации через ИДД? Я пока вижу только недостатки.Недавно мы обсуждали это: ID в справочнике Контрагентов Но я так и не понял - ради чего такие ухищрения. Хотя, может, я просто неправильно понял твое объяснение?
(80) Можно. Но не хочется плодить сучности.
84 smaharbA
 
04.04.06
21:56
(76) Админ не прав... и 1С-ник тоже, текстовик ненада весь грузить...
85 smaharbA
 
04.04.06
21:57
(84) -> (62)
86 insider
 
04.04.06
22:13
(83) существенная доработка - да, впрочем можно с помощью сторонних утилит (или свою сбацать "на коленке") и прописать в стандартные процедуры нужные куски. как я уже написал, повторений буть не может и запрещать редактирование не нужно, разве что если речь о одинаковых по сути элементах, но созданных в разных базахи имеющих разные ИДД - тогда да, нужны какие-то правила, например кроме поиска по ИДД еще и поиск по совпадению каких-то параметров и т.п. в моем случае создание элементов справочников было возможно в опрежеленной зоне ответственности (в определенной базе определенным людям) и это ограничение было не только из-за структуры переноса. справочник соответствий - это лишняя таблица, причем по объему (теоретически) будет равна сумме количеств записей во всех спр., док-тах и т.п. - это некислый объем может выйти, все равно соответствия как-то должны проставляться - как представляешь себе этот механизм? (я не говорю, что так нельзя, но выбрал другой вариант, критика принимается)

может еще кто-нить выскажется?
87 selenat
 
04.04.06
22:24
(84) А как, если не весь?
(86) О том и речь, что надо как-то не позволять создавать одинаковые элементы в двух базах, а это существенное ограничение. Справочники соответствий по объему будут равны самим справочникам, соответствия для кот устанавливают. Соответствия для доков по объему - сумма всех доков базы. Обычную работу базы это тормозить не будет , т.к. они используются только в момент выгрузки и не участвуют во всем остальном. Скорость работы - как при обычном НайтиПоРеквезиту.
88 selenat
 
04.04.06
22:25
(86) "как представляешь себе этот механизм?" Кинь мне письмо. Я тебе свои обработки вышлю. Буду рад критике.
89 insider
 
04.04.06
22:26
(87) если в дополнение к ИДД искать по комбинации (например артикула и наименования или еще как) - то можно и вовсе без справочника соответствий
(88) обработки независимы от конфы?
90 selenat
 
04.04.06
22:28
(89) Это используется у меня в обрабоках. Но полагаться только на это нельзя - не надежно.
Два варианта - один независим, другой зависим.
91 insider
 
04.04.06
22:30
(90) ну лучше незавимый, а то как проверю? в принципе могу и просто код глянуть, но это слегка сложнее, без примеров
92 selenat
 
04.04.06
22:30
+90 В смысле, в дополнение к ИДД артикул и наименование не нужны, а если только их юзать - ненадежно.
93 selenat
 
04.04.06
22:32
(91) Вышлю оба. Они весят мало. С зависимым от конфы высылаю мд, со справочниками соответствий. Их просто надо скопировать в базу-приемник.
94 selenat
 
04.04.06
22:32
+93 мд тоже веит пустяк.
95 insider
 
04.04.06
22:33
(93) хорошо, трафик не проблема в принципе, ничего, если сегодня не успею? :)
96 insider
 
04.04.06
22:34
+95 письмо уже послал, должно уже прийти
97 selenat
 
04.04.06
22:36
(95) Ничего. Просто интересно твое мнение. Щас отправлю.
98 selenat
 
04.04.06
22:39
Отправил.
99 selenat
 
04.04.06
22:41
Обработки запускаются в базе-приемнике, путь указывается к базе-источнику.
100 insider
 
04.04.06
22:43
(99) ага, еще не дошло правда, но понятно, в принципе разберусь.
тут и Diter вроде что-то подобное писал, т.е. не вроде, а точно, но у него совсем заумный механизм синхронизации.
101 selenat
 
04.04.06
22:45
(100) Не видел. Если у меня тоже заумный - ткни носом. :)
Ладно, я пошел спать. Все равно тебе нужно время - глянуть.
102 selenat
 
04.04.06
22:48
Блин. Кажется, не дошли (вернулись). Щас еще раз попробую
103 insider
 
04.04.06
22:49
(102) должно дойти...
104 insider
 
04.04.06
22:49
(101) у него коммерческий, я его тоже не видел :)
105 selenat
 
04.04.06
22:52
(103) Проверь. А то после первой отправки мне вернулось:
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
106 insider
 
04.04.06
22:54
(105) есть два, разного размера
107 insider
 
04.04.06
22:54
+106 все, там мд-шник еще, понятно
108 selenat
 
04.04.06
22:55
(106) да. это не зависимый от конфы  и зависимый.
109 selenat
 
04.04.06
22:56
Ладно. Я пошел спать. Пока.:)
Как посмотришь - скажи что-нибудь.
110 insider
 
04.04.06
22:56
(109) договорились :)
111 selenat
 
05.04.06
15:16
(110) Ну как? Еще не смотрел?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан