gifts2017

Универсальный OLE-перенос объектов между БД с идентичными конфигурациями

Опубликовал Антон Рощин (wolfsoft) в раздел Обмен - Перенос данных из 1С7.7 в 1C7.7

Обработка предназначена для периодического переноса объектов из одной копии БД в другую (например, из "черной" в "белую").
Структуры конфигураций должны быть идентичными.
Используется OLE-механизм связи (для БД "приемника" рекомендуется монопольный режим - добавлено в описание по просьбам "трудящихся").


Обработка способна переносить любые объекты, но данный пример сделан в виде переноса всех документов за определенный период. Если потребуется, то доработать интерфейс отбора объектов не составит особого труда.

При выгрузке объектов также выгружаются объекты, связанные по ссылкам с текущим выгружаемым объектом.

Выгружаемые документы проводятся в конце выгрузки, если установлен соответствующий флаг, в естественном временном порядке.

Поддерживается целостность выгрузки данных с учетом возможной сетевой структуры ссылок, т.е когда "ЭЛЕМЕНТ_1" через реквизиты ссылается на "ЭЛЕМЕНТ_2", а "ЭЛЕМЕНТ_2" - на "ЭЛЕМЕНТ_1".
В том числе, и более сложные и длинные сетевые структуры.

Поскольку ключ синхронизации справочника далеко не всегда однозначен, то существует
возможность по выбору отключить выгрузку каких-то  справочников. Если при выгрузке возникнет необходимость в создании элемента "отключенного" справочника, то будет выведено соответствующее сообщение "не выгружен объект".

Также есть возможность выбора ключа синхронизации. Если у справочника нет атрибута "Код" (код нулевой длины), то, как вариант, можно для прозрачности переноса, добавить к структуре справочника реквизит "Уникальный код" и указать его в схеме переноса в качестве ключа синхронизации.

Вся схема переноса сводится к настройке основных параметров переноса и указанию ключей синхронизации у справочников. Схема может сохраняться в файле.

По своей сути, данная обработка обладает большими возможностями. Она способна переносить любые объекты между идентичными конфигурациями - и справочники, и документы, т.е. универсальна.

Это просто удобная заготовка для создания обработок переноса данных под конкретных клиентов.

Рекомендуемые доработки при доводке "под ключ":

  1. Можно, передавая в форму в качестве параметра схему переноса и другие настройки, скрыть от пользователя лишнюю информацию, автоматизировать процесс переноса данных под конкретного клиента.
  2. На отбор объектов можно "повесить" вызов некой обработки (отчета), позволяющей гибко производить отбор объектов по различным параметрам, в зависимости от пожеланий клиента. Выбранные объекты передавать в обработку переноса через параметры.

При разработке обработки акцент делался на простоту и удобство использования, экономию времени в будущем на реализации типовых задач: перенос "черное / белое", перенос справочников в новую чистую БД и т. д. и т. п..


ОСНОВНЫЕ НАСТРОЙКИ:

  • [ Трассировочные сообщения ] - выводить при переносе информацию о переносимых объектах
  • [ Проводить документы ] - проводить документы после переноса, проводятся в конце все сразу в естественной временной последовательности
  • [ Замещать при загрузке документы и справочники ] - производить обновление реквизитов уже существующих, найденных в БД-приемнике объектов

ДЕЙСТВИЯ:

  • [ Загрузить структуру ] - загрузить структуру БД (для формирования файла со схемой переноса)
  • [ Сохранить схему переноса ] - сохранить схему переноса в файл
  • [ Загрузить схему переноса ] - загрузить схему переноса из файла

РЕЛИЗ 1.25
Замечание от NDeclin:
"Пустые значения реквизитов типа "дата" переносятся как 30-12-1899."
Исправлено.

РЕЛИЗ 1.24
Замечание от Dmitry100:
"Если в приемнике уже есть документ и он помечен на удаление, а в источнике
этот документ проведен, то в приемнике он перезаполняется, но пометка
на удаление не снимается. А было бы логично."
Реализовано.

РЕЛИЗ 1.23
Исправлена ошибка при выгрузке реквизитов неопределенного типа со значением типа "перечисление".

РЕЛИЗ 1.22
Доработана выгрузка реквизитов неопределенного типа.

РЕЛИЗ 1.21
Исправлена ошибка при переносе операций.

РЕЛИЗ 1.20
Доработан интерфейс для "пользователя".

РЕЛИЗ 1.11
Исправлена ошибка, возникавшая при выгрузке документов, не имеющих табличной части.

РЕЛИЗ 1.10
Добавлена обработка передаваемых при открытии параметров.

