gifts2017

Обрезание БД удалённого магазина одной кнопкой

Опубликовал Константин (Fisherru) в раздел Обработки - Свертка базы

1С v7.7 DBF-ка. Полностью самописная конфигурация.

Это пример формирования "правильного" BAT-файла (и сам он) который самостоятельно последовательно выполнит ряд действий приводящих к обрезанию БД удалённого магазина и кусок кода для 1С, чтобы она правильно и в нужной последовательности отрабатывала свои запуски в пакетном режиме из BAT-файла.
Предполагается, что выгрузки/загрузки данных у вас уже имеются (или вы в состоянии их сами написать)

Смысл - выполняется периодическое обрезание баз данных на удалённых магазинах .
Был написан (на бумаге) сценарий обрезания.
Успешно всё работает, но это когда я, как программист приезжаю на магазин и делаю всё ручками.
Но некоторые магазины очень далеко (5 часов в один конец на авто).
Вот и решили сделать один Bat-ничек, чтобы технические специалисты обслуживающие магазины на местах могли не париться - запустить его и вот оно - счастье...

 

 

Пришлось поразмышлять к какой рубрике отнести данное.

Скорее это методические материалы и нужно в статьи, но их мало читают.

Поскольку будет приведён ещё и некий код – отнёс это в программы.

Смысл - выполняется периодическое обрезание баз данных на удалённых магазинах .

v7.7 DBF-ка. Полностью самописная конфигурация.
Был написан (на бумаге) сценарий обрезания.
Успешно всё работает, но это когда я, как программист приезжаю на магазин и делаю всё ручками.
Но некоторые магазины очень далеко (5 часов в один конец на авто).
Вот и решили сделать один Bat-ничек, чтобы технические специалисты обслуживающие магазины на местах могли не париться - запустить его и вот оно - счастье...
А сценарий не очень прост:
1. Удаляем индексы (можно bat-ом реализовать)
2. Входим монопольно - переиндексация. Запускаем "Выгрузка"
3. Делаем копию базы на локалку (можно bat-ом реализовать)
4. Удаляем не нужные таблицы оставляя только справочники(можно bat-ом реализовать)
5. Тестирование и исправление (можно bat-ом реализовать)
6. Входим монопольно. Запускаем "Загрузка"

В ходе разработки возникло несколько проблем, которые были подняты в темах:

1. Как запустить пакетно 1С в режиме "Предприятие" и указать какую обработку запустить на выполнение

http://infostart.ru/forum/forum9/topic9444/messages/

2. BAT-файл с командами работы с ФС и пакетными запусками 1С

http://infostart.ru/forum/forum9/topic9464/messages/

Было интересное обсуждение и реальная помощь.

Спасибо всем.

 

И вот всё написано и заработало.

В программу 1С добавлена обработка формирующая этот самый единый BAT-ничек.

BAT-ничек нужно формировать по месту (в каждом магазине свой), так как необходимо получить путь к БД этого магазина, а также размещение и имя файла движка 1С (ну sqlтам или net – имена разные)

 

То есть Первое действие.

Управляющий заходит в программу 1С и запускает обработку «Формирование единого BAT»

Что там делается:

  1. Проверка на возможность обрезания. Если обрезали в последние пол-года и/или размер базы
  2. Создаются 2 папки. Одна для выкладывания собственно BAT-ничка, выгрузи и флажков для 1С. Другая для копии БД.
  3. Удаляются индексы (переиндексация вообще полезна. Тестирование и исправление ещё лучше, но занимает очень много времени, поэтому пошли простым пуьём)
  4. Копируется база на локалку.
  5. Удаляем файлы в USRDEF\*.* , чтобы зайти в 1С безымянным (если имя пользователя мы бы ещё могли вытащить, то его пароль без специальной компоненты - нет)
  6. Запускаем 1С и выгружаем данные.
  7. Удаляем не нужные ДБВ-ки (оставляем только справочники)
  8. Запускаем 1С на тестирование и исправление.
  9. Запускаем 1С и загружаем данные.
  10. Вернём USRDEF на место
  11. Сделаем отдельный батничек с параметрами для тестирования
  12. Выложим флажки для 1С

Второе действие.

Заходим в папку C:\Obr_Mag и запускаем OBREZ_DB.bat

Всё – идём курить, через 6-10 минут БД магазина в 500 метров свернётся.

Результаты – Остатки товаров по входным ценам на ТА ДО и После выложит в ту же папочку.

 

Что происходит при запусках 1С через этот BAT-ничек.

 

В процедура ПриНачалеРаботыСистемы()



//проверим, а не обрезание ли это

ЭтоОбрезаниеБД="";

Если ПустаяСтрока(ИмяПользователя())=1 Тогда

Если МонопольныйРежим() = 1 Тогда

Если ФС.СуществуетФайл("C:\Obr_Mag\Unloading.txt")=1 Тогда

