Гость
Форумы / [игнор отключен] [закрыт для гостей] / Работа со структурой в 1С / 13 сообщений из 13, страница 1 из 1
11.07.2013, 13:02
    #38328006
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
Всем доброго дня. как необходимо работать со структурой вложенной в структуру. создаю структуру в качестве ключа заношу период в значение данного ключа сохраняю другую структуру(уточняющие данные по периоду). так вот при попытке получить структуру по периоду у меня выходят данные последнего периода по всем периодам.
пример заполнения:
Код: sql
1.
2.
3.
4.
5.
6.
Движение = Новый Структура;
СтруктураДвижения = Новый Структура;
СтруктураДвижения.Вставить(Ключ1,Значение1);
СтруктураДвижения.Вставить(Ключ2,Значение2);
СтруктураДвижения.Вставить(Ключ3,Значение3);
Движение.Вставить(Период1,СтруктураДвижения);


оформлено в функцию которая возвращает структуру, обрабатываю так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
ДвижениеДС - сюда возвращаю результат выполнения функции;
Для каждого Элемент Из ДвижениеДС Цикл
    СтруктураДвиженияДС=Элемент.Значение;
    Сообщить(Строка(Элемент.Ключ)+"|"+
                  СтруктураДвиженияДС.Ключ1+"|"+
                  СтруктураДвиженияДС.Ключ2+"|"+
                  СтруктураДвиженияДС.Ключ3+"|"+)
КонецЦикла;


так вот результат во всех трех сообщения выводится следующим образом

Период3|Значение3
Период3|Значение3
Период3|Значение3
...
Рейтинг: 0 / 0
11.07.2013, 13:25
    #38328037
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
bald56rus,
тот код, который вы написали, не может вывести то что вы приводите в качестве результата.
...
Рейтинг: 0 / 0
11.07.2013, 13:27
    #38328038
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
javapeckerbald56rus,
тот код, который вы написали, не может вывести то что вы приводите в качестве результата.
привести конкретный код???а почему такой результат не может быть???
...
Рейтинг: 0 / 0
11.07.2013, 13:29
    #38328042
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
bald56rus,
приведите
...
Рейтинг: 0 / 0
11.07.2013, 13:34
    #38328047
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
javapecker,
вот функция которая возвращает структуру
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Функция ПолучитьДвижениеДС()
    ДвижениеДС = Новый Структура;
	СтруктураДвижения = Новый Структура;
	ДеревоЗначений = РеквизитФормыВЗначение("ВзаиморасчетыУслугПоМесяцам", Тип("ДеревоЗначений"));
	Табл = ВыгрузитьДеревоЗначенийВТаблицуЗначений(ДеревоЗначений);
	Табл.Сортировать("Месяц Возр");
	Для Каждого СтрокаТабл Из Табл Цикл 
		Сумма = 0;ТекстСообщения="";
		Если СтрокаТабл.МесяцУслуга = Справочники.УслугиНаселению.ГазоснабжениеПрироднымГазом Тогда
			СтруктураДвижения.Очистить();
			СтруктураДвижения.Вставить("КоличествоПроживающих",КоличествоПроживающихАбонента(СтрокаТабл.Месяц));
			СтруктураДвижения.Вставить("НачальноеСальдо",СтрокаТабл.НачальноеСальдо);
			СтруктураДвижения.Вставить("НачисленоОбъем",СтрокаТабл.НачисленоОбъем);
			СтруктураДвижения.Вставить("НачисленоСумма",СтрокаТабл.НачисленоСумма); 
			СтруктураДвижения.Вставить("Оплачено",СтрокаТабл.ОплаченоСумма-СтрокаТабл.СуммаДЗ);
			СтруктураДвижения.Вставить("КонечноеСальдо",СтрокаТабл.КонечноеСальдо); 
			ДвижениеДС.Вставить(Формат(СтрокаТабл.Месяц,"ДФ='MMММ_yyyy'; ДЛФ=DD"),СтруктураДвижения);
			//Для каждого Элемент Из СтруктураДвижения Цикл
			//	Сообщить(Элемент.Ключ + ": " + Элемент.Значение);							
			//КонецЦикла; 
			Сумма = СтрокаТабл.НачальноеСальдо+СтрокаТабл.НачисленоСумма-(СтрокаТабл.ОплаченоСумма-СтрокаТабл.СуммаДЗ);
			Если Сумма<>СтрокаТабл.КонечноеСальдо Тогда
				ТекстСообщения="Конечное сальдо не равно сумме движений по периоду: "+Формат(СтрокаТабл.Месяц,"ДФ='MMММ yyyy'; ДЛФ=DD");
				ЛксСообщитьСУчетомМодальности(ТекстСообщения);
 			КонецЕсли; 
		КонецЕсли; 
	КонецЦикла;
	//Заполнить ДвижениеДС
	Возврат ДвижениеДС;
КонецФункции // ПолучитьДвижениеДС()


