• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Ошибка после доработки документа

  • Автор темы Спартак
  • Дата начала
С

Спартак

Доброго времени суток!!!
Помогите, а то уже всю голову сломал. В-общем такая ситуация. Используем 1С 7.7 бух 504 релиз (не обновляю, ибо сильно много изменений, а к глюкам привыкли уже). Так вот... есть самописный документ, который формирует проводку Дт 73.3 Кт 62.1. Вот его обработка проведения
Код:
Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл

Операция.НоваяПроводка();
Операция.Д*цензура*.Счет = СчетПоКоду("73.3",ПланыСчетов.Основной);
Операция.Д*цензура*.Сотрудники = Сотрудник;
Операция.Кредит.Счет = СчетПоКоду("62.1",ПланыСчетов.Основной);
Операция.Кредит.Контрагенты = Контрагенты;
Операция.Кредит.Договоры = Договоры;
Операция.Сумма = Сумма;

КонецЦикла;

Операция.СуммаОперации = Итог("Сумма");
Операция.Записать();

КонецПроцедуры
Сегодня главбух сказал, что, начиная с ноября документ должен делать проводку Дт 73.3 Кт 76.5. Я исправил в тестовой копии обработку проведения и протестил ее. Код:
Код:
Процедура ОбработкаПроведения()


ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл

Операция.НоваяПроводка();
Операция.Д*цензура*.Счет = СчетПоКоду("73.3",ПланыСчетов.Основной);
Операция.Д*цензура*.Сотрудники = Сотрудник; 
Если ДатаГод (ДатаДок) > 2009 Тогда
Операция.Кредит.Счет = СчетПоКоду("76.5",ПланыСчетов.Основной); 
Иначе
Если ДатаГод (ДатаДок) < 2009 Тогда
Операция.Кредит.Счет = СчетПоКоду("62.1",ПланыСчетов.Основной);
Иначе
Если ДатаМесяц (ДатаДок) > 10 Тогда
Операция.Кредит.Счет = СчетПоКоду("76.5",ПланыСчетов.Основной); 
Иначе
Операция.Кредит.Счет = СчетПоКоду("62.1",ПланыСчетов.Основной);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Операция.Кредит.Контрагенты = Контрагенты;
Операция.Кредит.Договоры = Договоры;
Операция.Сумма = Сумма;

КонецЦикла;

Операция.СуммаОперации = Итог("Сумма");
Операция.Записать();

КонецПроцедуры
Все замечательно работает. НО!!! Дальше делаю конфигуратор -> загрузить измененную конфигурацию. Он загружает, а при запуске выдает подряд 2 ошибки, которые на рисунке.
Подскажите, в чем может быть проблема??
 

Вложения

  • __________.JPG
    __________.JPG
    13,7 КБ · Просмотры: 370
G

Gman

Попробуйте сделать тестирование и исправление. Если это не поможет удалите этот документ и скопируйте его из тестовой копии.
 
С

Спартак

Тестирование и исправление заканчивается ошибкой невозможности восстановления.

Я уточню... как сделать так, чтобы все работало, я знаю... просто поменяю обработку проведения в живой базе и все. Это не критично, да и копии делаются регулярно. Меня интересует ПОЧЕМУ происходит эта ошибка??? Ведь структура никак не поменялась, никаких новых элементов не добавлялось... просто поменялась обработка проведения
 
S

SeverBap

Это от твоего кода не зависило, просто база глюканула по справочнику и документу, скорее всего тебе надо проверить эти dbf на ошибки на этом форуме было такое как-то! проще говоря тебе надо сделать переиндексацию! необходимо удалить файлы с расширением *.cdx - вот тебе и переиндексация!
 
С

Спартак

Bap
попробовал - не помогло.
Попробовал сделать тестирование и исправление до того, как записываю новую конфигу - получаю вот какие ошибки:
!!Словарь данных не соответствует конфигурации
!Таблица - DT294. Не сходится количество полей
!!!Проверка физической целостности таблиц ИБ Неисправимая ошибка

Можно ли исправить ошибки внешними средствами?? Или может есть еще вариант как с этим справиться?
 
V

Vladones

!!Словарь данных не соответствует конфигурации
Пробовал ли просто удалить этот самый словарь данных?
Если не пробовал, сделай так:
- удалить словарь данных;
- открыть конфигуратор;
- попытаться сохранить конфигурацию;
Если появится сообщение "Отсутствует словарь данных..." выбираем "Продолжить".
По идее должен созаться новый словарь данных для текущей базы.
 
С

Спартак

Vladones

попробовал. При попытке сохранения выдает
Error#: -210
Unrecognized Field Name
SP57308

Далее предупреждение - Не выполнено открытие информационной базы
Предупреждение - Реорганизация данных не выполнена

А в окне сообщений:
New DD generate...
Old DD open process...
New DD open process...
Old DB open access...

И что бы это значило?

Добавлено: вроде разобрался
когда-то давно еще до меня добавили в накладную доп. поле. открыл я в dbf-редакторе этот самый dt294 и словарь данных. так вот в словаре есть это новое поле, а в dt294 его нет. В принципе это поле уже не используется.
Вопросы:
1. Как так можно добавить поле, чтобы оно не появилось в dbf-е??
2. Если я загружу md-шник из архива, который был до добавления этого поля (да, у нас есть и такое :)), я что-нибудь потеряю?? (изменений после этого не было)
 
V

vitfil

Надо было делать не загрузку измененной конфигурации, а объединение конфигураций!
При объединении сравнение происходит по именам объектов метаданных.
При загрузке измененной - по внутренним ID объектов метаданных.
В вашем случае не совпали ID какого-то справочника и документа. Как следствие - то, что вы видите на экране и, рискну предположить, разрушение данных.
Подымайте базу из бэкапа, который вы сделали до "загрузить измененную" (ведь делали же?), потом объединение конфигураций, потом выгрузку данных для себя (для разработки)... А на будущее - забудьте загрузку измененной конфигурации, как страшный сон.
 
V

Vladones

Как так можно добавить поле
Ну... В жизни всякие чудеса бывают :) Как вариант - заливка в каталог базы только старых dbf после изменения конфигурации. (допустим, что-то не так пошло после внесения изменений и чел, не особо задумываясь, из резервной копии dbf-файлы скопировал в рабочую).
Если я загружу md-шник из архива
Попробуй лучше из словаря удалить упоминание о SP57308
Может быть взлетит.

Добавлено:
Надо было делать не загрузку измененной конфигурации, а объединение конфигураций!
Ёлы, про загрузку-то я пропустил при чтении. :wacko: Вот вам и ещё один вариант, как можно в словаре данных поиметь описание несуществующего в dbf поля.
Так что вариант, предложенный vitfil имеет смысл попробовать.
 
С

Спартак

При объединении сравнение происходит по именам объектов метаданных.
При загрузке измененной - по внутренним ID объектов метаданных.
ааааа такое забыть.... виноват :)

рискну предположить, разрушение данных.
думаю, что именно это и было
Подымайте базу из бэкапа, который вы сделали до "загрузить измененную" (ведь делали же?)
делали B) каждую ночь делается бэкап всех баз и аккуратно складывается на сервере и на 2-х съемных дисках :)
потом объединение конфигураций
дадада именно так :)
Как вариант - заливка в каталог базы только старых dbf после изменения конфигурации
я думаю, что скорее всего добавляли в копии, а потом тупо перенесли md-шник :)


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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!