ЭтоОбрезаниеБД="Выгрузка";

ИначеЕсли ФС.СуществуетФайл("C:\Obr_Mag\Loading.txt")=1 Тогда

ЭтоОбрезаниеБД="Загрузка";

КонецЕсли;

КонецЕсли;

КонецЕсли;

................................

Обычные действия

..................................

И в конце

Если ПустаяСтрока(ЭтоОбрезаниеБД)=0 Тогда

Если ЭтоОбрезаниеБД="Выгрузка" Тогда

ОткрытьФормуМодально("Обработка.ВыгрузкаДанныхПриОбрезании","Обрезание");

ФС.УдалитьФайл("C:\Obr_Mag\Unloading.txt");

ЗавершитьРаботуСистемы(0);

ИначеЕсли ЭтоОбрезаниеБД="Загрузка" Тогда

ОткрытьФормуМодально("Обработка.ЗагрузкаДанныхПриОбрезании","Обрезание");

ФС.УдалитьФайл("C:\Obr_Mag\Loading.txt");

ЗавершитьРаботуСистемы(0);

КонецЕсли;

КонецЕсли;

 

 

ВыгрузкаДанныхПриОбрезании:

  1. Выгрузка остатков (у нас долги в магазинах не ведутся, только остаток товара)
  2. Выгрузка цен (чтоб можно было прибить жирный 1SCONST.DBF)
  3. Выгрузка констант (чтоб восстановить константы)
  4. Выгрузка документов (ДатаНачалаБазы=НачМесяца(ДобавитьМесяц(ПолучитьДатуТА(),-1)))
  5. Отчет остатки товаров с суммой

 

ЗагрузкаДанныхПриОбрезании:

Всё тоже самое, но на загрузку.

 

ВСЁ РАБОТАЕТ !!!!

P.S. Если у кого-то проблемы с написанием выгрузки/загрузки - могу выложить балванки, НО поскольку моя конфигурация полностью самописная, вам придётся переделывать под себя.

А вот показанный пример BAT-файла и механизм отработки запусков 1С - универсальный...

 

По просьбе трудящихся!

27.05.09 добавлены болванки выгрузки и загрузки данных.

Принципы выгрузки-загрузки в статейке опишу (чтоб тут лишнего места не занимать) и ссылку вставлю ;-)

Вот ссылочка
"Принципы выполнения Выгрузки / Загрузки данных при обрезании БД удаленного магазина"
Кстати "плюсики" можно и там ставить :-))))))

Извините предыдущая ссылка чёт не работала, эта вот вроде правильная:

http://infostart.ru/blogs/1085/


Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Формирование BAT и его пример
.1242991384 5,54Kb
06.11.14
121
.1242991384 5,54Kb 121 Скачать
Выгрузка_Загрузка
.1243404123 24,30Kb
06.11.14
57
.1243404123 24,30Kb 57 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Константин (Fisherru) 22.05.09 15:29
А вообще у нас ещё много разных интересных технологий ;-)
:-))))
2. anbxp (anbxp) 23.05.09 00:17
Жопа. У вас остаток товара в справочнике хранится?:)
3. Михаил (Mikeware) 23.05.09 09:34
4. Brr (brr) 24.05.09 13:19
Не понятно: зачем выгружать и загружать документы, вводятся ли начальные остатки? Маловероятно, что после таких манипуляций сходятся остатки.
Автор поработайте над статьей, понять из написаного что либо сложно.
5. Константин (Fisherru) 25.05.09 08:32
(2)
Остатки как и у всех хранятся в регистре.
Поэтому мы и выгружаем их на вечер ДатаОбрезания-1, а затем, в уже пустую базу, загружаем их в ту же дату документом "ВводНачальныхОстатков".
После них уже загружаем оставленный период документов.
6. Константин (Fisherru) 25.05.09 08:35
(3)
Про бред не понял :(
Была задача без участия программиста выполнить в автоматическом режиме обрезание БД - задача решена...
Основная сложность была выполнить последовательность неких действий (которые я раньше делал вручную) и чтобы 1С, запущенная из BAT-ничка в пакетном режиме, понимала, что и когда ей делать надо...
7. Константин (Fisherru) 25.05.09 08:44
(4)
В базе магазина продажи регистрируются расходными накладными. По 200 - 800 документов в день. Через год - полтора документов становится настолько много, что идут реальные подвисания как при создании нового документа, так и при его записи и проведения.
Обрезать "под ноль" - нельзя, так как в магазины периодически повторно перевыгружаются скорректированные документы закупа, корректирующие остатки.
Поэтому оставляем в магазине все документы за 1-2 месяца. Остальное прибиваем.
Выполнять удаление документов за отбрасываемый период в среде 1С, как это делается в стандартной - ооооооооооочень долго.
Поэтому:
Выгружаем остатки на начало оставляемого периода.
Выгружаем все документы за оставляемый период.
Удаляем физически все DBF-ки (кроме справочников) - очень быстро ;-)
В чистую базу грузим остатки на начало периода и все документы в нём.
Остатки сходятся копеечка в копеечку. Что и подтверждается сравнением отчётов по остаткам товаров по входным ценам сделанным ДО и ПОСЛЕ обрезания.
8. Олег (ttycoon) 27.05.09 03:21
А можно посмотреть болванки загрузки/выгрузки? У нас тоже конфигурация самописная, писали свои обработки, но всегда интересно посмотреть как у других.
А вообще идея замечательная, у самих почти десять объектов, обрезаем раз в несколько лет, но от этого не легче - делали всегда вручную, по бумажке :). Попробуем внедрить у себя.
9. Константин (Fisherru) 27.05.09 08:42
(8)
Вот, первый комментарий по теме :-)
Спасибо за поддержку ;-)
У нас более 130 магазинов и сеть продолжает расти.
По жизни замечено, что при достижении размера *.dbf + *.cdx > 500 Мб - начинается вешалка. А если в магазине (у нас небольшие алкомаркеты) несколько касс, то они вообще конкретно мешают друг другу.
Да, делал обрезание вручную - ручное копирование, удаление *.cdx? куча выгрузок (всё было по отдельности : цены, остатки, документы и прочее), аналогично загрузки. Обрезание шло в одном магазине 40 - 50 мин (магазин стоял).
Когда сделал единую выгрузку (объединив все обработки в одну) и загрузку - стало 20-25 минут, но ручной труд остался.
Сейчас, грубо, управляющий запускает bat-ничек и курить 10-15 минут - всё!
10. Константин (Fisherru) 27.05.09 08:43
Выгрузку/загрузку сейчас положу ;)
11. akon (akon) 27.05.09 09:56
(3) Никакой ни бред! Подобная проблема у меня была с аптеками. И тоже периодически занимался "обрезанием" по тому же принципу. Идея "правильная". Пока не смотрел, но заранее спасибо.Да, про (8) не забудь.
12. Константин (Fisherru) 27.05.09 10:42
Вот ссылочка
"Принципы выполнения Выгрузки / Загрузки данных при обрезании БД удаленного магазина"
http://infostart.ru/blogs/1085/
Кстати "плюсики" можно и там ставить :-))))))
13. Константин (Fisherru) 27.05.09 10:47
Если есть какие вопросы - пишите ;-)
14. Павел Егоров (SatanClaws) 27.05.09 15:05
(9): По жизни замечено, что при достижении размера *.dbf + *.cdx > 500 Мб - начинается вешалка. А если в магазине (у нас небольшие алкомаркеты) несколько касс, то они вообще конкретно мешают друг другу.

Т.е. вешалка начинается при 500 метрах на фактически 1 рабочем месте, активно вводящем документы?
Сурово у вас конфа написана, ничего не скажешь...

По теме - идея интересная, такого способа (физически вынося неугодные таблицы) еще не видел...
Чем определяете имена таблиц?
Ручками парсите .dd файл или, скажем, через 1С++?
Данные документов выгружаете/загружаете через "ЗначениеИзСтроки()/ЗначениеВСтроку()"
15. Павел Егоров (SatanClaws) 27.05.09 15:06
(14) "Данные документов выгружаете/загружаете через "ЗначениеИзСтроки()/ЗначениеВСтроку()""

это был вопрос :)
16. Павел Егоров (SatanClaws) 27.05.09 15:09
И еще вопрос - чем не подошел классический метод:
обработка, которая копирует необходимую периодику введенную документами; создает документы вноса остатков, помечает на удаление ненужные документы и т.д.?..
17. Константин (Fisherru) 27.05.09 16:13
(14)
>Сурово у вас конфа написана, ничего не скажешь...
:-))))))
Самая любимая конфа :-). Писанная с "нуля" и максимально облегченная
НО, факты есть факты.
500 метров при огромной куче маленьких документов - это примерно размер
1SCRDOC.DBF под 100 метров, заголовочной части расх.накл - под 150 Мб, табличной части расх.накл - за 50 Мб - остальное маленькое.
И когда касса пытается под DBF-ом таскать подобные объемы для создать/записать /провести, а сервак - это обычный ПК - реально тормоза...
Специфика, блин.
А когда 2 кассы - вообще пипец. Они вместе(почти) нажимают "Провести" и всё - оба компа надолго задумываются, висят несколько минут - потом вываливаются из 1С из-за блокировок.
В лучшем случае одна касса остается в программе.
Лично наблюдал. После этого и решили резать.
В офисе базы (тоже самописные и гораздо более сложной структуры) более сбалансированные получаются (много мелких документов одного магазина за один день сливаем в один большой документ).
Так что на базах 2-3 Гига работают по 20 - 40 человек.
А нынче вот на SQL перешли. Хоть объем и раздулся, но всё равно веселее стало ;-)
18. Константин (Fisherru) 27.05.09 16:21
(14)
>идея интересная, такого способа (физически вынося неугодные таблицы) еще не видел...
Когда только пришёл в эту компанию (уж лет 8 как), всё так и было как в описанном вами в (16) "классическом методе".
Это после закрытия бокса с компьютером на рынке (раньше так было :-) )
выдирали из него винт, цепляли в офисе на крутую банку и ... вперёд!
Не помню сколько там данных было, но если за ночь обрежется - зашибись ;-)
Очень долго удаляются документы. А если большой период, то тормаза в геометрической прогрессии. Типа 1 месяц - 20 мин, 2-й - 50, 3-й 1,5 - часа и так далее. Чего-то там в 1С не круто реализовано.
А тут знакомый мастер подсказал - не парься : выгрузил, прибил *.dbf, загрузил. Да, нужно поработать - выгрузки загрузки написать...
НО, итог, 20 минут и база обрезана!
19. Константин (Fisherru) 27.05.09 16:25
(14)
>Чем определяете имена таблиц?