а вот так обрабатываю результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
Для каждого Элемент Из Движение Цикл
		Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
		СтруктураДвижения = Элемент.Значение;
		Для каждого Элемент Из СтруктураДвижения Цикл
			Сообщить(Элемент.Ключ + ": " + Элемент.Значение);							
		КонецЦикла;
	КонецЦикла;
...
Рейтинг: 0 / 0
11.07.2013, 13:51
    #38328089
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
bald56rus,
ну видите, в первом посте у вас все правильно, вы исключили важную часть из конкретного кода. Структура - это объект, вы создаете структуру "СтруктураДвижения" один раз перед циклом. А в цикле просто несколько раз меняете ее значения. Все элементы внешней структуры "ДвиженияДС" поэтому будут содержать ссылку на одну и ту же структуру. А эта единственная структура будет содержать значения, полученные на последней итерации цикла. Поэтому вместо вот этой строки
Код: java
1.
СтруктураДвижения.Очистить();


создавайте новую структуру в цикле.
...
Рейтинг: 0 / 0
11.07.2013, 13:55
    #38328102
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
bald56rus,
вот маленький пример
Код: java
1.
2.
3.
4.
5.
С1 = новый структура("а",1);
С2 = новый структура("а",С1);
сообщить(С2.а.а) ;
С1.а = 0;
сообщить(С2.а.а);
...
Рейтинг: 0 / 0
11.07.2013, 15:23
    #38328267
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
javapeckerbald56rus,
ну видите, в первом посте у вас все правильно, вы исключили важную часть из конкретного кода. Структура - это объект, вы создаете структуру "СтруктураДвижения" один раз перед циклом. А в цикле просто несколько раз меняете ее значения. Все элементы внешней структуры "ДвиженияДС" поэтому будут содержать ссылку на одну и ту же структуру. А эта единственная структура будет содержать значения, полученные на последней итерации цикла. Поэтому вместо вот этой строки
Код: java
1.
СтруктураДвижения.Очистить();


создавайте новую структуру в цикле.

Спасибо Вам большое.всю голову поломал а косяка не увидел
...
Рейтинг: 0 / 0
11.07.2013, 16:34
    #38328380
Последний выдох ГПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
ДвижениеДС.Вставить(Формат(СтрокаТабл.Месяц,"ДФ='MMММ_yyyy'; ДЛФ=DD"),СтруктураДвижения);

эпично... в отчете будет крута в отборах смотреться...
...
Рейтинг: 0 / 0
11.07.2013, 18:30
    #38328547
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
Последний выдох ГПЖДвижениеДС.Вставить(Формат(СтрокаТабл.Месяц,"ДФ='MMММ_yyyy'; ДЛФ=DD"),СтруктураДвижения);

эпично... в отчете будет крута в отборах смотреться...

в отчете выведется в формате необходимом мне:) например Март_2012(что подразумевает учетный период) а в СтруктуреДвижения хранятся доп. данные по данному периоду.Тему можно закрывать.
...
Рейтинг: 0 / 0
12.07.2013, 11:17
    #38328994
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
bald56rusПоследний выдох ГПЖДвижениеДС.Вставить(Формат(СтрокаТабл.Месяц,"ДФ='MMММ_yyyy'; ДЛФ=DD"),СтруктураДвижения);

эпично... в отчете будет крута в отборах смотреться...

в отчете выведется в формате необходимом мне:) например Март_2012(что подразумевает учетный период) а в СтруктуреДвижения хранятся доп. данные по данному периоду.Тему можно закрывать.А зачем хранить 2 раза? Почему в отчете нельзя при выводе делать что хотите?

ps А если завтра надо будет добавить ДД - будете лазить в код отчета и исправлять?...
...
Рейтинг: 0 / 0
12.07.2013, 11:29
    #38329020
Последний выдох ГПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
bald56rusПоследний выдох ГПЖДвижениеДС.Вставить(Формат(СтрокаТабл.Месяц,"ДФ='MMММ_yyyy'; ДЛФ=DD"),СтруктураДвижения);

эпично... в отчете будет крута в отборах смотреться...

в отчете выведется в формате необходимом мне:) например Март_2012(что подразумевает учетный период) а в СтруктуреДвижения хранятся доп. данные по данному периоду.Тему можно закрывать.

пересадите руки с ж.пы ближе к голове...
...
Рейтинг: 0 / 0
12.07.2013, 12:56
    #38329213
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со структурой в 1С
Последний выдох ГПЖпересадите руки с ж.пы ближе к голове...
не зная всего может не стоит давать таких громких коментариев? а по существу в качестве отчета используется "вордовский шаблон" если будет необходимо то пользователь сам поправит так как необходимо.структуру я использую как массив для передачи данных с сервера на клиент(данные хранятся в ТаблицеЗначений) а "вордовский шаблон" заполняется на клиенте.

P.S.: сделал как смог.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Работа со структурой в 1С / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]