Добрый день. Прошу помочь с такой вот проблемой, при последнем обновлении базы ПУБ во всех документах пропали ссылки на документ основание, причём в комментариях к документу название документа основания остались, а вот ссылки пропали...есть ли какой-либо способ восстановить ссылки, кроме ручного перепроведения, ибо на этой уйдёт полжизни.
По теме из базы знаний
- KPI : Сдельно-премиальная мотивация программиста 1С + взгляд работодателя + ссылка на статью по теме
- Эффективный управленческий учет как цель автоматизации
- Вскрытие статического анализа кода проектов 1С
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
- Настройка истории изменений. Подключение новых объектов (которых нет в списке) к системе версионирования (БСП) без изменения конфигурации
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Есть - вернуться к архиву до обновления и посмотреть что там изменилось в реквизите "ДокументОснование" после обновления,"Тип объекта" и в конфигурации обновления установить такой же тип, тогда после обновления он не пропадет.
(3) Sergius79, (16) Hydromix,
В типовой ПУБ ДокументОснование - ОБЩИЙ реквизит, если у (1) он превратился в реквизит КАЖДОГО документа - надо искать причину и восстанавливать типовую конфу, иначе проблемы только начинаются и восстановление ссылок (а может и не только) станет увлекательным периодическим аттракционом.
В типовой ПУБ ДокументОснование - ОБЩИЙ реквизит, если у (1) он превратился в реквизит КАЖДОГО документа - надо искать причину и восстанавливать типовую конфу, иначе проблемы только начинаются и восстановление ссылок (а может и не только) станет увлекательным периодическим аттракционом.
(10) Sergius79,
1) не факт что комментарий не меняли
2) зато облегчается позиционирование на документе-основании через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр
3) обрабатка выбрасывания пишется за 10 мин, по вбрасыванию чуть дольше. А парсить строки комментария и потом искать по номеру документа? А если номер поменялся?
1) не факт что комментарий не меняли
2) зато облегчается позиционирование на документе-основании через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр
3) обрабатка выбрасывания пишется за 10 мин, по вбрасыванию чуть дольше. А парсить строки комментария и потом искать по номеру документа? А если номер поменялся?
Процедура Выгрузка()
Таб = СоздатьОбъект("Таблица");
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы();
М1=0;
Пока Док.ПолучитьДокумент()=1 Цикл
М1=М1+1;
Таб.Область(М1,1).Текст=ЗначениеВСтрокуВнутр(Док.ТекущийДокумент());
Таб.Область(М1,2).Текст=ЗначениеВСтрокуВнутр(Док.ДокументОснование);
КонецЦикла;
Таб.Записать("Файл1.mxl");
КонецПроцедуры
Процедура Загрузка()
Таб=СоздатьОбъект("Таблица");
Таб.Открыть("Файл1.mxl");
Док = СоздатьОбъект("Документ");
Для М1=1 По Таб.ВысотаТаблицы() Цикл
ТекДокумент = ЗначениеИзСтрокиВнутр(Таб.Область(М1,1).Текст);
ДокОснование = ЗначениеИзСтрокиВнутр(Таб.Область(М1,2).Текст);
Если Док.НайтиДокумент(ДокОснование) = 1 Тогда
Если Док.НайтиДокумент(ТекДокумент) = 1 Тогда
Док.ДокументОснование = ДокОснование;
Док.Записать();
КонецЕсли;
КонецЕсли;
КОнецЦикла;
КонецПроцедуры
Показатькак-то так...
//выгрузка
Процедура Сформировать()
Табл=СоздатьОбъект("ТаблицаЗначений");
Табл.НоваяКолонка("Документ",,,,,,,);
Табл.НоваяКолонка("ДокументОснование",,,,,,,);
Док=СоздатьОбъект("Документ");
Док.ВыбратьДокументы(НачДата,КонДата);
Пока Док.ПолучитьДокумент()=1 Цикл
Если Док.ДокументОснование.Выбран()=1 Тогда
Табл.НоваяСтрока();
Табл.Документ=Док.ТекущийДокумент();
Табл.ДокументОснование=Док.ДокументОснование;
КонецЕсли;
КонецЦикла;
ЗначениеВФайл("C:\doc.txt",Табл,);
КонецПроцедуры
Процедура Сформировать()
Табл=СоздатьОбъект("ТаблицаЗначений");
Табл.НоваяКолонка("Документ",,,,,,,);
Табл.НоваяКолонка("ДокументОснование",,,,,,,);
Док=СоздатьОбъект("Документ");
Док.ВыбратьДокументы(НачДата,КонДата);
Пока Док.ПолучитьДокумент()=1 Цикл
Если Док.ДокументОснование.Выбран()=1 Тогда
Табл.НоваяСтрока();
Табл.Документ=Док.ТекущийДокумент();
Табл.ДокументОснование=Док.ДокументОснование;
КонецЕсли;
КонецЦикла;
ЗначениеВФайл("C:\doc.txt",Табл,);
КонецПроцедуры
//загрузка
Процедура Сформировать()
НачатьТранзакцию();
Табл=СоздатьОбъект("ТаблицаЗначений");
ЗначениеИзФайла("C:\doc.txt",Табл,);
Док=СоздатьОбъект("Документ");
Табл.ВыбратьСтроки();
Пока Табл.ПолучитьСтроку()=1 Цикл
Если Док.НайтиДокумент(Табл.Документ)=1 Тогда
Док.ДокументОснование=Табл.ДокументОснование;
Док.Записать();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецПроцедуры
Процедура Сформировать()
НачатьТранзакцию();
Табл=СоздатьОбъект("ТаблицаЗначений");
ЗначениеИзФайла("C:\doc.txt",Табл,);
Док=СоздатьОбъект("Документ");
Табл.ВыбратьСтроки();
Пока Табл.ПолучитьСтроку()=1 Цикл
Если Док.НайтиДокумент(Табл.Документ)=1 Тогда
Док.ДокументОснование=Табл.ДокументОснование;
Док.Записать();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецПроцедуры
У меня только Украинские варианты, так что мне тяжело судить какой мочей 1Совцам прибило мозг так делать, или автор где-то нашел свое обновление, но мне тоже кажется что данный поступок по отношению к общему реквизиту документа является не гуманным и автор таких изменений просто обязан на этой конфе женится. :)
(19) Sergius79,
+100
1Совцы этого точно не делали, в последнем релизе (327) всё как было. Либо автор взял где-то непонятно кем перековерканный md, либо у него в конфе не всё хорошо было ДО обновления и реквизит добавился ко всем
автор таких изменений просто обязан на этой конфе женится. :)
+100
1Совцы этого точно не делали, в последнем релизе (327) всё как было. Либо автор взял где-то непонятно кем перековерканный md, либо у него в конфе не всё хорошо было ДО обновления и реквизит добавился ко всем
То что я скачал перековерканный МД это скорее всего ближе к истине, так как ранее с конфой был полный порядок. Законное раположение ДокументОснование я вернул в Общие реквизиты, (а то когда увидел его в каждом документе, мягко говоря был в шоке:)) но эта манипуляция не вернула ссылки на документы основания. Последний архив базы делался около недели назад, его сотворил наш сисадмин и благополучно слился на больничный. За эту неделю в базе поработать уже успели изрядно, и если я откачу её на целую неделю, недовольных будет очень много, так что это не вариант. Те две обработки что мне предложили, я благополучно применил и ссылки ожили, но опять же последняя неделя осталась без них.. Так вот, к чему это я, можно ли создать такую обработку, которую предложил мне выше Sergius79, то есть которая будет считывать инфу из комментария к документу и на его основе создавать ссылку на документ основание, ибо эта инфа точно не менялась никем, посему это сейчас наиболее оптимальный вариант для меня.
Допустим в документе Счет-фактура выданный № 3924 от 16.01.12 стоит комментарий - Введен на основании Реализация 3912 (16.01.12). Либо документ Реализация № 3950 от 16.01.12 стоит комментарий - Введен на основании: Заявка от покупателя №2830 от 15.01.2012г. Как-то так.
(23) Hydromix, Можно конечно, надо только абсолютно точно знать:
1. Какие именно документы Вы хотите править ?
2. На основании какого именно вида документов они вводились ?
3. Как точно пишется комментарий - в Вашем примере в одном случае есть "№", в другом - нет, это действительно так ? В одном случае дата в скобках и ДД.ММ.ГГ, в другом - после предлога "от" и в ином формате.
Можно конечно создать и универсальную обработку - чтоб проверяла все возможные варианты даты, чтоб ичкала вид документа по синониму и т.п., но это усложнит на порядок.
1. Какие именно документы Вы хотите править ?
2. На основании какого именно вида документов они вводились ?
3. Как точно пишется комментарий - в Вашем примере в одном случае есть "№", в другом - нет, это действительно так ? В одном случае дата в скобках и ДД.ММ.ГГ, в другом - после предлога "от" и в ином формате.
Можно конечно создать и универсальную обработку - чтоб проверяла все возможные варианты даты, чтоб ичкала вид документа по синониму и т.п., но это усложнит на порядок.
Вообще по идее важна только связка счета-фактуры выданные и реализация, остальные не так важны, так вот между этой связкой стоит именно такой комментарий какой я написал выше, именно в таком виде и он ни в одном документе данной связки не видоизменяется.
Проблема по прежнему актуальна, обработка, которая из инфы в комментарии восстановит документы основания нужна как воздух, всего лишь неделя - период пропавших документов, а их там около 4-5 тысяч, восстанавливать это руками просто никакого времени нет. Может кто-то из знающих людей посодействует в написании данной обработки?
(26) Hydromix, как-то так
Процедура Сформировать()
Док = СоздатьОбъект("Документ.СчетФактура");
// сюда вставим даты начала и конца поиска
// ДатаНач =
// ДатаКон =
// или вынесем их в диалог на форму
Док.ВыбратьДокументы(ДатаНач,ДатаКон);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.ДокументОснование.Выбран()=1 Тогда
// основание есть - пропускаем
Продолжить;
Иначе
Комментарий = Док.Комментарий;
// Введен на основании Реализация 3912 (16.01.12)
ВыделенныйНомер = Сред(Комментарий,32,4);
// считаем для простоты, что во всех документах так - 4 символа начиная с 32-го
// если нет - надо более "интеллектуальное" выделение
ДокОсн = СоздатьОбъект("Документ.РеализацияПродукции");
Если ДокОсн.НайтиПоНомеру(ВыделенныйНомер,Док.ДатаДок)=1 Тогда
// ищется в диапазоне уникальности от датадок - для реализации это год, если Вы ничего не меняли, т.е. будет искать в этом году
Док.ДокументОснование = ДокОсн.ТекущийДокумент();
Док.Записать();
Иначе
Сообщить("Для СФ № "+Док.НомерДок+" от "+Док.ДатаДок+" не найдено основание № "+ВыделенныйНомер);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Не забудьте сделать архив !!!!!!!!!!!!
Процедура Сформировать()
Док = СоздатьОбъект("Документ.СчетФактура");
// сюда вставим даты начала и конца поиска
// ДатаНач =
// ДатаКон =
// или вынесем их в диалог на форму
Док.ВыбратьДокументы(ДатаНач,ДатаКон);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.ДокументОснование.Выбран()=1 Тогда
// основание есть - пропускаем
Продолжить;
Иначе
Комментарий = Док.Комментарий;
// Введен на основании Реализация 3912 (16.01.12)
ВыделенныйНомер = Сред(Комментарий,32,4);
// считаем для простоты, что во всех документах так - 4 символа начиная с 32-го
// если нет - надо более "интеллектуальное" выделение
ДокОсн = СоздатьОбъект("Документ.РеализацияПродукции");
Если ДокОсн.НайтиПоНомеру(ВыделенныйНомер,Док.ДатаДок)=1 Тогда
// ищется в диапазоне уникальности от датадок - для реализации это год, если Вы ничего не меняли, т.е. будет искать в этом году
Док.ДокументОснование = ДокОсн.ТекущийДокумент();
Док.Записать();
Иначе
Сообщить("Для СФ № "+Док.НомерДок+" от "+Док.ДатаДок+" не найдено основание № "+ВыделенныйНомер);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Не забудьте сделать архив !!!!!!!!!!!!
Если есть резервная копия и если от неё далеко не ушли, то проще вернуться. Потом ввести реквизит ДокументОснование1 не как общий, с помощью обработки в несколько строк его заполнить, потом удалить общий реквизит ДокументОснование и только после этого переименовать ДокументОснование1 в ДокументОснование. Если возвращаться к резервной копии уже поздно, но она всё же есть, можно перетянуть через OLE или через выгрузку-загрузку, совместив документы, например, по номеру и дате. В принципе, на так сложно. А если нет резервной копии, то поможет только шаманский бубен.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот