powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / изучение глобалов, списков, функций для работы с ними
19 сообщений из 19, страница 1 из 1
изучение глобалов, списков, функций для работы с ними
    #39561627
lisica198808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
изучаем Caché. Сейчас у нас работа со списками, глобалами, возможно подпрограммами.
Дали задание
В списке хранится информация о фамилии, имени, отчестве читателя, книгах, отделах библиотеки, истории выдачи книг (журналов).

Первое задание: получить список выданных книг на заданную дату… И уже мрак.. Новичок-дурачек.. вроде и понимаю, как надо делать, и в то же время - ошибки.. Правильно ли мысли идут и как правильно все подправить, чтоб работало?

Код: c#
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
biblioteka() PUBLIC
{
	Set ^Departament = "Отдел библиотеки"
	
	Set ^Departament("Художественная литература","книги")=$ListBuild("Пушкин Александр Сергеевич") //автоор
	Set ^Departament("Художественная литература","книги","П12/1238")=$ListBuild($ListBuild("Капитанская дочь"),$ListBuild("2000")) //данные книг
	Set ^Departament("Художественная литература","книги","П12/1235")=$ListBuild($ListBuild("Капитанская дочь"),$ListBuild("1993")) //данные книг
	Set ^Departament("Художественная литература","книги","П12/1236")=$ListBuild($ListBuild("Капитанская дочь"),$ListBuild("1996")) //данные книг

	Set ^Departament("Художественная литература","книги")=$ListBuild("Хаггард Генри")
	Set ^Departament("Художественная литература","книги","Х16/1672")=$ListBuild($ListBuild("Копи царя Соломона"),$ListBuild("1996"))
	Set ^Departament("Художественная литература","книги","Х16/1670")=$ListBuild($ListBuild("Копи царя Соломона"),$ListBuild("1988"))

	Set ^Departament("Художественная литература","книги")=$ListBuild("Толстой Лев Николаевич")
	Set ^Departament("Художественная литература","книги","Т1/123")= $ListBuild($ListBuild("Война и мир"),$ListBuild("1992"))
 	 	
	Set ^Departament("Художественная литература","книги")=$ListBuild("Кристи Агата")
	Set ^Departament("Художественная литература","книги","К1/168")=$ListBuild($ListBuild("Восточный экспресс"),$ListBuild("1984"))
 	Set ^Departament("Художественная литература","книги","К1/202")=$ListBuild($ListBuild("Восточный экспресс"),$ListBuild("2000"))

	Set ^Departament("Художественная литература","книги")=$ListBuild("Налепина Алла Леонидовна")
	Set ^Departament("Художественная литература","книги","С0/045")=$ListBuild($ListBuild("Сказки народов мира"),$ListBuild("1986"))

    Set ^Departament("Художественная литература","журналы") =$ListBuild("Дворовский Петр Иванович")
    Set ^Departament("Художественная литература","журналы","ПиС/38") =$ListBuild($ListBuild("Проза и стихотворения современных писателей"),$ListBuild("1996"))
    Set ^Departament("Художественная литература","журналы","ПиС/38","24") =$ListBuild("1р20коп")
    Set ^Departament("Художественная литература","журналы","ПиС/45") =$ListBuild($ListBuild("Проза и стихотворения современных писателей"),$ListBuild("1997"))
    Set ^Departament("Художественная литература","журналы","ПиС/45","45") =$ListBuild("1р00коп")

	Set ^Departament("Научно-техническая литература","книги")=$ListBuild("Кендал Скотт")
	Set ^Departament("Научно-техническая литература","книги","К/120")=$ListBuild($ListBuild("С44 UML.Основные концепции"),$ListBuild("2002"))
	Set ^Departament("Научно-техническая литература","книги","К/121")=$ListBuild($ListBuild("С44 UML.Основные концепции"),$ListBuild("2002"))

	Set ^Departament("Научно-техническая литература","книги")=$ListBuild("Майо Джозеф ")
	Set ^Departament("Научно-техническая литература","книги","М/0359")=$ListBuild($ListBuild("C# Искусство программирования.Энциклопедия программиста"),$ListBuild("2002"))
	
	Set ^Departament("Научно-техническая литература","журналы")=$ListBuild("Иваненко Мария Сергеевна")
	Set ^Departament("Научно-техническая литература","журналы","НТ/036")=$ListBuild($ListBuild("Наука и техника"),$ListBuild("2012"))
	Set ^Departament("Научно-техническая литература","журналы","НТ/036","36")=$ListBuild("11р00коп")
	Set ^Departament("Научно-техническая литература","журналы","НТ/022")=$ListBuild($ListBuild("Наука и техника"),$ListBuild("2012"))
	Set ^Departament("Научно-техническая литература","журналы","НТ/022","22")=$ListBuild("11р00коп")
 //---------------------------------------------------------------------------------------------------//

	Set ^Reader = "Читатель"  
    Set ^Reader("00037")=("Боярский Михаил Сергеевич") //дата рождения
    Set ^Reader("00037", "dateBirtday")=("12/05/1967")
    Set ^Reader("00037","dateBirtday","dateRegistration")=("28/01/2017") //дата регистрации
    //выдача
    Set ^Departament("Художественная литература","книги","П12/1236",^Reader("00037"))= $ListBuild($ListBuild("28/01/2017"), $ListBuild("13/02/2017" ))
 	Set ^Departament("Художественная литература","книги","К1/202",^Reader("00037"))= $ListBuild($ListBuild("28/01/2017"), $ListBuild("13/02/2017" ))

    
    Set ^Reader("01087")=("Сорокина Анна Валерьевна") //fio
    Set ^Reader("01087", "dateBirtday")= ("10/11/1998")
    Set ^Reader("01087","dateBirtday","dateRegistration") =("14/04/2016") //дата регистрации
   //выдача
    Set ^Departament("Художественная литература","книги","П12/1236",^Reader("01087"))= $ListBuild($ListBuild("03/02/2017"), $ListBuild("18/02/2017" ))
    Set ^Departament("Художественная литература","книги","С0/045",^Reader("01087"))= $ListBuild($ListBuild("03/02/2017"), $ListBuild("18/02/2017" ))
	Set ^Departament("Научно-техническая литература","журналы","НТ/03",^Reader("01087"))= $ListBuild($ListBuild("03/02/2017"), $ListBuild("08/04/2017" ))    
    
    
    Set ^Reader("00108")=("Васильченко Роман Дмитриевич") //fio
    Set ^Reader("00108", "dateBirtday")= ("13/08/1988")
    Set ^Reader("00108","dateBirtday","dateRegistration")=("28/12/2017") //дата регистрации
   //выдача 	
    Set ^Departament("Художественная литература","книги","Х16/1672",^Reader("00108"))=$ListBuild($ListBuild("28/12/2017"),$ListBuild("13/01/2015"))
    Set ^Departament("Художественная литература","книги","П12/1236",^Reader("00108"))= $ListBuild($ListBuild("28/12/2017"), $ListBuild("13/01/2017" ))
	Set ^Departament("Научно-техническая литература","книги","К/120",^Reader("00108"))=$ListBuild($ListBuild("28/12/2017"), $ListBuild("13/01/2018" ))

    Set ^Reader("01016")=("Васильченко Алена Дмитриевна") //fio
    Set ^Reader("01016", "dateBirtday")= ("13/08/1984")
    Set ^Reader("01016","dateBirtday","dateRegistration")=("03/03/2003") //дата регистрации
   //выдача  
    Set ^Departament("Научно-техническая литература","журналы","НТ/022",^Reader("01016")) = $ListBuild($ListBuild("26/11/2017"), $ListBuild("10/12/2017" ))
    Set ^Departament("Художественная литература","книги","П12/1236",^Reader("01016"))= $ListBuild($ListBuild("28/11/2017"), $ListBuild("13/12/2017" ))
    

    Set ^Reader("00567")=("Никитина Алена Викторовна") //fio
    Set ^Reader("00567", "dateBirtday")= ("21/12/2002")
    Set ^Reader("00567","dateBirtday","dateRegistration")=("12/11/2015") //дата регистрации
   //выдача
	Set ^Departament("Научно-техническая литература","книги","М/0359",^Reader("00567"))=$ListBuild($ListBuild("12/11/2015"), $ListBuild("27/11/2015" ))
    Set ^Departament("Художественная литература","журналы","ПиС/38",^Reader("00567"))=$ListBuild($ListBuild("12/11/2015"), $ListBuild("27/11/2015" ))
 //---------------------------------------------------------------------------------------------------//

  // do ABONEMENT() //выводим все абонементы

  write !, "На какую дату получить список выданных книг? "
  Read day
  set dday=$ZDATEH(day,4)
  do toGiveDate(dday) //Получить список выданных книг на заданную дату…
}  