Всё просто (это в BAT-нике):
rem - удаление всего кроме справочников
del /Q Путь\*.cdx Путь\dh*.dbf Путь\dt*.dbf
del /Q Путь\ra*.dbf Путь\rg*.dbf Путь\1sblob.dbf
del /Q Путь\1scrdoc.dbf Путь\1sdnlock.dbf Путь\1sjourn.dbf
del /Q Путь\1SCONST.dbf Путь\SYSLOG\*.*

Можно и со справочниками побаловаться, если они распухли и в таком виде не нужны...
20. Константин (Fisherru) 27.05.09 16:28
(15)
>"Данные документов выгружаете/загружаете через "ЗначениеИзСтроки()/ЗначениеВСтроку()""

Нет знаете ли, как-то так исторически сложилось, что всё ручками, каждый реквизит в отдельное поле.
Знаю - не универсально. :-(
Может когда и через метаданные напишем, но коль это уже скока лет живёт, добавить 1-2 новых реквизита - гораздо проще :-)
21. Константин (Fisherru) 27.05.09 16:32
P.S.
"Принципы выполнения Выгрузки / Загрузки данных при обрезании БД удаленного магазина"Кстати "плюсики" можно и там ставить :-))))))
Извините предыдущая ссылка чёт не работала, эта вот вроде правильная:
http://infostart.ru/blogs/1085/
22. Епрст (Ёпрст) 27.05.09 16:51
Жесть...
База в 500 метров вместе с cdx - это вообще оооооочччченнннь ммаааало, чтоб её резать.

А длинные строки как, которые в блобе валяются ?
Свёртка + прибитие файлов - вообще мегабоян..
Резать такую маленькую базу не в конце года - вообще моветон.
Книжки покупок/продаж вообще не ведёте?
Взаиморасчеты с клиентосами/поставщиками - тоже ?



23. Епрст (Ёпрст) 27.05.09 16:58
+22 Посмотрел Выгрузка_Загрузка ... тихий ужас.

24. Константин (Fisherru) 28.05.09 08:41
(22)
В 17 посте уже рассказал что и почему надо резать, привел размеры dbf-ок которые по сети тягаются туда - сюда...
Там где документов мало : 100-200 в день (наши строительные супермаркеты),
нормально доживают и работают и при 1-1,5 Гигах, то есть там приведённые выше размеры активно юзающихся dbf-ок достигаются при 1-1,5 Гигах общего размера базы!
Если нет подобного личного опыта - лучше не комментировать.
Я это не из пальца высосал, а лично наблюдал.
От длинных строк вообще отказались, поэтому блоб пуст.
Открою секрет - длинные строки = страшные тормоза - бегите от них.
Если, к примеру, элементы справочника номенклатура имеют длинную строку (типа описание), то при бегании вверх-вниз по форме списка справочника - страшное замедление. ДАЖЕ если их и не выводим на экран.
В 1С длинные строки реализованы через ж...
25. Епрст (Ёпрст) 28.05.09 08:48
26. Константин (Fisherru) 28.05.09 08:50
(22)
>Свёртка + прибитие файлов - вообще мегабоян..
Вот это я не понял - все нормальные программисты, делают новые чистые базы, ну или обрезают, через выгрузку(если надо) / удаление dbf / загрузку(если надо) - очень быстро...

>Резать такую маленькую базу не в конце года - вообще моветон.
>Книжки покупок/продаж вообще не ведёте?
>Взаиморасчеты с клиентосами/поставщиками - тоже ?

Замечу, это база магазина (она только для торговли), когда достигает нужного размера или тормоза начинается - тогда и режем...
Вся информация с магазинов стекается в сводную базу в офисе.
Тут и ведём всякие долги и прочее-прочее.
СВОДНУЮ базу режем только с Нового года (если нужно)
Сейчас сводная на SQL превышает в размере 10 Гиг.
В ней активно работают до 20-30 человек - всё путем ;-)

В общем повторюсь - своя специфика, кто её не имеет - тот не поймет.
27. Епрст (Ёпрст) 28.05.09 08:51
+25 на сегодняшний день в одной базе *.DBF 10,9 Гб
размер самой большой дбф-ки 951 метр ...
база с середины 2008 года..
28. Епрст (Ёпрст) 28.05.09 08:51
+27 активных юзверей - 60-70...и всё летает.
29. Епрст (Ёпрст) 28.05.09 08:53
(26) У вас в базе - 1 регистр, который ВЫ запросом выгружаете... дальше собственно, разговор можно закрывать...
мини склад млин..
30. Епрст (Ёпрст) 28.05.09 08:56
+29 Причем, выгружаете весьма экзотическим способом...
31. Константин (Fisherru) 28.05.09 08:57
32. Епрст (Ёпрст) 28.05.09 09:02
(31) Верить чему ?
Что базу , в !!! 500 !!! метров это вместе с CDX, т.е реально она 100-200 метров нужно резать? И притом, что для учета там всего 1 (ОДИН) регистр ?
Конечно верю!

Свёртка базы путём прибития DBF- ок моветон. В данной статье не учтены все моменты. Подходит она, для оооочень специфических баз. Ибо прибивается вся аналитика вообще за прошлые периоды.
33. Константин (Fisherru) 28.05.09 09:04
(27)(28)
Везёт ;-)

У нас в магазинах в качестве серваков стоят Интел коре дуо 1,8,
да и винты обычные - может в этом дело?
34. Константин (Fisherru) 28.05.09 09:06
>Посмотрел Выгрузка_Загрузка ... тихий ужас
>Причем, выгружаете весьма экзотическим способом...

А чего не так?
35. Епрст (Ёпрст) 28.05.09 09:08
(34) Да всё..
:)

Выгружать Запросом - моветон, когда есть ВыгрузитьИтоги...
Скидывать всё в dbf, используя XBase ... тоже
Загружать потом обратно, привязываяс к коду справочника - тоже...
Ну и т.д.


36. Константин (Fisherru) 28.05.09 09:12
(32)
Какие-то пропорции неправильные...
Вот в реально обрезанной базе у нас такие пропорции:
CDX- 168М, DBF-433М
И потом цифру 500 мы для себя выбрали - для профилактики
На самом деле они работают и при больших размерах
Самые-то коллизии начинаются – если 2 и более касс стоят, вот когда они пытаются одновременно юзать по сети
1SCRDOC.DBF под 100 метров, dbf заголовочной части расх.накл - под 150 Мб
Вот тогда пипец – это собственно я и наблюдал...
37. Епрст (Ёпрст) 28.05.09 09:13
Если уж так хочется резать, путём прибития DBF, то хотя бы так:

del -Y *.cdx
del -Y 1sjourn.dbf
del -Y dt*.*
del -Y dh*.*
del -Y ra*.*
del -Y rg*.*
del -Y 1SACCS.DBF
del -Y 1SBKTTL.DBF
del -Y 1SBKTTLC.DBF
del -Y 1SENTRY.DBF
del -Y 1SOPER.DBF
del -Y cj*.*

Далее ТиИ + галка очищать ссылки, удалять данные объектов.

Останется база токма со справочниками.. без лишних ссылок на объекты..
Потом думать о периодике и прочей муре.


38. Епрст (Ёпрст) 28.05.09 09:15
+37 Но один хрен, если ведётся книга покупок/продаж - так не делают...
Если нужна аналитика в партиях (для тис, к примеру) тоже...
если нужна аналитика по КредДокументу - тоже..
и т.д.
39. Константин (Fisherru) 28.05.09 09:23
(35)
Да ладно, работает же ;-)
Всё как-то исторически сложилось :)
А что касается "ВыгрузитьИтоги" - задумаюсь, как-то до сих пор не использовали...
Тем более наша ВыгрузкаОстатков через запрос идёт около 10 секунд. стоит ли париться?

>Скидывать всё в dbf, используя XBase - тоже моветон
а как можно лучше? подскажите...

>Загружать потом обратно, привязываяс к коду справочника - тоже...
а как же по другому?
40. Константин (Fisherru) 28.05.09 09:24
(37)
del -Y 1SACCS.DBF
del -Y 1SBKTTL.DBF
del -Y 1SBKTTLC.DBF
del -Y 1SENTRY.DBF
del -Y 1SOPER.DBF
del -Y cj*.*

