Обрезание БД удалённого магазина одной кнопкой
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Пришлось поразмышлять к какой рубрике отнести данное.
Скорее это методические материалы и нужно в статьи, но их мало читают.
Поскольку будет приведён ещё и некий код – отнёс это в программы.
Смысл - выполняется периодическое обрезание баз данных на удалённых магазинах .
1С v7.7 DBF-ка. Полностью самописная конфигурация.
Был написан (на бумаге) сценарий обрезания.
Успешно всё работает, но это когда я, как программист приезжаю на магазин и делаю всё ручками.
Но некоторые магазины очень далеко (5 часов в один конец на авто).
Вот и решили сделать один Bat-ничек, чтобы технические специалисты обслуживающие магазины на местах могли не париться - запустить его и вот оно - счастье...
А сценарий не очень прост:
1. Удаляем индексы (можно bat-ом реализовать)
2. Входим монопольно - переиндексация. Запускаем "Выгрузка"
3. Делаем копию базы на локалку (можно bat-ом реализовать)
4. Удаляем не нужные таблицы оставляя только справочники(можно bat-ом реализовать)
5. Тестирование и исправление (можно bat-ом реализовать)
6. Входим монопольно. Запускаем "Загрузка"
В ходе разработки возникло несколько проблем, которые были подняты в темах:
1. Как запустить пакетно 1С в режиме "Предприятие" и указать какую обработку запустить на выполнение
//infostart.ru/forum/forum9/topic9444/messages/
2. BAT-файл с командами работы с ФС и пакетными запусками 1С
//infostart.ru/forum/forum9/topic9464/messages/
Было интересное обсуждение и реальная помощь.
Спасибо всем.
И вот всё написано и заработало.
В программу 1С добавлена обработка формирующая этот самый единый BAT-ничек.
BAT-ничек нужно формировать по месту (в каждом магазине свой), так как необходимо получить путь к БД этого магазина, а также размещение и имя файла движка 1С (ну sqlтам или net – имена разные)
То есть Первое действие.
Управляющий заходит в программу 1С и запускает обработку «Формирование единого BAT»
Что там делается:
- Проверка на возможность обрезания. Если обрезали в последние пол-года и/или размер базы
- Создаются 2 папки. Одна для выкладывания собственно BAT-ничка, выгрузи и флажков для 1С. Другая для копии БД.
- Удаляются индексы (переиндексация вообще полезна. Тестирование и исправление ещё лучше, но занимает очень много времени, поэтому пошли простым пуьём)
- Копируется база на локалку.
- Удаляем файлы в USRDEF\*.* , чтобы зайти в 1С безымянным (если имя пользователя мы бы ещё могли вытащить, то его пароль без специальной компоненты - нет)
- Запускаем 1С и выгружаем данные.
- Удаляем не нужные ДБВ-ки (оставляем только справочники)
- Запускаем 1С на тестирование и исправление.
- Запускаем 1С и загружаем данные.
- Вернём USRDEF на место
- Сделаем отдельный батничек с параметрами для тестирования
- Выложим флажки для 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);
КонецЕсли;
КонецЕсли;
ВыгрузкаДанныхПриОбрезании:
- Выгрузка остатков (у нас долги в магазинах не ведутся, только остаток товара)
- Выгрузка цен (чтоб можно было прибить жирный 1SCONST.DBF)
- Выгрузка констант (чтоб восстановить константы)
- Выгрузка документов (ДатаНачалаБазы=НачМесяца(ДобавитьМесяц(ПолучитьДатуТА(),-1)))
- Отчет остатки товаров с суммой
ЗагрузкаДанныхПриОбрезании:
Всё тоже самое, но на загрузку.
ВСЁ РАБОТАЕТ !!!!
P.S. Если у кого-то проблемы с написанием выгрузки/загрузки - могу выложить балванки, НО поскольку моя конфигурация полностью самописная, вам придётся переделывать под себя.
А вот показанный пример BAT-файла и механизм отработки запусков 1С - универсальный...
По просьбе трудящихся!
27.05.09 добавлены болванки выгрузки и загрузки данных.
Принципы выгрузки-загрузки в статейке опишу (чтоб тут лишнего места не занимать) и ссылку вставлю ;-)
Вот ссылочка
"Принципы выполнения Выгрузки / Загрузки данных при обрезании БД удаленного магазина"Кстати "плюсики" можно и там ставить :-))))))
Извините предыдущая ссылка чёт не работала, эта вот вроде правильная:
//infostart.ru/blogs/1085/
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Оптовая торговля Розничная торговля ККМ ЭДО и ОФД Обмен с ГосИС НДС 22% Системный администратор Разработчик Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Платные (руб)
Подключение фискального регистратора к 1С 7.7 в режиме онлайн-кассы в соответствии с 54-ФЗ для Атол, Штрих-М / Торговый баланс М (PosCenter). Поддержка операторов ЭДО: Сбис (Тензор), Контур.Диадок, ЭДО лайт, Калуга Астрал, Такском и пр. Поддержка оптовой и розничной продажи маркированной продукции (алкоголь, табак, обувь, лекарства, шины, одежда, белье, парфюмерия, молочная продукция, вода, пиво, автозапчасти, моторное масло и пр.). Поддержка онлайн и офлайн (через Локальный Модуль ЧЗ) проверки маркировки в разрешительном режиме (РР) и через ТС ПИоТ.
20000 руб.
28.03.2017 585296 5306 3840
Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Пользователь 1С:Предприятие 7.7 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 1.х 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)
Автоматизация заказа поставщику через 1С. Загрузка прайсов, анализ цен, управление заказами в УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2
39141 руб.
21.04.2017 113399 212 44
Учет доходов и расходов Розничная торговля Бухгалтер Пользователь 1С:Предприятие 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Россия Налоговый учет ПСН (патентная система налогообложения) Абонемент ($m)
Отчет позволяет сформировать книгу учета доходов для патентной системы налогообложения (ПСН), используя данные из проведенных документов по выбранной фирме и за выбранный период. По умолчанию используются документы вида "Отчет ККМ" и "Реализация Розница". Можно подключить другие виды документов. Отчет предназначен для использования с конфигурациях "1С:Торговля и Склад 7.7, редакция 9.2" (релиз 932 и выше) и "1С:Комплексная, редакция 4.5" (релиз 446 и выше). Можно легко адаптировать под другие конфигурации, т.к. код открыт. Выкладывается как инструмент для разработки с целью реализации в собственных конфигурациях. Отчет предоставляется в виде внешней обработки, внесения изменений в конфигурацию не требует.
1 стартмани
27.01.2021 12178 21 victuan 2
Розничная торговля Ценообразование, анализ цен Маркетплейсы Разработчик Оперативный учет 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Россия Управленческий учет Абонемент ($m)
Внешняя обработка для 1С 7.7 конфигураций ТиС и Комплексная конфигурация. Подходит для Windows, которые поддерживают работу с WinHttpRequest.
2 стартмани
10.11.2020 13211 28 user1479046 11
Розничная торговля Обмен с ГосИС Пользователь 1С:Предприятие 7.7 1C77 Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)
Разагрегация (получение кодов маркировки, товаров, входящих в "агрегатированные" поставщиком упаковки) для табачной продукции по коду маркировки коробки - получаем коды всех блоков, входящих в эту коробку, по коду любого блока из нее получить список кодов пачек в блоке. Позволяет запросить в виде дерева содержимое (коды маркировки) табачной продукции. Отсканировав или вставив в строку ШтрихКод упаковки, можно запросить из ЦРПТ вложенные коды Требует наличия ЭЦП(КриптоПро или VipNet, ЕГАИС РуТокен ЭЦП 2.0 не подойдет! ) и регистрации в системе МОТП "Честного знака".
2 стартмани
27.05.2020 22973 54 M_W_W 19
Мобильная разработка Оптовая торговля Розничная торговля Системный администратор Разработчик Пользователь 1С:Предприятие 7.7 1С:Предприятие 8 Оптовая торговля, дистрибуция, логистика Управленческий учет Абонемент ($m)
Мобильное приложение на платформе Андроид для формирования заказов клиентов. Основное предназначение - работа торговых агентов, представителей, что включает в себя: список клиентов с адресами, телефонами, историей взаиморасчетов; список товаров с остатками, с несколькими типами цен; составление заявки; регистрация поступления оплаты; отслеживание координат. Приложение можно состыковать с 1С любой версии. Поддерживаемые протоколы передачи: файловый (FTP), Web-service, HTTP-service.
1 стартмани
30.01.2019 20658 15 ruslan_hut 2
Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Разработчик Бухгалтер Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 1С:Упрощенное налогообложение 7.7 Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)
Полностью автоматизированный обмен между конфигурациями 1С 7.7 и ФГИС Меркурий через Ветис.API для всех видов деятельности (Опт, Розница, Производство). Для организации обмена с ФГИС Меркурий требуется минимальная доработка конфигураций (поддерживается "из коробки" 1С: "Торговля и склад ред. 9.2", 1С: "Комплексная ред. 4.5", 1С: "Бухгалтерия 7.7", 1С: "УСН 7.7", 1С Предприниматель, другие конфигурации по заказу, включая нетиповые и самописные). Модуль разработан таким образом, чтобы минимизировать затраты по внедрению в произвольную конфигурацию на базе 1С 7.7. Вы можете БЕСПЛАТНО скачать демо-версию без ограничения по функционалу и опробовать решение в полном объеме перед покупкой. В данном программном продукте реализованы все технические требования Россельхознадзора по обмену в формате 2.0 и 2.1. Решение прошло опытную эксплуатацию и тестирование на крупных объектах всех видов деятельности: Производство, Опт, Розница.
10000 руб.
21.11.2018 60082 162 105
ККМ Кассовые операции Розничная торговля Системный администратор Разработчик Бухгалтер 1С:Предприятие 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 1.6 Россия Платные (руб)
Одна касса - несколько компьютеров. Подключение нескольких компьютеров к одной кассе - сервер печати чеков, работает с любой конфигурацией 1С и даже не с 1С. Обработка позволяет подключить несколько рабочих мест по сети к одной кассе. Поддерживаются кассы Штрих, Атол, Википринт (Дримкас), Пирит.
6710 руб.
25.05.2018 26233 4 6
Остатки как и у всех хранятся в регистре.
Поэтому мы и выгружаем их на вечер ДатаОбрезания-1, а затем, в уже пустую базу, загружаем их в ту же дату документом "ВводНачальныхОстатков".
После них уже загружаем оставленный период документов.
Про бред не понял :(
Была задача без участия программиста выполнить в автоматическом режиме обрезание БД - задача решена...
Основная сложность была выполнить последовательность неких действий (которые я раньше делал вручную) и чтобы 1С, запущенная из BAT-ничка в пакетном режиме, понимала, что и когда ей делать надо...
В базе магазина продажи регистрируются расходными накладными. По 200 - 800 документов в день. Через год - полтора документов становится настолько много, что идут реальные подвисания как при создании нового документа, так и при его записи и проведения.
Обрезать "под ноль" - нельзя, так как в магазины периодически повторно перевыгружаются скорректированные документы закупа, корректирующие остатки.
Поэтому оставляем в магазине все документы за 1-2 месяца. Остальное прибиваем.
Выполнять удаление документов за отбрасываемый период в среде 1С, как это делается в стандартной - ооооооооооочень долго.
Поэтому:
Выгружаем остатки на начало оставляемого периода.
Выгружаем все документы за оставляемый период.
Удаляем физически все DBF-ки (кроме справочников) - очень быстро ;-)
В чистую базу грузим остатки на начало периода и все документы в нём.
Остатки сходятся копеечка в копеечку. Что и подтверждается сравнением отчётов по остаткам товаров по входным ценам сделанным ДО и ПОСЛЕ обрезания.
А вообще идея замечательная, у самих почти десять объектов, обрезаем раз в несколько лет, но от этого не легче - делали всегда вручную, по бумажке :). Попробуем внедрить у себя.
Вот, первый комментарий по теме :-)
Спасибо за поддержку ;-)
У нас более 130 магазинов и сеть продолжает расти.
По жизни замечено, что при достижении размера *.dbf + *.cdx > 500 Мб - начинается вешалка. А если в магазине (у нас небольшие алкомаркеты) несколько касс, то они вообще конкретно мешают друг другу.
Да, делал обрезание вручную - ручное копирование, удаление *.cdx? куча выгрузок (всё было по отдельности : цены, остатки, документы и прочее), аналогично загрузки. Обрезание шло в одном магазине 40 - 50 мин (магазин стоял).
Когда сделал единую выгрузку (объединив все обработки в одну) и загрузку - стало 20-25 минут, но ручной труд остался.
Сейчас, грубо, управляющий запускает bat-ничек и курить 10-15 минут - всё!
Т.е. вешалка начинается при 500 метрах на фактически 1 рабочем месте, активно вводящем документы?
Сурово у вас конфа написана, ничего не скажешь...
По теме - идея интересная, такого способа (физически вынося неугодные таблицы) еще не видел...
Чем определяете имена таблиц?
Ручками парсите .dd файл или, скажем, через 1С++?
Данные документов выгружаете/загружаете через "ЗначениеИзСтроки()/ЗначениеВСтроку()"
это был вопрос :)
>"Данные документов выгружаете/загружаете через "ЗначениеИзСтроки()/ЗначениеВСтроку()""
Нет знаете ли, как-то так исторически сложилось, что всё ручками, каждый реквизит в отдельное поле.
Знаю - не универсально. :-(
Может когда и через метаданные напишем, но коль это уже скока лет живёт, добавить 1-2 новых реквизита - гораздо проще :-)
>Сурово у вас конфа написана, ничего не скажешь...
:-))))))
Самая любимая конфа :-). Писанная с "нуля" и максимально облегченная
НО, факты есть факты.
500 метров при огромной куче маленьких документов - это примерно размер
1SCRDOC.DBF под 100 метров, заголовочной части расх.накл - под 150 Мб, табличной части расх.накл - за 50 Мб - остальное маленькое.
И когда касса пытается под DBF-ом таскать подобные объемы для создать/записать /провести, а сервак - это обычный ПК - реально тормоза...
Специфика, блин.
А когда 2 кассы - вообще пипец. Они вместе(почти) нажимают "Провести" и всё - оба компа надолго задумываются, висят несколько минут - потом вываливаются из 1С из-за блокировок.
В лучшем случае одна касса остается в программе.
Лично наблюдал. После этого и решили резать.
В офисе базы (тоже самописные и гораздо более сложной структуры) более сбалансированные получаются (много мелких документов одного магазина за один день сливаем в один большой документ).
Так что на базах 2-3 Гига работают по 20 - 40 человек.
А нынче вот на SQL перешли. Хоть объем и раздулся, но всё равно веселее стало ;-)
>идея интересная, такого способа (физически вынося неугодные таблицы) еще не видел...
Когда только пришёл в эту компанию (уж лет 8 как), всё так и было как в описанном вами в (16) "классическом методе".
Это после закрытия бокса с компьютером на рынке (раньше так было :-) )
выдирали из него винт, цепляли в офисе на крутую банку и ... вперёд!
Не помню сколько там данных было, но если за ночь обрежется - зашибись ;-)
Очень долго удаляются документы. А если большой период, то тормаза в геометрической прогрессии. Типа 1 месяц - 20 мин, 2-й - 50, 3-й 1,5 - часа и так далее. Чего-то там в 1С не круто реализовано.
А тут знакомый мастер подсказал - не парься : выгрузил, прибил *.dbf, загрузил. Да, нужно поработать - выгрузки загрузки написать...
НО, итог, 20 минут и база обрезана!
>Чем определяете имена таблиц?
Всё просто (это в 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\*.*
Можно и со справочниками побаловаться, если они распухли и в таком виде не нужны...
обработка, которая копирует необходимую периодику введенную документами; создает документы вноса остатков, помечает на удаление ненужные документы и т.д.?..
База в 500 метров вместе с cdx - это вообще оооооочччченнннь ммаааало, чтоб её резать.
А длинные строки как, которые в блобе валяются ?
Свёртка + прибитие файлов - вообще мегабоян..
Резать такую маленькую базу не в конце года - вообще моветон.
Книжки покупок/продаж вообще не ведёте?
Взаиморасчеты с клиентосами/поставщиками - тоже ?
В 17 посте уже рассказал что и почему надо резать, привел размеры dbf-ок которые по сети тягаются туда - сюда...
Там где документов мало : 100-200 в день (наши строительные супермаркеты),
нормально доживают и работают и при 1-1,5 Гигах, то есть там приведённые выше размеры активно юзающихся dbf-ок достигаются при 1-1,5 Гигах общего размера базы!
Если нет подобного личного опыта - лучше не комментировать.
Я это не из пальца высосал, а лично наблюдал.
От длинных строк вообще отказались, поэтому блоб пуст.
Открою секрет - длинные строки = страшные тормоза - бегите от них.
Если, к примеру, элементы справочника номенклатура имеют длинную строку (типа описание), то при бегании вверх-вниз по форме списка справочника - страшное замедление. ДАЖЕ если их и не выводим на экран.
В 1С длинные строки реализованы через ж...
Что базу , в !!! 500 !!! метров это вместе с CDX, т.е реально она 100-200 метров нужно резать? И притом, что для учета там всего 1 (ОДИН) регистр ?
Конечно верю!
Свёртка базы путём прибития DBF- ок моветон. В данной статье не учтены все моменты. Подходит она, для оооочень специфических баз. Ибо прибивается вся аналитика вообще за прошлые периоды.
Какие-то пропорции неправильные...
Вот в реально обрезанной базе у нас такие пропорции:
CDX- 168М, DBF-433М
И потом цифру 500 мы для себя выбрали - для профилактики
На самом деле они работают и при больших размерах
Самые-то коллизии начинаются – если 2 и более касс стоят, вот когда они пытаются одновременно юзать по сети
1SCRDOC.DBF под 100 метров, dbf заголовочной части расх.накл - под 150 Мб
Вот тогда пипец – это собственно я и наблюдал...
>Свёртка + прибитие файлов - вообще мегабоян..
Вот это я не понял - все нормальные программисты, делают новые чистые базы, ну или обрезают, через выгрузку(если надо) / удаление dbf / загрузку(если надо) - очень быстро...
>Резать такую маленькую базу не в конце года - вообще моветон.
>Книжки покупок/продаж вообще не ведёте?
>Взаиморасчеты с клиентосами/поставщиками - тоже ?
Замечу, это база магазина (она только для торговли), когда достигает нужного размера или тормоза начинается - тогда и режем...
Вся информация с магазинов стекается в сводную базу в офисе.
Тут и ведём всякие долги и прочее-прочее.
СВОДНУЮ базу режем только с Нового года (если нужно)
Сейчас сводная на SQL превышает в размере 10 Гиг.
В ней активно работают до 20-30 человек - всё путем ;-)
В общем повторюсь - своя специфика, кто её не имеет - тот не поймет.
Да ладно, работает же ;-)
Всё как-то исторически сложилось :)
А что касается "ВыгрузитьИтоги" - задумаюсь, как-то до сих пор не использовали...
Тем более наша ВыгрузкаОстатков через запрос идёт около 10 секунд. стоит ли париться?
>Скидывать всё в dbf, используя XBase - тоже моветон
а как можно лучше? подскажите...
>Загружать потом обратно, привязываяс к коду справочника - тоже...
а как же по другому?
Побаловался я с ЗначениеВСтрокуВнутр/ ЗначениеИзСтрокиВнутр
И понял, почему мои предшественники отказались от использования данной технологии...
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 "}"
Поэтому, как хотите, но поиск по коду товара, который всегда одинаков во всех базах – самое правильное решение. Во всяком случае у нас.
Может мы о разном говорим?
Код - базовый реквизит элемента справочника.
Кроме того есть ещё внутренний ID элемента.
Они НЕ взаимосвязаны (у части товаров они совпадают(последняя цифра в ЗначениеВСтрокуВнутр), но потом разьезжаются).
Если говорить о том, что мы выгружаем документы, потом прибиваем их, в базе остаются только справочники, а потом мы загружаем документы обратно и нужно их заполнить по справочникам, то нам всё равно по чем искать по Коду элемента или по внутреннему ID, так как справочник как был до обрезания, так и остался после него.
НО, если у нас документы (Закуп, например), как и элементы справочника рождаются в Центральной базе, а потом мигрируют в БД удалённых магазинов,
то "Внутренний ID" использовать нельзя, я показал выше, что в разных базах "Внутренний ID" товаров различается (у меня на практике процентов 10-20 разьехалось).
А поскольку, при заведении элемента справочника в БД удалённого магазина, я принудительно устанавливаю ему КОД как в центре, то они у меня везде одинаковые - его и используем.
то "Внутренний ID" использовать нельзя, я показал выше, что в разных базах "Внутренний ID" товаров различается (у меня на практике процентов 10-20 разьехалось).
ответ в (58)
С чем у тебя "Внутренний ID" товаров различается?
Ты не совсем понимаешь, как в базе хранятся элементы справочников.
Правда, очень надеюсь, что понимаю ;-)
А вообще, раньше даже и не заморачивался, описанная выше технология работает на обмен между центром и удалёнными торговыми точками более 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 "}",
То в базе магазина он найдёт мне совершенно другой товар.
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*.*
Далее ТиИ + галка очищать ссылки, удалять данные объектов.
Останется база токма со справочниками.. без лишних ссылок на объекты..
Потом думать о периодике и прочей муре.
> книга покупок/продаж
> аналитика в партиях
> аналитика по КредДокументу
И вообще, я тут собственно с другого начал - с BAT-ника
Выгрузки/загрузки - не презентовал, не хвалюсь я ими - самые рядовые
Просто люди попросили глянуть для примера как у нас - вот и выложил
Не очень догнал
Сейчас, при загрузки документа, я для заполнения у него реквизита "склад", например, ищу по переданному коду склада в справочнике складов и подставляю найденный элемент.
А как будет по новому?
Можно кусок кода для примера?
А с ДБФ - все просто и примитивно.
К тому же - есть индексация.
Примитивность ДБФ накладывает ограничения и неудобства
А в чем выигрыш?
В объеме выгрузки или в скорости?
С XML-лем немного баловался когда делал выгрузку данных из 1С на платёжный терминал...
Там структура передаётся построчно и, субъективно по мне, мене визуально читабельная, чем четко определенные поля DBF.
Поправлюсь.
Для обрезания одной базы (выгрузка и загрузка в одной базе)- это подходит, но только из-за красоты кода - стоит ли переписывать?
А вот для выгрузок и обменов документами и справочниками между Сводной базой и базами магазинов - это недопустимо
Выгрузки / загрузки выложил по просьбе конкретных людей - они (эти обработки) ни на что не претендуют. Просто у нас вот так, и всё хорошо.
Если у вас тоже всё хорошо, но по-другому - замечательно...
(63)(64)
А вы правда верите, что я всю эту тему замутил, чтобы просто постебаться?
Реально, на всю работу потрачено много времени и экспериментов (не имею ввиду технологию выгрузки/загрузки их заготовки брал из того, что уже 100 лет используем, только доработал что нужно) - и работа завершена.
Результатом стало то, что в случае тормозов магазина из-за размера базы (а 500 это метров или 5 Гиг - без разницы).
Я звоню в магазин, управляющая входит в 1С, запускает обработочку, которая делает BAT-файл, выходит из 1С, запускает BAT-файл и идет курить.
10 - 20 минут и база обрезана до минимальных 100 Метров - можно работать.
Всё :-)
На примере 1-го направления (деятельности).
Есть оптовая компания, которая работает с клиентами и тарит нашу розничную сеть на 95% номенклатуры - 1 база.
Розничная компания - 1 сводная + 135 (пока) удаленных магазинов (БД).
Примерный режим работы:
1.Офис-менеджеры приходят на работу, выбирают магазину к затариванию на завтра, хлоп кнопочку (анализируем остатки, оптимальный запас) – есть заявки.
2. Если нужно, офис-менеджеры их корректируют и хлоп кнопочку – заявки в БД оптовой компании выгрузились / загрузились в виде отгрузок (разбитые по тоннажу, складам, товарному составу)
3. Если нужно, офис-менеджеры их корректируют и хлоп кнопочку и эти отгрузки в виде закупа обратно в сводную базу розничной сети улетают, а заодно и корректировавшиеся (в оптовой базе) отгрузки предыдущих периодов (автоматом) прихватываются.
4. Офис-менеджеры хлоп кнопочку и этот «Закуп» и изменёнными закупами предыдущих периодов на магазины по инету уезжают. Каждый пакет на свой магазин.
5. Там управляющие их грузят.
Ну а справочники – вечером выгрузили – хлоп кнопочку – всё на магазины по инету уезжает.
И никакого УРБД-ного гемора...
Правда хочу вместо этих 4-к кнопок – 1 большую нарисовать, но руководство пока морально не готово :-)))))))))))))
Перед новым годом около 100 магазинов были обрезаны в этом автоматическом режиме. Обрезали не только я программист, но и другие люди просто умеющие работать с компьютером (копировать например ;) )
Грабли были, но единожды, из-за вирусов.
Вирус держал файл когда производилось первоначальное копирование базы и копирование слетело, прошла выгрузка, а потом по BAT-нику грохнуло все регистры и документы
Поскольку у меня таким образом не осталось копии ДО обрезания, пришлось тормозиться и вытаскивать ночную копию. Потом лечились от вирусов и всё по новой.
В дальнейшем стали перед обрезанием делать ещё одну предварительную копию, чтоб наличие вирусов вычислить...
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 20103
Создание 22.05.09 15:23
Обновление 18.02.10 00:00
Просмотры 21972
Загрузки 178
Рейтинг
9
Комментарии 76
Код открыт Не указано
Рубрики Свертка базы Розничная торговля
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа Оперативный учет 7.7
Конфигурация 1C77
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Управленческий учет
Доступ к файлу Абонемент ($m)