• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

пропадает информация из документа.

  • Автор темы volya
  • Дата начала
V

volya

Пропадаtт информация из многопользовательской базы, и только в одном документе. Документ состоит из двух закладок. Данные на закладке "Зарплата" соответствуют одной строке на закладке "Основная". Иформация пропадает на закладке зарплата. В большинстве но не всегда пропадает иформация, которая относится к первой строке на закладке "Основная".

Процедуры ПриОткрытии(), ПриВыбореЗакладки() и ПриЗаписи() описаны ниже. ттт - это таблица.
Процедура Табл() - ввод данных на закладку "Зарплата".

данные_о_сотрудниках, данные_о_контролерах, данные_о_кол - тип: строка 500.

Процедура ПриОткрытии()
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение(1,"Основная");
Форма.Закладки.ДобавитьЗначение(2,"Зарплата");
Форма.ИспользоватьСлой("Общий, Основной",2);

ттт.НоваяКолонка("сотр","Справочник.Рабочие",,,"Сотрудник",30);
ттт.НоваяКолонка("контр","Справочник.Контролеры",,,"Контролер",30);
ттт.НоваяКолонка("кол","строка",10,,"Кол-во",10);
КонецПроцедуры

Процедура Табл()
если ттт.текущаястрока()=0 тогда
возврат;
конецесли;
если ттт.текущаяколонка()="сотр" тогда
в_сотр=ттт.сотр;
если ВвестиЗначение(в_сотр,"Выберите сотрудника","Справочник.Рабочие")=1 тогда
ттт.сотр=в_сотр;
конецесли;
конецесли;
если ттт.текущаяколонка()="контр" тогда
в_контр=ттт.контр;
если ВвестиЗначение(в_контр,"Выберите контролера","Справочник.Контролеры")=1 тогда
ттт.контр=в_контр;
конецесли;
конецесли;
если ттт.текущаяколонка()="кол" тогда
в_кол=число(ттт.кол);
если ВвестиЗначение(в_кол,"Укажите кол-во","Число")=1 тогда
ттт.кол=строка(в_кол);
конецесли;
конецесли;
КонецПроцедуры

Процедура ПриВыбореЗакладки(Ном,Значение)
Если Значение=1 Тогда
спис_сотр=создатьобъект("СписокЗначений");
спис_контр=создатьобъект("СписокЗначений");
спис_кол=создатьобъект("СписокЗначений");
ттт.выбратьстроки();
пока ттт.получитьстроку()=1 цикл
спис_сотр.ДобавитьЗначение(ттт.сотр);
спис_контр.ДобавитьЗначение(ттт.контр);
спис_кол.ДобавитьЗначение(ттт.кол);
конеццикла;
данные_о_сотрудниках=ЗначениеВСтрокуВнутр(спис_сотр);
данные_о_контролерах=ЗначениеВСтрокуВнутр(спис_контр);
данные_о_кол=ЗначениеВСтрокуВнутр(спис_кол);
Форма.ИспользоватьСлой("Общий, Основной",2);
Иначе
старзнач=номерстроки;
ттт.удалитьстроки();
если выбратьстроки()=1 тогда
ПолучитьСтрокуПоНомеру(старзнач);
если ((стрдлина(сокрлп(данные_о_сотрудниках))<>0) или (стрдлина(сокрлп(данные_о_контролерах))<>0)) тогда
ррр1=создатьобъект("СписокЗначений");
ррр2=создатьобъект("СписокЗначений");
ррр4=создатьобъект("СписокЗначений");
ррр1=ЗначениеИзСтрокиВнутр(данные_о_сотрудниках);
ррр2=ЗначениеИзСтрокиВнутр(данные_о_контролерах);
ррр4=ЗначениеИзСтрокиВнутр(данные_о_кол);
для а=1 по ррр1.РазмерСписка() цикл
ттт.новаястрока();
ттт.сотр=ррр1.ПолучитьЗначение(а);
ттт.контр=ррр2.ПолучитьЗначение(а);
ттт.кол=ррр4.ПолучитьЗначение(а);
конеццикла;
конецесли;
конецесли;
Форма.ИспользоватьСлой("Общий, Сотр",2);
КонецЕсли;
КонецПроцедуры

Процедура ПриЗаписи()
спис_сотр=создатьобъект("СписокЗначений");
спис_контр=создатьобъект("СписокЗначений");
спис_кол=создатьобъект("СписокЗначений");
ттт.выбратьстроки();
пока ттт.получитьстроку()=1 цикл
спис_сотр.ДобавитьЗначение(ттт.сотр);
спис_контр.ДобавитьЗначение(ттт.контр);
спис_кол.ДобавитьЗначение(ттт.кол);
конеццикла;
данные_о_сотрудниках=ЗначениеВСтрокуВнутр(спис_сотр);
данные_о_контролерах=ЗначениеВСтрокуВнутр(спис_контр);
данные_о_кол=ЗначениеВСтрокуВнутр(спис_кол);
КонецПроцедуры
 
H

Hryv

Попробуйте в отладчике в начале процедуры ПриОткрытии() посмотреть содержат ли реквизиты документа то, что должны
Если содержат, значит некорректно работает Ваша процедура считывающая данные из документа в ттт
 
V

volya

Дело в том что документов этого вида очень много, а пропадает информация за рабочий день в одном, двух документах в остальных все нормально.
 
H

Hryv

Тогда надо использовать какие-то методы отладки-трассировки
например
- отобразите в журнале проблемные реквизиты и пусть юзеры визуально контролируют, что 100% сразу после записи все ОК
- допишите трассировку проблемных реквизитов в файл при открытии, закрытии и обращении к ним

так Вы хотябы найдете момент, когда происходит потеря
 
Мы в соцсетях:

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