у нас в торговле этого нет
41. Константин (Fisherru) 28.05.09 09:28
Нету у нас? самописное всё с "нуля"
> книга покупок/продаж
> аналитика в партиях
> аналитика по КредДокументу

И вообще, я тут собственно с другого начал - с BAT-ника
Выгрузки/загрузки - не презентовал, не хвалюсь я ими - самые рядовые
Просто люди попросили глянуть для примера как у нас - вот и выложил
42. Епрст (Ёпрст) 28.05.09 09:36
(39) А ты сравни метод ВыгрузитьИтоги с установленым фильтрами со своим запросом...
ЗначениеВСтрокуВнутр/ЗначениеИзСтрокиВнутр - поимеешь сразу сам объект, и не надо ничего искать...это самое простое.
43. Константин (Fisherru) 28.05.09 09:40
А справочники ни с регистрами ни с документами никак не связаны - не трогаем их и всё.
Если просто убить регистры и документы и почистить периодику - то просто получим чистую базу для нового магазина.
44. Константин (Fisherru) 28.05.09 09:42
(42)
Спасибо, вот это интересно.
Проста так обмены ещё до меня были написаны и я особо не углублялся...
45. Константин (Fisherru) 28.05.09 09:49
>ЗначениеВСтрокуВнутр/ЗначениеИзСтрокиВнутр - поимеешь сразу сам объект, и не надо ничего искать

Не очень догнал
Сейчас, при загрузки документа, я для заполнения у него реквизита "склад", например, ищу по переданному коду склада в справочнике складов и подставляю найденный элемент.
А как будет по новому?
Можно кусок кода для примера?
46. Епрст (Ёпрст) 28.05.09 10:01
(45) а так не будешь искать, а сдлаешь Склад = ЗначениеИЗСтрокиВнутр(ранее сохраненная строка, как ЗначениеВСтрокуВнутр(Склад));
47. Константин (Fisherru) 28.05.09 10:05
48. Константин (Fisherru) 28.05.09 13:32
(46)
Кстати, экспериментальным путем получено, что при использовании
ЗначениеВСтрокуВнутр(Объект) длинна возвращаемой строки 44 символа или бывает больше?
Сколько нужно в Dbf-ке на длину поля резервировать?
49. UncleVader (UncleVader) 28.05.09 17:08
(48) Вообще-то DBF для обмена данными - прошлый век, я юзаю XML и всем советую
50. Павел Егоров (SatanClaws) 28.05.09 18:01
(49) Помниться, XML-парсер из v7plus.dll в чем-то был нестабилен...

А с ДБФ - все просто и примитивно.
К тому же - есть индексация.
51. UncleVader (UncleVader) 28.05.09 18:36
(50) Хм... что-то я не наблюдал никакой нестабильности
Примитивность ДБФ накладывает ограничения и неудобства
52. Константин (Fisherru) 29.05.09 08:20
(49)
А в чем выигрыш?
В объеме выгрузки или в скорости?
С XML-лем немного баловался когда делал выгрузку данных из 1С на платёжный терминал...
Там структура передаётся построчно и, субъективно по мне, мене визуально читабельная, чем четко определенные поля DBF.
53. Константин (Fisherru) 29.05.09 08:46
(42) (46)
Побаловался я с ЗначениеВСтрокуВнутр/ ЗначениеИзСтрокиВнутр
И понял, почему мои предшественники отказались от использования данной технологии...
1. Скорость загрузки/выгрузки никаким образом не меняется ни в какую сторону,
2. Объем выгрузки только возрастает в разы, так как передаем не код – 4-5 цифр, а строку 50 символов – а это возрастание трафика...
3. Код выгрузки загрузки выглядит более компактно, НО
4. ПОЛУЧАЕТСЯ ПОЛНАЯ ЛАЖА

Поэкспериментировал я с выгрузкой загрузкой товаров, по старому с поиском через код и по-новому через ЗначениеВСтрокуВнутр/ ЗначениеИзСтрокиВнутр – сумма остатков загруженных в базы разошлась на большую цифру – порядка 30 %
Начал рыть
Поскольку справочник номенклатуры был только первоначально скопирован на магазин, а потом новые элементы рождались параллельно в сводной базе и базе магазина, то их внутренне представление в этих разных БД различно (не у всех, но у части).

Ниже приведен пример одних и тех же товаров в разных базах, только первый товар совпадает по внутреннему представлению, остальные 2 – нет !!!

Сводная база
Товар = Абсент "Тунел Зеленый" 0,7*6 70% Испания
Товар.Код = "5065"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5061 "}"

Товар = Бренди "Кондор" ХО в п/к 40% 0,7*12 Франция
Товар.Код = "0"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5062 "}"

Товар = Абсент "Тунел Красный" 0,7*6 70% Испания
Товар.Код = "5066"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5063 "}"

База магазина

Товар = Абсент "Тунел Зеленый" 0,7*6 70% Испания
Товар.Код = "5065"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5061 "}"

Товар = Бренди "Кондор" ХО в п/к 40% 0,7*12 Франция
Товар.Код = "0"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5065 "}"

Товар = Абсент "Тунел Красный" 0,7*6 70% Испания
Товар.Код = "5066"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5060 "}"

Поэтому, как хотите, но поиск по коду товара, который всегда одинаков во всех базах – самое правильное решение. Во всяком случае у нас.
54. Константин (Fisherru) 29.05.09 08:52
+53
Поправлюсь.
Для обрезания одной базы (выгрузка и загрузка в одной базе)- это подходит, но только из-за красоты кода - стоит ли переписывать?

А вот для выгрузок и обменов документами и справочниками между Сводной базой и базами магазинов - это недопустимо
55. Михаил (Mikeware) 30.05.09 13:53
(11) Проблема не "с аптеками", проблема с ДНК...
56. Константин (Fisherru) 01.06.09 08:45
(55)
Надеюсь выскажу мнение большинства:
"Инфостарт не площадка для пикировок, а место для конструктивного диалога единомышленников" :-)
57. vip (vip) 01.06.09 08:58
(53) А какое отношение имеет код к внутреннему ID элемента справочника?
58. Епрст (Ёпрст) 01.06.09 09:07
>>>>"Поэтому, как хотите, но поиск по коду товара, который всегда одинаков во всех базах – самое правильное решение."

Бред сивой кобылы в лунную ночь...
Даже лень объяснять почему...
59. Константин (Fisherru) 01.06.09 15:23
(57)(58)
Может мы о разном говорим?
Код - базовый реквизит элемента справочника.
Кроме того есть ещё внутренний ID элемента.
Они НЕ взаимосвязаны (у части товаров они совпадают(последняя цифра в ЗначениеВСтрокуВнутр), но потом разьезжаются).
Если говорить о том, что мы выгружаем документы, потом прибиваем их, в базе остаются только справочники, а потом мы загружаем документы обратно и нужно их заполнить по справочникам, то нам всё равно по чем искать по Коду элемента или по внутреннему ID, так как справочник как был до обрезания, так и остался после него.
НО, если у нас документы (Закуп, например), как и элементы справочника рождаются в Центральной базе, а потом мигрируют в БД удалённых магазинов,
то "Внутренний ID" использовать нельзя, я показал выше, что в разных базах "Внутренний ID" товаров различается (у меня на практике процентов 10-20 разьехалось).
А поскольку, при заведении элемента справочника в БД удалённого магазина, я принудительно устанавливаю ему КОД как в центре, то они у меня везде одинаковые - его и используем.
60. Константин (Fisherru) 01.06.09 15:26
(58)
Отсылаю к моему посту (56)
61. Епрст (Ёпрст) 01.06.09 15:30
(59) Ну привет.. если разные ID - это автоматом РАЗНЫЕ элементы.
Какая на синхронизация по коду может быть вообще ?


62. vip (vip) 01.06.09 15:32
(59) > элементы справочника рождаются в Центральной базе, а потом мигрируют в БД удалённых магазинов,
то "Внутренний ID" использовать нельзя, я показал выше, что в разных базах "Внутренний ID" товаров различается (у меня на практике процентов 10-20 разьехалось).

ответ в (58)

С чем у тебя "Внутренний ID" товаров различается?
Ты не совсем понимаешь, как в базе хранятся элементы справочников.
63. Епрст (Ёпрст) 01.06.09 15:32
"Нам всё равно по чему искать"

Ну что за бред..
Товаров с одинаковым кодом можно наплодить до едрени фени, а вот с одинаковыми ID - хрен.
И еще, у некоторых справочников, вообще нет ни кода ни наименования.
64. vip (vip) 01.06.09 15:34
(1) > А вообще у нас ещё много разных интересных технологий ;-)

А вот теперь не сомневаюсь :))
65. Константин (Fisherru) 01.06.09 16:00
(62)
Правда, очень надеюсь, что понимаю ;-)
А вообще, раньше даже и не заморачивался, описанная выше технология работает на обмен между центром и удалёнными торговыми точками более 13-ти лет.
Прикиньте и работает ;-)
Не забывайте, всё пишем сами и под себя - с "нуля"
(63)
И справочники нужные у нас "с кодом" и крыжики уникальности кода стоят, там где надо, и коды мы сами рождаем в удалённых базах -в общем всё хорошо у нас и все счастливы.

Вернусь к (62)
Я привел пример:
Что один и тот же товар в сводной базе и базе удалённого магазина имеют раный внутренний ID
Сводная база
Товар = Абсент "Тунел Красный" 0,7*6 70% Испания
Товар.Код = "5066"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5063 "}"