#;ABONEMENT() PUBLIC    
#;    { write "Номер абонемента читателя:"
#;	  Set x=""
#;      For {
#;       Set x=$Order(^Reader(x)) //выводим все абонементы
#;       Quit:x=""
#;       Write !,x
#;          }
#;    }

	
toGiveDate(d)  //Получить список выданных книг на заданную дату…
{ 	for 
	{ set ot=""
	  set k="" //книга
	  set inv="" //инв.номер
	  set chit="" //читатель
	  set data=""
	   
	   
	   Set ot=$Order(^Departament(ot)) //Рассматриваем отделлы, список отделов
	   Quit:ot=""
          for
          {Set k=$Order(^Departament(ot,k)) //Рассматриваем книги или журналы по отделам, 
		Quit:k=""
          for
          {
	    Set inv=$Order(^Departament(ot,k,inv)) //Рассматриваем названия, инв номер книги в отделе
		Quit:inv=""
          for 
          { Set chit=$Order(^Departament(ot,k,inv,chit)) //Рассматриваем названия, инв номер книги в отделе
		    Quit:chit=""
	          
	          
	          
       Set DateLength = $ListLength(^Departament(ot,k,inv,chit)) //Получаем длину списка с датами
	   for i=1:1:DateLength //Идем по этому списку
		{ set data = $Piece(^Departament(ot,k,inv,chit),1) // рассматриваем все даты
		  set ch=$ZDATE(data,4) // встречая дату переводим ее во внутренний часовой формат 
		   if ch=d // если введенная дата совпадает с указанной  в выдаче (их внутренний часовой формат одинаков)
		   	//	{   
		     set ot=$List(^Departament(ot,k,inv,chit),1) // запоминаем отдел из которого відана книгаа
		     set k=$List(^Departament(ot,k,inv,chit),2)  //запоминаем название книги
		   	//	}
			else 
		      write !, "В указанную дату книги не выдавались"
	   }
          }
          }  }
	   
	   
	   	
	}
 write !,"В этот день выдана книга: " , k, "из отдела ",ot
}
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39561634
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808
Код: sql
1.
2.
 ...
 write !,"В этот день выдана книга: " , k, "из отдела ",ot


Начну с конца)))
А у вас всего одна книга может быть выдана за день?
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39561642
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
set ch=$ZDATE(data,4) // встречая дату переводим ее во внутренний часовой формат 


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

Код: sql
1.
Set DateLength = $ListLength(^Departament(ot,k,inv,chit)) //Получаем длину списка с датами


Сейчас здесь (в ^Departament(ot,k,inv,chit)) спиок. Хорошо.
Код: sql
1.
set data = $Piece(^Departament(ot,k,inv,chit),1) // рассматриваем все даты


А теперь вдруг строка с разделителями???? Как? Вы уж определитесь, что у Вас там))).
Да, и прочитайте про $Piece и список принимаемых параметров.

Сей кусок, есть непонимание что происходит с переменными в цикле:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        for 
	{ set ot=""
	  set k="" //книга
	  set inv="" //инв.номер
	  set chit="" //читатель
	  set data=""
	   
	   
	   Set ot=$Order(^Departament(ot)) //Рассматриваем отделлы, список отделов
	   Quit:ot=""
          for
          {Set k=$Order(^Departament(ot,k)) //Рассматриваем книги или журналы по отделам, 
		Quit:k=""
          for
          {
	    Set inv=$Order(^Departament(ot,k,inv)) //Рассматриваем названия, инв номер книги в отделе
		Quit:inv=""
          for 
          { Set chit=$Order(^Departament(ot,k,inv,chit)) //Рассматриваем названия, инв номер книги в отделе
		    Quit:chit=""
	          
	         



Индексные переменные с помощью функции $order нужно обходить так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 set variable=""  ; переменная цикла инициализируется начальным значением перед циклом а не в теле.
 for {
      set variable=$order(^global(variable))
      Q:variable=""
      // какие-то  действия.
      ...
      // если есть вложенный цикл, опять же, перед ним определяем переменную цикла
      set var=""
      for {
           set var=$order(^global(variable,var))
           Q:var=""
          
      }
 }
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39561648
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808,
Ну и к модели данных вопросы:
Создаем читателя с идентификатором 01087
Код: sql
1.
Set ^Reader("01087")=("Сорокина Анна Валерьевна") //fio



Однако:
Код: sql
1.
Set ^Departament("Художественная литература","книги","П12/1236",^Reader("01087"))="бла-бла-бла"


Вы понимаете, что такая запись равносильна:
Код: sql
1.
Set ^Departament("Художественная литература","книги","П12/1236","Сорокина Анна Валерьевна")="бла-бла-бла"


Для чего тогда нужен идентификатор пользователя? Да и как в таком случае быть с учетом выдачи книг полным тёзкам?

Ну и конструкция:
Код: sql
1.
$ListBuild($ListBuild("28/12/2017"),$ListBuild("13/01/2015"))


Список списков из одного элемента.
Дело, конечно, хозяйское, но Вы уверены что Вам именно такая конструкция нужна?
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39561649
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скопировал не посмотрев:
П.С.М.
Код: sql
1.
Set ^Reader("01087")=("Сорокина Анна Валерьевна") //fio



Присваивание значения должно быть без круглых скобок. Т.е.:
Код: sql
1.
Set ^Reader("01087")="Сорокина Анна Валерьевна" //fio
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39561880
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
biblioteka() PUBLIC
{
	Set ^Departament("Художественная литература","книги")=$ListBuild("Пушкин Александр Сергеевич") //автоор
	Set ^Departament("Художественная литература","книги")=$ListBuild("Хаггард Генри")


Тут второе присваивание перезаписывает результат первого. Видимо, это должно лечь в разные имена.
И Пушкин написал не "Капитанская дочь", а "Капитанская дочка".
И зачем столько магических строк дублировать, пишите константы однократно, используйте косвенность имен, можно же легко опечататься.
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39563028
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух ты! В моем родном вузе продолжают изучать Cache? Здорово. Только вот в котором из двух - в Донецке или Покровске. По-существу тут уже все разъяснили, добавить нечего, тем более, помощь оказал такой корифей M-технологий как ну я. ТС, внимательно прислушайтесь к его советам.
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39563242
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808, ну яИ зачем столько магических строк дублировать, пишите константы однократно
Воспользуемся же хорошим советом хорошего человека и превратим это
Код: vbnet
1.
2.
3.
4.
Set ^Departament("Художественная литература","книги")=$ListBuild("Пушкин Александр Сергеевич") //автоор
	Set ^Departament("Художественная литература","книги","П12/1238")=$ListBuild($ListBuild("Капитанская дочь"),$ListBuild("2000")) //данные книг
	Set ^Departament("Художественная литература","книги","П12/1235")=$ListBuild($ListBuild("Капитанская дочь"),$ListBuild("1993")) //данные книг
	Set ^Departament("Художественная литература","книги","П12/1236")=$ListBuild($ListBuild("Капитанская дочь"),$ListBuild("1996")) //данные книг

в код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	s global = $name(^Departament), @global = "Отдел библиотеки"
	s section = "Художественная литература", type = "книги"
	
	s author = "Пушкин Александр Сергеевич"
	s @global@(section,type,author)=$lb(author) //автор
	s items = $name(@global@(section,type,author))
	
	s title = "Капитанская дочка"
	s code = "П12/1238", year = 2000, @items@(code)=$lb(title,year)
	s code = "П12/1235", year = 1993, @items@(code)=$lb(title,year)
	s code = "П12/1236", year = 1996, @items@(code)=$lb(title,year)
	
	zw @global
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39568658
lisica198808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П.С.М. Для чего тогда нужен идентификатор пользователя? Да и как в таком случае быть с учетом выдачи книг полным тёзкам?

Это что-то типа номера читательского абонемента


Вот с датами немного запуталась..
П.С.М.Имеет смысл сразу хранить дату/время в формате удобном для программной обработки, а не заниматься конвертацией в цикле.


Спасибо за ответы всем - пытаюсь навести порядок в своем "муравейнике", благодаря вашим ответам.
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39569056
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808П.С.М. Для чего тогда нужен идентификатор пользователя? Да и как в таком случае быть с учетом выдачи книг полным тёзкам?

Это что-то типа номера читательского абонемента



Да это понятное дело. Но вопрос был с намеком)))
Но для чего вообще библиотека выдает читателю билет/абонемент?
Наверное чтобы библиотека могла отличить одного Иванова Ивана Ивановича от другого Иванова Ивана Ивановича и знать какой Иванов Иван Иванович что читает/какими книгами пользуется))) Для этих целей библиотека и вводит уникальный идентификатор читателя в виде читательского билета.
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39570006
lisica198808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я это понимаю)сама в библиотеку хожу и поэтому АБОНЕМЕНТ - это для меня изначально понятно, что у всех различное, не смотря на ФИО,и все другие схожести..
П.С.М.Но для чего вообще библиотека выдает читателю билет/абонемент?
Наверное чтобы библиотека могла отличить одного Иванова Ивана Ивановича от другого Иванова Ивана Ивановича
мини-отчет так сказать. кусочно,но так и правда аккуратнее читается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
   s glav = $name(^Reader), @glav = "Читатель"
  	s dateRegistration="28/01/2017",  abonement = "00038" // в этот день зарегестрировался абонемент 
	s person = "Сурганова Светлана Яковлевна" //на  имя
	s @glav@(dateRegistration, abonement)=$lb(person) // список зарегестрированных в этот день
	s item = $name(@glav@(person)) // читатель с ФИО ,зарегестрированного в этот день
	s dateBirtday ="14/11/1968", pasport = "паспортные данные", @item@(abonement)=$lb(dateBirtday,pasport)// хар-стика читателя, дополнительные данные о нем

	zw @glav


