Перенос документов в идентичную базу (1С 7.7 OLE) (обновлено)


Предлагаю обработку для 1С Предприятие 7.7 для переноса документов в идентичную по структуре конфигурацию. Для передачи данных используется OLE-подключение.

Часто бывает: клиенты просят «сделать им чистую базу». На «Семерке» это просто: удаляем нужные таблички, запускаем тестирование и через пару минут получаем базу со всеми текущими настройками, справочниками и без единого документа. Затем обычно следует перенос текущих остатков по регистрам, проверка корректности данных и запуск чистой базы в работу. Как правило, обрезка на этом заканчивается, но иногда просят оставить часть документов: например, расходные накладные в ТиС, чтобы по ним можно было оформить возврат (в «торговле» возврат — это приходная накладная, выписанная на основании расходной) или Счета-фактуры, по которым еще не прошла отгрузка. 

Чтобы не писать под каждую конфигурацию обработку переноса конкретных видов документов, было принято решение написать универсальную обработку переноса. Насколько она получилась удачной — решать Вам. 

Для разработчика, как я думаю, эта обработка будет интересна как пример работы  с объектом «Метаданные» и OLE-подключением.

Изменения в версии 1.1.

1. Добавлены фильтры (условия) для отбора документов в базе-источнике: только помеченные на удаление, только помеченные на удаление.

2. Реализовано управление режимом поиска и замены документов: флаг Поиск по номеру и замена (в версии 1.0 — поиск и замена работала по умолчанию).

3. Возможность сохранять номер документа при переносе. Чтоб не было конфликтов префикс номера предваряется латинской буквой «x». 

4. Добавлен контроль уникальности номера перед записью документа: Если такой номер уже существует, то подбираются по очереди префиксы из ряда «a,b,c,d,e,f,g».

16 Comments

  1. CheBurator

    отгрузки никогда не проходят по счф

    Счф к отгрузкам не имеет никакого отношения в смысле фиксации долгов и взаиморасчетов между сторонами сделки

    За такое грязное изьяснение автору незачет

    Reply
  2. Vortigaunt

    Счет фактура в «семерочной» торговле — это аналог «ЗаказаПокупателя» «восьмерочной» УТ. На взаиморасчеты они никак не влияют, но резервируют товар под покупателя. Вообще смысл моей обработки не восстановление оборотов по регистрам (иначе теряется смысл обрезки и переноса остатков), а перенос документов, которые необходимы операторам для работы. Естественно в неактивном состоянии (записанные или помеченные на удаление). Ну вот был у них выписан ранее счет, а отгрузку они вводят исключительно на основании и все тут.

    Reply
  3. Sanario

    1. Шо за бред по поводу Счета-Фактуры и ЗаказПокупателя??? С каких это пор сч.фактура резервирует товар???

    2. По ссылкам зависимым перенос осуществляется?

    Reply
  4. LionsMap

    Может быть автор имел в виду Счет (Заявку покупателя)? Справочники из реквизитов переносятся целиком или по ссылкам? В общем вопросов много возникает, прежде чем скачивать

    Reply
  5. Vortigaunt

    (3) Sanario, Поставьте срок резерва больше нуля, проведите документ и посмотрите движения. А зачем, по вашему в конфигурации регистр «Резервы товаров» и какой документ по нему делает движения?

    Reply
  6. Vortigaunt

    (4) LionsMap, Обработка переносит только документы. Предполагается, что справочники оставлены без изменений (из конфигурации удалены файлы *.dh, *.dt, *.ra, *.rg. Поиск осуществаляется для справочников, счетов по коду (если кода нет — по наименованию), для документов — по номеру в пределах периодичности.

    Reply
  7. Vortigaunt

    Скажите пожалуйста ваше мнение. Актуально ли для вас чтобы обработка тянула вместе с документами еще и сопутствующие справочники (т.е. создавала элементы и заполняла реквизиты)? Если да, то могу дописать такое.

    Reply
  8. VV

    глВыбранЛи<<?>>(докТекДок.Вид(),»Вид документа»);

    ??? Неужто никто не наткнулся?

    Reply
  9. VV

    «Актуально ли для вас чтобы обработка тянула вместе с документами еще и сопутствующие справочники »

    конечно, так и должно быть. Еще актуально — фильтр по виду документов, по фирме.

    Reply
  10. ondul

    (7) нормальная обработка просто обязана тянуть сопутствующие по реквизитам документов справочники.

    И да — есть некое обращение к телу глобальной процедуры глВыбранЛи — имеет смысл вывести содержимое это процедуры в саму обработку…, иначе — сообщение об ошибке…

    Reply
  11. brvg

    Ничего она не переносит

    .глВыбранЛи<<?>>(докТекДок.Вид(),»Вид документа»);

    Даже если и забить документы не создает

    Reply
  12. Tarlich

    глВыбранЛи<<?>>(докТекДок.Вид(),»Вид документа»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(210)}: Процедура не обнаружена (глВыбранЛи)

    глВыбранЛи<<?>>(дДиаНачДата,»Начало периода»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(211)}: Процедура не обнаружена (глВыбранЛи)

    глВыбранЛи<<?>>(дДиаКонДата,»Конец периода»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(212)}: Процедура не обнаружена (глВыбранЛи)

    глВыбранЛи<<?>>(перДиаПроведенные,»Статус создаваемых документов»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(213)}: Процедура не обнаружена (глВыбранЛи)

    Reply
  13. pMax2012

    Да согласен, не работает:

    лВыбранЛи<<?>>(докТекДок.Вид(),»Вид документа»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(210)}: Процедура не обнаружена (глВыбранЛи)

    глВыбранЛи<<?>>(дДиаНачДата,»Начало периода»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(211)}: Процедура не обнаружена (глВыбранЛи)

    глВыбранЛи<<?>>(дДиаКонДата,»Конец периода»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(212)}: Процедура не обнаружена (глВыбранЛи)

    глВыбранЛи<<?>>(перДиаПроведенные,»Статус создаваемых документов»);

    {C:USERSАДМИНИСТРАТОРDESKTOPАЦ_ПЕРЕНОСДОКИДЕНТБАЗА.ERT(213)}: Процедура не обнаружена (глВыбранЛи)

    Reply
  14. gorenski

    Подскажите, ошибка с «лВыбранЛи» исправлена?

    Reply
  15. aselik

    Поскольку автор не отвечает, то возьму на себя смелость.

    Вставьте в обработку процедуру:

    Процедура глВыбранЛи(Идент, ИмяРекв)
    
    Если ПустоеЗначение(Идент) = 1 Тогда
    Сообщить(«Заполните » + ИмяРекв + «!»);
    глВсеВыбрано = 0;
    КонецЕсли;
    
    Конецпроцедуры
    Reply
  16. Vortigaunt

    К сожалению пока нет времени заняться обработкой. В планах учесть все пожелания, включая перенос справочников. Для правильной работы обработки на нетиповых конфигурациях (или на тех где нет в глобальном модуле процедуры глВыбранЛи()) кроме самой процедуры (из поста выше) нужно добавить переменную. В первой строчке прописать

    Перем глВсеВыбрано;

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *