v7: Сделать конфигурацию потомком

  1. 10 г. назад

    Есть база в одном филиале, и есть поставщики, кто эту базу пишут. Пару месяцев назад мне дали простое задание - обновить конфигурацию этой базы. Я, по старой привычке, обновил базу простым объединением (сравнить-объединить). Вчера мне опять дали задание обновить эту базу. И на этот раз строго настрого наказали делать обновление через "Загрузить измененную конфигурацию".
    Понятно, что база не является потомком, но загрузить в принципе можно. Но, теперь не получается:
    -image-
    Как я понимаю, у документа ЛимитБонусовАкций внутренний идентификатор текущей базы отличается от идентификатора загружаемой. Поэтому, он пытается удалить существующий объект конфигурации Документ.ЛимитБонусовАкций и добавить новый, но не может этого сделать, т.к. есть уже введенный документ.
    Да, такой документ есть, он один с одной строкой. В принципе, можно было бы удалить его и ввести заново. Но, там хитрая система проверок при проведении документа, и, возможно, мне не удастся его создать даже программно.

    В общем, можно ли как-то привести конфигурацию к тому виду, как загружаемая, сделать её опять потомком?
    ЗЫ
    К поставщикам обратиться не предлагайте - будет скандал

    Ответы: (1) (24)
  2. (0) имхо, можно:
    1. делаешь отдельную базу из конфы поставщика текущей.
    2. объединяешь через сравнение со своей.
    3. получаешь md который загружаешь на свою рабочую (с движениями)
    4. далее заработает:

    1Сергей делать обновление через "Загрузить измененную конфигурацию".

    Ответы: (2)
  3. (1) что-то не уверен, что взлетит. Надо попробовать

  4. 19.11.2014 07:47:24 отредактировано Дядя Вася

    А поменять внутренние идентификаторы не предлагать? Разобрать gcomp'ом md с рабочей и тот же релиз поставщика. Изменить в рабочей как надо, собрать. Переименовать его дфб-ки в соответствии, переименовать поля в таблицах дбф-редактором. Удалить словарь данных 1cv7.dd и создать заново. Профит.

    Ответы: (4) (6)
  5. (3) кстати клевый конструктор был...делай что хочешь...а в 8 так не сделаешь да??? не сталкивался еще...

    Ответы: (5)
  6. (4) Пока только посмотреть вроде.

  7. (3) SQL

    Ответы: (8)
  8. я вот думаю, для начала сравнить DDS-файлы, чтобы выявить разницу

    Ответы: (9)
  9. (6) ну и что что СКЛ? Выгрузить, загрузить в дбф формате, сделать все что надо, опять загрузить в скл формате.

    Ответы: (10) (11)
  10. 19.11.2014 07:57:14 отредактировано Дядя Вася

    (7) Там ее будет больше чем тебе надо. Создали десяток новых объеков, а используют один. Неиспользуемые загрузка сама заменит, поэтому проще пробовать и править на чем споткнется. Еще один нюанс - ссылки на доки тоже изменятся. Как минимум в журналах. В смысле есть они как минимум в журналах, изменятся-то все какие есть. Надо оные тоже найти и исправить будет.

    Ответы: (13)
  11. (8) Зачем усложнять? В энтерпрайзе исправить значит, а не в дбф-редакторе. Принцип тот же.

  12. (8) Слушай, если база в SQL, то шансы что она загрузиться в DBF стремятся к нулю

    Ответы: (15)
  13. а если и загрузиться, то через несколько суток только

    Ответы: (14)
  14. (9) вот-вот гемор ещё тот

    Ответы: (17)
  15. (12) Да не нужно это, зачем... Так же точно правится. Главное структуру таблиц нагугли, посмотри из чего состоит ссылка на док в журналах и не в журналах. Поиск ссылок на объект прогони по каждому доку, если есть не в журналах покажет.

    Ответы: (16)
  16. (11) Даже большая база выгружается вполне успешно, в случае слишком больших баз есть всякие решения вроде компоненты ромикса. Но если с этим геморрой то да, надо поискать решения попроще.

  17. (14) док всего один. Ссылок на него, вроде нет. Значит, его надо искать только в 1SJOUR?

    Ответы: (19)
  18. (13) Да может и нет никакого гемора. Если этот док появился два месяца назад, думаю их там один-два всего. В базу-то глянь. Кстати если они несложные тупой и простой способ - сделать копию, удалить в ней эти документы, обновить загрузкой, забить документы. Сделать копию рабочей :)

    Ответы: (19) (21)
  19. хотя, у него вроде, движения какие-то есть

    Ответы: (20)
  20. (16) Тогда (17), быстрее будет. За сколько ты его пересоздашь-то? Минут 15, и все штатно.

  21. (18) И чо? Проведешь и будут. Тоже легко проверить через копию. Сделать непроведенным, провести и сравнить с рабочей движения, изменились или нет.

  22. (17) я же писал, что штатно его не создать, там куча проверок на период, пользака и прочее... И я не уверен, что программно удастся его создать

    Ответы: (22)
  23. (21) Закомментировать кучу проверок, создать, раскоментировать кучу проверок, чего как маленький :) Пользака можешь использовать и нужного, без бубнов.

    Ответы: (23)
  24. (22) как только я вношу изменения, конфигурация перестает быть потомком. Или ты предлагаешь варварскую подмену МД?

    Ответы: (29)
  25. 1Сергей и, возможно, мне не удастся его создать даже программно

    и почему же?

    Ответы: (27)
  26. по сути, вопрос задан неверно. нужно не "Сделать конфигурацию потомком", а "Сделать конфигурацию предком"

    Ответы: (26) (32)
  27. (25) нутыпонел )

  28. (24) куча всяких проверок. Например, на системную дату

    Ответы: (28) (30)
  29. (27) Не совсем понимаю, что мешает удалить документ, обновить базу, а потом перенести этот документ из копии универсалом или универсамом.

  30. 19.11.2014 08:38:22 отредактировано Дядя Вася

    1Сергей как только я вношу изменения, конфигурация перестает быть потомком.

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

    Ответы: (31)
  31. 1Сергей Например, на системную дату

    о, жесть. за это надо колотушкой по рукам бить

    Ответы: (40)
  32. (29) суть в том, что при объединении смотрятся имена объектов, а при загрузке - уиды

    Ответы: (33)
  33. (25)

    Ты не мудри, ты пальцем покажи :)

    Структуру надо в соответствие типовой привести, чтобы иды совпадали. А предки-потомки понятие условное.

  34. (31) И чо? Речь о том чтобы внести комментарии в типовой конфигурации, а не измененной объединением, чтобы тот док воссоздать обойдя проверки. Это не преступление, поставил комментарии, снял потом - ничего страшного, следующий релиз нормально загрузится.

    Ответы: (34)
  35. (33) не понял про комментарии

    Ответы: (35)
  36. (34) У него по структуре сейчас отличий по одному документу. В базе он тоже один. Надо его просто снести, удалить из метаданных, загрузить новый релиз и забить документ заново. Забить не дают проверки в модуле формы. Он боится их закоментировать, думая что после этого загрузка следующего релиза не пройдет. Зря боится. Пройдет.

    Ответы: (36)
  37. (35) он боится не этого, а того, что не сможет воспроизвести идентичный док с движениями

    Ответы: (37)
  38. 19.11.2014 08:52:18 отредактировано Дядя Вася

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

    Ответы: (40)
  39. у меня пока копируется архив с филиала, потому я ничего ещё не делаю. Просто рассуждаю.
    А вообще спасибо! думал, что проверка на наследственность проверяется иначе

    Ответы: (39)
  40. (38) Тогда бы сразу ругалась, а она загружается пока не споткнется.

  41. Дядя Вася А в семерке такого понятия вообще нет, лишь бы иды совпадали

    да в курсе я. вопрос с движухой остаётся.

    кстати, я вот не понял, если логика проведения зависит от системной даты - что будет, если док тупо перепроведут в базе?

    andrewks за это надо колотушкой по рукам бить

    Ответы: (41)
  42. andrewks да в курсе я. вопрос с движухой остаётся.

    Да вообще не вопрос. Сравнить-то что мешает? Да исправить изменив на время обработку проведения, или просто в скуле руками. Ссылки если правильные, только даты какие отличаются да цифры.

  43. Всем огромное спасибо!
    Всё получилось простым способом. Выгрузил документ в текстовый файл, удалил, обновил конфигурацию, загрузил документ из файла.

    Процедура Выгрузить()
    	
    	Если ВыбДокумент.Выбран() = 0 Тогда
    		Возврат;
    	КонецЕсли;
    	
    	ВидДокумента = ВыбДокумент.Вид();
    	
    	ДанныеДокумента = СоздатьОбъект("СписокЗначений");
    	
    	ДанныеДокумента.Установить("Вид", ВыбДокумент.Вид());
    	ДанныеДокумента.Установить("ДатаДок", ВыбДокумент.ДатаДок);
    	ДанныеДокумента.Установить("НомерДок", ВыбДокумент.НомерДок);
    	ДанныеДокумента.Установить("Проведен", ВыбДокумент.Проведен());
    	ДанныеДокумента.Установить("ПометкаУдаления", ВыбДокумент.ПометкаУдаления());
    	                  
    	ВремяДокЧас = 0;
    	ВремяДокМин = 0;
    	ВремяДокСек = 0;
    	ВыбДокумент.ПолучитьВремя(ВремяДокЧас, ВремяДокМин, ВремяДокСек);
    	
    	ДанныеДокумента.Установить("ВремяДокЧас", ВремяДокЧас);
    	ДанныеДокумента.Установить("ВремяДокМин", ВремяДокМин);
    	ДанныеДокумента.Установить("ВремяДокСек", ВремяДокСек);
    	
    	Для Идн=1 По Метаданные.Документ(ВидДокумента).РеквизитШапки() Цикл
    		
    		ИмяРеквизита = Метаданные.Документ(ВидДокумента).РеквизитШапки(Идн).Идентификатор;
    		Значение = ВыбДокумент.ПолучитьАтрибут(ИмяРеквизита);
    		
    		ДанныеДокумента.Установить(ИмяРеквизита, Значение);
    		
    	КонецЦикла;
    	
    	ТабличнаяЧасть = СоздатьОбъект("ТаблицаЗначений");
    	ВыбДокумент.ВыгрузитьТабличнуюЧасть(ТабличнаяЧасть);
    	ДанныеДокумента.Установить("ТабличнаяЧасть", ТабличнаяЧасть);
    	
    	ЗначениеВФайл(ИмяФайла, ДанныеДокумента);
    	
    КонецПроцедуры
    
    //======================================================================
    Процедура Загрузить()
    	
    	Если ПустаяСтрока(ИмяФайла) = 1 Тогда
    		Возврат;
    	КонецЕсли;
    	
    	ДанныеДокумента = СоздатьОбъект("СписокЗначений");
    	
    	ЗначениеИзФайла(ИмяФайла, ДанныеДокумента);
    	
    	Документ = СоздатьОбъект("Документ." + ДанныеДокумента.Получить("Вид"));
    	Документ.Новый();
    	
    	Для Идн = 1 по ДанныеДокумента.РазмерСписка() Цикл
    		
    		ИмяРеквизита = "";
    		Значение = ДанныеДокумента.ПолучитьЗначение(Идн, ИмяРеквизита);
    		
    		Если ИмяРеквизита = "Вид" Тогда
    			Продолжить;
    		ИначеЕсли ИмяРеквизита = "Проведен" Тогда
    			Продолжить;
    		ИначеЕсли ИмяРеквизита = "ПометкаУдаления" Тогда
    			Продолжить;
    		ИначеЕсли ИмяРеквизита = "ВремяДокЧас" Тогда
    			Продолжить;
    		ИначеЕсли ИмяРеквизита = "ВремяДокМин" Тогда
    			Продолжить;
    		ИначеЕсли ИмяРеквизита = "ВремяДокСек" Тогда
    			Продолжить;
    		ИначеЕсли ИмяРеквизита = "ТабличнаяЧасть" Тогда
    			Документ.ЗагрузитьТабличнуюЧасть(Значение);
    		Иначе
    			Документ.УстановитьАтрибут(ИмяРеквизита, Значение);
    		КонецЕсли;
    		
    	КонецЦикла;
    	
    	Документ.Записать();
    	Документ.УстановитьВремя(ДанныеДокумента.Получить("ВремяДокЧас"), ДанныеДокумента.Получить("ВремяДокМин"), ДанныеДокумента.Получить("ВремяДокСек"));
    	Если ДанныеДокумента.Получить("Проведен") = 1 Тогда
    		Документ.Провести();
    	ИначеЕсли ДанныеДокумента.Получить("ПометкаУдаления") = 1 Тогда
    		Документ.Удалить(0);
    	КонецЕсли;
    	
    КонецПроцедуры // Загрузить
    
    Процедура Удалить()
    	
    	Если ВыбДокумент.Выбран() = 0 Тогда
    		Возврат;
    	КонецЕсли;
    	
    	Если Вопрос("Вы действительно хотите удалить Документ?", "Да+Нет+Отмена")<>"Да" Тогда
    		Возврат;
    	КонецЕсли;
    	
    	Документ = СоздатьОбъект("Документ." + ВыбДокумент.Вид());
    	Если Документ.НайтиДокумент(ВыбДокумент) = 1 Тогда
    		Документ.Удалить();
    	КонецЕсли;
    	
    КонецПроцедуры // Удалить
    

или зарегистрируйтесь чтобы ответить!