Снимаются выписки с проведения закрытого периода
Добрый день, люди добрые.
Столкнулся с проблемой, что у нас в базе 1С бухгалтерия (538 релиз) снимается с проведения документ Выписка. Причём в закрытом периоде, и очень далеко от текущей даты. Например сегодня 26.11.12, а выписка снимается в декабре 2011 или вот как сейчас 26.06.11. Грешу на клиент банк, ибо обмен идёт через обработку "ПредприятиеКлиент" и именно там есть строки
Но даже если и в этих строках кроется ошибка. Как исправить ситуацию? Бухи меня готовы на части разобрать, что у них документ за 2 квартал снялся с проведения. Можно ли мне программно его снова провести? Что бы сальдо выровнялось?
Ах да, ещё 1 нюанс, документ изменяется, например в нем было 5 записей, а стало 2.
Этот случай не первый у нас. Сперва я грешил на бухов. Но сейчас понимаю, что то тут не то.
Буду премного благодарен за помощь. Очень на вас надеюсь.
Столкнулся с проблемой, что у нас в базе 1С бухгалтерия (538 релиз) снимается с проведения документ Выписка. Причём в закрытом периоде, и очень далеко от текущей даты. Например сегодня 26.11.12, а выписка снимается в декабре 2011 или вот как сейчас 26.06.11. Грешу на клиент банк, ибо обмен идёт через обработку "ПредприятиеКлиент" и именно там есть строки
Если Объект.ПометкаУдаления()=1 Тогда
Объект.СнятьПометкуУдаления();
ИначеЕсли Объект.Проведен()=1 Тогда
Объект.СделатьНеПроведенным();
КонецЕсли;
Но даже если и в этих строках кроется ошибка. Как исправить ситуацию? Бухи меня готовы на части разобрать, что у них документ за 2 квартал снялся с проведения. Можно ли мне программно его снова провести? Что бы сальдо выровнялось?
Ах да, ещё 1 нюанс, документ изменяется, например в нем было 5 записей, а стало 2.
Этот случай не первый у нас. Сперва я грешил на бухов. Но сейчас понимаю, что то тут не то.
Буду премного благодарен за помощь. Очень на вас надеюсь.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) KiLLius, для отладки можно изменить код так, например:
так сразу будет ясно, в этом ли участке кода проблема, и думать дальше
Если Объект.ПометкаУдаления()=1 Тогда
Объект.СнятьПометкуУдаления();
ИначеЕсли Объект.Проведен()=1 Тогда
//Объект.СделатьНеПроведенным();
Сообщить("Попытка распровести документ "+Объект.ТекущийДокумент(),"!");
КонецЕсли;
Показатьтак сразу будет ясно, в этом ли участке кода проблема, и думать дальше
(1) KiLLius, Проследить были ли ручные правки документа можно из журнала регистрации и тогда точно сказать, что это делалось обработкой.
Любопытно, что у Вас изменилось количество строк в Выписке. Это значит что обработка (если это она) еще и записывает изменения.
Ну, что Вам мешает написать сторожа в процедуре ОбработкаУдаленияПроведения()? Она ведь срабатывает как при интерактивной так и ручной отмене проведения.
Любопытно, что у Вас изменилось количество строк в Выписке. Это значит что обработка (если это она) еще и записывает изменения.
Ну, что Вам мешает написать сторожа в процедуре ОбработкаУдаленияПроведения()? Она ведь срабатывает как при интерактивной так и ручной отмене проведения.
(15) dusha0020, мой косяк. Забыл сказать, что в журнале регистраций ничего нет. Именно поэтому я уверен, что изменения идут обработкой.
И да, документ откатывается к какому то состоянию, которое где то зафиксировано. И тут я подумал, что может косяк с файлами клиент банка.
Не поставил сторожа, по причине недавнего возникновения проблемы. Хочется узнать причину, а уж потом находить решение.
И да, документ откатывается к какому то состоянию, которое где то зафиксировано. И тут я подумал, что может косяк с файлами клиент банка.
Не поставил сторожа, по причине недавнего возникновения проблемы. Хочется узнать причину, а уж потом находить решение.
(16) KiLLius, Причину не знаю. А вот в стороже при записи в лог кроме пользователя и времени отмены проведения можно добавить список заголовков всех открытых в момент записи изменения окон 1С. Тогда станет понятнее из какой обработки или документа / отчета / журнала и т.п. было отменено проведение. Ну по крайней мере сузится круг подозреваемых. Заодно можете проверять открыто ли окно журнала выписок в момент отмены проведения - если да то запуск был интерактивным и писать его в лог не нужно:)
(17) dusha0020, я наверное буду выглядеть глупо, но я с журналом регистраций вообще не работал толком. Только просматривал. Я не смогу такие вещи туда записать, чисто упрусь в недостаток знаний. Штудировать литературу вообще пока времени нет, озадачили другими вещами. Если у Вас есть готовый фрагмент кода, не могли бы Вы со мной поделиться. Если конечно не затруднит.
(18) KiLLius, В модуле выписке в процедуре ПриОтменеПроведенияДокумента() написать что-то такое:
Если со списком заголовков открытых окон хотите поразвлекаться то вот функция его получения:
Добавьте ее возврат в коммент записи и будете знать какие окна в 1С были открыты в момент когда отменялось проведение.
P.S. Копирайт функции нахождения заголовков открытых окон не мой. Нашел когда-то на мисте, но уже не помню где. В любом случае спасибо автору.
комм = "Отмена проведения " + ТекущийДокумент()+" была сделана " + Строка(ТекущаяДата())+" в " + Строка(ТекущееВремя())+ " пользователем " + ИмяПользователя() + " с компа " + ИмяКомпьютера());
ЗаписьЖурналаРегистрации(комм,"Контроль выписок","Отмена проведения",ТекущийДокумент(),2);
Если со списком заголовков открытых окон хотите поразвлекаться то вот функция его получения:
Функция ОткрытыеОкна()
Окна = "";
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.AddCode("Текст=Array(1024).join(' ');
|function getWindowText(Хендл){Враппер.GetWindowTextW(Хендл,Текст,1024);return(Текст)}
|function getWindowClass(Хендл){Враппер.GetClassNameW(Хендл,Текст,1024);return(Текст)}");
Враппер = СоздатьОбъект("DynamicWrapper");
Враппер.Register("user32.dll", "FindWindowExA", "i=llsl", "f=s", "r=l");
Враппер.Register("user32.dll", "FindWindowW", "i=ll", "f=s", "r=l");
Враппер.Register("user32.dll", "GetWindow", "i=ll", "f=s", "r=l");
Враппер.Register("user32.dll", "GetParent", "i=l", "f=s", "r=l");
Враппер.Register("kernel32.dll", "GetCurrentThreadId", "f=s", "r=l" );
Враппер.Register("User32.dll", "GetWindowThreadProcessId", "i=ll", "f=s", "r=l");
Враппер.Register("User32.dll", "GetWindowTextW", "i=hwl", "f=s", "r=l");
Враппер.Register("User32.dll", "GetClassNameW", "i=hwl", "f=s", "r=l");
Скрипт.AddObject("Враппер",Враппер);
Хендл = Враппер.FindWindowW(0, 0);
Пока Хендл <> 0 Цикл
Если Враппер.GetParent(Хендл)=0 Тогда
Нить=Враппер.GetWindowThreadProcessId(Хендл, 0);
Если Нить=Враппер.GetCurrentThreadId() Тогда
Прервать;
КонецЕсли;
КонецЕсли;
Хендл = Враппер.GetWindow(Хендл, 2);
КонецЦикла;
Хендл=Враппер.FindWindowExA(Хендл,0,"MDIClient",0);
ТаблицаОкон = СоздатьОбъект("ТаблицаЗначений");
ТаблицаОкон.НоваяКолонка("Хендл");
ТаблицаОкон.НоваяКолонка("Заголовок");
ТаблицаОкон.НоваяКолонка("Класс");
Хендл = Враппер.GetWindow(Хендл,5);
Пока Хендл <> 0 Цикл
ЗаголовокОкна = СокрЛП(Скрипт.CodeObject.getWindowText(Хендл));
КлассОкна = СокрЛП(Скрипт.CodeObject.getWindowClass(Хендл));
ТаблицаОкон.НоваяСтрока();
ТаблицаОкон.Хендл = Хендл;
ТаблицаОкон.Заголовок = ЗаголовокОкна;
ТаблицаОкон.Класс = КлассОкна;
Хендл = Враппер.GetWindow(Хендл, 2);
КонецЦикла;
ТаблицаОкон.ВыбратьСтроки();
Пока ТаблицаОкон.ПолучитьСтроку() = 1 Цикл
Окна = Окна + ТаблицаОкон.Заголовок + ?(ТаблицаОкон.НомерСтроки = 1,",","");
КонецЦикла;
Возврат Окна;
КонецФункции
ПоказатьДобавьте ее возврат в коммент записи и будете знать какие окна в 1С были открыты в момент когда отменялось проведение.
P.S. Копирайт функции нахождения заголовков открытых окон не мой. Нашел когда-то на мисте, но уже не помню где. В любом случае спасибо автору.
(23) KiLLius, Действительно до конца не прочитал, нашли по суммам сравнивая с архивом, но документы не были "сняты с проведения" просто строки поменялись (удалились), никого не наказывали. Решили проблему следующим образом: убрал путь в импорте документов (в обработке загрузкивыгрузки платежек), а выписки по банку бухгалтера вручную разносили, видимо им так проще было
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот