Введение

В статье описано использование датасетов, описанных в статье о полях базы данных.

1. Вывод атрибутов из полей датасетов

Поля с атрибутами идут после поля «Attrs» (атрибуты) или «AttrsEx» (доп. атрибуты) - см  картинку (на примере атрибутов и доп. атрибутов заголовка накладной, датасет Hdr). Для атрибутов с типом «Перечисление» предусмотрено 2 поля. Например, для атрибута «Тип документа 1С»: Hdr_F6\DocType1C - id типа документа, Hdr_F6\DocType1C_itext_ - название типа документа.

2. Вывод данных с помощью процедур сервера

Если в датасетах нет или не хватает информации по каким-то атрибутам/свойствам или другим данным, тогда они выводятся с помощью обращения к процедурам сервера SH5. Процедуры могут возвращать весь список данных, а могут данные по ID. Список имеющихся процедур, а также номера датасетов и полей, идент. атрибутов см в Sdbman.

2.1 Возвращение всего списка данных

Пример1.

Например, надо вывести название и ОКПО юр. лица, а в датасете есть только id подразделения. Для этого обращаемся к процедурам сервера Departs и LEntities, которые возвращают полные списки подразделений и юр. лиц соответственно - так как их не много (списки небольшие). В полученных списках ищем нужную строку и записываем данные в переменные, которые потом выводим в макете (см ниже).

Пример 2.

Например, надо вывести код по ОКЕИ единицы измерения товара. Для этого мы создаем и единоразово выгружаем список всех ед. изм. (OnStartReport), затем для каждой строки товара выбираем код по ОКЕИ (MasterData1OnBeforePrint), в конце закрываем процедуру (OnStopReport) - см ниже.

2.2 Возвращение данных по ID

Пример 1.

Например, надо вывести название и ОКПО корреспондента, а в датасете есть только id корреспондента. Список корреспондентов может быть очень большим, выгружать его весь не есть хорошо. Поэтому мы обращаемся к процедуре сервера Corr, которая возвращает информацию только по конкретному корреспонденту по его ID. Это ускоряет процесс получения данных. Далее записываем данные в переменные, которые потом выводим в макете (см ниже).

Пример 2.

Например, надо вывести КПП и лицензию, а в датасете есть только id КПП. Обращаемся к процедуре CntrSpec, в которой имеется 2 датасета (114 и 115). См ниже.

 
 

 

Пример вывода цены продажи из карточки товара.

Например, надо вывести цену продажи из карточки товара (Доп. параметры - Продажа - Цена б/н или Цена в/н) - см картинку ниже. Пример вывода этих данных можно посмотреть в макетах «Марочный отчет с плановой ценой (б/н)» и «Марочный отчет с плановой ценой (в/н)» отчета «Акт реализации».

В данном случае может быть 2 варианта: с учетом или без учета исключений по предприятиям (смотря что нужно вывести).

Если нужно учитывать исключения (притом, что у одних товаров могут быть заданы исключения, а у других нет), то сначала надо определить предприятие, а потом уже по этому предприятию выбирать цену товара. Также надо выбрать цену продажи без исключений. И для каждого товара уже выводить либо одну цену, либо другую (если у товара есть цена из исключений, то выводить ее, если нет - просто цену продажи).

Способ нахождения предприятия зависит от того, в макете какого отчета/накладных/... мы это делаем. Возможен вариант, когда id предприятия просто есть в поле датасета, тогда все довольно легко (его надо просто подставить в соответствующую процедуру). В предложенном же примере рассматривается наиболее сложный вариант: с учетом исключений по предприятиям - в зависимости от того, какие фильтры выбрал пользователь (указал конкретные подразделения/юр. лица/предприятия) и/или какие группировки выбрал по ним.

В коде предложенных макетов везде есть комментарии - чтобы разобраться, нужно внимательно их читать.