СПИСОК ВОЗМОЖНЫХ ПАРАМЕТРОВ:

  • [ СхемаПереноса ] - файл со схемой переноса
  • [ ЗамещатьЭлементыСправочников ] - соответствующий флаг
  • [ ЗамещатьДокументы ] - соответствующий флаг
  • [ ТрассировочныеСообщения ] - соответствующий флаг
  • [ ПроводитьДокументы ] - соответствующий флаг
  • [ Путь ] - путь к БД-приемнику
  • [ ПользовательДиалог ] - параметр для подключения к БД-приемнику
  • [ Пароль ] - параметр для подключения к БД-приемнику
  • [ ВыгружаемыеОбъекты ] - список объектов (список значений), которые надо выгрузить в БД-приемник
  • [ Действие ] - действие, которое необходимо выполнить

ВОЗМОЖНЫЕ ЗНАЧЕНИЯ ПАРАМЕТРА "ДЕЙСТВИЕ":

"" - при любом значении, в том числе и при пустом значении, происходит инициализация флагов и полей ввода, соответствующих переданным параметрам, в случае пустого значения происходит обычное открытие формы обработки

"подключить_приемник" - происходит подключение БД-приемника, форма обработки открывается

"загрузить_структуру" - происходит подключение БД-приемника и загрузка структуры БД, форма обработки открывается

"загрузить_схему" - происходит загрузка схемы обмена, форма обработки открывается

"загрузить_схему_подключить_приемник" - происходит подключение БД-приемника, загрузка схемы обмена, форма обработки открывается

"выгрузить_объекты" - происходит подключение БД-приемника, загрузка схемы обмена, выгрузка переданных объектов, форма обработки не открывается


ПРИМЕР ИСПОЛЬЗОВАНИЯ ОБРАБОТКИ

  1. Открыть обработку в БД-источнике.
  2. Перейти на закладку "Настройка", загрузить структуру данных, отредактировать схему переноса
    (указать ключи синхронизации у справочников), сохранить схему в файл, чтобы в дальнейшем просто загружать ее из файла.
  3. Вернуться на основную закладку, указать: параметры конфигурации приемника (каталог, пользователь, пароль), подключить конфигурацию приемник.
  4. Отобрать объекты для выгрузки.
  5. Выгрузить данные.

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

Наименование Файл Версия Размер Кол. Скачив.
perenos_ole_136.zip
.zip 29,03Kb
17.02.12
724
.zip 29,03Kb 724 Скачать

См. также

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

Комментарии

1. Антон Рощин (wolfsoft) 29.07.07 19:59
В ответ на претензии по "тормозной" работе http://infostart.ru/projects/181/ выкладываю данную разработку.
Она работает быстрее, так как не содержит "тормозов" системных методов "1С" ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр().
Пожалуйста, комментарии, отзывы, ошибки - сюда, милости просим ;)
2. Антон Рощин (wolfsoft) 31.07.07 09:56
Не понял, все так плохо, что даже комментировать не хочется? ;)
3. Антон Рощин (wolfsoft) 08.08.07 23:40
Тогда закрываю обработку, теперь "только для зарегистрированных".
4. Константин (kosty) 11.08.07 11:58
работает шустренько, спасибо
был бы не лишний отбор по виду документа
5. Антон Рощин (wolfsoft) 12.08.07 09:50
2 kosty: Спасибо за комментарий. В общем-то обработка может переносить любые объекты, предназначена скорее другим программистам, чем пользователям, как "заготовка" для своих обработок. Перенос документов - просто пример.
Но вообще Вы правы, надо подумать и о пользователях.
Доработаю интерфейс - выложу обновленную версию.
6. Антон Рощин (wolfsoft) 12.08.07 10:46
2 kosty: По просьбам трудящихся доработан интерфейс для пользователя ;)
Добавлен отбор документов и элементов справочников по виду и отбор "по-штучно".
7. Антон Рощин (wolfsoft) 12.08.07 10:47
8. Антон Рощин (wolfsoft) 14.08.07 18:24
Не стесняемся, Дамы и Господа! Пишем комментарии, "плюсуем" :)
9. Антон Рощин (wolfsoft) 14.08.07 18:25
А вот зайца кому? Кому зайца? (с) м/ф "Падал прошлогодний снег"
10. Vadik (Vadik) 16.08.07 16:08
вот пытаюсь выгрузить операции которые добавил в список, т.е. не все, а определнные и у меня вываливается сообщение
ОбъектПриемник = База.CreateObject("Счет." + Объект.ПланСчетов().Идентификатор());
{C:\DOWNLOADS\BUH\BUX\OBRABOTKI\ПЕРЕНОС\ПЕРЕНОС ОБЪЕКТОВ 1.20 (OLE).ERT(280)}: 1С:Предприятие: Неудачная попытка создания объекта (Счет.): 0

хотя конфы идентичны, просто данные в них разные
11. Антон Рощин (wolfsoft) 16.08.07 22:00
(10) Большое спасибо за сообщенную ошибку.
Исправлена ошибка при выгрузке операций.
Скачайте свежий релиз 1.21
http://infostart.ru/projects/1120/download.php?file=1621
12. Vadik (Vadik) 17.08.07 15:59
странно... но вот даже после того как скачал новую версию у меня вываливается тоже самое сообщение...
ОбъектПриемник = База.CreateObject("Счет." + Объект.ПланСчетов().Идентификатор());
{C:\DOWNLOADS\BUH\BUX\OBRABOTKI\ПЕРЕНОС\ПЕРЕНОС ОБЪЕКТОВ 1.20 (OLE).ERT(280)}: 1С:Предприятие: Неудачная попытка создания объекта (Счет.): 0
13. Антон Рощин (wolfsoft) 17.08.07 16:12
(12) "ПЕРЕНОС ОБЪЕКТОВ 1.20 (OLE).ERT" - это старая версия обработки
используйте "ПЕРЕНОС ОБЪЕКТОВ 1.21 (OLE).ERT" ;)
14. Антон Рощин (wolfsoft) 17.08.07 16:34
Виноват, приношу свои извинения Vadik и тем, кто успел скачать версию 1.21.
По ошибке в архиве оказалась старая версия 1.20 :(
Обновил снова файл с версией 1.21.
15. Михаил Осадчий (maos) 20.08.07 16:32
Спасибо большое! Долго искал. Перепробовал кучу аналогов. У всех свои недостатки. Эта очень понравилась и позволила решить проблему переноса документов
16. Антон Рощин (wolfsoft) 20.08.07 23:21
(15) Вам спасибо за комментарий :)
17. Vadik (Vadik) 21.08.07 07:39
Благодарю, обработка очень выручила!!!
18. Игорь (avega) 22.08.07 10:29
жаль только что если народ работал и в источнике и приемнике то документы ЗАМЕЩАЮТСЯ :(
19. Антон Рощин (wolfsoft) 22.08.07 10:35
(18) Ну так перенос, он на то и перенос, а не обмен, это ж не УРИБД :)
Это разные задачи.
Ситуация, когда одни и те же документы изменяются двумя людьми одновременно в разных местах, это в принципе не правильная постановка учета, ибо один из них по-любому делает ненужную работу, т.е. попусту тратит свое время, ИМХО :)
20. Игорь (LordOfChaos) 30.08.07 09:10
Спасибо огромное! Надо было срочно и чудо случилось. Мир не без добрых людей, способных вот так запросто поделиться собственными наработками.
21. Антон Рощин (wolfsoft) 30.08.07 09:21
(20) Рад, что помог, спасибо за комментарий :)
22. JannyFan (JannyFan31) 05.09.07 08:22
Спасибо, очень многому можно научиться, используя такие вещи.
23. Кос (Кос) 06.09.07 12:33
Перепробовал уйму обработок - эта самая лучшая и что, пожалуй, самое важное - безошибочная.
Огромное спасибо!
24. Дмитрий (Diman23) 15.09.07 17:06
На релизе 1.21 работает все кроме:

ОбъектПриемник.Родитель = РодительОбъекта;
{D:\INSTALL\1C_TREE_77\.ВНЕШНИЕ ОТЧЕТЫ И ОБРАБОТКИ\INFOSTART\PERENOS_OLE_121\121\ПЕРЕНОС ОБЪЕКТОВ 1.21 (OLE).ERT(440)}: 1С:Предприятие: Неверное значение!

Просим поправить! В целом же реализация вполне годится.
25. Антон Рощин (wolfsoft) 15.09.07 17:59
(24) Данной информации недостаточно для определения ошибки.
На типовой ТиС выгрузка многоуровневых справочников проходит нормально, ошибку смоделировать не удалось.
26. Антон Рощин (wolfsoft) 15.09.07 18:39
+(25) Попробуйте перебросить данные вот этой обработкой Serjant-а
http://infostart.ru/projects/156/
Если не трудно, сообщите о результатах.
27. Mihenius (mihenius) 26.09.07 08:20
ОбъектПриемник.Родитель = РодительОбъекта;
{ПЕРЕНОС ОБЪЕКТОВ 1.21 (OLE).ERT(460)}: 1С:Предприятие: Неверное значение!