База магазина
Товар = Абсент "Тунел Красный" 0,7*6 70% Испания
Товар.Код = "5066"
ЗначениеВСтрокуВнутр(Товар) = "{"B","0","0","14","0","0"," 5060 "}"

То есть если я выгружу из сводной ID "{"B","0","0","14","0","0"," 5063 "}",
То в базе магазина он найдёт мне совершенно другой товар.

66. Епрст (Ёпрст) 01.06.09 16:04
(65) Это - РАЗНЫЕ элементы с одним названием.. неужели не понятно?
67. Епрст (Ёпрст) 01.06.09 16:06
68. vip (vip) 01.06.09 16:06
(65) > То в базе магазина он найдёт мне совершенно другой товар.

И правильно сделает, т.к. это и будет совершенно другой товар.

> Правда, очень надеюсь, что понимаю ;-)

Зря надеешься.
69. vip (vip) 01.06.09 16:11
(66) Есть смутные сомнения, что у автора не УРБД, а самопальный обмен.
По молодости таким баловался, работало, но проклял все на свете.
70. Константин (Fisherru) 01.06.09 16:11
А вообще, я это все затевал ТОЛЬКО для представления технологии использования BAT-файла.
Выгрузки / загрузки выложил по просьбе конкретных людей - они (эти обработки) ни на что не претендуют. Просто у нас вот так, и всё хорошо.
Если у вас тоже всё хорошо, но по-другому - замечательно...
(63)(64)
А вы правда верите, что я всю эту тему замутил, чтобы просто постебаться?
Реально, на всю работу потрачено много времени и экспериментов (не имею ввиду технологию выгрузки/загрузки их заготовки брал из того, что уже 100 лет используем, только доработал что нужно) - и работа завершена.
Результатом стало то, что в случае тормозов магазина из-за размера базы (а 500 это метров или 5 Гиг - без разницы).
Я звоню в магазин, управляющая входит в 1С, запускает обработочку, которая делает BAT-файл, выходит из 1С, запускает BAT-файл и идет курить.
10 - 20 минут и база обрезана до минимальных 100 Метров - можно работать.
Всё :-)
71. Епрст (Ёпрст) 01.06.09 16:12
(69) Нам этого не понять.. Люди понимашь, на собственной нетленке с !одним! регистром учет ведут 10 лет и режут базу при 500 метров..
А ты говоришь кода..кода..
:)
72. Константин (Fisherru) 01.06.09 16:13
(69)
Ага, самописное всё :-)
Не, у нас нормально, всё катит.
73. vip (vip) 01.06.09 16:15
(72) Так все-таки не УРБД?
Тогда вопросов больше не имею.
74. Константин (Fisherru) 01.06.09 16:28
А у нас всё автоматизировано (ну почти всё)
На примере 1-го направления (деятельности).
Есть оптовая компания, которая работает с клиентами и тарит нашу розничную сеть на 95% номенклатуры - 1 база.
Розничная компания - 1 сводная + 135 (пока) удаленных магазинов (БД).
Примерный режим работы:
1.Офис-менеджеры приходят на работу, выбирают магазину к затариванию на завтра, хлоп кнопочку (анализируем остатки, оптимальный запас) – есть заявки.
2. Если нужно, офис-менеджеры их корректируют и хлоп кнопочку – заявки в БД оптовой компании выгрузились / загрузились в виде отгрузок (разбитые по тоннажу, складам, товарному составу)
3. Если нужно, офис-менеджеры их корректируют и хлоп кнопочку и эти отгрузки в виде закупа обратно в сводную базу розничной сети улетают, а заодно и корректировавшиеся (в оптовой базе) отгрузки предыдущих периодов (автоматом) прихватываются.
4. Офис-менеджеры хлоп кнопочку и этот «Закуп» и изменёнными закупами предыдущих периодов на магазины по инету уезжают. Каждый пакет на свой магазин.
5. Там управляющие их грузят.
Ну а справочники – вечером выгрузили – хлоп кнопочку – всё на магазины по инету уезжает.
И никакого УРБД-ного гемора...
Правда хочу вместо этих 4-к кнопок – 1 большую нарисовать, но руководство пока морально не готово :-)))))))))))))
75. Константин (Fisherru) 18.02.10 14:34
P.S.
Перед новым годом около 100 магазинов были обрезаны в этом автоматическом режиме. Обрезали не только я программист, но и другие люди просто умеющие работать с компьютером (копировать например ;) )
Грабли были, но единожды, из-за вирусов.
Вирус держал файл когда производилось первоначальное копирование базы и копирование слетело, прошла выгрузка, а потом по BAT-нику грохнуло все регистры и документы
Поскольку у меня таким образом не осталось копии ДО обрезания, пришлось тормозиться и вытаскивать ночную копию. Потом лечились от вирусов и всё по новой.
В дальнейшем стали перед обрезанием делать ещё одну предварительную копию, чтоб наличие вирусов вычислить...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа