<<
>>

8.3. Выполнение и работа с запросами во встроенном языке


Для формирования запросов, выборки п обработки результатов запросов в языке предусмотрен специальный набор объектов. С помощью этих объектов выполняется формирование запроса, обход записей запроса и т.
д.
8.3.1. Основные приемы работы
Основные приемы работы с запросами во встроенном языке системы «1С:Предприятие» удобнее всего рассматривать на примерах. Приведем типичный пример использования запроса.
// Создадим Запрос
Запрос = Новый Запрос("ВЬШРАТЬ Товар.Наименование Наименование, |Товар.Родитель.Наименование НаименованиеРодителя j ИЗ Справочник.Товары Товар"),// Выполним запрос и запишем результат в переменную РеэультатЗапроса. РезультатЗапроса = Запрос.Выполнить();
// Получим выборку из результата запроса. Выборка = РезультатЗапроса. Выбрать О ,// Пока в выборке есть записи ... Пока Выборка.Следующий О Цикл
// ... выведем Б окно сообщений попя из результата. Товар = Выборка.Наименование; Родитель = Выборка.НаименованиеРодителя; Сообщить ("Товар; 11 + Товар + " Родитель: 11 + Родитель); КонецЦиклаі
Как видно из этого примера, работа с запросом ведется при помощи трех основных объектов:
Запрос - объект, выполняющий сам запрос. Представлен в примере переменной с именем Запрос.
РезультатЗапроса- объект, содержащий полученные прн выполнении запроса данные. Представлен в примере переменной с именем РезультатЗапроса.
ВыборкаИзРезультатаЗапроса - объекг. позволяющий обходить (т. е. перебрать) записи из результата. Представлен в примере переменной с именем Выборка.
Рассмотрим подробнее объект ВыборкаИзРезультатаЗапроса. Для л ого нам понадобится следующий запрос: ВЫБРАТЬ
РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, РасходнаяНакладнаяСостав.Количество КАК Количество ИЗ
Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
УПОРЯДОЧИТЬ ПО
РасходнаяНакладнаяСостав.Номенклатура ИТОГИ
СУММА(Количество) ПО
Номенклатура ИЕРАРХИЯ Результат: н- Номеикгатцю toimcciw 1 Самтстіщ 104 1 я ІЗІСтчп 1 І4>Стол 15-Стал 13 гь1 От FIT ї7|Ст>п И IEiCtjit 5 »!СТ)ІТ 32 20Спл 16 Рис. 159. Рабочая выборка
В УГОН таблице мы добавили первый столбец, которого нет в тексте запроса, но он будет использоваться нами в дальнейшем для идентификации записи в результате. Итоговые записи в таблице выделены курсивом, итоговые записи дія иерархических уровней справочника выделены жирным шрифтом.
8.3.11. Способы обхода результата запроса Линейный обход результата
Первый и самый простой способ обхода - линейный. При линейном обходе выборка будет выдавать записи в той последовательности, в которой они располагаются в результате запроса, В нашем примере это буду т записи с номерами 1, 2, 3.4. 5 и так далее до записи с номером 20.
Для получения линейной выборки из результата необходимо вызвать метод Выбрать () объекта РезультатЗапроса без параметров либо с параметром ОбходРезультатаЗапроса. Прямой. Пример:
СпособВыборки = ОбходРезультатаЗапроса.Прямой; Вьіборкаї = РезультатЗапроса.Выбрать(СпособВыборки); // что равнозначно записи Вьіборкаї = РезультатЗапроса.Выбрать () ;
Иерархический обход результата
Следующий способ обхода результата - иерархический.
При данном способе обходятся только записи, находящиеся на одном уровне. Для получения иерархической выборки из результата необходимо вызвать метод Выбрать () объекта РезультатЗапроса с параметром ОбходРезультатаЗа- проса.ПоГруппировкамСИерархией.
Пример:
СпособВыборки = ОбходРезультатаЗапроса. ПоГруппировкамСИерархией,- Выборка2 = РезультатЗапроса.Выбрать(СпособВыборки); Выборка из результата с иерархическим обходом в нашем примере обойдет только записи с номерами 1 и 11. так как только эти две записи находятся на самом верхнем уровне. Проиллюстрируем это. представив наш результат в виде дерева, где узлами будут итоговые записи, а листьями дерева - детальные записи. Вот что у нас получится: 1 «В" № Кр» <« 5 Крон Ш S Краг 104
чз І Смерть lot I C.ltfl 1 'Eft IDS 10 Сім'ї1 I'll'Ifc Id

17 Ciyn l« -> IB Cryn 10» ¦ > 19 Cfyti IM Ul 20 Ступ IM
Рис. 160. Иерархический обход результата запроса
Из этого рисунка видно, что именно записи с номерами 1 и 11 и только они находятся на первом уровне дерева, в результате чего только они и попадают в первый проход иерархической выборки.
Возникает вопрос: как получать остальные записи результата запроса? Для этого у объекта ВыборкаИзРезультатаЗапроса можно получить еще одну выборку, которая будет обходить подчиненные записи текущей записи выборки. В нашем примере в момент, когда объект Выборка2 будет позиционирован на запись с номером 1, мы запросим у него иерархическую выборку. Таким образом мы получим выборку, которая нам вернет записи с номерами 2, 7. А когда Выборка2 будет позиционирована на записи с номером 11. полученная у нее иерархическая выборка вернет записи с номерами 12. 16. Так реализуется иерархический обход результатов запроса.
Заметим, что у выборки можно получать вложенные выборки любого типа. Так, если бы мы запросили у объекта Выборка2, позиционированной на записи I. линейную выборку, то с ее помощью мы бы получили записи с номерами со 2-ю но 10-й. Проиллюстрируем описанную методику на примере.
Пример:
Процедура ВыполнитьЗапросО П Создадим запрос. Запрос = Новый Запрос,// Установим текст запроса Запрос.Текст = "ВЫБРАТЬ
|РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, |РасходнаяНакладнаяСостав.Количество КАК Количество
І из
|Документ.РасходнаяНакладная.Состав КАК
РасходнаяНакладнаяСостав |УПОРЯДОЧИТЬ ПО
[РасходнаяНакладнаяСостав-Номенклатура |ИТОГИ
|СУММА(Количество) |П0
(Номенклатура ИЕРАРХИЯ",// Выполним запрос и запишем результат в переменную // РезультатЗапроса.
РезультатЗапроса ¦ Запрос.Выполнить();
// Получим выборку из результата запроса. СпособВыборки =
ОбходРезультатаЗапроса.ПоГруппировкамСИерархией; Выборка = РезультатЗапроса.Выбрать(СпособВыборки);
ВыдатьРекурсивно(Выборка);
КонецПроцедуры
Процедура ВыдатьРекурсивно(Выборка) // Пока в выборке есть записи ... Пока Выборка.Следующий() Цикл // ... выведем в окно сообщений поля из результата Товар = Выборка.Наименование / Количество = Выборка.Количество; Сообщить("Товар: " + Товар +
" Количество: " + Количество);
// Продолжим выборку подчиненных записей СпособВыборки »
ОбходРезультатаЗапроса.ПоГруппировкамСИерархией,- ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки); КонецЦикла; КонецПроцедуры
Обход результата по группам
Третий п последний способ обхода результата - по группам. Он сходен с иерархическим обходом, но с одним различием: записи с иерархическими итогами прн обходе в нем рассматриваются как детальные, а не как итоговые. Для получения выборки по группам из результата запроса необходимо вызвать метод Выбрать () объекта РезультатЗапроса с параметром ОбходРезультатаЗапроса.ПоГруппировкам.
Пример:
СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам; Выборка2 = РезультатЗапроса.Выбрать(СпособВыборки); // Перебрав а ней все. мы получим записи с номерами: // 1, 2, 7, 11, 12, 16.
Пример:
Процедура Вып ол нит ьЗа прос() // Создадим запрос. Запрос = Новый Запрос;
II Установим текст запроса Запрос.Текст = "ВЫБРАТЬ
|РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, |РасходнаяНакладнаяСостав.Количество КАК Количество |из
|Документ.РасходнаяНакладная.Состав КАК
РасходнаяНакладнаяСостав |УПОРЯДОЧИТЬ ПО
|РасходнаяНакладнаяСостав.Номенклатура j ИТОГИ
jСУММА(Количество) j ПО
[Номенклатура ИЕРАРХИЯ»;
// Выполним запрос и запишем результат в переменную II РезультатЗапроса.
РезультатЗапроса = Запрос.Выполнить О ,// Получим выборку из результата запроса СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам; Выборка о РезультатЗапроса.Выбрать(СпособВыборки);
// Пока в выборке есть записи ... Пока Выборка.Следующий() Цикл II ... выведем в окно сообщений поля из результата Товар = Выборка.Наименование; Количество « Выборка.Количество;
Сообщить("Товар: "+Тоаар+" Итого по товару: "+Количество);
ВыдатьДочерниеЗаписи(Выборка.Выбрать О ); КонецЦикла; Ко н ецПроцедуры
Процедура ВыдатьДочерниеЗаписи (Выборка) // Пока в выборке есть записи ... Пока Выборка.Следующий() Цикл II ... выведем в окно сообщений поля из результата Товар = Выборка.Наименование; Количество = Выборка.Количество;
Сообщить("Товар: "+Товар+" Количество: "+Количество); КонецЦикла; КонецПроцедуры
8.3.1.2. Работа с выборкой
Объект ВыборкаИзРезультатаЗапроса предназначен для обхода записей результата запроса. Можно представить себе выборку как некоторый объект, который содержит указатель на текущую запись в результате и предоставляет программе доступ ко всем полям текущей записи. Для навигации по записям запроса используются гри метода:
Следующий () - перейти к следующей записи результата в соответствии с порядком обхода выборки. При первом вызове позиционирует выборку на первую запись. Когда будут выбраны все записи, данный метод просигнализирует об этом, вернув значение Ложь.
СледующийПоЗначениюПоля <) - получить следующую запись со значением в заданном поле, отличающимся от значения в этом поле текущей записи.
НайтиСледующий () - найти запись с заданными значениями некоторых полей.
Использование метода СледующшПоЗначениюПоля()
Метод позволяет сгруппировать записи результата по значениям полей.
Пример: ВЫБРАТЬ Док.Номенклатура,
Док.Ссылка.Контрагент КАК Контрагент, Док.Количество ИЗ
Документ.РасходнаяНакладная.Состав КАК Док
УПОРЯДОЧИТЬ ПО Док.Номенклатура.Наименование, Контрагент Результат:
9; Стоп
10 Стоп 1Л С юп
іаГстул

Магазин *^амин* | 5Д0|
nfciYn

Рис. 161. Результат janpoca
Получим линейную выборку из результата запроса н обойдем выборку при помощи метода СледующийПоЗначениюПоля ().
Пример:
Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.СледующийПоЗначениюПоля("Товар") Цикл // здесь мы получим записи с номерами 1, 5, 9, 12 Пока Выборка.СледующийПоЗначениюПоля("Контрагент") Цикл II здесь мы сначала получим записи с номерами 1, 2, 3. 4 // затем 5, 6, 7 II затем 9, 10, 11 II затем 12, 13, 14, 15 КонецЦикла; КонецЦикла;
Следует обратить внимание па то, что во внутреннем цикле не была выбрана запись с номером 8, т. к. в ней такое же значение поля Получатель, как н в предыдущей записи.
Заметим, что если в цикле получения по значению поля получать записи при помощи метода Следующий (), то будут выбраны все записи с равным значением поля. заданною в предыдущем вызове метода
СледующийПоЗначениюПоля().
Пример:
Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.СледующийПоЗначениюПоля("Товар") Цикл II здесь мы получим записи с номерами 1, 5, 9, 12 Пока Выборка.Следующий() Цикл II здесь мы сначала получим записи с номерами 1, 2, 3, 4 // затем 5, 6, 7, 8 // затем 9, 10, 11 II затем 12, 13, 14, 15 КонецЦикла; КонецЦикла, Методы определения типа текущей записи
В тот момент, когда выборка позиционирована на записи, мы можем у выборки узнать характеристики этой записи. Получение характеристик записи осуществляется следующими методами:
Уровень () - определяет уровень записи в результате запроса.
ТипЗаписи () определяет принадлежность записи к одному из следующих типов:
групповой итог;
итого по иерархии;
детальная запись;
общин итог.
Группировка () - определяет имя поля, по которому были рассчитаны итоги.
Для иллюстрации работы этих методов посмотрим, что они будут возвращать в виде записей для запроса, рассматриваемого в начале главы.
ВЫБРАТЬ
РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, РасходнаяНакладнаяСостав.Количество КАК Количество ИЗ
Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
УПОРЯДОЧИТЬ ПО
РасходнаяНакладнаяСостав.Номенклатура ИТОГИ
СУММА(Количество) ПО
Номенклатура ИЕРАРХИЯ
Результат: tb Нйиемиппгура Количосіна Уровень ІипЗолиси Группировка t Сантехнике 11/ 0 Итог по иерархии Нтнтенклэтури г Коз» SJ Г Итог КЗ ГО,ч-т-иМ(7»-е .McMe-v-3,-.- 3 Кран 10 2 Детальная запись І Крэ., в г Детальная запись 5 Кран 4J 2 Детальная запись Ч Кран 21 1 Детальная лепись 7 33 t tfmoa по гэ^лтние-е 3 Смесигегь 5 2 Детальная запись 9 CuWtWIb 1 2 Детальная запись 0 СывешеГЬ 1-І 2 Детальная 12ГТ1С L to СиеОГТеЛЪ 13 г Детальная золись 11 Мсоель 1Н 0 Июг no иерархии Номенклатура •2 С-ГПОЛ 26 f tfmoa по Hove* -"j—, C-j 13 Стоп 1 1 Детальная запись и Стоп 15 2 Дуальны запись Ті Стоя 10 2 Деіапьиая запись ч •OS Г И—іV* по го, люая ЇЇ Ступ Si г Доильная запись is Civ л і 2 Детальная запись 19 Ctvn 32 2 Детальная запись WlCtvfl 16 2 Детальная запись Рнс. 162. Иерархия suniiceii
8.3.2. Работа с временными таблицами
Язык запросов системы «1С:Г1ре дприятме» позволяет использовать временные таблицы в запросах. Использование временных таблиц помогает повысить производительность запросов и сделать текст сложных запросов более легким для восприятия.
Работа с временными таблицами обеспечивается двумя составляющими:
объектом встроенного языка MeнеджєрВрємєиныхТаблиц, который хранит в себе данные временных таблиц;
синтаксисом языка запросов, позволяющим создавать новые временные таблицы и использовать существующие временные таблицы.
8.3.2.1. Менеджер временных таблиц
Менеджер временных таблиц предназначен для управления временем существования временных таблиц, создаваемых в процессе работы прикладного решения.
В одном прикладном решении может быть создано произвольное количество ікземпляров менеджера временных таблиц, каждый из которых хранит свой набор временных таблиц. Каждая временная таблица однозначно идентифицируется своим именем, и в пределах одного менеджера временных таблиц все временные таблицы должны иметь уникальные имена.
ПРИМЕЧАНИЕ. Имена временных таблиц должны соответствовать требованиям, предъявляемым к именам переменных встроенного языка (см. стр. 1-1(15).
Экземпляр менеджера временных таблиц может быть создан с помощью конструктора Новый.
Пример:
МенеджерВременнихТаблиц = Новый МенеджерВременныхТаОлиц;
Все временные таблицы, созданные в данном экземпляре менеджера, существуют до тех пор. пока существует сам экземпляр менеджера временных таблиц. При уничтожении экземпляра менеджера все временные таблицы, содержащиеся в нем. также удаляются.
Менеджер временных таблиц можно закрыть принудительно при помощи метода Закрыть (). При этом будут удалены все созданные в нем таблицы. Дальнейшая работа с данным экземпляром менеджера будет невозможна. 8.3.2.2. Создание временных таблиц
Создание временных таблиц осуществляется с помощью объекта Запрос встроенного языка системы «1С:Предприятие».
Связь запроса с менеджером временных таблиц осуществляется с помощью свойства МенеджерВременныхТаблиц запроса, в котором указывается тот экземпляр менеджера, в котором должны создаваться временные таблицы.
Пример:
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый ЗапросЗапрос. МенеджерВременныхТаблиц - МенеджерВременныхТаблиц
Временная таблица может быть создана на основе данных базы данных или на основе внешнего источника данных (например, таблицы значений).
Для того чтобы создать временную таблицу на основе данных базы данных. Следует установить объекту Запрос менеджер временных таблиц, а затем выполнить запрос к базе данных, используя ключевое слово ПОМЕСТИТЬ, после которого указать имя создаваемой временной таблицы. Ключевое слово ПОМЕСТИТЬ располаг ается после списка выборки запроса.
Пример:
ВЫВРАТЬ
Номенклатура.Код, Номенклатура.Наименование ПОМЕСТИТЬ ВременнаяТаблица ИЗ
Справочник.Номенклатура КАК Номенклатура
Результат исполнения такого запроса будет содержать одну строку с одной колонкой Количество, в которой будут находиться записи, помещенные в созданную таблицу.
Если менеджер временных таблиц не установлен, или был закрыт, или в установленном менеджере временных таблиц уже существует таблица с указанным именем, будет выдана ошибка.
При создании временных таблиц не на основании внешнего источника можно использовать конструкцию ДЛЯ ИЗМЕНЕНИЯ, это необходимо в тех случаях, когда требуется получить данные во временную таблицу и одновременно заблокировать их от чтения другими транзакциями.
Пример:
ВЫБРАТЬ РасходнаяНакладная.Ссылка, РасходнаяНакладная.Номер, РасходнаяНакладная.Дата ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
Документ.РасходнаяНакладная КАК РасходнаяНакладная ГДЕ
РасходнаяНакладная. Ссылка В ({.Документы) ДЛЯ ИЗМЕНЕНИЯ
При необходимости создания индекса для временной таблицы следует в запросе указать ключевое слово ИДЕКСИРОВАТЬ ПО, после которого перечислить поля, по которым нужно построить индекс.
Пример:
ВЫБРАТЬ Номенклатура.Код КАК Код, Номенклатура.Наименование ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
Справочник.Номенклатура КАК Номенклатура
ИНДЕКСИРОВАТЬ ПО Код
Поля, по которым происходит индексирование, должны находиться в списке выборки.
Если в качестве источника используется таблица значений, то у этой таблицы значений должны быть явно указаны типы значений, содержащихся в колонках.
Для того чтобы создать временную таблицу и заблокировать данные таблиц, на основании которых создается временная, следует использовать конструкцию ДЛЯ ИЗМЕНЕНИЯ.
Пример: ВЫБРАТЬ РасходнаяНакладная.Ссылка, РасходнаяНакладная.Номер, РасходнаяНакладная.Дата ПОМЕСТИТЬ ВременнаяТаблица ИЗ
Документ,РасходнаяНакладная КАК РасходнаяНакладная ГДЕ
РасходнаяНакладная.Ссылка В(^Документы)
ЦЛЯ ИЗМЕНЕНИЯ Для того чтобы создать временную таблицу на основании внешнего источника, следует в тексте запроса в списке источников указать имя параметра, в который будет помещен внешний источник. Остальной синтаксис идентичен обычному созданию временной таблицы.
В качестве внешнего источника могут выступать:
¦ таблица значении;
табличная часть;
результат запроса.
Ниже приведен пример создания временной таблицы на основе внешнего источника:
ВЫБРАТЬ Источник.Код, Источник.Наименование ПОМЕСТИТЬ ВременнаяТаОлииа ИЗ
ЬВнешнийИсточник КАК Источник В данном примере во временную таблицу ВременнаяТайлица будет помещено содержимое колонок Код и Наименование из внешнего источника, например, таблицы значений, переданной в качестве параметра
ВнешнийИсточник.
ВНИМАНИЕ! Если временная таблица создастся па основании внешнего источника, в запросе нельзя использовать объединения п соединения, а гакже ноли, являющиеся реквизитами гюлей таблиц, на основании которых создается временная таблица.
Использование временных таблиц
Для использования существующих временных таблиц в запросе следует установить объекту Запрос менеджер временных таблиц, после чего к временным таблицам, содержащимся в данном менеджере временных таблиц, можно обращаться по имени, как к обычным таблицам запроса.
Удаление временных таблиц
Для удаления временной таблицы из менеджера временных таблиц следует воспользоваться ключевым словом языка запроса УНИЧТОЖИТЬ, после которого указывается имя уничтожаемой таблицы, например: УНИЧТОЖИТЬ ВреыеннаяТаблица
Если уничтожаемой таблицы не существует, будет выдана ошибка. 8.3.3. Работа с пакетными запросами
Платформа системы «1С:Предприятие» позволяет работать с пакетами запросов. В пакетном запросе тексты запросов разделяются символом «;». Запросы исполняются последовательно, при этом временные таблицы, которые были созданы во время исполнения какого-либо запроса, будут существовать до окончания исполнения всего пакета запроса или до исполнения в пакете запроса, уничтожающего данную временную таблицу, например:
Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ
]УчетНоменклатурыОстаткиИОбороты.Номенклатура, |УчетНоменклатурыОстаткиИОбороты.КоличествоПриход, |УчетНоменклатурыОстаткиИОбороты.КоличествоРасход, |УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток |ПОМЕСТИТЬ УчетНоменклатуры |из
|РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты (, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты
[ВЫБРАТЬ
|УчетНоменклатуры.Номенклатура, |УчетНоменклатуры.КолнчествоРасход, |УчетНоменклатуры.КоличествоКонечныйОстаток | ИЗ
|УчетНоменклатуры КАК УчетНоменклатуры
Резуяьтат=Запрос.Выполнить();
Первый запрос создает временную таблицу, данные из которой используются во втором запросе.
Если объекту Запрос, исполняющему пакетный запрос, установлен менеджер временных таблиц, временные таблицы, которые не были уничтожены в рамках пакетного запроса, сохранятся в установленном менеджере, В тексте пакетного запроса возможно использование и уничтожение временных таблиц, которые существовали в установленном менеджере временных таблиц на момент запуска пакета на исполнение. Кроме метода Выполнить (), последовательно выполняющего все запросы пакета и возвращающего результат последнего запроса в пакете, платформа системы «ЮПредприятие» предоставляет еще один метод — ВыполнитьПакет (). Этот метод последовательно выполняет все запросы и возвращает массив результатов для каждого запроса из пакета в последовательности расположения запросов в тексте пакета. Результатом выполнения запроса на уничтожение временной таблицы является значение Неопределено, которое также помешается в массив результатов.
<< | >>
Источник: А.Алексеев, А. Безбородое, Д. Бескоровайнов. 1С:Предприятие 8.2. Руководство разработчика. 2009

Еще по теме 8.3. Выполнение и работа с запросами во встроенном языке:

  1. 7.7. Работа с формой из встроенного языка
  2. Глава 8. Работа с запросами
  3. Перечень тяжелых работ и работ с вредными или опасными условиями труда, при выполнении которых запрещается применение труда лиц моложе восемнадцати лет (извлечение)
  4. ВЫПОЛНЕНИЕ КУРСОВОЙ РАБОТЫ
  5. 5.4. Расчеты за выполненные работы
  6. ЗАДАНИЕ К ВЫПОЛНЕНИЮ ИНДИВИДУАЛЬНОЙ РАБОТЫ
  7. 3.1. Сроки выполнения работ (оказания услуг)
  8. ДОГОВОР ПОДРЯДА НА ВЫПОЛНЕНИЕ ПРОЕКТНЫХ И ИЗЫСКАТЕЛЬНЫХ РАБОТ
  9. Глава 1.10. Нормы времени на выполнение работ по делопроизводству
  10. 6.5. Доплата при выполнении работ различной квалификации
  11. 5.4. Договор подряда на выполнение проектных и изыскательских работ
  12. 3.3. Порядок оплаты выполненной работы (оказанной услуги)
  13. 3. ЗАЩИТА ПРАВ ПОТРЕБИТЕЛЕЙ ПРИ ВЫПОЛНЕНИИ РАБОТ И ОКАЗАНИИ УСЛУГ
  14. Глава 38. ВЫПОЛНЕНИЕ НАУЧНО-ИССЛЕДОВАТЕЛЬСКИХ, ОПЫТНО-КОНСТРУКТОРСКИХ И ТЕХНОЛОГИЧЕСКИХ РАБОТ
  15. Порядок исчисления НДС при выполнении строительно- монтажных работ
  16. 3.2. Права потребителя при обнаружении недостатков выполненной работы (оказанной услуги)
  17. 3.5. Оказание услуг (выполнения работ) по техническому обслуживанию и ремонту автомототранспортных средств
  18. Глава III. Защита прав потребителей при выполнении работ (оказании услуг)
  19. Тема 6. ДОГОВОРЫ НА ВЫПОЛНЕНИЕ НАУЧНО-ИССЛЕДОВАТЕЛЬСКИХ, ОПЫТНО-КОНСТРУКТОРСКИХ И ТЕХНОЛОГИЧЕСКИХ РАБОТ (НИР И ОКР
  20. § 2. Прекращение трудовых отношений в связи с заключением трудового договора на выполнение работы, противопоказанной лицу по состоянию здоровья