Такая же ошибка
28. Mihenius (mihenius) 26.09.07 09:45
ТиС 937 глючит на номенклатуре (уровней 5)
29. Mihenius (mihenius) 26.09.07 11:12
http://www.abelov.com/forum/f.php?ak=31356
Вот кстати аналогичная проблема и ее решение ... т.е. нужно завести еще одну перменную
30. Mihenius (mihenius) 26.09.07 15:19
Еще бы лучше Сообщить не использовать или чистить Окно Сообщений
А информацию скидывать в лог файл
дело в том что 1с-ка копит память ... а потом ругается что памяти не хватает ...
31. Mihenius (mihenius) 26.09.07 16:07
Еще ошибка ...
ОбъектПриемник.Новый();
{ПЕРЕНОС ОБЪЕКТОВ 1.21 (OLE).ERT(432)}: 1С:Предприятие: Неверный владелец.
32. Антон Рощин (wolfsoft) 26.09.07 22:27
(27-31) В монопольном режиме никаких подобных ошибок мной не наблюдается. Судя по ссылке, которую Вы дали в посте (29), эти ошибки возникают у Вас при попытке переноса в "не монопольном" режиме работы?
Если да, попробуйте осуществлять перенос в монопольном режиме, ошибки остаются?
33. Mihenius (mihenius) 28.09.07 11:31
Делалось все монопольно ... почему то владелец объекта не перепозиционировался.
Подумал, может его в базе приемнике нет ... смотрю есть.
Еще не понравилось снятие документов с проведения по ссылкам в предыдущем периоде ...
Дело в том, что часть этих доков может не провестись ... и полетят остатки
может сделать параметр не снимать с проведения документы с датой раньше периода переноса
34. Mihenius (mihenius) 28.09.07 11:36
В (29) я просто пробовал решить проблему сам и поискал в яндексе подобную ошибку.
Нашел ссылку, кинул вам.
Вставил в место ошибки попытку исключение
Глючит на некоторых новых товарах, кот. еще нет в базе приемнике
Проверял на дублеж товаров, дублирующих кодов не нашел
35. Mihenius (mihenius) 28.09.07 12:21
И все таки все работает нормально )
Это у нас дубль нашел у группы и элемента один код ... как такое могло случиться ...
А я на дубли проверял только сами элементы
Прога пыталась подставить в качестве родителя элемент )))))))))
Короче нужно на всякий сделать проверку чтоб родитель был папкой!
А так все обработка супер ставлю +
36. Mihenius (mihenius) 28.09.07 12:49
Вообщем стоит с параметром добавить примерно следуещее
Код
Ном = СоздатьОбъект("Справочник.Номенклатура");
Ном.ПорядокКодов();
Тек = 0;
ТекИмя = 0;
Ном.ВыбратьЭлементы(0);
Пока Ном.ПолучитьЭлемент() = 1 Цикл
    Если Тек <> Ном.Код Тогда
        Тек = Ном.Код;
   ТекИмя = Ном.Наименование;
    Иначе
   Сообщить("Дублирование кода товара - "+Тек+"="+ТекИмя +" = с = "+    Ном.Код+"="+Ном.Наименование);
   КонецЕсли;