в сторону вопроса про абонемент...

пишу вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
	s gl = $name(^ToGiveTheBooks), @gl = "Выдача книг"
	s dateGive = "28/01/2017" // в этот день была выдана 
	s @gl@(dateGive)=$lb(abonement) // следующим читателям из списку абонемента
	s it=$name(@gl@(abonement))
 	s @it@("00038")= @items@("К1/202",title) // следующая книга с инв.номером К1/202 выдана читателю с абонементом  00038
	zw @gl



компилятор не понимает того, как я абонемент пытаюсь вывести здесь
Код: plaintext
1.
s @it@("00038")

, говорит мне <UNDEFINED>
что опять перемудрила?
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39570126
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808Я это понимаю)
Раз понимаете, зачем же тогда используете ФИО как уникальный ключ???
lisica198808s @it@("00038")

[/src], говорит мне <UNDEFINED>
что опять перемудрила?

Ну так посмотрите чему равны все переменные участвующие в "проблемном" присваивании))
Код: sql
1.
2.
3.
4.
zw it,items,title
w !,$data(@items@("К1/202",title))

s @it@("00038")= @items@("К1/202",title)
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39570843
lisica198808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
продолжаю доставать добрых и умных людей, своими глупыми и незрелыми вопросами)

вот так выглядит примерно глобал с читателями:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	s glav = $name(^Reader), @glav = "Читатель"

	s dateRegistration="28.01.2017",  abonement = "00037"
	s person = "Боярский Михаил Сергеевич"
	s @glav@(dateRegistration, person)=$lb(abonement) // в такой-то день зарегестрировался человек с ФИО
	s item = $name(@glav@(abonement)) // на такой-то абонемент
	s dateBirtday ="12.05.1967", pasport = "паспортные данные", @item@(person)=$lb(dateBirtday,pasport) //данные этого человека
	 

    s abonement = "01087",dateRegistration="14.04.2016"
    s person = "Сорокина Анна Валерьевна"
	s @glav@(dateRegistration, person)=$lb(abonement) // в такой-то день зарегистрировался человек с ФИО
	s item = $name(@glav@(abonement)) // на такой-то абонемент
	s dateBirtday ="10.11.1998", pasport = "паспортные данные", @item@(person)=$lb(dateBirtday,pasport) //данные этого человека
	 zw @glav


нужно вывестти все ФИО теперь. понимаю что нужно посчитать длину списка глобала и двигаться по нему.. Пишу вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
FIO()
{  //w $ListLength(@glav)
  for i=1:1:$ListLength(glav)
  { s chit=$List(glav,i)
  //  zw chit
    s dReg=$List(chit,1) 
    s nameReader=$List(chit,2)
    w nameReader,!
   }


не воспринимается.. UNDEFINED!!
знаю,что можно вот так писать-
Код: plaintext
1.
$ListLength(^Dvizh('Logging'))

- но здесь чуть по-другому. Как правильно передавать глобал тогда?
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39570912
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808,
Не путайте список и глобал.
Глобал - это дерево.
Список -это строка, состояшая из полей, может быть узлом глобала.
Посмотрите на Ваш глобал:
Код: vbnet
1.
2.
3.
4.
5.
^Reader="Читатель"
^Reader("00037","Боярский Михаил Сергеевич")=$lb("12.05.1967","паспортные данные")
^Reader("01087","Сорокина Анна Валерьевна")=$lb("10.11.1998","паспортные данные")
^Reader("14.04.2016","Сорокина Анна Валерьевна")=$lb("01087")
^Reader("28.01.2017","Боярский Михаил Сергеевич")=$lb("00037")


а список это
Код: vbnet
1.
$lb("12.05.1967","паспортные данные")

.
ФИО у Вас находятся не в списках, а в индексах глобала. Для получения ФИО потребуется обход дерева,
как Вам уже писали. Например:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 set nomabon=""  ; номер абонемента
 for {
      set nomabon=$order(^Reader(nomabon))
      Q:nomabon=""
      // если есть вложенный цикл, опять же, перед ним определяем переменную цикла
      set FIO=""
      for {
           set FIO=$order(^Reader(nomabon,FIO))
           Q:FIO=""
          w !,nomabon,"   ",FIO
      }
 }


Результат:
Код: vbnet
1.
2.
3.
4.
5.
 
00037   Боярский Михаил Сергеевич
01087   Сорокина Анна Валерьевна
14.04.2016   Сорокина Анна Валерьевна
28.01.2017   Боярский Михаил Сергеевич


У нас повторились ФИО, это результат неудачного проектирования глобала.
ИМХО, журнал посещения библиотеки надо вынести в отдельный глобал:
Код: sql
1.
2.
^Journal("14.04.2016","Сорокина Анна Валерьевна")=$lb("01087")
^Journal("28.01.2017","Боярский Михаил Сергеевич")=$lb("00037")


А еще лучше:
Код: sql
1.
2.
^Journal("14.04.2016","01087")=""
^Journal("28.01.2017","00037")=""
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39576403
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808, в догонку - цикл в цикле плохо, а для списков есть $LISTNEXT
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39576417
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808, Вы не сможете изучить Cache, потому что не знаете - что это такое:( Так что, не переживайте, и по-проще к этому отнеситесь.
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39578617
lisica198808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бредятина Вы не сможете изучить Cache, потому что не знаете - что это такое:( Так что, не переживайте, и по-проще к этому отнеситесь.
Я вообще не переживаю, мне просто контрольную сделать надо и оценку получить потом.
Я более-менее что-то "натворила", компилит, запускается но между строк на выводе попадает что-то вроде ..
Код: plaintext
1.
<SUBSCRIPT>+242^llllll ^Departament("Художественная литература","книги","Хаггард Генри","")



что значит этот SUBSCRIPT?почему его выбивает?
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39578645
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808,
Вот и хорошо:)
Просто обратиться к переживающим и все. Они же все равно переживают, куда им деваться:)
...
Рейтинг: 0 / 0
изучение глобалов, списков, функций для работы с ними
    #39578786
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lisica198808,

Ошибка SUBSCRIPT из-за пустого индекса. По умолчанию они запрещены.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / изучение глобалов, списков, функций для работы с ними
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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