public void PrintDocuments(IEnumerable <tblDocumentCommon> documents)
        {
            // сортируем по фио и приоритету печати

            // для пациента
            // 2 договора на продажу
            // товарный чек
            // 2 договора на услугу

            var xSortedDocs = (from doc in documents
                               let docOrdPriority = (doc is tblDocumentProduct) ? 0 : ((doc is tblDocumentSalesReceipt) ? 1 : 2)
                                                    orderby doc.ShortName, docOrdPriority
                               select doc).ToList();
            List <DocumentAdapter> xSource = new List <DocumentAdapter>(1);

            xSource.Add(null);
            foreach (tblDocumentCommon doc in xSortedDocs)
            {
                DocumentAdapter xPrintAdapter = new DocumentAdapter(doc);
                xSource[0] = xPrintAdapter;
                PrinterSettings xPrintsettings = (doc is tblDocumentSalesReceipt) ? SalesReceiptPrinterSettings : DefaultDocPrinterSettings;
                xPrintsettings.Copies = doc.CopiesCount;
                ReportClass xReport = GetReport(doc, xSource);
                try
                {
                    xReport.PrintToPrinter(xPrintsettings, xPrintsettings.DefaultPageSettings, false);
                    doc.Printed    = true;
                    doc.IsSelected = false;
                }
                finally
                {
                    xReport.Dispose();
                }
            }
        }
        public ReportClass GetReport(tblDocumentCommon doc, List <DocumentAdapter> reportSource = null)
        {
            List <DocumentAdapter> xSource = reportSource;

            if (xSource == null)
            {
                DocumentAdapter xPrintAdapter = new DocumentAdapter(doc);
                xSource = new List <DocumentAdapter>(1);
                xSource.Add(xPrintAdapter);
            }
            ReportClass xReport;

            if (doc is tblDocumentService)
            {
                xReport = new DocService();
            }
            else if (doc is tblDocumentProduct)
            {
                xReport = new DocSale();
            }
            else if (doc is tblDocumentSalesReceipt)
            {
                xReport = new SaleReceipt();
            }
            else
            {
                throw new Exception("Не определен шаблон документа");
            }
            xReport.SetDataSource(xSource);
            return(xReport);
        }