КонецЦикла;
Показать полностью
37. Mihenius (mihenius) 28.09.07 16:10
Обработка универсальная
поэтому беру свои слова обратно (36)
Но в документации следует на всякий случай предупредить о проблемах, если будут дубли по ключам в справочниках/документах
А проверять каждый должен сам )
38. Антон Рощин (wolfsoft) 28.09.07 22:32
2 Mihenius:Спасибо за комментарии.
Честно говоря, никак не учитывал, что возможны ситуации дублей ключей синхронизации :)
В описании немного намекается на уникальность ключа синхронизации в следующем абзаце:
Также есть возможность выбора ключа синхронизации. Если у справочника нет атрибута "Код" (код нулевой длины), то, как вариант, можно для прозрачности переноса, добавить к структуре справочника реквизит "Уникальный код" и указать его в схеме переноса в качестве ключа синхронизации.
Прямым текстом действительно не написано, но в принципе это подразумевалось :)
Вообще, большое спасибо, что не бросили и разобрались в проблеме до конца.
По поводу параметра "не снимать с проведения документы с датой раньше периода переноса" - не знаю, сложно сказать. При желании добавить его не трудно, но на сколько это правильно и как определить документы, которые надо перепровести, а которые не надо? Пока наверное воздержусь от добавления, надо еще подумать (может быть каждому виду документа сделать отдельную галку...). Но проблема понятна - спасибо, будем думать :)
39. rka (rka) 01.10.07 09:31
При переносе документов из Комплексной в Комплексную в Приемнике документы вида Поступление (ОС, НМА, услуг), ВозвратПокупателю не проводяться, хотя все переноситься и пишет что все проведено.
40. Mihenius (mihenius) 01.10.07 09:50
(38) Документы то перепроводить нужно, на счет этого я не спорю
Но снимать с проведения нужно только в том периоде, кот. переносим
Т.е. делаем 2 ТЗ с доками кот. нужно перепровести
У нас просто УРиБ и в разных базах под справочники выделены свои диапазоны кодов, а вот блин почему то группа проскочила через ограничитель ...
Поэтому не хватает ЛОГА ОШИБОК для вашей обработки. В других обработках случаи с дубликатами рассматриваются ;) , но нет ссылочного переноса
41. Антон Рощин (wolfsoft) 01.10.07 10:14
(40) Будем думать и искать свободное время для доработки :)
42. rka (rka) 01.10.07 16:24
Может это только у меня...
Комплексная, при переносе документов ПоступлениеПрочее (Поступление ОС,НМА) в табличной части не заполняются данные о счете.
Видимо это потому что в документе у данных полей Тип = Неопределенный. И нужное значение рекизиту не присваивается. Нужно сначала назначить тип рекизиту, а затем уже присваивать ему значение...
Я не прав?
43. Антон Рощин (wolfsoft) 01.10.07 21:28
(42) Спасибо за сообщение. Да, Вы совершенно правильно указали причину.
Будет добавлено в следующей версии.
44. Антон Рощин (wolfsoft) 01.10.07 22:48
(42) Пожалуйста, попробуйте версию 1.22 и сообщите о результатах.
Времени не хватает для полноценного тестирования.
45. rka (rka) 02.10.07 09:10
Обработка очень понравилась!!!
Причем из огромного количества аналогов, единственная которая работает!!! Огромное спасибо!

При переносе из Комплексной возникают следующие проблемы. У некоторых документов (ПоступлениеПрочее, СписаниеТМЦ, ОприходываниеТМЦ), есть поля у которых тип Неопределенный. (Счет, субконто1, субконто2 и т.д.). Следовательно нужно смотреть, если в Источнике есть значение, то аналогичный тип присваивать Приемнику.

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

В общем и целом. Все супер буквально летает. Тип я сам подправил. Еще в принципе предусмотрел выгрузку таблицы проведенных в Источнике документов. Потом сравнивал с тем что проведено в Приемнике. Так проще выявлять проблемные. Но в целом все равно 5 баллов. И главное она работает!!! Сейчас гляну 1.22.
46. Антон Рощин (wolfsoft) 02.10.07 13:50
(45) Ага, спасибо. Сейчас глянул по возвратам, это глюк с заполнением реквизита табличной части "ВидСтатус". Сейчас подправлю, выложу следущий билд :)
47. Антон Рощин (wolfsoft) 02.10.07 14:05
48. Михаил (mdzen) 06.10.07 12:52
Пожалуй самая простая и в тоже время "неглючная" обработка переноса из множества опробованных. Очень помогает переносить изменения в тестовую базу, когда надо базу тестить или свернуть, а юзеры в тоже время на рабочей базе документы бьют. Однако +1 ( можно и +10). Спасибо автору.
49. Михаил (malutin) 09.10.07 07:51
Процедура отличная, единственная проблема, не смог перекинуть справочник цены в ТиЗ, пробовал всякими способами, и в документах, и через справочник номенклатура, и ключи менял...
50. Антон Рощин (wolfsoft) 09.10.07 09:33
(49) Дело в том, что нет ссылок на эти элементы справочника "Цены номенклатуры". Самый простой способ решения - дописать процедуру отбора элементов для справочников, подчиненных другим справочникам.
После этого отобрать все элементы справочника "Цены номенклатуры" и выгрузить их (по ключу "Тип цен").
51. Михаил (malutin) 09.10.07 14:19
52. rka (rka) 16.10.07 13:10
Комплексная при переносе Контрагентов, Договоров. Иногда возникает ситуация что движение по регистрам делается по одному контрагенту, а бух. итоги по другому. Связано это с тем (как я думаю), что движения формируются по договору, а проводки по контрагенту.
Не плохо было бы при переносе контрагентов и договоров в документах проверять владельца Договора.
53. Антон Рощин (wolfsoft) 16.10.07 20:47
(52) >Комплексная при переносе Контрагентов, Договоров. Иногда возникает ситуация что движение по регистрам делается по одному контрагенту, а бух. итоги по другому.

