1c 7.7 Выборка всех элементов справочника без группировки

1С 7.7 не умеет выбирать все элементы справочника в запросе без группировки по какому то реквизиту. Обычно группируют по Коду. А что делать, если какой-то талантливый программист, решил что поле Код в справочнике например может быть не уникальным? Тогда будем группировать по текущему элементу справочника. Например:

	ТекстЗапроса=
	"//{{ЗАПРОС(СформироватьСЧТ)
	|ОбрабатыватьДокументы все;
	|Обрабатывать НеПомеченныеНаУдаление;
	|Владелец = Справочник.Счетчики.Владелец;
	|Наименование = Справочник.Счетчики.Наименование;
	|ТекущийЭлемент = Справочник.Счетчики.ТекущийЭлемент;
	|Группировка ТекущийЭлемент  Без Групп;
	|"//}}ЗАПРОС
	;             
            
		Запрос = СоздатьОбъект("Запрос");		
		Запрос.Выполнить(ТекстЗапроса);		 
		Пока Запрос.Группировка() = 1 Цикл
...
...

1c 7.7 Получения последней даты занесения периодического реквизита

Задача: необходимо получить дату, когда было последний раз изменено значение периодического реквизита справочника.

Решение: используем следующую функцию:

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

1C 7.7 краткая шпаргалка

Давненько не трогал 7.7 вообще. Да так, что когда пришлось, понял что забыл практически всё. Итак краткая шпаргалка для тех кто вынужден был сделать временный «даунгрейд» 😉

  1. Поиск процедур/функций в коде конфигурации осуществляется через меню «Конфигурация->Поиск во всех текстах»
  2. Запросы можно писать через конструктор «Конструкторы->Запрос», при этом он разместится в позиции курсора, а далее его можно редактировать будет при запуске конструктора по имени
  3. Обход запроса осуществляется по уровням группировки
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Обрабатывать НеПомеченныеНаУдаление;
	|ПокДн = Справочник.ПоказанияСчетчиков.ПокДн;
	|Владелец = Справочник.ПоказанияСчетчиков.Владелец;
	|ТекущийЭлемент = Справочник.ПоказанияСчетчиков.ТекущийЭлемент;
	|Код = Справочник.ПоказанияСчетчиков.Код;
	|Группировка ТекущийЭлемент Упорядочить по ТекущийЭлемент.Код;	
	|Условие(Владелец = счтк);
	|"//}}ЗАПРОС
	;
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		возврат 0;
	КонецЕсли;	
	Пока Запрос.Группировка(1,сортировка) = 1 Цикл        
		Дата_Показания="";	
		если сортировка=-1 тогда
			Дата_Показания=НормализоватьДату(Запрос.Код);
		конецесли;
	    возврат Запрос.ПокДн;
	КонецЦикла;
	
	возврат 0;

4. Отличия в «макете» в 7.7 от 8.х: Вместо «Макет» — «Таблица», вместо «Имя» — «Секция»

5. Данные в «Тело» можно заносить например так:

	Таб = СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица("Расчеты");
	Таб.ВывестиСекцию("Шапка");


	МассивСальдо.ВыбратьСтроки();
	Пока МассивСальдо.ПолучитьСтроку() = 1 Цикл
	   // Сообщить(Шаблон("[тз.НомерСтроки]. [тз.Товар] х [тз.Количество] ед."));
	   лс=МассивСальдо.ЛС;	   
	   начало=МассивСальдо.СальдоНачало;
	   
	   начхол=МассивСальдо.ХолоднаяВода;
	   начот=МассивСальдо.Отопление;
	   начкан=МассивСальдо.Канализация;
	   
	   сто=начхол+начот+начкан; 
	   если сто=0 тогда сто=1;конецесли;
	   начхол_пр=100*начхол/сто;
	   начот_пр=100*начот/сто;
	   начкан_пр=100*начкан/сто;
	   
	   оплачено=МассивСальдо.Оплачено;
	   конец=МассивСальдо.СальдоНачало+МассивСальдо.ХолоднаяВода+МассивСальдо.Отопление+МассивСальдо.Канализация-МассивСальдо.Оплачено;
	   
	   распхол=окр(начхол_пр*конец/100,2);
	   распротоп=окр(начот_пр*конец/100,2);
	   раскан=окр(начкан_пр*конец/100,2);
	   Таб.ВывестиСекцию("Тушка");																			
	КонецЦикла;

	
	Таб.Опции(0,0,0,0);
	Таб.ТолькоПросмотр(1);
	Таб.Показать("Результат",);

6. Если реквизит периодический, то данные из него можно получить:

норматив=ЖилоеЗдание.ВидТарифаХВиКан.НормативГВ.Получить(РабочаяДата());

7. Упоротый тип boolean: Да=Истина,Нет=Ложь