Консультация № 141163
01.08.2008, 10:56
100.00 руб.
0 2 0
Добрый день. Помогите разобраться из-за чего пропадает информация в базе, и только в одном документе. Документ состоит из двух закладок. Данные на закладке "Зарплата" соответствуют одной строке на закладке "Основная". Иформация пропадает на закладке зарплата. Иформация которая вводится на закладку зарплата хранится в строковых переменных (данные_о_сотрудниках, данные_о_контролерах, данные_о_кол) .

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

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

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

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


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

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

Обсуждение

Неизвестный
01.08.2008, 18:25
общий
Недавно тоже столкнулся с подобной проблемой - не срабатывала выборка по таблицы значений. Победил использованием цикла Для:

Код:
КолвоСтрок=ттт.КоличествоСтрок();
Если КолвоСтрок=0 тогда
// исключительная ситуация
Конецесли;
Для ъ=1 по КолвоСтрок Цикл
Спис_Сотр.ДобавитьЗначение(ттт.ПолучитьЗначение(ъ,"Сотр")
Спис_Контр.ДобавитьЗначение(ттт.ПолучитьЗначение(ъ,"Контр");
Спис_Кол.ДобавитьЗначение(ттт.ПолучитьЗначение(ъ,Кол");
КонецЦикла
Неизвестный
04.08.2008, 15:54
общий
Насколько я понимаю у меня проблема с востановлением данных из строки (ЗначениеИзСтрокиВнутр), или записью информации в строку (ЗначениеВСтрокуВнутр). Просто так ведь не может пропадать выборочно информация из строковых переменных.

Форма ответа