Какое это имеет отношение к универсальному переносу? Перенос движениями не занимается, он переносит объекты (справочники, документы и т.д.). Как эти объекты себя ведут (в том числе и при проведении) - это вопрос к конфигурации.
54. Алексей (ash2015) 17.10.07 00:04
55. Антон Рощин (wolfsoft) 17.10.07 09:00
И ТЕБЕ БХРАТ СПАСИБО :) А где плюсик?!! ;)
56. Андрей (avolk) 29.10.07 14:24
ВЕСЧ!!!!!!!!!!! СПАСИБО!!!!!!!
Из пожеланий - не плохо бы было добавить проверку на идентичность реквизитов, я понимаю что в заголовкее написано для "ИДЕНТИЧНЫХ", но в жизни бывает что в одной конфе что-то поменял, а в старой(архивной) осталось все как есть, хоть это и все решается обновлением конфигурации, но всеж хотелось бы чтоб об этом было предупреждение до загрузки, а не когда уже половина документов перекинута (а механизма транзакций нет) вылетала ошибка о неверном имени(типе) реквизита
57. Антон Рощин (wolfsoft) 29.10.07 20:36
(56) Хм.. Подумаю.. Но вообще, это такое маловероятное событие, все-таки переброска делается как правило между конкретными БД, БД эти меняются не так часто, а вот возни со сравнением этих двух БД из обработки.. В общем, подумаю, за коммент - спасибо :)
58. Андрей (avolk) 30.10.07 14:17
Зато слово "Универсальная" большее значение примет))). Не обязательно проверять сразу всю конфу на идентичность, можно просто при установке значения реквизита в базе приемнике сделать проверку на его существование и соответствие типа, и если не существует просто его пропустить с соответствующим сообщением в лог, или вообще вставить в конструкцию "попытка...исключение" без всякой проверки, главное чтоб ошибки не выдавало и из обработки на полпути не выкидывало (как я и сделал). А вообще в идеале было бы сделать все в обратную сторону, т.е. загрузку производить из базы приемника, тогда можно было бы использовать механизм транзакций, и в случае вылета ошибки просто база откатывалась бы в исходное состояние, и не приходилось бы париться с восстановлениями из архива, да и скорость бы загрузки на порядок бы увеличилась, но это я так просто губу раскатал)))).
А ВООБЩЕ ОБРАБОТКА ОЧЕНЬ ДОБРОТНО СДЕЛАНА! Я перепробывал их кучу, но эта единственная реально и быстро без особых проблем заработала. МОЛОДЕЦ! Еще раз Спасибо огромное и человеческое)))
59. swd (swd) 02.11.07 14:25
Огромное спасибо, только добавьте, пожалуйста, в описание, что для базы приемника требуется монопольный режим.
60. Антон Рощин (wolfsoft) 09.11.07 17:11
Дамы и господа, а чего не комментируем, а только "плюсуем"? ;)
61. Dmitry (Dmitry100) 12.11.07 19:49
Красивая штука. Сворачивал базу на мощном компе. Сворачивалась база сутки. Потом из рабочей в свернутую пришлось докидывать наработанные документы. Перрепробовал пяток обработок. Эта обработка меня сильно выручила. БОЛЬШОЕ СПАСИБО!
62. Dmitry (Dmitry100) 12.11.07 19:57
Вот вроде такое заметил: если в приемнике уже есть документ и он помечен на удаление, а в источнике этот документ провенден, то в приемнике он перезаполняется, но пометка на удаление не снимается. А было бы логично. Использовал версию 123.
63. Антон Рощин (wolfsoft) 12.11.07 21:41
(62) Ценное замечание. Реализовано :)
64. Владимир (vlad_klg) 13.11.07 10:11
65. Владимир Кравчук (Power Team) (krava_vlad) 13.11.07 16:12
При переносе не проводит проведеные документы (Конфигурация комплексная для Украины)
66. Антон Рощин (wolfsoft) 13.11.07 17:06
(65) Хм.. А на закладке "Настройка" галочку "Проводить документы" поставили?
67. Антон Рощин (wolfsoft) 13.11.07 17:08
68. NDeclin (NDeclin) 14.11.07 10:29
Пустые значения реквизитов типа "дата" переносятся как 30-12-1899
69. Антон Рощин (wolfsoft) 14.11.07 21:16
70. Антон Рощин (wolfsoft) 14.11.07 21:23
+(69) Там даты в общем-то передаются из источника в приемник "как есть", видимо "УстановитьАтрибут()" так отрабатывает через ОЛЕ.
71. Аркадий Кучер (Abadonna) 14.11.07 22:12
>Пустые значения реквизитов типа "дата" переносятся как 30-12-1899
А именно так и должны переноситься. Понятие ПустоеЗначение(Дата) придумано в 1С, на самом деле это переменная TDateTime=0, что как раз и соответствует дате "сотворения мира" 30 декабря 1899 года. Именно с этой даты во всех компах идет отсчет времени. OLE все правильное делает, надо на входе подшаманивать под 1С
72. Антон Рощин (wolfsoft) 14.11.07 22:54
73. Аркадий Кучер (Abadonna) 14.11.07 23:17
(72) Дык очень просто: дату в строку, если строка="30.12.1899" тогда НашаДата=ПолучитьПустоеЗначение("Дата");
74. Антон Рощин (wolfsoft) 15.11.07 08:48
(73) Попробуем, только такое чувство, что "УстановитьАтрибут()" опять переведет пустое значение в "30.12.1899".
75. Аркадий Кучер (Abadonna) 15.11.07 09:00
УстановитьАтрибут() тут не при чем, он как раз и устанавливает то, что приехало с ОЛЕ (30.12.1899). Ты перед установкой переведи в пустую дату, УстановитьАтрибут() и установит пустую.
76. Антон Рощин (wolfsoft) 15.11.07 20:08
(75) Чувствую недопонимание, попробую пояснить:
Код
ОбъектПриемник.УстановитьАтрибут(РеквизитИдентификатор,
   Объект.ПолучитьАтрибут(РеквизитИдентификатор));
Показать полностью

Объект - это объект текущей БД-источника
ОбъектПриемник - это объект БД-приемника
УстановитьАтрибут() - это метод БД-приемника, в который передается обычная "дата" текущей БД-источника, которая и является "пустой".
77. Аркадий Кучер (Abadonna) 16.11.07 07:00
Никакого недопонимания! Просто надо разбить твой код на 2 части:
Код
ТекАтрибут=Объект.ПолучитьАтрибут(РеквизитИдентификатор);
Если ТипЗначения(ТекАтрибут)=3 Тогда //дата
 Если Строка(ТекАтрибут)="30.12.1899" Тогда
  ТекАтрибут=ПолучитьПустоеЗначение("Дата");
 КонецЕсли;
КонецЕсли;
ОбъектПриемник.УстановитьАтрибут(РеквизитИдентификатор,ТекАтрибут);
Показать полностью
78. Аркадий Кучер (Abadonna) 16.11.07 07:11
А ваще щас гляну твой код, а то может я не про то... :))))
79. Аркадий Кучер (Abadonna) 16.11.07 07:16
А.. я думал ты а Приемнике запускаешь, а оказывается наоборот, в источнике... тады другое дело... бум посмотреть
80. Аркадий Кучер (Abadonna) 16.11.07 08:15
Проверил, вот так работает правильно, добавка в коде установки реквизитов шапки доков
Код
   // устанавливаем реквизит
         ОбъектПриемник.УстановитьАтрибут(РеквизитИдентификатор,
               ОпределитьОбъект(Объект.ПолучитьАтрибут(РеквизитИдентификатор)));
         //--- добавлено АК----------------      
         УстАтрибут=ОбъектПриемник.ПолучитьАтрибут(РеквизитИдентификатор);      
         Если ТипЗначения(УстАтрибут)=3 Тогда
            Предупреждение("Дата!");
            Если УстАтрибут=Дата("30.12.1899") Тогда
               Предупреждение("Кривая");
               ОбъектПриемник.УстановитьАтрибут(РеквизитИдентификатор,ПолучитьПустоеЗначение());
            КонецЕсли;
         КонецЕсли;
         //----------------------------------------------------
Показать полностью
81. Антон Рощин (wolfsoft) 16.11.07 08:38
2 Abadonna: Убедил :) Как появится время, исправлю и протестирую. Спасибо :)
82. Аркадий Кучер (Abadonna) 16.11.07 09:14
Кстати, до этого твои коды не смотрел, понравилось, что стиль программирования один в один мой, т.е. правильный :)))))))))))))))))
83. Антон Рощин (wolfsoft) 16.11.07 19:56
84. Антон Рощин (wolfsoft) 16.11.07 23:13
Релиз 1.25
Замечание от NDeclin:
"Пустые значения реквизитов типа "дата" переносятся как 30-12-1899."
Исправлено.
85. Антон Рощин (wolfsoft) 16.11.07 23:15
Блин, забыл упомянуть про неоценимую помощь Abadonna! :)
86. Аркадий Кучер (Abadonna) 17.11.07 01:04
Если ПустоеЗначение(Объект) = 1 Тогда
Возврат ПолучитьПустоеЗначение();
А красиво вышло ;))))
87. Антон Рощин (wolfsoft) 17.11.07 07:55
(86) Главный вывод из твоего кода - пустое значение типа "дата" передается не совсем корректно, а пустое значение неопределенного типа нормально передается. Вот и "подсунул" в нужном месте замену.
;)
88. Аркадий Кучер (Abadonna) 17.11.07 08:49
(87) Мне просто лень было поискать, где в твоем коде оно в одном месте лежит ;)
А мысля такая же была
89. Антон Рощин (wolfsoft) 17.11.07 21:14
90. Аркадий Кучер (Abadonna) 30.11.07 19:06
Дружно поздравляем Антоху (wolfsoft): на сей секунд рейтинг ровно 1000
91. Антон Рощин (wolfsoft) 30.11.07 19:18
(90) Спасибо! Правильно, поздравим дружным голосование за разработки! :))
92. Alister (Alister) 10.12.07 19:43
Большое спасибо за Вашу разработку ! Очень мне на днях помогла - все четко и ясно !
93. PRAZA (praza) 12.12.07 10:00
94. Антон Рощин (wolfsoft) 12.12.07 15:29
(93) Если Вам понравилась программа, то не поленитесь, проголосуйте за нее - этим Вы доставите большую радость разработчику, приблизите его на один шаг к его мечте - обогнать по рейтингу CheBurashku ! :)))
spryn; leontiy; +2 Ответить
95. Darex (TIG-PROGRAMMIST) 28.01.08 22:38
А добавь туда плиз крючечек что бы можно было открывать не монопольно базу приемника.....
96. Антон Рощин (wolfsoft) 15.02.08 21:55
97. Kapitan911 Юрий (Kapitan911) 28.02.08 22:09
Перносим из ЗиК281 в ЗиК281 один документ "БольничныйЛист". Получаем ошибку:
Начата выгрузка:
Справочник: вид "Сотрудники"; Лысенко --> ОК.
Справочник: вид "ВидыСубконто"; КБК --> ОК.
Справочник: вид "ВидыСубконто"; КОСГУ --> ОК.
Справочник: вид "ИсточникиФинансирования"; Бюджет --> ОК.
Справочник: вид "ПланСчетов"; 401.01.1 --> ОК.
Справочник: вид "ВидыСубконто"; Сотрудники --> ОК.
Справочник: вид "ПланСчетов"; 302.01.1 --> ОК.
Справочник: вид "ЗначенияСубконто"; 92407024210000327 / / ВСШ и Школы --> ОК.
Справочник: вид "ЗначенияСубконто"; 200 Расходы --> ОК.
Справочник: вид "ЗначенияСубконто"; 210 Оплата труда и начисления на оплату труда --> ОК.
Справочник: вид "ЗначенияСубконто"; 211 Заработная плата --> ОК.
Справочник: вид "ЗначенияСубконто"; 213 Начисления на оплату труда --> ОК.
Справочник: вид "ЗначенияСубконто"; 700 Увеличение обязательств --> ОК.
Справочник: вид "ЗначенияСубконто"; 730 Увеличение прочей кредиторской задолженности --> ОК.
Справочник: вид "Балансодержатели"; ВСШ-6 --> ОК.
Справочник: вид "ШаблоныПроводок"; _Зарплата ВСШ-6 --> ОК.
Справочник: вид "ОКАТО"; 20401000000 --> ОК.
Справочник: вид "Подразделения"; ВСШ-6 --> ОК.
Справочник: вид "Должности"; Директор --> ОК.
Справочник: вид "ОКИН"; Работающий на постоянной работе --> ОК.
ОбъектПриемник = База.Календари.ПолучитьАтрибут(Объект.Идентификатор());
{D:\1С\ПЕРЕНОС\125\ПЕРЕНОС ОБЪЕКТОВ 1.25 (OLE).ERT(241)}: Поле агрегатного объекта не обнаружено (Идентификатор)
98. Антон Рощин (wolfsoft) 29.02.08 09:03
Господа, свои вопросы по данной разработке задавайте здесь
http://www.1partner.nnov.ru/forum/index.php?fid=3&id=120082323675
Kapitan911, спасибо за сообщение. Ситуация будет смоделирована и проверена.
Ответ смотри позже на форуме разработчиков.
99. Антон Рощин (wolfsoft) 29.02.08 14:33
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа