Последний тюнинг известной обработки 1CQA (консоль прямых запросов 1С++) для 1С:Предприятие-77.

17.12.11

Разработка - Инструментарий разработчика

Авторы исходной версии: Дмитрий Ощепков (dmitro-75@mail.ru), Ivan T Berezdetsky (berezdetsky@yahoo.com). В предлагаемой версии: 1) Добавлена возможность выбирать тип провайдера данных ODBC или OLEDB (только базы DBF); 2) Добавлена возможность редактировать текст запроса в диалоге конструктора запросов, предоставляемого объектом "AddIn.qryConsole" ВК qryConsole.dll (только базы SQL); 3) Расширен список типов объектов, которые могут принимать параметры запроса; 4)Добавлена возможность через параметры запроса укладывать списки ссылок объектов во временные таблицы (в том числе с иерархическим включением). Эти таблицы можно использовать в тексте запроса по имени ‘#’; 5) Добавлена возможность открывать обработку в режиме подбора (или имитации подбора) из других форм для подбора произвольных выборок данных из базы; 6) Сделано множество других улучшений (интерфейсных и пр.);

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Консоль1CQA_ALL.rar
.rar 2,23Mb
352 2 500 руб. Купить
Консоль1CQA.rar
.rar 49,29Kb
23 2 500 руб. Купить
FormEx1CPP.rar
.rar 2,12Mb
22 2 500 руб. Купить
PlugIns.rar
.rar 62,94Kb
17 2 500 руб. Купить
Samples.rar
.rar 3,86Kb
20 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

 

Свет мой, SQL, скажи, да всю правду доложи!

Я ль в инете всех шустрее, всех прикольней и умнее?

Пушкин – АС!

 

Благодарности авторам:

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

Отдельная признательность  Ivanu T Berezdetsky за реализацию поддержки выполнения пакетов запросов. До этого мне приходилось сначала выводить оттранслированный  текст запроса в окне сообщений, а затем выполнять его в QA на сервере.

Исходные версии обработки и много другого полезного можно найти на сайте: http://www.dev.citykirov.ru/.

Обсуждение обработки и разные ее модификации смотрите на форуме:  http://www.1cpp.ru/forum/YaBB.pl?num=1157967835.

 

Требования:

1) Обязательно - наличие предварительно загруженных (или лежащих в одном  каталоге с 1CQA) внешних компонент 1СPP.dll (www.1cpp.ru) и FormEx.dll (www.dorex.pro).

2) Желательно, чтобы в конфигурации был класс определенный пользователем "Общие.Форма.Привязка" (www.dev.citykirov.ru ,автор Дмитрий Ощепков).  Обсуждение класса на форуме 1СРР:  http://www.1cpp.ru/forum/YaBB.pl?num=1200464076. При отсутствии класса обработка работать будет, но без привязок элементов в форме.

3) Желательно (для возможности укладывать списки объектов во временные таблицы) иметь для редактирования списков обработку под именем ПодборUChoice (улучшенная обработка УОПО). Она может быть встроена или лежать в одном каталоге с 1CQA. Без этой обработки будут не доступны специальные типы параметров запроса, через которые создаются временные таблицы.

4) При большом желании (для редактирования запроса в диалоге конструктора) требуется наличие внешней компоненты qryConsole.dll(автор Ivan T Berezdetsky). Обработка при открытии пытается ее загрузить (так же как 1CPP). Если загрузить не удается, то соответствующие элементы управления в обработке становятся недоступными.

Установочный дистрибутив и обсуждение внешней компоненты  - на форуме: http://www.1cpp.ru/forum/YaBB.pl?num=1193394153.  Для работы ВК qryConsole.dll обязательна установка Office web components (OWC11). Иначе обработка будет вас малоприятно ругать при открытии (беда устраняется или установкой OWC11, или удалением/переименованием файла библиотеки – чтоб вообще не грузилась).

 

Описание файлов поставки:

1) Консоль1CQA.rar - обработка 1CQA под именем «Консоль1CQA» (иначе не встраивается);

2) FormEx1CPP.rar – библиотеки 1CPP.dll, FormEx.dll и класс "Общие.Форма.Привязка";

3) PlugIns.rar – вспомогательные обработки ПодборUChoice и ИзменениеВремениДокумента. Последняя обработка используется в меню действий со значением в ячейке таблицы результатов запроса по двойному клику мыши (Рис.11) для изменения даты-времени документа.

4) Samples.rar  – разные примеры запросов, использованные в публикации.

5) Консоль1CQA_ALL.rar – полный набор файлов поставки (все 4 архива);

 

Описание установки:

1) Обеспечить загрузку 1CPP.dll и FormEx.dll (обязательно):

Библиотеки можно скачать с сайтов разработчиков или  взять  из каталога файла поставки \..\FormEx1CPP.rar\FormEx1CPP\DLL\:

Файл 1CPP2037.dll – библиотека 1CPP версии 2.0.3.7, рекомендуемый релиз с ядром FormEx. Для него загрузка FormEx.dll не требуется.

Файл 1CPP2507.dll – библиотека 1CPP версии 2.5.0.7, рекомендуемый релиз с раздельной загрузкой FormEx.

Файл 1CPP3220.dll – библиотека 1CPP версии 3.2.2.0  (последняя с сайта разработчиков)

Файл 1CPP32316.dll – библиотека 1CPP версии 3.2.2.8 (одна из последних тестовых версий с форума: http://www.1cpp.ru/forum/YaBB.pl?num=1288774760/all )  

Файл FormEx205101.dll – библиотека FormEx версии 2.0.5.101 (самая последняя).

При копировании файлов из имени следует убрать цифры версий.

 

Загружать библиотеки можно стандартным способом в процедуре ПриНачалеРаботыСистемы():

                ЗагрузитьВнешнююКомпоненту(КаталогПрограммы ()+"1CPP.dll");

                ЗагрузитьВнешнююКомпоненту(КаталогПрограммы ()+"FormEx.dll");

Если же 1QA будет использоваться как внешняя, то достаточно скопировать файлы dll в каталог обработки. Она сама их загрузит при открытии.

 

2) Подключить класс "Общие.Форма.Привязка" (желательно):

Можно из каталога файла поставки \..\FormEx1CPP.rar\FormEx1CPP\ в каталог базы скопировать файлы Defcls.prm  и  КОП_ОбщиеФормаПривязка.ert. 

А можно включить класс в конфигурацию.  Для этого туда нужно добавить из одноименных внешних файлов обработки Defcls  и  КОП_ОбщиеФормаПривязка.

ВНИМАНИЕ! Если у вас уже используются другие классы, то придется добавить описание класса в файл Defcls.prm  или обработку Defcls  из соответствующих файлов.

 

3) Вспомогательные обработки (желательно):

Скопировать из каталога файла поставки \..\PlugIns.rar\PlugIns\ в каталог обработки 1CQA или добавить в конфигурацию под теми же именами.

 

4) Конструктор запросов (при большом желании):

Установить внешнюю компоненту qryConsole.dll из скаченного дистрибутива (смотри выше). И обязательно установить Office web components (OWC11)!

 

Описание добавлений и улучшений в предлагаемой версии:

1)      Для баз DBF добавлена возможность выбирать интерфейс доступа к данным ODBC или OLEDB (Рис.2).  Для использования OLEDB требуется установить OLEDB vfpoledb provider v9. В базах DBF через ODBC, честно говоря, мне не удалось заставить работать прямые запросы. Через OLEDB вроде все работает.

Для баз SQL по ряду соображений я решил оставить доступ только через ODBC (Рис.1).

2)      Для баз SQL добавлена возможность редактировать текст запроса в диалоге конструктора запросов, поставляемого ВК qryConsole.dll (Рис.3 и Рис.4). Для баз DBF эта возможность, к сожалению, недоступна в текущей версии этой ВК.

3)      Расширен список типов, которые могут принимать параметры запроса (Рис.6). Добавлены следующие типы: Календари, ВидыРасчетов, Бухгалтерские счета, ПланыСчетов (системное перечисление), ВидыСубконто.

4)      Добавлены служебные типы параметры запроса СписокСсылок9, СписокСсылок13 и ИерархияСсылок9.  Значения этих параметров представляют списки объектов определенного типа  и используется для укладывания во временные таблицы ссылок на объекты (включая с иерархическим включением).  Временная таблица доступна в тексте запроса под именем '#'. Для редактирования списков объектов (Рис.7) используется обработка под именем ПодборUChoice (улучшенная обработка УОПО). При отсутствии обработки ПодборUChoice  в конфигурации или в каталоге 1CQA эти служебные типы параметров исключаются из меню выбора типов параметра запроса.

5)      Добавлена возможность открывать 1CQA в режиме подбора (имитации подбора) для возврата в другие формы произвольных выборок данных.

Имитация подбора используется в том случае, когда 1CQA  - внешняя обработка. Тогда функция ОткрытьПодбор(,,) становится бесполезна. Приходится просто открывать внешнюю обработку Консоль1CQA с передачей через параметр формы контекста той формы, которая вызывает подбор.

Имитация выбора в подборе осуществляется вызовом в контексте формы владельце процедуры ОбработкаПодбора(,,,) с помощью метода ВыполнитьПроцедуру(Контекст, ИмяПроцедуры, СписокАргументов) объекта «Сервис» ВК FormEx.dll.

6)      Другие улучшения (их множество, смотрите подробности в описании в самой обработке). Вот  некоторые из них:

  1. При клике по пустой таблице параметров запроса выводится диалог с информацией о работе с параметрами запроса (Рис.5);
  2. Выбор типа объекта производится в удобном красивом диалоге в виде дерева (Рис.6);
  3. При клике по таблице результатов запроса, если значение в ячейке ссылочного типа, выводится меню действий с объектом (Рис.11). Меню позволяет:

    открыть объект для просмотра-редактирования;

    открыть объект в списке (журнале);

    пометить его на удаление;

    снять пометку;

    удалить непосредственно;

    открыть объект для редактирования в обработке 'Редактор Реквизитов' (автор Цылёв Владислав vet7777@mail.ru);

  4. Для документов доступны дополнительные действия:

    провести;

    отменить проведение; 

    изменить дату-время (для этого действия требуется обработка ИзменениеВремениДокумента);

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

Отчет о движениях - в полном вариате (по регистрам, проводкам, записям ЖР и истории реквизитов).

При формировании структуры подчиненности для выборки подчиненых документов используются прямые запросы к базе. 

7)      Различные варианты очистки запроса (Рис.8);

8)      Печать таблицы параметров запроса и таблицы его результатов (Рис.9).

9)      Выбор значения параметра 'Collate' / 'Collating' в строке соединения (только базы DBF) (Рис.13).  

10)    Добавлена обработка спец.комментариев в тексте запроса (для установки спец.опций выполнения запроса).
 поддерживается обработка следующих спец.комментариев:

'--!ExecuteTransaction' - выполнять все батчи запроса в единой транзакции (при ошибке хоть в одном батче транзакция откатывается);
'--!ExecuteRollback'        - выполнять все батчи в транзакции с ее откатом независимо от результата выполнения (для просмотра "результатов" запроса без фактического изменения данных);
подробности смотрите в макете "СпецКомметарииЗапроса" обработки (можно вывести в табличный документ, Рис.5 и Рис.9).

11)    Добавлен вывод описания обработки в табличный документ ( Рис.5 и Рис.9).

 

Применение:

Для баз SQL доступны особые режимы выполнения запроса (Рис.12): проверка синтаксиса и вывод плана выполнения запроса. План выполнения кроме таблицы результатов выводится еще в отдельном текстовом документе.

Для баз DBF использование ограничено в основном разделенным режимом. В монопольном режиме в базах DBF выполнять прямые запросы не удается без специальных ухищрений (подмены библиотеки DBEng32.dll в каталоге BIN) или использования особых провайдеров доступа к данным.

При попытке использования в монопольном режиме обработка пытается выполнить тестовый запрос: "select COUNT(*) from 1SUSERS". Если запрос выполняется без ошибок - никаких сообщений не выводится. Иначе (если тестовый запрос выдает ошибку) программа  выдает пользователю предупреждение об этом печальном факте, но работать в консоли не запрещает. Если после этого запрос вдруг выполнился без ошибок, обработка запоминает эту радость и больше не тревожит пользователя об этом ... до первой следующей ошибки запроса, в тексте которой есть строка "Cannot open file" Cool.

Основные направления для использования:

1)      Для разработчиков: проверка запросов, изучение вопроса о том где, как и какие данные хранятся в базе данных.

2)      Администрирование данных: исправление ошибок в ИБ в дополнение к процедуре тестирования-исправления. В больших рабочих базах тестирование-исправление выполнить нереально. У меня оно длилось, например, больше двух суток. Поэтому тестирование запускается на копии базы в пакетном режиме с записью лога. Затем по информации из лога в 1CQA запросом SELECT вытаскиваем некорректные записи из базы. После анализа этих записей принимается решение: 

  • исправляем запросом UPDATE ,
  • удаляем запросом DELETE,
  • помечаем на удаление, чтобы потом удалить с контролем ссылочной целостности (пометить можно тоже в 1CQA запросом  UPDATE).

3)      Реорганизация данных при обновлениях: установка новых реквизитов, ресурсов и измерений в таблицах объектов метаданных, например регистров.  В архиве Samples.rar  из файлов поставки в файле Sample_TransforRegister_SQL.qry находится пример реально использованного скрипта для довольно сложной установки новых измерений и реквизитов регистра. Фактически скрипт заменяет перепроведение по регистру (выборочно, без пересчета итогов).  Итоги также можно пересчитать прямыми запросами с помощью обработок (только базы SQL):

 ПересчетИтоговРегистров.ert или 1CУстановкаТА.ert.

 

Благодарности:

Кроме авторов обработки хотелось бы также поблагодарить всех разработчиков 1CPP и FormEx. Без  их самоотверженного труда 1С-ка была тормозна, скучна, безлика и беспросветна!

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Системный администратор Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    25457    60    Gvozdod    8    

18

Инструментарий разработчика Системный администратор Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    193661    1923    Alexoniq    1677    

505

Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    36734    61    O-Planet    78    

49

Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    25114    Reptile    5    

36

Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)

Встала недавно задача для одной организации, которая все еще на 1С 7.7 немного автоматизировать работу отдела продаж. А именно уйти от ручного заполнения договоров, сделанных юристами в MS Word. Договора от разных фирм и разного назначения отличались. Переводить их в таблицы 1С очень не хотелось и нашел способ прямо в файлах Word сделать небольшие дополнения, чтобы можно было печатать, используя именно эти заготовки юристов.

1 стартмани

14.07.2013    30209    57    adamx    11    

14

Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    21121    36    MarSeN    14    

17

Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    38930    51    venger    7    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. yuraos 1008 20.11.11 03:16 Сейчас в теме
Авторы исходной версии: Дмитрий Ощепков (dmitro-75@mail.ru),
Ivan T Berezdetsky (berezdetsky@yahoo.com). В предлагаемой версии:
1) Добавлена возможность выбирать тип провайдера данных ODBC или OLEDB (только базы DBF);
2) Добавлена возможность редактировать текст запроса в диалоге конструктора запросов, предоставляемого объектом "AddIn.qryConsole" ВК qryConsole.dll (только базы SQL);
3) Расширен список типов объектов, которые могут принимать параметры запроса;
4)Добавлена возможность через параметры запроса укладывать списки ссылок объектов во временные таблицы (в том числе с иерархическим включением). Эти таблицы можно использовать в тексте запроса по имени ‘#<ИмяПараметра>’;
5) Добавлена возможность открывать обработку в режиме подбора (или имитации подбора) из других форм для подбора произвольных выборок данных из базы;
6) Сделано множество других улучшений (интерфейсных и пр.);


Перейти к публикации

1. yuraos 1008 20.11.11 03:16 Сейчас в теме
О сколько нам консолей чудных готовит просвещенья дух... :D
2. yuraos 1008 20.11.11 12:49 Сейчас в теме
... или счастья много не бывает! ;)))))
yuraos пишет:

О сколько нам консолей чудных готовит просвещенья дух...
3. yuraos 1008 20.11.11 17:53 Сейчас в теме
Народ!!!
Если обработка скажет что-то странное насчет ваших прав - значит вы себя обидели! ;))))
Поскольку обработка не для шаловливых ручек,
при открытии там сразу написано:
ПравоЕсть=1;
ПравоЕсть=ПравоЕсть
*ПравоДоступа("УдалениеПомеченныхОбъектов")
*ПравоДоступа("ПоискСсылокНаОбъекты")
*ПравоДоступа("ИспользованиеЛюбыхВнешнихОтчетов")
*ПравоДоступа("ГрупповоеПроведениеДокументов")
*ПравоДоступа("УправлениеБухгалтерскимиИтогами")
*ПравоДоступа("УправлениеОперативнымиИтогами")
*ПравоДоступа("МонопольныйРежим")
*ПравоДоступа("СохранениеИВыгрузкаДанных")
*ПравоДоступа("АдминистративныеФункции"); // по совокупности крутых прав
Если (ПравоЕсть=0) Тогда
Предупреждение("Недостаточно круты права доступа !!!",60);
СтатусВозврата(0);
Возврат;
КонецЕсли;
4. yuraos 1008 20.11.11 17:55 Сейчас в теме
yuraos пишет:

Народ!!!
Если обработка скажет что-то странное насчет ваших прав - значит вы себя обидели! ;))))
Поскольку обработка не для шаловливых ручек,
при открытии там сразу написано:
ПравоЕсть=1;
ПравоЕсть=ПравоЕсть
*ПравоДоступа("УдалениеПомеченныхОбъектов")
*ПравоДоступа("ПоискСсылокНаОбъекты")
*ПравоДоступа("ИспользованиеЛюбыхВнешнихОтчетов")
*ПравоДоступа("ГрупповоеПроведениеДокументов")
*ПравоДоступа("УправлениеБухгалтерскимиИтогами")
*ПравоДоступа("УправлениеОперативнымиИтогами")
*ПравоДоступа("МонопольныйРежим")
*ПравоДоступа("СохранениеИВыгрузкаДанных")
*ПравоДоступа("АдминистративныеФункции"); // по совокупности крутых прав
Если (ПравоЕсть=0) Тогда
Предупреждение("Недостаточно круты права доступа !!!",60);
СтатусВозврата(0);
Возврат;
КонецЕсли;
Показать


вдруг какой продвинутый юзвер (знаю я таких) додумается написать:
truncate table _1sjourn
:)))))))
5. CaSH_2004 376 21.11.11 02:00 Сейчас в теме
Красиво расписано, я так больше на 8-ке, неужели крупные конторы на 7-ке не думают переходить на 8-ку? Все будете допиливать 7-ку?
6. yuraos 1008 21.11.11 05:05 Сейчас в теме
Да думают, думают... и еще раз думают!
И чем крупней - тем дольше и трудней :)))))
7. dicwork 21.11.11 20:42 Сейчас в теме
(6) yuraos
Просто если много наработанного кода под "семерку", его трудно сразу вот так взять и перенести на "восьмерку". Поэтому и сидим на "семерке" и пилим ее дальше под себя.
8. yuraos 1008 22.11.11 06:10 Сейчас в теме
dicwork пишет:
(6) yuraos
Просто если много наработанного кода под "семерку", его трудно сразу вот так взять и перенести на "восьмерку". Поэтому и сидим на "семерке" и пилим ее дальше под себя.

Етта точно!
Сидим на этом суку и пилим-пилим-пилим его .... ;))))))
Че дальше бывает по закону гравитации наверное все знают.
9. yuraos 1008 22.11.11 21:26 Сейчас в теме
Доброго времени суток! Обновлены файлы поставки:
Консоль1CQA_ALL.rar
Консоль1CQA.rar
PlugIns.rar
Подправлен мелкий баг в консоли при "перезагрузке запроса" +
+ некритические изменения во вспомогательной обработке ИзменениеВремениДокумента.ert.
10. oav 24.11.11 07:36 Сейчас в теме
Очень хорошо ,что появилась возможность редактировать запрос.
11. Naked 24.11.11 11:46 Сейчас в теме
Кстати ИМХО на семерке как раз и остались большинство крупных организаций, и причина известна:
большая организация => очень большие запросы\хотелки узеров => очень очень много дописок, и перенос ни к чему если все работает на 7
12. Ёпрст 1068 24.11.11 13:07 Сейчас в теме
(0) А зачем древние версии ВК кидать в архив ?
14. yuraos 1008 24.11.11 14:17 Сейчас в теме
(12) Ёпрст,
версии в архиве те,
которые на сайте 1cpp указаны как "рекомендованные стабильные релизы". :)))
15. yuraos 1008 24.11.11 14:23 Сейчас в теме
yuraos пишет:
(12) Ёпрст,
версии в архиве те,
которые на сайте 1cpp указаны как "рекомендованные стабильные релизы". :)))


а что под версией 1cpp3220 или 1cpp3227
будет в dbf и в монопольном режиме работать
без подмены библиотеки DBEng32.dllв каталоге BIN???
17. Ёпрст 1068 24.11.11 15:22 Сейчас в теме
(15)Не будет. И можно работать либо на заплатке от hogik, либо на провайдере от ужаста, без изменения бэкенда
13. Ёпрст 1068 24.11.11 13:13 Сейчас в теме
+Для oledb строка подключения устаревшая + запросы в дбф базе сто лет в обед выполняются в монопольном режиме.
152. yuraos 1008 11.12.13 14:04 Сейчас в теме
EXECSCRIPT(
"sel ect id as Ссылка from $Справочник.Номенклатура INTO TABLE #Номенклатура)"+
CHR(13)+
"select Таб.Ссылка as [Ссылка$Справочник.Номенклатура] fr om #Номенклатура as Таб")
159. sss999 50 12.12.13 12:19 Сейчас в теме
EXECSCRIPT(
"sel ect id as Ссылка from $Справочник.Номенклатура INTO TABLE #Номенклатура)"+
CHR(13)+
"select Таб.Ссылка as [Ссылка$Справочник.Номенклатура] fr om #Номенклатура as Таб")
не работает у меня говорит нет dbf номенклатура
177. yuraos 1008 15.12.13 19:08 Сейчас в теме
пришлось сделать еще один вложенный подзапрос,
чтобы вычислить дату оплаты кредит-документа:

NVL($КДок1.ДатаОплаты,NVL($КДок2.ДатаОплаты,NVL($КДок3.ДатаОплаты,NVL($КДок4.ДатаОплаты,NVL($КДок5.ДатаОплаты,{d’0001-01-01’}))))) as ДатаОплаты

---
теперь как я понимаю твоя задача все это разломать,
а потом правильно собрать соединив CHR(13)
;)

во вложении - исходник запроса для консоли
Прикрепленные файлы:
!ВедомостьПокупателей.qry
178. sss999 50 15.12.13 21:14 Сейчас в теме
(177) блин я немножко другое спрашивал,вот циклы,и после них мой запрос перестает работать,через скрипт ,циклы должны быть рабочие выдернуты из другого отчета.щас проверю с твоим.
// Знак "'" не поддерживается, поэтому заменяем на скобки

Скобка="[";
номпозиции=Найти(ТекстЗапроса,"'");
Пока номпозиции<>0 Цикл
ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
Если Скобка="[" Тогда Скобка="]"
Иначе Скобка="["
КонецЕсли;
номпозиции=Найти(ТекстЗапроса,"'");
КонецЦикла;


// Знак """ не поддерживается, поэтому заменяем на скобки

Скобка="[";
номпозиции=Найти(ТекстЗапроса,"""");
Пока номпозиции<>0 Цикл
ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
Если Скобка="[" Тогда Скобка="]"
Иначе Скобка="["
КонецЕсли;
номпозиции=Найти(ТекстЗапроса,"""");
КонецЦикла;

//Разделитель строк не поддерживается поэтому убираем,

//строки больше 255 симолов не поддерживаются , поэтому удлиняем при помощи CHR(13)

ВрТекстЗапроса="";
Для Счетчик=1 По СтрКоличествоСтрок(ТекстЗапроса) Цикл
ТекСтрока=СтрПолучитьСтроку(ТекстЗапроса,Счетчик);
ТекСтрока=" "+СокрЛП(ТекСтрока)+" ";
Если Счетчик=1 Тогда
ВрТекстЗапроса=ВрТекстЗапроса+ТекСтрока;
Иначе
Если СокрЛП(ТекСтрока)<>"" Тогда
ПереносСтрокиФоксПро="'+"+CHR(13)+"'";
ВрТекстЗапроса=ВрТекстЗапроса+ПереносСтрокиФоксПро+ТекСтрока­;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекстЗапроса = ВрТекстЗапроса;
ВрТекстЗапроса = "";


номпозиции=Найти(ТекстЗапроса,"{d"); // {d [2006-01-01]}

Пока номпозиции<>0 Цикл
Начало=Лев(ТекстЗапроса,номпозиции-1);
ДатаПар=Сред(ТекстЗапроса,номпозиции+4,10);
Конец=Сред(ТекстЗапроса,номпозиции+16);

ТекстЗапроса=Начало+"{^ "+ДатаПар+"}"+Конец;
номпозиции=Найти(ТекстЗапроса,"{d");
КонецЦикла;



ТекстЗапроса = "EXECSCRIPT(' SEL ECT * fr om ("+текстзапроса+") as WW INTO table TempTmpTable1') ";
180. yuraos 1008 16.12.13 09:03 Сейчас в теме
(178) sss999,
в принципе я так и понял,
что ты программно генеришь текст запроса с функцией EXECSCRIPT()
на основе исходного.

но с учетом замечания в (173) я подумал, что проблема связана
с непроверенным изменением запроса для учета дат оплат возвратов.
181. sss999 50 16.12.13 11:32 Сейчас в теме
182. sss999 50 16.12.13 13:01 Сейчас в теме
(180) что подскажешь есть идеи ? ))
183. yuraos 1008 16.12.13 13:59 Сейчас в теме
(182) sss999,
мутная эта вся тема с функцией EXECSCRIPT()
...
то нельзя, это не поддерживается.
одно лишь преимущество -
- можно пакет команд выполнить за одно обращение к провайдеру данных.
но при этом текст запроса приходится нетривиально преобразовывать.
...
я бы попытался обойтись без нее
184. sss999 50 17.12.13 11:53 Сейчас в теме
(183) [Фирма_1c_type_Справочник_1c_dot_Фирмы] не знаешь как сделать что бы после обработки парсером псевдоним был не такой а просто "фирма" при этом что бы нормально отображался не как id?
187. yuraos 1008 17.12.13 12:26 Сейчас в теме
(184) sss999,
если "чтобы отображалось по нормальному" - то никак

если не использовать 1с-ную типизацию в алиясе поля
вместо
СпрФир.ID as [Фирма$Справочник.Фирмы]
писать просто
СпрФир.ID as Фирма

то имя поля транслироваться будет "нормально",
но при выгрузке результата запроса в тз
будут отображаться сами id-ники, а не наименования
188. yuraos 1008 17.12.13 12:36 Сейчас в теме
(187)
ну правда можно еще выводить вместо id-ника наименование
СпрФир.DESCR as Фирма.
но тогда не будет ссылки на элемент справочника.
189. sss999 50 17.12.13 13:11 Сейчас в теме
(188) NVL(КДок1.sp1175,NVL(КДок2.sp1230,NVL(КДок3.sp539,NVL(КДок4.sp854,NVL(КДок5.sp465,{^ 001-01-01’}) вот из за этой конструкции не отрабатывает скрипт,когда делаю одновложенное то работает.
190. sss999 50 17.12.13 13:11 Сейчас в теме
(188) как то можно заменить на другой код без вложенности?
191. yuraos 1008 17.12.13 13:25 Сейчас в теме
(190) sss999,
это точно из-за вложенности, а не из-за длины строки???
можно переделать через ICASE - но будет длиннее.
192. yuraos 1008 17.12.13 13:41 Сейчас в теме
(191)
вот так через ICASE:

ICASE(NOT ISNULL($КДок1.ДатаОплаты),$КДок1.ДатаОплаты,NOT ISNULL($КДок2.ДатаОплаты),$КДок2.ДатаОплаты,NOT ISNULL($КДок3.ДатаОплаты),$КДок3.ДатаОплаты,NOT ISNULL($КДок4.ДатаОплаты),$КДок4.ДатаОплаты,NOT ISNULL($КДок5.ДатаОплаты),$КДок5.ДатаОплаты,DATE(100,1,1)) as ДатаОплаты
193. yuraos 1008 17.12.13 13:45 Сейчас в теме
(192)
к стати наверное литералы дат вроде
{d’1900-01-01’}
лучше заменять функцией
DATE(1900,1,1)
...
но правда год в этой функции должен быть >= 100.
194. sss999 50 17.12.13 14:23 Сейчас в теме
(193) {d’1900-01-01’} все заработало с изначальной ,здесь был косяк нужно было так {d’ 1900-01-01’}
196. yuraos 1008 17.12.13 14:27 Сейчас в теме
(194) sss999,
SQL - АГБАР! ВО ИСТИНУ - АКБАР!!!
201. sss999 50 17.12.13 14:44 Сейчас в теме
(196) а не подскажешь что бы из таблицы прочитать не id что нужно сделать ставить снова [_$_]?
206. yuraos 1008 17.12.13 17:05 Сейчас в теме
(201) sss999,
да, в самом последнем запросе (по вложенности или в пакете),
результат которого выгружается в ТЗ,
в алиясе полей агрегатных типов надо указывать 1с-ную
типизацию вроде as [Фирма$Справочник.Фирмы]
--
только имей ввиду,
если каким-то образом вытащишь id-ники из чужой базы
то результат типизации может быть непредсказуем и заведомо неправильным.
208. sss999 50 17.12.13 18:07 Сейчас в теме
(206) это еще с чего вдруг?
209. yuraos 1008 18.12.13 08:02 Сейчас в теме
(206)(208) sss999, точнее надо было бы сказать:
результат типизации может быть непредсказуем и скорее всего неправильным.

поясняю на примере:
Есть база АА и база ББ.
И там и там есть справочник Контрагенты.

Id-ники грубо говоря это числа
уникальные в пределах одной таблицы и
возрастающие в порядке ввода элементов.

Пусть в базе АА контрагентов добавляли в следующем порядке:
К1(1), К2(2) - в скобках условно значение Id

А в базе ББ пусть в начало вклинился контрагент К3:
К3(1), К1(2), К2(3)

И так что имеем при типизации данных выдернутых из базы ББ,
но типизируемых в базе АА:
Контрагент К3(1) соотнесется с контрагентом К1(1)
К1(2) - с К2(2)
а контрагент К2(3) - не соотнесется ни с чем (скорее всего результатом типизации будет битая ссылка)

Еще более криво получится при группировке объединенных данных по id-никам:
В описанной выше ситуации
данные контрагента К1(1) из базы АА сложатся с данными контрагента К3(1) из базы ББ
- это уже будет искажением числовых учетных данных
210. yuraos 1008 18.12.13 08:08 Сейчас в теме
(209)
наименьшим злом в этой ситуации было бы
выбирать в конечной выборки для группировки
не id-ники а строковые представления.

для справочников - это наименования (ну может в редком случае код)

а для кредит-документов
....
опа - тут мы с тобой и попались
;)
211. sss999 50 18.12.13 08:43 Сейчас в теме
(210) отчет же есть и им пользуются и вроде как не жаловались,значит не совсем так иначе бы там все перемешивалось какая вероятность что как ты сказал idшники в двух базах будут совпадать у любого контрагента даже хоть он один всего в базах .значит базы наследники друг друга.мне вот непонятно ссылка в семерке это совокупность id и еще там чего то,а как вытащить ссылку что бы можно было и остальные поля вытаскивать из нее как в восьмерке,например descr я же не достану из id а только из самой таблицы справочника,получается ссылка это сама таблица?
213. yuraos 1008 18.12.13 16:41 Сейчас в теме
(211) sss999,
1. Ну дай бог, если базы связаны УРБД и все справочники заполняются в центральной базе
и при переносе в перефирийных базах добавляются в том же порядке, что в центральной.
:)

2. не путай ссылку как "объект" или значение "агрегатного типа".
с идентификатором ссылки,
которую часто тоже по простому обзывают "ссылкой".

через объект через точку действительно вытаскиваются остальные атрибуты.
ну а в запросах все атрибуты приходится тянуть из полей соответствующих таблиц
явно или неявно (как в 8-ке при разименовывании поля Ссылка).
216. sss999 50 18.12.13 22:10 Сейчас в теме
(213) я имел ввиду как в восьмерке ссылка,как в семерке вытащить также поле ,что бы из него можно и другие поля вытаскивать и был как идентификатор
219. yuraos 1008 19.12.13 19:27 Сейчас в теме
(216) sss999,
как я понял ты имел ввиду, что
в восьмерке можно писать запросы вроде этого:

ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Документ,
РеализацияТоваровУслуг.Контрагент,
РеализацияТоваровУслуг.Контрагент.Код,
РеализацияТоваровУслуг.Контрагент.Наименование,
РеализацияТоваровУслуг.Контрагент.ИНН,
РеализацияТоваровУслуг.Контрагент.КПП
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
Показать


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

при этом на более низком уровне движок запроса выполняет запрос
несколько с другим текстом:

ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Документ,
РеализацияТоваровУслуг.Контрагент,
Контрагенты.Код КАК КонтрагентКод,
Контрагенты.Наименование КАК КонтрагентНаименование,
Контрагенты.ИНН КАК КонтрагентИНН,
Контрагенты.КПП КАК КонтрагентКПП
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО РеализацияТоваровУслуг.Контрагент = Контрагенты.Ссылка
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
Показать


то есть получение подчиненных полей неявно сводится к использованию
дополнительных левых соединений и подчиненные поля выбираются
из таблиц с правой стороны этих соединений.
220. yuraos 1008 19.12.13 19:30 Сейчас в теме
(219)
Ну а то с чем ты связался - прямые запросы 1cpp в 1с-7.7
да еще в dbf-ной базе

ЭТО ЕСТЬ ТОТ САМЫЙ НАИНИЗКОУРОВНЕВЫЙ SQL-ЯЗЫК

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

так-что придется тебе привыкать писать запросы так,
как они примерно на самом деле делаются
:)
16. Ёпрст 1068 24.11.11 15:20 Сейчас в теме
>>>"рекомендованные стабильные релизы".

Этой "издёвке" года 4 уже.
И читай дальше, что пишут на сайте:

icpp/3.x (рекомендуется к использованию)

В начале 2008 года проект 1C++ портирован с MSVS 6.0 на MSVS 2005(2008) / Intel Compiler (IСL) / STLPort / Boost 1.35.0

Дальнейшее развитие идет под именем icpp (версии 3.x.x.x)
18. Ёпрст 1068 24.11.11 15:22 Сейчас в теме
+ А строка для оледб у тебя не верная (точнее, устаревшая)
19. 24.11.11 20:32 Сейчас в теме
Ёпрст пишет:

+ А строка для оледб у тебя не верная (точнее, устаревшая)


Млин, ЁПРСТ, ты чувак умный, авторитетный!
Не поделися с обчеством умом-размом?

Народ с открытым ртом смотрит на тебя... ;))))))))
20. oav 25.11.11 10:59 Сейчас в теме
Хорошая вещь. Главное удобная и простая и понятная.!!!
21. Ёпрст 1068 25.11.11 16:26 Сейчас в теме
22. yuraos 1008 26.11.11 10:37 Сейчас в теме
Ёпрст пишет:

На, дарю


Преааааааааааааагромммммммное спасибо!
Если такие умные люди ничего не писали бы полезного на форумах.....
....они бы потеряли бы всякий смысл! ;)))))))))))))))))))))))))))))))))))))))))
23. yuraos 1008 26.11.11 10:45 Сейчас в теме
Ёпрст пишет:

>>>"рекомендованные стабильные релизы".

Этой "издёвке" года 4 уже.
И читай дальше, что пишут на сайте:

icpp/3.x (рекомендуется к использованию)

В начале 2008 года проект 1C++ портирован с MSVS 6.0 на MSVS 2005(2008) / Intel Compiler (IСL) / STLPort / Boost 1.35.0

Дальнейшее развитие идет под именем icpp (версии 3.x.x.x)

----
Пардонс ... не думал что это "для лохов".
Учтемс что разработчики иногда шутятс :))))))))))))))))))
24. yuraos 1008 26.11.11 18:31 Сейчас в теме
Всем доброе время суток!!!
Обновлены файлы поставки:
Консоль1CQA.rar, Консоль1CQA_ALL.rar, и PlugIns.rar .
-------------------------------------------------------------------------------------
1) Для устранения "навязчивого сервиса" добавлен флаг 'ДП' над кнопкой "Выполнить" (по умолчанию сброшен).
Если флаг установлен - выводится меню дополнительных действий.
Если не установлен - просто выполняется запрос.
2) Для баз DBF добалена возможность выбирать значение параметра 'Collate' / 'Collating'
через меню действий, выводимого по кнопке "Выполнить" (Скриншот 13).
4) В сервисной обработке ПодборUChoice.ert устранен мелкий баг.
5) По замечаниям господина ЁПРСТ в архив FormEx1CPP.rar
добавлены последние версии ВК 1cpp.dll.
-------------------------------------------------------------------------------------
Всем спасибо за внимание!
25. JohnyDeath 302 27.11.11 19:09 Сейчас в теме
Оригинально ты авторов отблагодарил - засветил их мыло для спам-ботов и прочей нечести!
26. пользователь 30.11.11 17:04
Сообщение было скрыто модератором.
...
27. CheBurator 3235 03.12.11 05:04 Сейчас в теме
елы-палы.. как-то у меня консоль запросов от Ivan T Berezdetsky весьма существенно отличается от сабжевой... а консоль - достаточно свежая, еще по моей проьбе Ivan T Berezdetsky вносил/попралвл допфункционал...
28. yuraos 1008 04.12.11 00:38 Сейчас в теме
Всем доброго времени суток!
Обновлены файлы поставки Консоль1CQA_ALL.rar и Консоль1CQA.rar.

Отчеты "Движения документа" и "Структура подчиненности"
(используются при обработке выбора из меню действий с объектом в таблице результатов запроса)
интегрированы в консоль, чтобы не зависеть от используемой конфигурации.

Отчет о движениях - в полном вариате (по регистрам, проводкам, записям ЖР и истории реквизитов).

При формировании структуры подчиненности для выборки подчиненых документов используются прямые запросы к базе.

Также оптимизировано поведение консоли для баз DBF в монопольном режиме:
При открытии обработка в блоке попытка-исключение пытается выполнить тестовый запрос:
select count(*) from 1susers.
Если при выполнении запроса исключения не возникает -
- значит в монопольном режиме прямые запросы работают (пользователь подсуетился для этого).
И поэтому ему не надо выводить никаких сообщений "о невозможности выполнить запрос".
29. yuraos 1008 04.12.11 13:10 Сейчас в теме
CheBurator пишет:

елы-палы.. как-то у меня консоль запросов от Ivan T Berezdetsky весьма существенно отличается от сабжевой... а консоль - достаточно свежая, еще по моей проьбе Ivan T Berezdetsky вносил/попралвл допфункционал...

Сначала мне по наследству досталась, повидимому, первоначальная версия
консольки от Дмитрия Ощепкова.
Я ее довольно сильно натюнил:
прикрутил режим подбора (нада было),
конструктор запросов (для развлекухи, но иногда полезен),
укладывание списков ссылок во впеменные таблицы (бывает полезно),
ну и всяких бантиков навязал интерфейсных (вроде выбора типа параметра в дереве).
При этом я старался сильно не "ломать" диалог и модуль.
Но недавно мне попалась вот эта версия консоли
http://www.1cpp.ru/forumfiles/Attachments/1CQA_001.zip
И мне сильно захотелось имитацию исполнения пакетного запроса
(эта фича меня щас здорово выручает, ломаю регистры перед обрезкой базы неподетски!).
Что бы объединить функционал двух версий обработок,
пришлось все довольно сильно все переделать (и диалоге, и в модуле).
Так что эта консоль довольно сильно отличается от исходных.
Но авторская информация в описании оставлена без изменений + добавлено от себя.
30. pupkinSana 118 06.12.11 12:00 Сейчас в теме
77 forever

Нах мне 8ка если все инструменты для работы есть в семерке?
77+ООП = не надо мучать попу 8кой
31. fishca 1317 06.12.11 12:05 Сейчас в теме
(30) если уж Орефков повернулся в сторону восьмерки, то все инструменты скоро будут и в восьмерке ;).
32. yuraos 1008 06.12.11 17:59 Сейчас в теме
(31) fishca,
ты имеешь наверное ввиду этот проект
http://snegopat.ru/ ???
ну будем надеяться,
что только расширением возможностей конфигуратора дело не закончиться
:)))))))))))
Эх, как я буду в 8-ке без своих любимых индексированных таблиц !!!
34. fishca 1317 07.12.11 08:33 Сейчас в теме
(32) тебе стандартных средств работы с индексами в восьмерке не хватает?
ТаблицаЗначений (ValueTable)
Индекс (IndexOf)
Синтаксис:
Индекс(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: СтрокаТаблицыЗначений. Строка таблицы значений, для которой нужно определить индекс.
Возвращаемое значение:
Тип: Число. Индекс указанной строки в коллекции. Если не найдено, то возвращается -1.
Описание:
Получает индекс строки в коллекции строк таблицы значений.
35. yuraos 1008 07.12.11 19:39 Сейчас в теме
fishca пишет:

(32) тебе стандартных средств работы с индексами в восьмерке не хватает?
ТаблицаЗначений (ValueTable)
Индекс (IndexOf)
Синтаксис:
Индекс(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: СтрокаТаблицыЗначений. Строка таблицы значений, для которой нужно определить индекс.
Возвращаемое значение:
Тип: Число. Индекс указанной строки в коллекции. Если не найдено, то возвращается -1.
Описание:
Получает индекс строки в коллекции строк таблицы значений.
Показать


fishca, ты наверное хотел не про эти индексы ;)))
а про вот эти (иначе - совсем не в тему попал):

1) ТаблицаЗначений (ValueTable)
Индексы (Indexes)
Использование:

Только чтение. 
Описание:

Тип: ИндексыКоллекции. 
Содержит коллекцию индексов таблицы значений.

2) ИндексыКоллекции (CollectionIndexes)
Добавить (Add)
Синтаксис:

Добавить(<Колонки>) 
Параметры:

<Колонки> (обязательный)

Тип: Строка. 
Строковое описание колонок индекса в виде: "Колонка1, Колонка2...". 
Возвращаемое значение:

Тип: ИндексКоллекции. 

Описание:

Добавляет индекс в список индексов коллекции.
Показать


и с 1cpp наверняка не работал...
... индексированная таблица там не просто таблица значений с индексами
для ускорения перебора строк, а нечто большее, вот почитай справку он-лайн:
http://www.1cpp.ru/docum/icpp/html/IndexedTable.html
33. yuraos 1008 06.12.11 18:03 Сейчас в теме
yuraos пишет:

(31) fishca,
ты имеешь наверное ввиду этот проект
http://snegopat.ru/ ???
ну будем надеяться,
что только расширением возможностей конфигуратора дело не закончиться
:)))))))))))
Эх, как я буду в 8-ке без своих любимых индексированных таблиц !!!

Кстати всем рекомендую!
Вот здесь можно скачать бесплатную демо-версию:
Общедоступная демо-версия на базе релиза 1.1.1.2
36. EvgeniuXP 07.12.11 21:04 Сейчас в теме
Спасибо, что не забываете про 1С:Программистов 7.7, которые мучаются и деваться не куда, отличная консоль запросов! пользуюсь постоянно ей!
37. KrakoZyabl 77 08.12.11 13:30 Сейчас в теме
Ух, ты, Спасибо !!!!!+++
38. yuraos 1008 08.12.11 18:09 Сейчас в теме
EvgeniuXP пишет:

Спасибо, что не забываете про 1С:Программистов 7.7, которые мучаются и деваться не куда, отличная консоль запросов! пользуюсь постоянно ей!


Да трудно про себя самого забыть!!!
;)))))))))))))
39. ander_ 10.12.11 11:38 Сейчас в теме
Спасибо! И старая консоль не раз выручала, а с этой гораздо удобней.
40. yuraos 1008 11.12.11 23:17 Сейчас в теме
Всем доброе время суток!
Обновлены файлы поставки:
- Консоль1CQA_ALL.rar
- Консоль1CQA.rar
- FormEx1CPP.rar
Текущие изменения:
1) Добавлена обработка спец.комментариев в тексте запроса (для установки спец.опций выполнения запроса).
поддерживается обработка следующих спец.комментариев:
'--!ExecuteTransaction' выполнять в транзакции с фиксацией или откатом (в зависимости от ошибок);
'--!ExecuteRollback' выполнять в транзакции с последущим откатом
(для просмотра "результатов" запроса без изменения данных в базе);
подробности в макете "СпецКомметарииЗапроса" (можно вывести в табличный документ из диалога обработки).
2) Добавлен вывод в табличный документ описания обработки;
3) В меню действий с объектом по клику мышью добавлена
команда открытия объекта для редактирования в обработке
'Редактор Реквизитов' (автор Цылёв Владислав vet7777@mail.ru);
4) В файле FormEx1CPP.rar выложена подправленная версия класса "Общие.Форма.Привязка"
(устранена ошибка времени выполнения, проявляющаяся в терминале,
если установлен размер окна приложения в 'процентах от размера рабочего стола'
большое спасибо Pari за обсуждение проблемы);
41. Гость 13.12.11 16:44
Спасибо, не помешает
42. yuraos 1008 17.12.11 14:44 Сейчас в теме
Всем доброе время суток!
Обновлены файлы поставки:
- Консоль1CQA_ALL.rar
- Консоль1CQA.rar
Текущие изменения:
1) Исправлен баг: не выводилось описание обработки (из-за неправильного указания имени макета с описанием).
2) Исправлен баг: не формировалось дерево документов при обработке команды меню действий со значением в ячейке таблицы результатов запроса (из-за неправильного вызова процедуры рекурсивного вывода на печать подчиненных документов).
43. VIC_2010 23.12.11 15:08 Сейчас в теме
Большое спасибо! Именно с этой обработки начал применять 1С++...
44. yuraos 1008 23.12.11 16:31 Сейчас в теме
(43) VIC_2010, пажалуста!
только посторожней с нею ...
... а то "хорошее" - это сильнодействующий наркотик.
К нему быстро привыкают!!!
;))))))))))))))))))))
45. Naked 28.12.11 08:07 Сейчас в теме
Довольно таки хорошая штука)))
народ, подскажите, может быть есть что либо в 7.7 для прямых запросов, похожее на 8шный конструктор запросов?
46. yuraos 1008 28.12.11 08:41 Сейчас в теме
Naked пишет:

Довольно таки хорошая штука)))

народ, подскажите, может быть есть что либо в 7.7 для прямых запросов, похожее на 8шный конструктор запросов?

Есть штатный убогий инструмент, для таких же штатных убогих запросов.
;))))
Есть так же примочки для запросов 1c++:

Вот эта примочка для режима конфигуратора:
http://infostart.ru/public/14933/?PAGEN_1=1#comm527164

Примочка для режима 1с-преприятие описана в этой статье и использавана в использавана данной консоли.
ЗЫ:
правда примочки эти работают только для баз SQL
:((((((((((
47. mayer 11.01.12 18:02 Сейчас в теме
Очень удобная вещь! Благодарствую! :)
48. wunderland 203 04.02.12 18:52 Сейчас в теме
Подскажите, а обратиться в режиме прямого запроса к БухгалтерскимИтогам возможно?
Кажется, мне где-то попадался пример такого запроса, но через консоль не вижу как это сделать.
49. yuraos 1008 05.02.12 09:15 Сейчас в теме
(48) wunderland, обратиться к бухитогам конечно можно ....
.... но запрос придется полностью писать самому,
используя таблицы:
1SACCS (счета)
1SBKTTLC (итоги синтетические)
1SBKTTL (итоги аналитические по субконто)
1SENTRY (бухг. проводки) в соединении с таблицей 1SJOURN

К сожалению разработчики 1с++, наверное,
не были сильно озадачены решением бухгалтерских задач и
не предусмотрели для бухитогов виртуальных таблиц.

Впрочем в dbf версии все имеющие виртульные таблицы не работают и
даже запрос к остаткам по регистру приходится писать руками.

Здесь кое-какая описаловка по структуре таблиц 1С:
http://www.script-coding.com/v77tables.html
http://oksla.narod.ru/1CTables.htm

Здесь кое-какие примеры по запросам к бухитогам:
http://www.1cpp.ru/forum/YaBB.pl?num=1151219880
http://www.1cpp.ru/forum/YaBB.pl?num=1211377364/15#15
Примеры чисто ознакомительные. Все нужно на самом деле анализировать и писать с нуля.

Во вложении - парсер файлов DD / DDS.
Наглядно показывает структуру всех таблиц базы, имена и типы полей.
Часто бывает полезен:
Я например ни за что бы не догодался, что остатки и обороты в таблицах
1SBKTTLC и 1SBKTTL (версия для dbf) хранятся в полях с типом char(15),
а в sql версии используется более "естественный" тип numeric(15.2)!

Успехов вам!!!
:)
Прикрепленные файлы:
VIEWDD.EXE.rar
50. yuraos 1008 05.02.12 09:55 Сейчас в теме
(48) wunderland, к стати о птичках
:)
если вы работаете в базе dbf
вам также будет полезна справка по
Microsoft Visual FoxPro 9.0.
если в базе sql то справка в
SQL Server Books Online

В прямых запросах часто приходися использовать встроенные функции,
в частности функции пребразования типов.
58. BlueWind 15.11.13 17:09 Сейчас в теме
(48) wunderland,

Для запросов к бухитогам можно использовать класс ПрямойЗапрос, автор vandalsvq

Что он может:
- выполнение запроса на языке подобном 1Cv8
- выполнение запроса независимо от формата БД (DBF - 1sqlite, SQL - ODBCRecordset)
- наличие виртуальных таблиц, вроде Остатки, Обороты и ОстаткиОбороты по БухИтогам и Регистрам

Релиз:
http://www.1cpp.ru/forum/YaBB.pl?num=1273512019/1#1
Обсуждение:
http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/0

Простой пример использования: Отображение остатков по товарам в форме списка справочника Номенклатура
//__________________________________________________________­____________
Процедура ОбновитьОстатки() //[+]sv 031112
//[!]sv 031112 Прямой запрос отрабатывает очень быстро, можно даже повесить динамическое обновление остатков на обработку ожидания

тзОстатки = СоздатьОбъект("ТаблицаЗначений");
флПрямойЗапрос = 1;
флПоказатьОстатки = 0;

т1 = _GetPerformanceCounter();
КонДата = КонецРассчитанногоПериодаБИ();
стрПредставлениеПериодаЗапроса = Строка(КонДата);

спСчетов = СоздатьОбъект("СписокЗначений");
спСчетов.ДобавитьЗначение(СчетПоКоду("214.1"));
спСчетов.ДобавитьЗначение(СчетПоКоду("214.2"));
спСчетов.ДобавитьЗначение(СчетПоКоду("214.3"));
стрСчета = СтрЗаменить(спСчетов.ВСтрокуСРазделителями(), """", "");
стрСчета = СтрЗаменить(стрСчета, ",", ", ");

мдв = СоздатьОбъект("MetaDataWork");
ЗапросСчет = "";
Для иС = 1 По спСчетов.РазмерСписка() Цикл
ЗапросСчет = ЗапросСчет + мдв.ЗначениеВСтрокуБД(спСчетов.ПолучитьЗначение(иС)) + ?(иС = спСчетов.РазмерСписка(),"","','");
КонецЦикла;
Состояние("Расчет итогов на "+стрПредставлениеПериодаЗапроса+" сч. "+стрСчета);

//Запрос
ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
//ПрямойЗапрос.РежимОтладки = 1;
ПрямойЗапрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
ПрямойЗапрос.УстановитьТекстовыйПараметр("ЗапросСчет", ЗапросСчет);

ТекстЗапроса = "
|ВЫБРАТЬ
| Субконто1 КАК [Субконто $Субконто]
|, Субконто1_вид КАК Субконто_вид
|, СУММА(КоличествоОстаток) КАК [Количество $Число.15.3]
|ИЗ
| $БИОстатки.Основной(:КонДата~
| ,
| ,(Номенклатура)
| ,(Количество)
| ,(Счет В (:ЗапросСчет))
| ,
| ) КАК Би
|
|СГРУППИРОВАТЬ
| Субконто1, Субконто1_вид
|";

тзОстатки = ПрямойЗапрос.Выполнить("ТаблицаЗначений",ТекстЗапроса);
ПрямойЗапрос = "";
ВремяЗапроса = _GetPerformanceCounter()-т0;
Сообщить("Время запроса: "+ВремяЗапроса);

Если тзОстатки.КоличествоКолонок() <> 0 Тогда
флПоказатьОстатки = 1;
КонецЕсли;
КонецПроцедуры
//__________________________________________________________­____________
Функция Остаток() //[+]sv 031112
_Остаток = 0;

Если флПоказатьОстатки = 1 Тогда
нстр = 0;
Если тзОстатки.НайтиЗначение(ТекущийЭлемент(), нстр, "Субконто") = 1 Тогда
_Остаток = тзОстатки.ПолучитьЗначение(нстр, "Количество");
КонецЕсли;
КонецЕсли;

Возврат _Остаток;
КонецФункции
59. yuraos 1008 15.11.13 18:43 Сейчас в теме
(58) BlueWind,
да я все время присматриваюсь к этому классу
...
все думаю заточить эту консоль под 1sqlite
и добавить подобие конструктора заготовок для запросов
но руки не доходят (поскольку я сейчас отошел от 1с-7.7)
---
но если руки дойдут - то заодно заточу ее и под этот класс.
;)
51. wunderland 203 06.02.12 00:27 Сейчас в теме
Спасибо, уважаемый за ответ, и за ссылки, и за парсер...
Ну нет, так нет - будем писать вручную.
Правда мне как-то привычнее в таком виде:

SELECT
СубконтоДт2 [ТМЦ $Справочник.ТМЦ]
, Сумма
, Количество
FROM $БИДвиженияССубконто.Основной(:НачДата,:КонДата~,,
(СчетДт = :СчетДт) and (СубконтоДт1 =:ВыбМестоХранения)) БИ

хотя привычнее, это громко сказано, я только осваиваю прямые запросы,
сам то я больше по 8-ке, а тут вот угараздило устроится на фирму где
на 7.7 еще все крутится и на переход незнаю когда решатся.
53. alon 171 16.02.12 10:24 Сейчас в теме
(51)Поддержу.
Очень не хватает возможности подключить класс-выполнитель аналогично qryConsole.
52. wunderland 203 06.02.12 13:59 Сейчас в теме
Отличная вещь - чем больше юзаю, тем больше нравится... Большое спасибо!!!
54. ппп986 11.07.12 20:14 Сейчас в теме
Я конечно извиняюсь, но почему мне эта обработка выдает вот это?

ODBCDatabase:Соединение() error:
State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данной функции
57. yuraos 1008 12.07.12 18:51 Сейчас в теме
(54) ппп986, через ODBC к базе DBF почему-то подконнектиться не получается в запросах 1с++ ;) .
приходиться работать ч/з OLEDB...
...и по-моему где-то в статье должно было быть написано по этому поводу, что
для использования в базах dbf требуется установка драйвера OLEDB vfpoledb provider v9
55. ппп986 11.07.12 22:08 Сейчас в теме
может что-то делаю не так :(
56. ппп986 11.07.12 22:31 Сейчас в теме
Может кто-нибудь даст
Microsoft OLE DB Provider for Visual FoxPro 9.0
60. sss999 50 21.11.13 13:52 Сейчас в теме
подскажите почему не работает кейс

select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
case when debkred=1 then Покуп.Sp2201 else 5 end as СуммаПрод ,
Sp2203 as СуммаСебест
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
LEFT JOIN SC134 as СпрКонтр
ON СпрКонтр.sp125 = СпрДог.ID
ON Покуп.SP2195 = СпрДог.ID
61. yuraos 1008 21.11.13 14:11 Сейчас в теме
(60)
доброго времени суток, sss999,
так попробуй
***
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
case
when покуп.debkred=1 then Покуп.Sp2201
else 5
end as СуммаПрод ,
покуп.Sp2203 as СуммаСебест
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
ON СпрКонтр.sp125 = СпрДог.ID
LEFT JOIN SC134 as СпрКонтр
ON Покуп.SP2195 = СпрДог.ID
***
1. пропущены псевдонимы таблиц в выделенных жырным местах
2. возможно провайдеру не понравились условия соединений все скопом в конце запроса
62. yuraos 1008 21.11.13 14:13 Сейчас в теме
(61)
а почему запрос с внутренними именами таблиц ?
я когда работал с прямыми запросами под 7.7,
то уже вовсю пользовался макроименами метапарсера 1СPP.
63. yuraos 1008 21.11.13 14:26 Сейчас в теме
(62)
сравни:
---
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
case
when Покуп.debkred=1 then $Покуп.СуммаПрод
else 5
end as СуммаПрод,
$Покуп.СуммаСебест as СуммаСебест
from
$Регистр.Продажи as Покуп
LEFT JOIN $Справочник.Договора as СпрДог
ON $СпрКонтр.ОсновнойДоговор = СпрДог.ID
LEFT JOIN $Справочник.Контрагенты as СпрКонтр
ON $Покуп.Контрагент = СпрДог.ID
---
куда наглядней
64. sss999 50 21.11.13 14:31 Сейчас в теме
(63) потмоу что делается к расным файлам дбв которые просто лежат в базе и в метаданных их нет.Не работает даже когда просто пишу CASE WHEN 1=1 THEN 0 ELSE 5 END
65. yuraos 1008 21.11.13 14:41 Сейчас в теме
(64) sss999,
что пишет, скриншот не выложишь???

ra2207 - регистр Продажи ?
Sp2201 - СуммаПродаж
Sp2203 - СуммаСебесттоимости - или как там эти ресурсы там называются (забыл уже) ??

дома проверю, вспомню 7.7 немного.
66. sss999 50 21.11.13 14:48 Сейчас в теме
пишет одно и тоже в принципе для любых ошибок Запрос >>> OLEDBCommand error:
FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword.
68. yuraos 1008 21.11.13 18:16 Сейчас в теме
(66) sss999, да...подзабыл я все эти дела с foxpro.
---
дело в том, что конструкция
case when ... then ... else ... end
это из t-sql, а в foxpro в запросах вместо неё
приходится использовать функцию iif(,,)
69. yuraos 1008 21.11.13 18:19 Сейчас в теме
(68)
ниже указанный вариант у меня в консоли
выдал не "Command contains unrecognized phrase/keyword."
а более оптимистичное:
"File 'ra2207.dbf' does not exist."
***
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
iif(покуп.debkred=1, Покуп.Sp2201, 5) as СуммаПрод,
покуп.Sp2203 as СуммаСебест
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог ON Покуп.SP2195 = СпрДог.ID
LEFT JOIN SC134 as СпрКонтр ON СпрКонтр.sp125 = СпрДог.ID
***
71. sss999 50 22.11.13 12:08 Сейчас в теме
(69) а не знаешь по какому полю в справочнике договоры найти владельца контрагента
73. yuraos 1008 22.11.13 14:24 Сейчас в теме
(71)(72)
со всякими конструкциями специфичными для t-sql надо аккуратней
скорее всего под foxpro они работать не будут.

в частности хинты для указания режима блокировок типа (NOLOCK)
foxpro не поддерживаются.
72. sss999 50 22.11.13 14:17 Сейчас в теме
(69) с этим разобрался,parentext поле,теперь не работает конструкция with rollup ,хотя в "документации" я нашел что парень ее использовал ,я грешу на dll
75. yuraos 1008 22.11.13 14:32 Сейчас в теме
(72)
во всяких примерах надо выяснять для какой они базы - SQL или DBF.
запросы решающие одно и тоже могут сильно отличатся в зависимости от типа базы.
---
еще могу посоветовать достать где-нибудь дистрибутив Visual-FoxPro
установить его и смотреть мануал, идущий с ним.
Мне этот мануал был часто полезен.
78. sss999 50 22.11.13 14:43 Сейчас в теме
(75) с chm проблемы какие то ,они не открываются а предлагают скачаться заново
67. sss999 50 21.11.13 14:51 Сейчас в теме
я пользуюсь консолью,здесь скачал пару разных результат один пробовал разные cрр тоже самое
70. sss999 50 22.11.13 09:50 Сейчас в теме
Про такой вариант я и не подумал,спасибо дружище.А я находил тексты с прямыми запросами в инете и тут на старте и там вот писали case.
74. yuraos 1008 22.11.13 14:27 Сейчас в теме
вот полезный ресурс по 1cpp:
Архив всех chm
в архиве есть полезная статейка по прямым запросам в 1с-7.7
в файле с именем "TSQLInV7FirstSteps.chm"
разобраны примеры для SQL и DBF с рабором их отличиу
77. sss999 50 22.11.13 14:34 Сейчас в теме
79. yuraos 1008 22.11.13 15:15 Сейчас в теме
(77) sss999,
это тоже хорошая статья, но не она.
там о поддержке прямых запросов именно компонентой 1cpp.dll
80. yuraos 1008 22.11.13 15:22 Сейчас в теме
(79)
впрочем она очень похожая.
похоже это более ранний вариант.
в архиве гораздо больше про DBF.
81. yuraos 1008 22.11.13 15:23 Сейчас в теме
(79)
не знаю почему у тебя chm не открываются.
у меня все нормально - и скачивается и открывается.
---
выкладываю скачанный архивчик.
Прикрепленные файлы:
1cpp.chm.zip
86. yuraos 1008 26.11.13 12:49 Сейчас в теме
ты архивчик 1cpp.chm.zip из поста (81)
загрузить смог?

только распакуй его перед тем как файлы *.chm открывать.
открываешь любой файл в архиве, например 1cpp.chm
и дальше роешься в мануале, как показано на скриншоте.
Прикрепленные файлы:
87. yuraos 1008 26.11.13 12:55 Сейчас в теме
(86)
розовым отмечена та самая статья "о первых шагах".

можно еще выбрать запросом
select * from 1Sjourn все строки и посмотреть
что там в поле IDDocDef хранится
...
но поди угадай какое значение ответствует "Реализации"
---
нескромный вопрос - а МД-ник то где ???
307. lelusha 10.02.14 13:36 Сейчас в теме
обработки КОП_ОбщиеФормаПривязка.ert и Defcls.ert добавлены в конфигурацию. и даже в каталог базы, но при открытии вываливаются ошибки:

Общие.Форма.Привязка::ПривязкаАтрибута(Строка ИДЭлемента=тVer, Строка ТипВ=T, Строка ИДЭлементаВ=Форма, Строка ТипГ=L, Строка ИДЭлементаГ=Форма) : Неверный идентификатор атрибута
Атрибут=РасширениеФормы.ПолучитьАтрибут(ИДЭлемента);
{КОП_ОбщиеФормаПривязка@MD(86) }

гРФорма.Привязка("тВремя,тВремяЗапроса,тСтрок,тСтрокКол,тКолонок,тКолонокКол,тVer","T","Форма","L","Форма");
{C:\USERS\LEYLA\DESKTOP\КОНСОЛЬ1CQA_ALL\КОНСОЛЬ1CQA\КОНСОЛЬ1CQA­.ERT(4092)}: Общие.Форма.Привязка::ПривязкаАтрибута(Строка ИДЭлемента=тVer, Строка ТипВ=T, Строка ИДЭлементаВ=Форма, Строка ТипГ=L, Строка ИДЭлементаГ=Форма) : Неверный идентификатор атрибута
Атрибут=РасширениеФормы.ПолучитьАтрибут(ИДЭлемента);
{КОП_ОбщиеФормаПривязка@MD(86) }

Подскажите, что не так?
309. Ёпрст 1068 10.02.14 14:05 Сейчас в теме
(307) 1cpp и формекс каких версий ?
(308) пакетный - выполнение разных запросов за раз..
326. yuraos 1008 10.02.14 17:31 Сейчас в теме
(309), смотрю тут оживленное общение.
;)

та невидимая таблица значений служит для
хранения результатов выполнения отдельных батчей пакета
разделенных командой GO (которая понимается только рулем скуля).

перед выполнением запроса в консоли
текст запроса "нарезается" на куски, разделенные командой GO.
и каждый такой кусок выполняется отдельно в цикле
(так сказать квази-пакетный запрос получается).

результаты к помещаются в выше упомянутую таблицу значений
и выводятся из нее в таблицу результата при выборе имени батча
в списке в правом верхнем углу.
314. Ёпрст 1068 10.02.14 14:53 Сейчас в теме
(307) сам класс привязок откуда взял ?
Есть есть много и разных..
327. yuraos 1008 10.02.14 17:49 Сейчас в теме
(307) lelusha,
проблем особых с привязками не было (и именно с классом из архива),
кроме разве что при работе в терминале на удаленном рабочем столе.
Приходилось даже для терминала класс подправлять.

(322)

Имена зарегистрированных классов:
Общие.Форма.Привязка = C:\Users\me\Documents\ge_rus\КОП_ОбщиеФормаПривязка.ert


а операционка, смотрю - либо Win-7 либо WinServ-2008
и учетка там "me"
76. sss999 50 22.11.13 14:33 Сейчас в теме
вот хорошая статья и здесь он пишет вроде под fox так как указывает dbf файлы http://www.script-coding.com/Direct_queries.html#4.1.
82. sss999 50 26.11.13 11:09 Сейчас в теме
Я тут все воюю с запросом,не могу во понять почему не работает конструкция Жур.IDDocDef = $ВидДокумента.Реализация,и в связи с эти хотелось бы понять как она вообще работает.Вот к этому запросу хотел прилепить,что бы потом еще добавить отбор по реквизиту который есть только у реализации.
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
Sum(iif(покуп.debkred=1, Покуп.Sp2201, -Покуп.Sp2201) )as СуммаПродОстаток,
Sum(Покуп.Sp2201) as СуммаПрод,
Sum(Sp2203) as СуммаСебест,
Max(покуп.SP2198) as [док $Документ ]
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
LEFT JOIN SC134 as СпрКонтр
ON СпрКонтр.id= СпрДог.parentext
ON Покуп.SP2195 = СпрДог.ID

left JOIN 1Sjourn as Жур

ON Жур.IDDoc = покуп.SP2198
Group by Контрагент,Договор
83. yuraos 1008 26.11.13 12:29 Сейчас в теме
(82) sss999,
$ВидДокумента.XXXX - это макро имя метапарсера 1cpp.
Метапарсер заменяет его на внутренний код вида документ с именем XXXX.

ты говорил, что у тебя база без метаданных, одни dbf-ники.

в этом случае скорее всего метапарсер выкинет ошибку
при формировании запроса провайдеру данных или заменит на что-то непотребное.
84. sss999 50 26.11.13 12:36 Сейчас в теме
(83) а как это будет выглядеть без парсера?
85. yuraos 1008 26.11.13 12:38 Сейчас в теме
(82)
Если покуп.SP2198 - это поле реквизита регистра, имеющего тип "Документ" неопределенного вида,
то условие соединения
left JOIN 1Sjourn as Жур
ON Жур.IDDoc = покуп.SP2198

не верно.

содержимое такого поля формируется примерно как (IDDocDef + IDDoc).

Приду домой, пороюсь в старых примерах и отпишу как правильнее.
88. sss999 50 26.11.13 13:37 Сейчас в теме
(85) может и не правильно но данные он показывает.а вот когда накладываю условие WHERE Жур.Date BETWEEN :НачДата~~ AND :КонДата~~ ниче не показывает,непонятно.Кстати я нашел что для dbf icase(,,,) )
89. yuraos 1008 26.11.13 18:29 Сейчас в теме
(88) sss999, действительно есть такая функция.
нашел, порывшись немного в мануале к foxpro.
;)
91. yuraos 1008 26.11.13 18:38 Сейчас в теме
(88)

когда накладываю условие WHERE Жур.Date BETWEEN :НачДата~~ AND :КонДата~~ ниче не показывает

трудно понять почему,
много не ясного:
1.
ошибки валит или пустую выборку возвращает ?
2.
что за поле покуп.SP2198 регистра,
что за регистр ra2207,
и вообще из какой конфигурации выдернуты dbf-ники ??
92. yuraos 1008 26.11.13 18:42 Сейчас в теме
(91)(88) sss999,
имей ввиду:
накладывая отбор по дате
WHERE Жур.Date BETWEEN :НачДата~~ AND :КонДата~~
в своем примере ты налагаешь условие
не на дату документа, двигавшего по регистру
а на дату документов, на которые ссылается значение в поле покуп.SP2198 регистра.
90. yuraos 1008 26.11.13 18:31 Сейчас в теме
(85)
я обычно по таким полям соединял примерно так
SELECT 
* 
FROM 
$Регистр.Покупатели as Рег
INNER JOIN
1sjourn as Жур on Жур.iddoc = RIGHT($Рег.КредДокумент,9)
WHERE
Жур.Date BETWEEN :НачДата~~ AND :КонДата~~
Показать

это к стати рабочий пример, тестировал на демо-базе типовой ТиС-7.7.
94. sss999 50 27.11.13 09:34 Сейчас в теме
(90) мда..и зачем райт 9,кстати и соединения как то странно отрабатывают,если лефт показывает а инне нет мне вот непонятно как так
96. yuraos 1008 27.11.13 11:34 Сейчас в теме
(94) sss999,
советую о хранении данных в 1с-7.7 почитать поподробней,
тогда многое будет понятней...
:)
---
Вкратце:
1)
поле ID (ссылка на справочник конкретного вида)
поле IDDOC (ссылка на документ конкретного вида)
это строковые значения типа Char9 (строка длины 9).
2)
В полях реквизитов типа "Справочник" или "Документ" (неопределенного вида)
хранится строковое значение типа Char13,
которое образуется из строкового 36-ричного представления
внутреннего кода вида справочника или документа (значение Char4)
и самого значения ссылки (значение Char9) - итого получается строка Char13.
97. yuraos 1008 27.11.13 11:39 Сейчас в теме
(96)
таким образом конструкция
RIGHT(<ЗначениеДокумент>, 9)
выделяет значение ссылки - 9 правых символов
- то что надо для соединения с таблицой 1sjourn
99. sss999 50 28.11.13 10:46 Сейчас в теме
(97) в общем я решил юнионом получить итоги,теперь проблема в том что я добавляю второй запрос без группировки по договору и вот не знаю как сделать что бы туда он выбирал пустые договора
100. yuraos 1008 29.11.13 13:23 Сейчас в теме
(99) sss999,
идентификаторы пустых значений:

пустая ссылка определенного вида
${ПустойИД|EmptyID} = "_____0___"

пустая ссылка "неопределенного вида"
${ПустойИД13|EmptyID13} = "___0_____0___"
...
если метаимя пустого значения непроканает без md-ника,
то придется в запросе использовать вместо его строковый литерал
(почерки - заменить на пробелы!!!)
101. yuraos 1008 29.11.13 13:33 Сейчас в теме
(100)
я обычно выбирал запросом "детальные" записи,
а для группировки выборки и вывода итогов по группировкам
использовал объект "ИндексированнаяТаблица".
у него есть метод
Группировать(стрГруппировки, стрКолонкиСумм, [чРасшифровкаПоследнегоУровня = 0])
как-то решающий эту задачу.
102. sss999 50 29.11.13 14:12 Сейчас в теме
(101) спасибо дружище,а вот такая проблема пишу покуп.SP2198 as [КредДокумент $Документ],а когда хочу КредДокумент добавить в группировку говорит нет такой колонки.Как меня достал этот синтаксис...
103. sss999 50 29.11.13 14:18 Сейчас в теме
(101) интересно,посмотрю,спасибо )
104. sss999 50 29.11.13 15:46 Сейчас в теме
(101) идет потеря в производительности,не хотелось бы мне постоянно собирать все доки если онии не нужны,вот и хочу добавить группировку по кредитному документу,я нашел уже как ее добавить,только через sp
105. sss999 50 03.12.13 12:32 Сейчас в теме
(101) посмотри что тут можно сделать,нужно вытянуть реквизит из документа реализация ,дата оплаты,этот реквизит есть только в реализации,а креддок в регистре неопределенного вида как вытянуть реквизит.Я так понял что этот реквизит хранится в таблице документов,и эту таблицу пробовал и к журналу прилепить по айди и к регистру че то не выходит,говорит нет такого реквизита.Дату оплаты я заменил на Sp1175,он это скушал,стал находить реквизит,но выводит тип мисматч после некоторого выполнения,пробовал соединять реализации как с журналом так и с регистром по id

SELECT

СпрКонтр.DESCR as Контрагент,
СпрДог.DESCR as Договор,
MAX(СпрДог.SP87) as ДнейКредита,
Sum(Покуп.Sp2201)as КонОст,
Sum(icase(покуп.debkred=1,icase(Покуп.SP2197= :ВидДолгаРеал,icase(Док.ДатаОплаты= :ДатаОпл,-Покуп.Sp2201,0)-Покуп.Sp2201,0),+Покуп.Sp2201)) as КонОстП,
Sum(Sp2203) as СуммаСебест,
покуп.SP2198 as [КредДок $Документ],
Max(покуп.SP2206) as [докОп $Документ ]

from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
LEFT JOIN SC134 as СпрКонтр
ON СпрКонтр.id= СпрДог.parentext
ON Покуп.SP2195 = СпрДог.ID
left JOIN 1Sjourn as Жур
left JOIN $Документ.Реализация as Док ON Док.IDDoc = Жур.Iddoc
ON Жур.IDDoc = RIGHT(покуп.SP2198,9)

WHERE
(DTOS(Жур.date) BETWEEN
DTOS(:НачДата~~) And DTOS(:КонДата~~))
and (покуп.SP2204 <> :ЗачтенВозвратПокупателя)
and (покуп.SP2204 <> :ЗачтенВозвратПоставщику)
and (покуп.SP2204 <> :ЗачтенАвансПоставщику)
and (покуп.SP2204 <> :ЗачтенАвансПоставщикуВал)
and (покуп.SP2204 <> :ЗачтенАвансПокупателя)
and (покуп.SP2204 <> :СторнированАванс)


Group by Контрагент,Договор,покуп.SP2198
Order by Контрагент,Договор
110. yuraos 1008 03.12.13 14:22 Сейчас в теме
(105)
тыж говорил, что md-ника нет и из-за етого метапарсер не работает?
---
почему тогда пишешь:
left JOIN $Документ.Реализация as Док ON Док.IDDoc = Жур.Iddoc

или я чего-то не догоняю ???
111. yuraos 1008 03.12.13 14:27 Сейчас в теме
(110)
правильный вариант с использованием реквизита ДатаОплаты


SELECT

СпрКонтр.DESCR as Контрагент,
СпрДог.DESCR as Договор,
MAX(СпрДог.SP87) as ДнейКредита,
Sum(Покуп.Sp2201)as КонОст,
Sum(icase(покуп.debkred=1,icase(Покуп.SP2197= :ВидДолгаРеал,icase($Док.ДатаОплаты= :ДатаОпл,-Покуп.Sp2201,0)-Покуп.Sp2201,0),+Покуп.Sp2201)) as КонОстП,
Sum(Sp2203) as СуммаСебест,
покуп.SP2198 as [КредДок $Документ],
Max(покуп.SP2206) as [докОп $Документ ]

from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
LEFT JOIN SC134 as СпрКонтр
ON СпрКонтр.id= СпрДог.parentext
ON Покуп.SP2195 = СпрДог.ID
left JOIN 1Sjourn as Жур
left JOIN $Документ.Реализация as Док ON Док.IDDoc = Жур.Iddoc
ON Жур.IDDoc = RIGHT(покуп.SP2198,9)

WHERE
(DTOS(Жур.date) BETWEEN
DTOS(:НачДата~~) And DTOS(:КонДата~~))
and (покуп.SP2204 <> :ЗачтенВозвратПокупателя)
and (покуп.SP2204 <> :ЗачтенВозвратПоставщику)
and (покуп.SP2204 <> :ЗачтенАвансПоставщику)
and (покуп.SP2204 <> :ЗачтенАвансПоставщикуВал)
and (покуп.SP2204 <> :ЗачтенАвансПокупателя)
and (покуп.SP2204 <> :СторнированАванс)


Group by Контрагент,Договор,покуп.SP2198
Order by Контрагент,Договор
112. yuraos 1008 03.12.13 14:37 Сейчас в теме
(111)
Для доступа к реквизиту документа с использованием метапарсера
перед алиасом таблицы шапки документа надо нарисовать "$"
select
$Док.ДатаОплаты
from
$Документ.Реализация as Док
113. sss999 50 03.12.13 15:19 Сейчас в теме
(111) че то у меня не получается дебиторка,мож подскажешь че не так )
я делал не через таблицу итоги а через движения,но видимо нужно их соединять,левым соединением,что бы вытащить нормально суммы не равные нулю,т.е. те которые закрылись они не нужны соответственно.а просто через таблицу движений у меня выводит как то все подряд,но главное то что при группировке не схлопываются суммы,хотя по кред документы должны были бы вроде
114. yuraos 1008 03.12.13 17:31 Сейчас в теме
(113) sss999,
объясни для начала,
почему:

к таблице регистра "Покупатели" обращаешься через системное имя ra2207,
а к шапке документа "Реализация" через метаимя $Документ.Реализация
???
115. yuraos 1008 03.12.13 17:33 Сейчас в теме
(114)
затем выложи полный текст запроса
...
погляжу что ты там накуривал
:)
106. sss999 50 03.12.13 12:45 Сейчас в теме
(101) нужно проверить реквизит документа типа дата на пустое значение,я так понимаю что дату нужно записать строкой,но как она записывается строкой не знаю
108. yuraos 1008 03.12.13 14:01 Сейчас в теме
(106) sss999,
попробуй америкосовский формат
"mm/dd/yy"

по мануалу он "дефолтный"
или формат ANSY
"yy.mm.dd"

---
если не хочешь париться с форматом даты
используй встроенные функции:
DATE([nYear, nMonth, nDay])
DATETIME([nYear, nMonth, nDay [, nHours [, nMinutes [, nSeconds]]]])




107. sss999 50 03.12.13 13:59 Сейчас в теме
(101) ладно пока вопросы снимаются,поставил там dtos и вроде date() можно дату задавать.
109. yuraos 1008 03.12.13 14:07 Сейчас в теме
(107) sss999,
быстро же ты,
пока в мануале foxpro рылся по форматам дат!
---
выкладываю этот мануал, если нужен
Прикрепленные файлы:
!dv_foxhelp.chm
98. sss999 50 28.11.13 07:45 Сейчас в теме
(96) блин это слишком сложно,эта такая структура для фокспро или для всех, непонятно.У меня щас проблема не знаю как итоги посчитать ,WITH ROLLUP не работает как я понял на дбф.
95. sss999 50 27.11.13 09:47 Сейчас в теме
(90) чудеса,добавил райт и отбор заработал,раньше выдавал пусто
93. sss999 50 26.11.13 18:50 Сейчас в теме
Ну да я так и хотел,это кредитный документ,конфа не знаю,самописная походу.Регистр покупатели.Я на работе разбирался сидел там с типами, всякой ерундой,типа условия по индексам.Ладно я завтра еще посмотрю.
116. sss999 50 04.12.13 13:42 Сейчас в теме
щас вот новый текст написал хочу ,в нем еще нету отборов по видам операций

SEL ECT distinct
Контрагент.descr as Контрагент,
Договор.descr as Договор,
Итоги.sp2198 as [КредДокумент $Документ],
Sum (Итоги.sp2201) as Сумма,
Sum(iif(Движения.debkred=1, -Движения.sp2201 , +Движения.sp2201 ) ) as СуммаДок ,
Max(Договор.sp87) as ДнейКредита,
Max(Журнал.iddocdef+Журнал.iddoc) as [Док $Документ]

FR OM
RA2207_ as Движения
LEFT OUTER JOIN 1SJOURN as Журнал on(Движения.iddoc = Журнал.iddoc)
LEFT OUTER JOIN RG2207_ as Итоги on(Итоги.sp2198=Движения.sp2198)
LEFT OUTER JOIN SC92_ as Договор on(Итоги.sp2195=Договор.id)
LEFT OUTER JOIN SC134_ as Контрагент on(Договор.parentext=Контрагент.id)
Group by
Контрагент,
Договор,Итоги.sp2198
ORDER by
Контрагент.descr ASC,
Договор.descr ASC
118. yuraos 1008 04.12.13 17:23 Сейчас в теме
(116) sss999, слушай,
ты мне так и не разъяснил
почему ты упорно используешь внутренние имена таблиц в запросе
и почему метапарсер 1cpp.dll тебя не устраивает?
---
если база нормальная
(все dbf-ники соответствуют файлам 1cv7.md и 1cv7.dd)
то вместо внутренних имен
лучше использовать соответствующие им мета-имена.
119. yuraos 1008 04.12.13 17:39 Сейчас в теме
(118)
есть два соображения для использования мета-имен:
1) наглядность и смысловая прозрачность:
мне, например, сейчас трудно вникать
в смысл полей в тексте запросе
с именами вроде sp2201 или sp2198.
и ты сам через год забудешь,
какие из этих полей что означают
и тоже будешь голову ломать.

2) системные соображения:
внутренние имена таблиц и их полей
могут измениться после реструктуризации базы данных
при обновлении конфигурации (хоть и мало вероятно)
...
и тогда что будет с твоим запросом???
120. sss999 50 05.12.13 12:32 Сейчас в теме
(119) все из за того что дебиторка будет по трем базам работать,и фалы будут просто лежать в базе от других баз.
122. yuraos 1008 05.12.13 17:30 Сейчас в теме
(120)(121)
смотрю у тебя жизня не проста!!!
:)
---
ну надеюсь хоть одна база есть, где эти dbf-ники "родные" ???
121. sss999 50 05.12.13 12:47 Сейчас в теме
(119) короче нужно код операции приставить в текстовом виде,как это сделать что бы задать отбор и вообще увидеть.код операции в ra2207 как SP2204
128. yuraos 1008 05.12.13 21:17 Сейчас в теме
(121) sss999,
внутреннее представление ссылки на значение перечисления - строка char9.

в запросах можно получать с помощью метаимен:

идентификатор значения перечисления:
${Перечисление|Enumeration}.<Перечисление>.<ЗначениеПеречисления> : char(9)
${Перечисление23|Enumeration23}.<Перечисление>.<ЗначениеПеречисления> : char(23)


можно в консоли с включеной галкой "Выводить текст" выполнить запрос вроде

sel ect
$Перечисление.КодыОпераций.ЗачтенАвансПоставщику
fr om
1ssystem


и скопировать строковое представление из окна сообщений.
129. yuraos 1008 05.12.13 21:20 Сейчас в теме
(128)
очень вероятное западло для тебя:
в разных базах одни и те же значения перечислений (по имени)
могут иметь разное внутреннее представление ссылки
:((
130. BlueWind 05.12.13 21:37 Сейчас в теме
(129) sss999,

Для получения идентификаторов объектов посторонних баз можно использовать объект MetaDataWork
http://www.1cpp.ru/docum/icpp/html/ODBC.html#metadatawork

Методом ПрисоединитьМД() цепляете md внешней базы, и получаете ее любые внутренние идентификаторы..
131. sss999 50 06.12.13 12:14 Сейчас в теме
(129) а я их и так по ссылке брал ,(___ххх___)
133. sss999 50 06.12.13 14:10 Сейчас в теме
(129) так в общем работает запрос,я его пока не разбирал,зачем ты там столько понаделал,что за nvl ?,я пока только одного контрагента нашел по которому не сходится и по которому и мой не шел.
135. yuraos 1008 06.12.13 18:13 Сейчас в теме
(133)
Если заметил,
запрос состоит из ПОЛНОГО ОБЪЕДИНЕНИЯ (FULL JOIN)
двух подзапросов:
- подзапроса остатков на дату начала;
- подзапроса оборотов за период;
Конечные остатки вычисляются по начальным остаткам и оборотам за период.
---
функция NVL() - возвращает первый аргумент, если он не NULL,
и второй аргумент в противном случае (аналог ISNULL() из T-SQL).

---
Ее использование требуется для разруливания ситуаций:
- когда начальных остатков нет, а обороты есть;
- или когда начальные остатки есть, а оборотов нет;
117. sss999 50 04.12.13 13:43 Сейчас в теме
а это тот запрос который я хочу спарадировать
Период с ДатаНачала по ДатаКонца;
Фирма = Регистр.Покупатели.Фирма;
УпрАналитика = Регистр.Покупатели.Фирма.УпрАналитика;
ЮрЛицо = Регистр.Покупатели.Фирма.ЮрЛицо;
Контрагент = Регистр.Покупатели.Договор.Владелец;
СвойствоКонтр = Регистр.Покупатели.Договор.Владелец.ОсновноеСвойство.ЗначениеСвойства;
Договор = Регистр.Покупатели.Договор;
КодОперации = Регистр.Покупатели.КодОперации;
ДнейКредита = Регистр.Покупатели.Договор.ГлубинаКредита;
СуммаКредита = Регистр.Покупатели.Договор.СуммаКредита;
СтавкаНП = Регистр.Покупатели.СтавкаНП;
ВидДолга = Регистр.Покупатели.ВидДолга;
КредДокумент = Регистр.Покупатели.КредДокумент;
Проект = Регистр.Покупатели.ТекущийДокумент.Проект;
СуммаВ = Регистр.Покупатели.СуммаВал;
Сумма = Регистр.Покупатели.СуммаРуб;Функция НачОст = НачОст(Сумма);
Функция Приход = Приход(Сумма);
Функция Расход = Расход(Сумма);
Функция КонОст = КонОст(Сумма);
Функция НачОстВ = НачОст(СуммаВ);
Функция ПриходВ = Приход(СуммаВ);
Функция РасходВ = Расход(СуммаВ);
Функция КонОстВ = КонОст(СуммаВ);
Функция ВозвратОтПокупателя = Расход(Сумма)Когда (КодОперации = глКО.ВозвратОтПокупателя);
Функция ВозвратПоставщику = Приход(Сумма)Когда (КодОперации = глКО.ВозвратПоставщику);
Функция ВозвратОтПокупателяВ = Расход(СуммаВ)Когда(КодОперации = глКО.ВозвратОтПокупателя);
Функция ВозвратПоставщикуВ = Приход(СуммаВ)Когда (КодОперации = глКО.ВозвратПоставщику);
Функция КонОстП = КонОст(Сумма)Когда((ПустоеЗначение(ДатаОплаты(КредДокумент)) = 0)и(ДатаОплаты(КредДокумент) < ДатаКонца));
Функция КонОстВП= КонОст(СуммаВ)Когда((ПустоеЗначение(ДатаОплаты(КредДокумент)) = 0)и(ДатаОплаты(КредДокумент) < ДатаКонца));Группировка Контрагент без групп;Группировка Договор;
Условие ((КодОперации <> глКО.ЗачтенАвансПоставщику) И (КодОперации <> глКО.ЗачтенАвансПоставщикуВал));
Условие (КодОперации <> глКО.ЗачтенАвансПокупателя);
Условие (КодОперации <> глКО.СторнированАванс);
Условие (КодОперации <> глКО.ЗачтенВозвратПокупателя);
Условие (КодОперации <> глКО.ЗачтенВозвратПоставщику);
Условие (КодОперации <> глКО.СторнированВозврат);
123. yuraos 1008 05.12.13 17:41 Сейчас в теме
хорошо, разомну мозг.
попробую изобразить этот 1с-ный запрос (117)
через прямой, но:
- используя мета-имена 1cpp.
- на типовой (или почти типовой) ТиС-7.7
(надеюсь у тебя сам регистр "Покупатель" не сильно изменен).
- без оптимизации с обращением к таблицам итогов
(только по движениям регистра).
124. sss999 50 05.12.13 17:46 Сейчас в теме
(123) я выбираю запросом но она почему то по дебету кредиту не сворачивается к нужным цифрам как в обычной дебеторке по договору,какие то цифры не так сворачиваются по авансам или типо того,пробовал из итогов выбирать суммы но пишет слишком большая выборка или типа того,в покупателях у меня договор и фирма стоит а так думаю так же.
125. yuraos 1008 05.12.13 20:52 Сейчас в теме
(123)(124)
ну вот и выкладываю, что смог из мозга выжать:
в целом запрос соответствует 1с-ному запросу в (117) с замечаниями:
- измерения в выборке ограниченны полями Фирма, Контрагент(Договор), КредитДокумент;
- с оборотами возвратов от покупателей и поставщиков я заморачиваться не стал;
- при вычислении "просроченных" задолженностей учитывается только дата оплаты
по кредит-документам вида "Реализация". По остальным задолженность считается "непросроченной".

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

Для оптимизации нужно использовать таблицы итогов и это уже целая отдельная тема
(читай в статье TSQLInV7FirstSteps.chm из архива документации к 1cpp.dll).
126. yuraos 1008 05.12.13 20:53 Сейчас в теме
SEL ECT
ВедомостьПокупателей.Фирма as [Фирма$Справочник.Фирмы],
ВедомостьПокупателей.Контрагент as [Контрагент$Справочник.Контрагенты],
ВедомостьПокупателей.КредДокумент as [КредДокумент$Документ],
ВедомостьПокупателей.НачОст as НачОст,
ВедомостьПокупателей.НачОстВ as НачОстВ,
ВедомостьПокупателей.Приход as Приход,
ВедомостьПокупателей.ПриходВ as ПриходВ,
ВедомостьПокупателей.Расход as Расход,
ВедомостьПокупателей.РасходВ as РасходВ,
ВедомостьПокупателей.КонОст as КонОст,
ВедомостьПокупателей.КонОстВ as КонОстВ,
ВедомостьПокупателей.КонОстП as КонОстП,
ВедомостьПокупателей.КонОстВП as КонОстВП
FR OM
(SEL ECT
ОстаткиОбороты.Фирма,
спрКонтр.ID as Контрагент,
ОстаткиОбороты.КредДокумент,
SUM(ОстаткиОбороты.НачОст) as НачОст,
SUM(ОстаткиОбороты.НачОстВ) as НачОстВ,
SUM(ОстаткиОбороты.Приход) as Приход,
SUM(ОстаткиОбороты.ПриходВ) as ПриходВ,
SUM(ОстаткиОбороты.Расход) as Расход,
SUM(ОстаткиОбороты.РасходВ) as РасходВ,
SUM(ОстаткиОбороты.КонОст) as КонОст,
SUM(ОстаткиОбороты.КонОстВ) as КонОстВ,
SUM(ICASE(ISNULL(докРеализ.IDDOC),0,$докРеализ.ДатаОплаты >= {d’1900-01-01’} AND $докРеализ.ДатаОплаты < :КонДата~~,ОстаткиОбороты.КонОст,0)) as КонОстП,
SUM(ICASE(ISNULL(докРеализ.IDDOC),0,$докРеализ.ДатаОплаты >= {d’1900-01-01’} AND $докРеализ.ДатаОплаты < :КонДата~~,ОстаткиОбороты.КонОстВ,0)) as КонОстВП
FR OM
-- подзапрос, как-то реализующий ВТ $РегистрОстаткиОбороты.Покупатели(:НачДата~~,:КонДата~~) для DBF
(SEL ECT
NVL(Остатки.Фирма,Обороты.Фирма) as Фирма,
NVL(Остатки.Договор,Обороты.Договор) as Договор,
NVL(Остатки.КредДокумент,Обороты.КредДокумент) as КредДокумент,
NVL(Остатки.НачОст,0) as НачОст,
NVL(Остатки.НачОстВ,0) as НачОстВ,
NVL(Обороты.Приход,0) as Приход,
NVL(Обороты.ПриходВ,0) as ПриходВ,
NVL(Обороты.Расход,0) as Расход,
NVL(Обороты.РасходВ,0) as РасходВ,
NVL(Остатки.НачОст,0) + NVL(Обороты.Приход,0) - NVL(Обороты.Расход,0) as КонОст,
NVL(Остатки.НачОстВ,0) + NVL(Обороты.ПриходВ,0) - NVL(Обороты.РасходВ,0) as КонОстВ
FR OM
-- подзапрос начальных остатков в разрезе измерений: Фирма,Договор,КредитДокумент
(SELECT
$Рег.Фирма as Фирма,
$Рег.Договор as Договор,
$Рег.КредДокумент as КредДокумент,
SUM((1 - Рег.debkred * 2)*$Рег.СуммаРуб) as НачОст,
SUM((1 - Рег.debkred * 2)*$Рег.СуммаВал) as НачОстВ
FR OM
$Регистр.Покупатели as Рег
INNER JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
WH ERE
Жур.DATE < :НачДата~~
AND NOT INLIST($Рег.КодОперации
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщику
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщикуВал
,$Перечисление.КодыОпераций.ЗачтенАвансПокупателя
,$Перечисление.КодыОпераций.СторнированАванс
,$Перечисление.КодыОпераций.ЗачтенВозвратПокупателя
,$Перечисление.КодыОпераций.ЗачтенВозвратПоставщику
,$Перечисление.КодыОпераций.СторнированВозврат
)
GROUP BY
$Рег.Фирма,
$Рег.Договор,
$Рег.КредДокумент) as Остатки
FULL JOIN
-- подзапрос оборотов за период в разрезе измерений: Фирма,Договор,КредитДокумент
(SELECT
$Рег.Фирма as Фирма,
$Рег.Договор as Договор,
$Рег.КредДокумент as КредДокумент,
SUM(IIF(Рег.debkred = 1,0,$Рег.СуммаРуб)) as Приход,
SUM(IIF(Рег.debkred = 1,0,$Рег.СуммаВал)) as ПриходВ,
SUM(IIF(Рег.debkred = 1,$Рег.СуммаРуб,0)) as Расход,
SUM(IIF(Рег.debkred = 1,$Рег.СуммаВал,0)) as РасходВ
FR OM
$Регистр.Покупатели as Рег
INNER JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
WH ERE
Жур.DATE BETWEEN :НачДата~~ AND :КонДата~~
AND NOT INLIST($Рег.КодОперации
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщику
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщикуВал
,$Перечисление.КодыОпераций.ЗачтенАвансПокупателя
,$Перечисление.КодыОпераций.СторнированАванс
,$Перечисление.КодыОпераций.ЗачтенВозвратПокупателя
,$Перечисление.КодыОпераций.ЗачтенВозвратПоставщику
,$Перечисление.КодыОпераций.СторнированВозврат
)
GROUP BY
$Рег.Фирма,
$Рег.Договор,
$Рег.КредДокумент) as Обороты
ON Остатки.Фирма = Обороты.Фирма
AND Остатки.Договор = Обороты.Договор
AND Остатки.КредДокумент = Обороты.КредДокумент) as ОстаткиОбороты
INNER JOIN $Справочник.Договоры as спрДогов ON спрДогов.ID = ОстаткиОбороты.Договор
INNER JOIN $Справочник.Контрагенты as спрКонтр ON спрКонтр.ID = спрДогов.ParentExt
LEFT JOIN $Документ.Реализация as докРеализ ON докРеализ.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент,9)
GROUP BY
ОстаткиОбороты.Фирма,
спрКонтр.ID,
ОстаткиОбороты.КредДокумент) as ВедомостьПокупателей
Прикрепленные файлы:
!ВедомостьПокупателей.qry
127. yuraos 1008 05.12.13 21:00 Сейчас в теме
(126)
Выполни этот запрос в консоли в "родной" для твоих dbf-ников базе.
(можно взять из файла во вложении к предыдущему посту)

Если в консоли установить галку "Выводить текст",
то при выполнении запроса в окно сообщений будет
выведен текст запроса, после обработки мета-парсером.


этот "транслированный" текст запроса можно будет пробовать использовать в других базах.
132. sss999 50 06.12.13 12:18 Сейчас в теме
(126) посмотрел я запрос,большой конечно получился по сравнению с моим,я забыл сказать что там часть полей не надо типа начальный остаток и приходы с расходами.а только коност и коностп,именно то что в отчет и попадает.вот и цифра коностп именно и не сходится и с твоим тоже.Еще вот я думаю как итоги получать или группировку делать,потому что это же дебиторка и все три базы должны сворачиваться,наверное нужно будет в запросе делать юнион а потом все три группировать со сложением.
134. yuraos 1008 06.12.13 18:00 Сейчас в теме
(132)
Большой, потому-что задача решена в общей постановке.
Если попытаться оптимизировать с обращением к итогам, то будет еще громозче.

Но се ля ви
...
Примерно так выглядят все запросы виртуальных таблиц итогов по регистрам.
К стати таблица РегистрОстаткиОбороты - самая сложная из них.
136. yuraos 1008 06.12.13 18:49 Сейчас в теме
(132)
о просроченной задолженности, которая коностп:
она равная конечному остатку, если
дата оплаты кредит документа заполнена и меньше конечной даты.
---
я в своем запросе дату оплаты смотрел только по документам "Реализация".
Этим и объясняются отличия,
поскольку в базе наверняка есть кредит-документы других видов,
имеющие реквизит "ДатаОплаты"
(это могут быть возвраты от покупателя и отчеты комиссионера).
---
поэтому кроме Реализации придется одновременно соединять итоги по регистру
еще и с таблицами кредит-документов других видов, чтоб вытянуть дату оплаты
(а вытягивается она хреновато - сразу из N таблиц)
137. sss999 50 06.12.13 18:53 Сейчас в теме
(136) я смотрел в других вроде нет датыоплаты
138. yuraos 1008 07.12.13 09:11 Сейчас в теме
(137)
ну не знаю, что в твоих базах творится.
---
в моей демо-базе в регистре "Покупатели"
засветились кредит-документы с реквизитом "ДатаОплаты"
следующих видов:
- ОтчетКомитенту
- ВводОстатковПокупателя
- Реализация
- РеализацияРозница
- ВозвратОтПокупателя

---
Целых пять! И по идее все их надо учитывать в запросе!!!
139. sss999 50 09.12.13 11:24 Сейчас в теме
(138) хотел спросить как лучше сделать группировку через обычное тз или индексированную тз,мне вот непонятен синтаксис ИТЗ.Группировать("ИндДок:АдресДоставки","Количество",1); (ИндДок:АдресДоставки),вот не знаю,или через тз делать группировку а потом объединять тз и сортировать.
140. yuraos 1008 09.12.13 12:02 Сейчас в теме
(139) sss999,
через индексированную таблицу - ОДНОЗНАЧНО ЛУЧШЕ!!!
сам оценишь всю мощь этого объекта, когда более менее разберешься с ним.
мне так не хватает "ИндексированныхТаблиц" в 1с-8.х !!!
--
1. в первую очередь - по производительности.
Группировку, сортировку, подсчет итогов индексированная таблица выполняет гораздо быстрее.
2. во вторую очередь - из-за дополнительных возможности объекта:
- подсчет итогов по диапазону значений выбранного ключа.
- возможность соединения нескольких выборок данных
(объектный аналог оператора JOIN языка запросов).
- возможность объединения нескольких однотипных выборок в одну
(объектный аналог оператора UNION языка запросов).
...
ПОСЛЕДНЕЕ ДЛЯ ТЕБЯ НАВЕРНОЕ БУДЕТ ОЧЕНЬ ИНТЕРЕСНО,
поскольку у тебя как я понял надо сделать отчет
по данным "дебеторки" из трех разных баз.
141. sss999 50 09.12.13 12:18 Сейчас в теме
(140) union да наверно поможет,но я не хочу переписывать вывод на печать а там он из обычного тз идет,и мне поэтому нужно сделать добавку в тз группировочных строк,я знаю что можно через свернуть и сортировать
142. yuraos 1008 09.12.13 12:40 Сейчас в теме
(141) sss999,
дело хозяйское ...
я переписал бы вывод на печать - это не так уж сложно, по сравнению с запросом.
:)
---
могу посоветовать объединить отдельные выборки и
сгруппировать итоговую выборку
с помощью индексированной таблицы.

после чего "вывести" результат группировки в обычную тз
для последующего вывода на печать.
143. sss999 50 11.12.13 11:06 Сейчас в теме
(142) не подскажешь не работает что то запрос к временной таблице использую INTO CURSOR TempTmpTable1 NOFILTER.Потом пытаюсь из нее прочитать а он говорит что нет такой дбф
144. yuraos 1008 11.12.13 12:25 Сейчас в теме
(143) sss999,
Перемудрил ты с курсором.
Курсоры - это программные объекты для построчной манипуляции с выборками данных.
Имя курсора нельзя далее использовать в самом запросе.
Используя ссылку на открытый курсор,
в коде можно затем программно перебирать и обрабатывать выборку данных.
(если программная среда это позволяет).
---
Но непосредственная работа с курсорами как таковыми - это тема не для 1С, даже улучшенной 1cpp.dll.
Хотя объекты типа "Справочник" или "Документ" выполняя выборку элементов фактически используют курсоры.
145. yuraos 1008 11.12.13 12:30 Сейчас в теме
(144)
так что используй вариант
sel ect *** fr om *** INTO TABLE #ИмяВТ
---
при этом постарайся
1. не назвать неудачно временную таблицу
(а то можешь уничтожить какиенибудь данные).
2. подчищать после себя мусор - для порядка.
---
ниже простенький рабочий примерчик для справочника "Номенклатура"
146. yuraos 1008 11.12.13 12:33 Сейчас в теме
sel ect id as Ссылка
from $Справочник.Номенклатура
INTO TABLE #Номенклатура
GO -- SelectIntoTable#Номенклатура

select Таб.Ссылка as [Ссылка$$Справочник.Номенклатура]
fr om #Номенклатура as Таб
GO -- Select#Номенклатура

dr op table #Номенклатура
GO -- Drop#Номенклатура

---
Оператор GO - "работает" только в консоли !!!

Он фактически нарезает текст запроса на куски,
которые консоль отдельно выполняет в цикле.
147. sss999 50 11.12.13 13:13 Сейчас в теме
(146) не дело не в курсоре не работает даже EXECSCRIPT(' SEL ECT * INTO TempTmpTable1
from
(SELECT спрКонтр.id fr om $Справочник.Контрагенты as спрКонтр)
as WW ')
148. yuraos 1008 11.12.13 13:43 Сейчас в теме
(147) sss999,
ты что через ADODB.Command пытаешься скриптом временную таблицу создать?
149. sss999 50 11.12.13 13:49 Сейчас в теме
(148) есть отчет в котором этот скрипт работает,я копирую тот запрос он отрабатывает т.е. создает таблицу и возвращает цифру 1,но когда я начинаю править это запрос,убирать знаки переноса строки он перестает работать.Что то с синтаксисом не то.
151. yuraos 1008 11.12.13 14:03 Сейчас в теме
(149) sss999,
что-то ты все как-то непростыми путями идешь.
:)
---
насколько я осознал порывшись в мануале foxpro
1. - убирать разделители строк в виде "..."+CHR(13)+"..." нельзя
2. - а после INTO - обязательно нужно указать TABLE
155. sss999 50 11.12.13 14:35 Сейчас в теме
(151) да метод использовать хотел с другого подобного отчета где итоги делаются объединениями.Видно он работает да но с какими то тонкостями своими в синтаксисе.
150. sss999 50 11.12.13 14:03 Сейчас в теме
153. yuraos 1008 11.12.13 14:08 Сейчас в теме
фигня выше работает в консоли и возвращает 1
---
впрочем спасибо
использование EXECSCRIPT( ) в запросе для меня было новостью

я как-то все больше со скульными базами имею дело.
дбф - представляют для меня больше теоретический интерес
:)
154. yuraos 1008 11.12.13 14:20 Сейчас в теме
(153)
к стати похоже разрывать оператор sel ect переносами строк
как это обычно можно делать
в этом случае нельзя !!!
---
этот пример выдает ошибку:
---
EXECSCRIPT(
"sel ect id as Ссылка"+
CHR(13)+
"fr om $Справочник.Номенклатура INTO TABLE #Номенклатура)"+
CHR(13)+
"select Таб.Ссылка as [Ссылка$Справочник.Номенклатура] fr om #Номенклатура as Таб")
156. sss999 50 11.12.13 15:19 Сейчас в теме
(154) мне нужно твой запрос засунуть в таблицу и че то не выходит
157. yuraos 1008 11.12.13 17:42 Сейчас в теме
(156) sss999,
в запросе уложить во временную таблицу или выгрузить в объект "ТаблицаЗначений"?
и для чего ???
---
пример запроса или кода выложи ... плиииз.
;)
158. sss999 50 12.12.13 11:40 Сейчас в теме
(157) Таблицу запроса временную! при помощи union саму с собой объединить столько раз сколько группировок в итогах нужно получить,при этом часть группировок делаются константами "Фирма" например.Вот нужно что бы получилась виртуальная таблица ))У меня есть пример и он даже работает,но когда я вставляю свой запрос он выдает ошибку,в том запросе сожержатся знаки "+|" вот когда я их начинаю удалять по одному то на четвертом тоже выдает ошибку,я не могу понять все это.
160. sss999 50 12.12.13 12:23 Сейчас в теме
понял,щас попробую по твоему.написать в конце into table .а решетка что это обязательно тоже?
161. yuraos 1008 12.12.13 12:57 Сейчас в теме
(160) sss999,
нет, решетка - необязательна.
так именуются временные таблицы в MS SQL.

но именовать временные таблицы надо осторожно.
если вдруг это имя совпадет с именем таблицы с данными
(например таблицей регистра) - то эти данные будут потеряны!!!

так же будет неприятно,
если затрешь данные существующей еще нужной временной таблицы.

особая тема - возможность конфликтов в многопользовательском режиме:
когда несколько разных юзеров одновременно захотят
выполнить запрос с одинаковыми именами временных таблиц.
162. sss999 50 12.12.13 15:06 Сейчас в теме
(161) "
|EXECSCRIPT("" sel ect id as Ссылка ""
|+"" fr om $Справочник.Номенклатура ""
| +"" INTO TABLE #Номенклатура "")
|";

вот так только заработал.А если делать как обычно без +"" то не работает
163. yuraos 1008 12.12.13 16:11 Сейчас в теме
(162) sss999,
да я вроде писал про это в посте (154):

к стати похоже разрывать оператор select переносами строк
как это обычно можно делать
в этом случае нельзя !!!

не понимает EXECSCRIPT() "многострочные" операторы запросов.
надо извращаться в одну строку
:)
164. yuraos 1008 12.12.13 16:15 Сейчас в теме
(163)
а что ты вообще с этим EXECSCRIPT() связался?
прекрасно и без него можно уложить выборку во ВТ.
...
правда если ВТ много,
то для каждой ВТ придется отдельно выполнять команду
с помощью объекта "OLEDBCommand".
165. sss999 50 12.12.13 16:24 Сейчас в теме
(164) можно без него?ок щас попробую,а что за сложность если много таблиц? а то я запарился там однострочный а тут многострочный запрос
166. sss999 50 12.12.13 16:37 Сейчас в теме
(164) я не знаю,так было в предыдущем отчете.там же будет несколько баз и скорее поэтому.три группировки значит три таблицы плюс три базы
167. sss999 50 12.12.13 16:40 Сейчас в теме
(164) а не подскажешь как выполнить такой вот рваный запрос без скрипта
"" sel ect id as фирма ""
|+"" fr om $Справочник.Фирмы ""
| +"" INTO TABLE TempTmpTable1 ""
168. yuraos 1008 12.12.13 17:26 Сейчас в теме
(167) sss999,
дык, берешь по простому и пишешь в консоли:
---
sel ect
id as фирма,
descr as фирма_наименование,
code as фирма_код
fr om $Справочник.Фирмы
INTO TABLE TempTmpTable1
---
при этом в каталоге базы появляется файл TempTmpTable1.dbf
169. sss999 50 12.12.13 17:47 Сейчас в теме
(168) EXECSCRIPT(' SEL ECT * INTO CURSOR TempTmpTable1 from (select id as фирма
fr om $Справочник.Фирмы
) as WW ') вот эта не работает
170. sss999 50 12.12.13 17:48 Сейчас в теме
(168) а это работает,вопрос почему
EXECSCRIPT(' SEL ECT * INTO CURSOR TempTmpTable1 NOFILTER fr om ( '+
' SEL ECT '+
' SUM(РегПродажа_04.SP2222) as Себест__период_1, '+
' SUM(РегПродажа_04.SP2223) as ПродСтоимость__период_1, '+
' SUM(РегПродажа_04.SP2224) as Количество__период_1, '+
' SUM(РегПродажа_04.SP2225) as СебестВ__период_1, '+
' SUM(РегПродажа_04.SP2226) as ПродСтоимостьВ__период_1, '+
' SUM(РегПродажа_04.SP2227) as КоличествоВ__период_1, '+
' СпрФирмы_04.DESCR as Фирма, '+
' СпрКонтр_04.DESCR as Покупатель, '+
' СпрНомен_04.DESCR as Номенклатура '+
' FR OM '+
' _RA2228_04 as РегПродажа_04 '+
' LEFT JOIN _1SJOURN_04 as Журн_04 ON РегПродажа_04.IDDOC = Журн_04.IDDOC '+
' LEFT JOIN _SC156_04 as СпрНомен_04 ON РегПродажа_04.SP2218 = СпрНомен_04.ID '+
' LEFT JOIN _SC134_04 as СпрКонтр_04 ON РегПродажа_04.SP2219 = СпрКонтр_04.ID '+
' LEFT JOIN _SC134_04 as СпрКонтрП_04 ON РегПродажа_04.SP2220 = СпрКонтрП_04.ID '+
' LEFT JOIN _SC331_04 as СпрФирмы_04 ON РегПродажа_04.SP2221 = СпрФирмы_04.ID '+
' WHERE Журн_04.DATE BETWEEN {^ 2013-10-01} AND {^ 2013-10-29} '+
' GROUP BY Фирма,Покупатель,Номенклатура '+
' UNI ON ALL '+
' SELECT '+
' SUM(РегПродажа_Old.SP2222) as Себест__период_1, '+
' SUM(РегПродажа_Old.SP2223) as ПродСтоимость__период_1, '+
' SUM(РегПродажа_Old.SP2224) as Количество__период_1, '+
' SUM(РегПродажа_Old.SP2225) as СебестВ__период_1, '+
' SUM(РегПродажа_Old.SP2226) as ПродСтоимостьВ__период_1, '+
' SUM(РегПродажа_Old.SP2227) as КоличествоВ__период_1, '+
' СпрФирмы_Old.DESCR as Фирма, '+
' СпрКонтр_Old.DESCR as Покупатель, '+
' СпрНомен_Old.DESCR as Номенклатура '+
' FR OM '+
' _RA2228_Old as РегПродажа_Old '+
' LEFT JOIN _1SJOURN_Old as Журн_Old ON РегПродажа_Old.IDDOC = Журн_Old.IDDOC '+
' LEFT JOIN _SC156_Old as СпрНомен_Old ON РегПродажа_Old.SP2218 = СпрНомен_Old.ID '+
' LEFT JOIN _SC134_Old as СпрКонтр_Old ON РегПродажа_Old.SP2219 = СпрКонтр_Old.ID '+
' LEFT JOIN _SC134_Old as СпрКонтрП_Old ON РегПродажа_Old.SP2220 = СпрКонтрП_Old.ID '+
' LEFT JOIN _SC331_Old as СпрФирмы_Old ON РегПродажа_Old.SP2221 = СпрФирмы_Old.ID '+
' WH ERE Журн_Old.DATE BETWEEN {^ 2013-10-01} AND {^ 2013-10-29} '+
' GROUP BY Фирма,Покупатель,Номенклатура '+
' UNION ALL '+
' SEL ECT '+
' SUM(РегПродажа.SP2222) as Себест__период_1, '+
' SUM(РегПродажа.SP2223) as ПродСтоимость__период_1, '+
' SUM(РегПродажа.SP2224) as Количество__период_1, '+
' SUM(РегПродажа.SP2225) as СебестВ__период_1, '+
' SUM(РегПродажа.SP2226) as ПродСтоимостьВ__период_1, '+
' SUM(РегПродажа.SP2227) as КоличествоВ__период_1, '+
' СпрФирмы.DESCR as Фирма, '+
' СпрКонтр.DESCR as Покупатель, '+
' СпрНомен.DESCR as Номенклатура '+
' FR OM '+
' RA2228 as РегПродажа '+
' LEFT JOIN 1SJOURN as Журн ON РегПродажа.IDDOC = Журн.IDDOC '+
' LEFT JOIN SC156 as СпрНомен ON РегПродажа.SP2218 = СпрНомен.ID '+
' LEFT JOIN SC134 as СпрКонтр ON РегПродажа.SP2219 = СпрКонтр.ID '+
' LEFT JOIN SC134 as СпрКонтрП ON РегПродажа.SP2220 = СпрКонтрП.ID '+
' LEFT JOIN SC331 as СпрФирмы ON РегПродажа.SP2221 = СпрФирмы.ID '+
' WH ERE Журн.DATE BETWEEN {^ 2013-10-01} AND {^ 2013-10-29} '+
' GROUP BY Фирма,Покупатель,Номенклатура ) as WW ')
171. sss999 50 12.12.13 17:54 Сейчас в теме
(168) ладно я понял все надо тогда через скрипт делать
172. sss999 50 15.12.13 16:22 Сейчас в теме
(168) можешь подсказать почему синтаксис эррор может быть ,вставляю маленький запрос все нормально свой вставляю не пашет,там в цикле удаляются переносы строки на char13 ,отдельно запрос работает,его текст потом просто вставляется в execscript,и другой маленький запрос отрабатывает а этот нет

EXECSCRIPT(' SEL ECT * fr om ( SEL ECT '+
' ВедомостьПокупателей.Фирма as [Фирма], '+
' ВедомостьПокупателей.Контрагент as [Контрагент], '+
' СпрКонтр.descr as DescrКонт, '+
' спрФирмы.Descr as ФирмDescr, '+
' ВедомостьПокупателей.Договор as [Договор], '+
' ВедомостьПокупателей.КредДокумент as [КредДокум], '+
' ВедомостьПокупателей.НачОст as НачОст, '+
' ВедомостьПокупателей.НачОстВ as НачОстВ, '+
' ВедомостьПокупателей.Приход as Приход, '+
' ВедомостьПокупателей.ПриходВ as ПриходВ, '+
' ВедомостьПокупателей.Расход as Расход, '+
' ВедомостьПокупателей.РасходВ as РасходВ, '+
' ВедомостьПокупателей.КонОст as КонОст, '+
' ВедомостьПокупателей.КонОстВ as КонОстВ, '+
' ВедомостьПокупателей.КонОстП as КонОстП, '+
' ВедомостьПокупателей.КонОстВП as КонОстВП '+
' FR OM '+
' (SEL ECT '+
' ОстаткиОбороты.Фирма as Фирма, '+
' спрКонтр.ID as Контрагент, '+
' ОстаткиОбороты.Договор as Договор , '+
' Max(ОстаткиОбороты.КредДокумент)as КредДокумент, '+
' SUM(ОстаткиОбороты.НачОст) as НачОст, '+
' SUM(ОстаткиОбороты.НачОстВ) as НачОстВ, '+
' SUM(ОстаткиОбороты.Приход) as Приход, '+
' SUM(ОстаткиОбороты.ПриходВ) as ПриходВ, '+
' SUM(ОстаткиОбороты.Расход) as Расход, '+
' SUM(ОстаткиОбороты.РасходВ) as РасходВ, '+
' SUM(ОстаткиОбороты.КонОст) as КонОст, '+
' SUM(ОстаткиОбороты.КонОстВ) as КонОстВ, '+
' SUM(ICASE(ISNULL(докРеализ.IDDOC),icase(ISNULL(докВозврат.IDDOC),0, '+
' (докВозврат.SP539 >= {^ 900-01-01’} and (докВозврат.SP539 < {^ 2013-10-01}), '+
' ОстаткиОбороты.КонОст,0),(докРеализ.sp1175 >= {^ 900-01-01’} AND '+
' (докРеализ.sp1175 < {^ 2013-10-01} ), '+
' ОстаткиОбороты.КонОст,0)) as КонОстП, '+
' SUM(ICASE(ISNULL(докРеализ.IDDOC),0,(докРеализ.sp1175 >= {^ 900-01-01’} AND '+
' (докРеализ.sp1175 < {^ 2013-10-01} ), '+
' ОстаткиОбороты.КонОстВ,0)) as КонОстВП '+
' FROM '+
' (SELECT '+
' NVL(Остатки.Фирма,Обороты.Фирма) as Фирма, '+
' NVL(Остатки.Договор,Обороты.Договор) as Договор, '+
' NVL(Остатки.КредДокумент,Обороты.КредДокумент) as КредДокумент, '+
' NVL(Остатки.НачОст,0) as НачОст, '+
' NVL(Остатки.НачОстВ,0) as НачОстВ, '+
' NVL(Обороты.Приход,0) as Приход, '+
' NVL(Обороты.ПриходВ,0) as ПриходВ, '+
' NVL(Обороты.Расход,0) as Расход, '+
' NVL(Обороты.РасходВ,0) as РасходВ, '+
' NVL(Остатки.НачОст,0) + NVL(Обороты.Приход,0) - NVL(Обороты.Расход,0) as КонОст, '+
' NVL(Остатки.НачОстВ,0) + NVL(Обороты.ПриходВ,0) - NVL(Обороты.РасходВ,0) as КонОстВ '+
' FR OM '+
' (SELECT '+
' Рег.sp2194 as Фирма, '+
' Рег.sp2195 as Договор, '+
' Рег.sp2198 as КредДокумент, '+
' SUM((1 - Рег.debkred * 2)*Рег.sp2201) as НачОст, '+
' SUM((1 - Рег.debkred * 2)*Рег.sp2199) as НачОстВ '+
' FR OM '+
' ra2207 as Рег '+
' INNER JOIN '+
' 1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC '+
' WH ERE '+
' Жур.DATE < {^ 2005-12-01} '+
' AND NOT INLIST(Рег.sp2204 '+
' ,[ 1FS ] '+
' ,[ 1GR ] '+
' ,[ 1FR ] '+
' ,[ 1GN ] '+
' ,[ 1FT ] '+
' ,[ 1FU ] '+
' ,[ 1GO ] '+
' ) '+
' GROUP BY '+
' Рег.sp2194, '+
' Рег.sp2195, '+
' Рег.sp2198) as Остатки '+
' FULL JOIN '+
' (SELECT '+
' Рег.sp2194 as Фирма, '+
' Рег.sp2195 as Договор, '+
' Рег.sp2198 as КредДокумент, '+
' SUM(IIF(Рег.debkred = 1,0,Рег.sp2201)) as Приход, '+
' SUM(IIF(Рег.debkred = 1,0,Рег.sp2199)) as ПриходВ, '+
' SUM(IIF(Рег.debkred = 1,Рег.sp2201,0)) as Расход, '+
' SUM(IIF(Рег.debkred = 1,Рег.sp2199,0)) as РасходВ '+
' FR OM '+
' ra2207 as Рег '+
' INNER JOIN '+
' 1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC '+
' WH ERE '+
' Жур.DATE BETWEEN {^ 2005-12-01} AND {^ 2013-10-01} '+
' AND NOT INLIST(Рег.sp2204 '+
' ,[ 1FS ] '+
' ,[ 1GR ] '+
' ,[ 1FR ] '+
' ,[ 1GN ] '+
' ,[ 1FT ] '+
' ,[ 1FU ] '+
' ,[ 1GO ] '+
' ) '+
' GROUP BY '+
' Рег.sp2194, '+
' Рег.sp2195, '+
' Рег.sp2198) as Обороты '+
' ON Остатки.Фирма = Обороты.Фирма '+
' AND Остатки.Договор = Обороты.Договор '+
' AND Остатки.КредДокумент = Обороты.КредДокумент) as ОстаткиОбороты '+
' INNER JOIN sc92 as спрДогов ON спрДогов.ID = ОстаткиОбороты.Договор '+
' INNER JOIN sc134 as спрКонтр ON спрКонтр.ID = спрДогов.ParentExt '+
' LEFT JOIN dh1191 as докРеализ ON докРеализ.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент, '+
' 9) '+
' LEFT JOIN dh558 as докВозврат ON докВозврат.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент'+
' ,9) '+
' GROUP BY '+
' ОстаткиОбороты.Фирма, '+
' спрКонтр.ID, '+
' ОстаткиОбороты.Договор) as ВедомостьПокупателей '+
' INNER JOIN sc134 as спрКонтр ON спрКонтр.ID=ВедомостьПокупателей.Контрагент '+
' INNER JOIN sc331 as спрФирмы ON спрФирмы.ID=ВедомостьПокупателей.Фирма '+
' Order by спрФирмы.Descr,спрКонтр.Descr ) as WW INTO table TempTmpTable1')
173. sss999 50 15.12.13 16:31 Сейчас в теме
причем косяк появился как я вложенный айкейс по возврату добавил в сумму без него нормально
174. yuraos 1008 15.12.13 17:50 Сейчас в теме
(173) sss999,
а ты просто в консоли проверял свою конструкцию с возвратом?
она вообще работает??
---
добавлю в свой вариант возврат
...
а может еще какой кредит-док
:))
и выложу по-позжей
175. yuraos 1008 15.12.13 19:03 Сейчас в теме
В следующем посте мой вариант.
Сразу для кредит-документов всех пяти видов:
- ОтчетКомитенту
- ВводОстатковПокупателя
- Реализация
- РеализацияРозница
- ВозвратОтПокупателя
---
проверено на типовой демо-базе - работает
176. yuraos 1008 15.12.13 19:03 Сейчас в теме
SEL ECT
ВедомостьПокупателей.Фирма as [Фирма$Справочник.Фирмы],
ВедомостьПокупателей.Контрагент as [Контрагент$Справочник.Контрагенты],
ВедомостьПокупателей.КредДокумент as [КредДокумент$Документ],
ВедомостьПокупателей.НачОст as НачОст,
ВедомостьПокупателей.НачОстВ as НачОстВ,
ВедомостьПокупателей.Приход as Приход,
ВедомостьПокупателей.ПриходВ as ПриходВ,
ВедомостьПокупателей.Расход as Расход,
ВедомостьПокупателей.РасходВ as РасходВ,
ВедомостьПокупателей.КонОст as КонОст,
ВедомостьПокупателей.КонОстВ as КонОстВ,
ВедомостьПокупателей.КонОстП as КонОстП,
ВедомостьПокупателей.КонОстВП as КонОстВП
FR OM
(SEL ECT
ВедПок.Фирма,
ВедПок.Контрагент,
ВедПок.КредДокумент,
SUM(ВедПок.НачОст) as НачОст,
SUM(ВедПок.НачОстВ) as НачОстВ,
SUM(ВедПок.Приход) as Приход,
SUM(ВедПок.ПриходВ) as ПриходВ,
SUM(ВедПок.Расход) as Расход,
SUM(ВедПок.РасходВ) as РасходВ,
SUM(ВедПок.КонОст) as КонОст,
SUM(ВедПок.КонОстВ) as КонОстВ,
SUM(ICASE(ВедПок.ДатаОплаты >= {d’1900-01-01’} AND ВедПок.ДатаОплаты < :КонДата~~,ВедПок.КонОст,0)) as КонОстП,
SUM(ICASE(ВедПок.ДатаОплаты >= {d’1900-01-01’} AND ВедПок.ДатаОплаты < :КонДата~~,ВедПок.КонОстВ,0)) as КонОстВП
FR OM
(SEL ECT
ОстаткиОбороты.Фирма,
спрКонтр.ID as Контрагент,
ОстаткиОбороты.КредДокумент,
ОстаткиОбороты.НачОст as НачОст,
ОстаткиОбороты.НачОстВ as НачОстВ,
ОстаткиОбороты.Приход as Приход,
ОстаткиОбороты.ПриходВ as ПриходВ,
ОстаткиОбороты.Расход as Расход,
ОстаткиОбороты.РасходВ as РасходВ,
ОстаткиОбороты.КонОст as КонОст,
ОстаткиОбороты.КонОст as КонОстВ,
NVL($КДок1.ДатаОплаты,NVL($КДок2.ДатаОплаты,NVL($КДок3.ДатаОплаты,NVL($КДок4.ДатаОплаты,NVL($КДок5.ДатаОплаты,{d’0001-01-01’}))))) as ДатаОплаты
FROM
-- подзапрос, как-то реализующий ВТ $РегистрОстаткиОбороты.Покупатели(:НачДата~~,:КонДата~~) для DBF
(SELECT
NVL(Остатки.Фирма,Обороты.Фирма) as Фирма,
NVL(Остатки.Договор,Обороты.Договор) as Договор,
NVL(Остатки.КредДокумент,Обороты.КредДокумент) as КредДокумент,
NVL(Остатки.НачОст,0) as НачОст,
NVL(Остатки.НачОстВ,0) as НачОстВ,
NVL(Обороты.Приход,0) as Приход,
NVL(Обороты.ПриходВ,0) as ПриходВ,
NVL(Обороты.Расход,0) as Расход,
NVL(Обороты.РасходВ,0) as РасходВ,
NVL(Остатки.НачОст,0) + NVL(Обороты.Приход,0) - NVL(Обороты.Расход,0) as КонОст,
NVL(Остатки.НачОстВ,0) + NVL(Обороты.ПриходВ,0) - NVL(Обороты.РасходВ,0) as КонОстВ
FR OM
-- подзапрос начальных остатков в разрезе измерений: Фирма,Договор,КредитДокумент
(SELECT
$Рег.Фирма as Фирма,
$Рег.Договор as Договор,
$Рег.КредДокумент as КредДокумент,
SUM((1 - Рег.debkred * 2)*$Рег.СуммаРуб) as НачОст,
SUM((1 - Рег.debkred * 2)*$Рег.СуммаВал) as НачОстВ
FR OM
$Регистр.Покупатели as Рег
INNER JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
WH ERE
Жур.DATE < :НачДата~~
AND NOT INLIST($Рег.КодОперации
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщику
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщикуВал
,$Перечисление.КодыОпераций.ЗачтенАвансПокупателя
,$Перечисление.КодыОпераций.СторнированАванс
,$Перечисление.КодыОпераций.ЗачтенВозвратПокупателя
,$Перечисление.КодыОпераций.ЗачтенВозвратПоставщику
,$Перечисление.КодыОпераций.СторнированВозврат
)
GROUP BY
$Рег.Фирма,
$Рег.Договор,
$Рег.КредДокумент) as Остатки
FULL JOIN
-- подзапрос оборотов за период в разрезе измерений: Фирма,Договор,КредитДокумент
(SELECT
$Рег.Фирма as Фирма,
$Рег.Договор as Договор,
$Рег.КредДокумент as КредДокумент,
SUM(IIF(Рег.debkred = 1,0,$Рег.СуммаРуб)) as Приход,
SUM(IIF(Рег.debkred = 1,0,$Рег.СуммаВал)) as ПриходВ,
SUM(IIF(Рег.debkred = 1,$Рег.СуммаРуб,0)) as Расход,
SUM(IIF(Рег.debkred = 1,$Рег.СуммаВал,0)) as РасходВ
FR OM
$Регистр.Покупатели as Рег
INNER JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
WH ERE
Жур.DATE BETWEEN :НачДата~~ AND :КонДата~~
AND NOT INLIST($Рег.КодОперации
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщику
,$Перечисление.КодыОпераций.ЗачтенАвансПоставщикуВал
,$Перечисление.КодыОпераций.ЗачтенАвансПокупателя
,$Перечисление.КодыОпераций.СторнированАванс
,$Перечисление.КодыОпераций.ЗачтенВозвратПокупателя
,$Перечисление.КодыОпераций.ЗачтенВозвратПоставщику
,$Перечисление.КодыОпераций.СторнированВозврат
)
GROUP BY
$Рег.Фирма,
$Рег.Договор,
$Рег.КредДокумент) as Обороты
ON Остатки.Фирма = Обороты.Фирма
AND Остатки.Договор = Обороты.Договор
AND Остатки.КредДокумент = Обороты.КредДокумент) as ОстаткиОбороты
INNER JOIN $Справочник.Договоры as спрДогов ON спрДогов.ID = ОстаткиОбороты.Договор
INNER JOIN $Справочник.Контрагенты as спрКонтр ON спрКонтр.ID = спрДогов.ParentExt
LEFT JOIN $Документ.Реализация as КДок1 ON КДок1.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент,9)
LEFT JOIN $Документ.РеализацияРозница as КДок2 ON КДок2.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент,9)
LEFT JOIN $Документ.ВозвратОтПокупателя as КДок3 ON КДок3.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент,9)
LEFT JOIN $Документ.ОтчетКомитенту as КДок4 ON КДок4.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент,9)
LEFT JOIN $Документ.ВводОстатковПокупателя as КДок5 ON КДок5.IDDOC = RIGHT(ОстаткиОбороты.КредДокумент,9)
) as ВедПок
GROUP BY
ВедПок.Фирма,
ВедПок.Контрагент,
ВедПок.КредДокумент) as ВедомостьПокупателей
179. sss999 50 15.12.13 21:32 Сейчас в теме
(176) креддока же достаточно точно,а я брал шапку с таблицы доков,мне просто не совсем понятно как она так сама присоединяется,это типа почему нужно добавлять вид документа из журнала ,условие на дату-ну да так что то сократил но понимание запроса думаю стало тяжелее.Так в целом конечно более изящный вариант.
185. sss999 50 17.12.13 12:01 Сейчас в теме
а не парься ладно,короче я убрал из цикла функцию по обработке даты d букву меняла которая и сделал через ОбрМетаСКЛ обработку запроса твоего текста а не вручную через консоль
186. yuraos 1008 17.12.13 12:18 Сейчас в теме
(185) sss999,
а я особо и не парюсь
:)
...
вообще первое образование у меня - физическое.
а в физике используют методологию "Бритва О́ккама" для выяснения какая из теорий правильней.
вкратце суть методологии выражается афоризмом:
Зачем делать сложным, то что проще простого.
195. Ёпрст 1068 17.12.13 14:25 Сейчас в теме
Извращенцы..
:Выбдата~~ + УстановитьТекстовыйПараметр - наш выбор+
Для корректного текста запроса в дбф нужно переписывать весь текст запроса для попадания в индекс.
Иначе, никакой приемлемой скорости от фокса не поиметь.
Это учтено у вас в тексте запроса ?
197. yuraos 1008 17.12.13 14:29 Сейчас в теме
(195) Ёпрст, привет! давно не виделись!
198. Ёпрст 1068 17.12.13 14:37 Сейчас в теме
(197) привет, был в бане
205. yuraos 1008 17.12.13 16:56 Сейчас в теме
(198) Ёпрст,
лучше уж в сауне побывать, чем в бане...

за что тебя так?
наверное за справедливость пострадал???
207. Ёпрст 1068 17.12.13 17:24 Сейчас в теме
(205) Да покритиковал действующую систему партнерского соглашения..
В общем, барин ударил палкой из прихоти.
199. sss999 50 17.12.13 14:43 Сейчас в теме
(195) Ёпрст, делается не сколько для скорости сколько ради того что из трех разных мастей дбф будет читаться от разных баз.
200. Ёпрст 1068 17.12.13 14:44 Сейчас в теме
(199) да хоть с 20-ти :))
Разницы то нет никакой, где запрос выполнятся будет, в родной базе или в удаленной.
203. sss999 50 17.12.13 14:46 Сейчас в теме
(200) Ёпрст, они не удаленные а просто дбф ки в базу накидали в одну от них,а так прийдется еще и индексы кидать,а кто их будет восстанавливать прежде если ниче там уже нельзя проводить,короче потом может быть прикрутим но пока еще так не работает даже
202. Ёпрст 1068 17.12.13 14:45 Сейчас в теме
+ метапарсер позволяет иметь имена табличек с разных баз в одном запросе. парится с названиями имён табличек и полей не нужно.
А вот писать запрос с попаданием в индекс - желательно. Ибо скорость-наше всё :)
204. sss999 50 17.12.13 15:17 Сейчас в теме
(202) Ёпрст, а через че быстрее через курсор или временную таблицу?
212. sss999 50 18.12.13 13:57 Сейчас в теме
представляешь у меня в значении фирмы стоит строка "1Фирма" и когда я ее типизирую она находит группу "Архив" справочника контрагенты.как так .
214. yuraos 1008 18.12.13 16:45 Сейчас в теме
(212) sss999, пример выложи
...
точно типизируешь
как [Фирма$Справочник.Фирмы]
а не как [Фирма$Справочник.Контрагенты] ???
215. sss999 50 18.12.13 21:45 Сейчас в теме
(214) извиняюсь, это я типизировал контрагентов.других она находила типизировала правильно,а для этого значения выдавала такое
217. sss999 50 19.12.13 12:18 Сейчас в теме
ТекстЗапроса=ТекстЗапроса+"
| and $Рег.Фирма IN (SEL ECT Val FR OM #Группа)";
//| and $Рег.Фирма=:ВыбФирма";
RS.УложитьСписокОбъектов(ВыбРазделитель1, "#Группа", "Фирмы"); пишу текст говорит таблица группа.dbf not exist
,я бы его назвал кривой запрос а не прямой.RS.УстановитьПараметр("Фирмы",ВыбРазделитель1); говорит список параметров пуст.вот блин г..
221. yuraos 1008 19.12.13 19:46 Сейчас в теме
(217) sss999,
если RS в твоем примере - это объект OLEDBCommand
то укладка списка элементов или группы справочника во временную таблицу
имеет свои особенности ...
(почитал бы ты, брат Гораций, мануал).
:)

Задать руками в этом методе имя временной таблицы нельзя.
Метод генерит это имя автоматически и возвращает его через второй аргумент.
Причем сгенерированное имя представляет собой строку GUID:

Это выдержка из мануала:
ВрТабл = "";
cmd.УложитьСписокОбъектов(ТекГруппа, ВрТабл, "Номенклатура");
Сообщить("Что тут: " + ВрТабл); // Например, "Что тут: 858573b1-5a6f-459e-9c75-ec63e2a1d858"


эту строку GUID можно использовать в тексте запроса напрямую,
ну или как предлагает в (218) Ёпрст.
223. sss999 50 19.12.13 22:06 Сейчас в теме
(221) я не видел мануал,вернее он где то лежит его фиг найдешь а тем более в нем что то найти нереально,там примеров тоже не видел.Завтра буду доделывать пришлось убрать условие not in @авансы покупателям@ из оборотов а то реализации зачтенные авансом попадали,причем как то странно ,не все,но и ведомость по контрагентом тоже не все,буду еще смотреть,немного отличается конечный остаток от стандартного,нужно видно еще убирать что то,причем в меньшую сторону отличается.
218. Ёпрст 1068 19.12.13 12:37 Сейчас в теме
|....IN (SEL ECT Val FR OM :ВыбФирма)
.....

врГруппа="";
Запрос.УложитьСписокОбъектов(СписокФирм, врГруппа,"Фирмы");//СписокФирм или СЗ на форме, или элемент диалога, куда можно выбрать группу
Запрос.УстановитьТекстовыйПараметр("ВыбФирма", врГруппа);
222. sss999 50 19.12.13 22:02 Сейчас в теме
(218) Ёпрст, О боги как так!Все путает фраза текстовый параметр,словно это просто подстановка текста.(221)
224. yuraos 1008 19.12.13 23:49 Сейчас в теме
(222) sss999,
так оно примерно и есть

(223) sss999,
ВО ВЛОЖЕНИИ ПОСТА В АРХИВ
там все по 1cpp
+ справка по foxpro
+ ,бонус - справка по 1sqlite

все в формате .chm
Прикрепленные файлы:
1cpp++.rar
228. yuraos 1008 20.12.13 07:48 Сейчас в теме
(224)-(227)
это у меня ноут разрядился и тупить начал
...
хотя и прикольно получилось
- теперь трудно не найти будет
231. sss999 50 20.12.13 15:52 Сейчас в теме
(228) не знаешь что может быть у меня много встречается сум где одни копейки,где может быть ошибка округления закрасться?0.30 ,0.52,0.03 в остатках по договору.
225. yuraos 1008 19.12.13 23:49 Сейчас в теме
(222) sss999,
так оно примерно и есть

(223) sss999,
ВО ВЛОЖЕНИИ ПОСТА В АРХИВ
там все по 1cpp
+ справка по foxpro
+ ,бонус - справка по 1sqlite

все в формате .chm
Прикрепленные файлы:
1cpp++.rar
226. yuraos 1008 19.12.13 23:50 Сейчас в теме
(222) sss999,
так оно примерно и есть

(223) sss999,
ВО ВЛОЖЕНИИ ПОСТА В АРХИВ
там все по 1cpp
+ справка по foxpro
+ ,бонус - справка по 1sqlite

все в формате .chm
Прикрепленные файлы:
1cpp++.rar
227. yuraos 1008 19.12.13 23:51 Сейчас в теме
(222) sss999,
так оно примерно и есть

(223) sss999,
ВО ВЛОЖЕНИИ ПОСТА В АРХИВ
там все по 1cpp
+ справка по foxpro
+ ,бонус - справка по 1sqlite

все в формате .chm
Прикрепленные файлы:
1cpp++.rar
229. Ёпрст 1068 20.12.13 08:28 Сейчас в теме
(222) sss999,
Так и есть, подставляется имя временной таблички.
230. sss999 50 20.12.13 10:24 Сейчас в теме
(229) Ёпрст, не zbvtk ввиду что текстовый параметр это только примитивные текстовые типы и не может распознавать объекты,иначе зачем было слово текстовый вставлять путаница только
232. yuraos 1008 20.12.13 19:17 Сейчас в теме
(230) sss999,
не совсем так...
метапарсер распознает "агрегатные типы" установленного значения параметра и
соответствующим образом преобразует его к внутреннему строковому представлению ссылки.

Более того есть еще модификаторы параметра,
позволяющие преобразовать значение к значению "Справочник" или "Документ" неопределенного вида
или к значению "Неопределенного" типа (читай подробней в мануале).

(231) sss999,
наврятли,
я слышал на счет проблем с точностью в ADO при использовании чисел с плавающей точностью
(тип float), но насколько я знаю тип float 1c-совцы почему-то не уважают и не используют.
...
впрочем у меня практического опыта прямых запросов в dbf не сильно много.
может Ёпрст что-нибудь подскажет.
234. sss999 50 23.12.13 16:23 Сейчас в теме
(232) смотри такая ситуация,что может быть,есть док ввод остатков на основе корректировки,смотрю движения кодоперации стоит ввод начальных остатков,добавляю в отбор по перечислениям а он все равно выходит этот док,вывожу код показывает возврат,вот ниче не понятно.
235. sss999 50 23.12.13 17:01 Сейчас в теме
(232) смотри есть такой запрос,когда я inner меняю на left то в расходе появляются цифры а так только одна верхняя (а всего строки 4 у меня) у ввода начальных остатков,и еще я че то не могу вытянуть документ движения,че то не получается,там пусто.

SEL ECT
Рег.iddoc as [Докум$Документ],
Рег.sp2204 as [код$Перечисление.КодыОпераций],
Рег.sp2194 as Фирма,
Рег.sp2195 as Договор,
Рег.sp2198 as [КредДокумент$Документ],
IIF(Рег.debkred = 1,0,Рег.sp2201) as Приход,
IIF(Рег.debkred = 1,0,Рег.sp2199) as ПриходВ,
IIF(Рег.debkred = 1,Рег.sp2201,0) as Расход,
IIF(Рег.debkred = 1,Рег.sp2199,0) as РасходВ,
Жур.IDDocDef as Доквид
FR OM
ra2207 as Рег
Left JOIN sc331 as спрФирмы ON спрФирмы.ID=Рег.sp2194
inner JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
Left JOIN sc92 as спрДогов ON спрДогов.ID = Рег.sp2195
Left JOIN sc134 as спрКонтр ON спрКонтр.ID = спрДогов.ParentExt
Where спрКонтр.descr = 'Контрагент' and
Жур.DATE BETWEEN {d '2000-01-01'} AND {d '2013-10-29'}
AND спрФирмы.descr= 'Основная Фирма'
233. sss999 50 23.12.13 11:49 Сейчас в теме
(218) Ёпрст, КонтрагентыСпис="";
RS.УложитьСписокОбъектов(СписКонтр,КонтрагентыСпис, "Контрагенты"); на этом выражении 1с77 завершается,СписКонтр это список значений
243. Ёпрст 1068 24.12.13 13:21 Сейчас в теме
(233) sss999,

Что в списке то хоть ?
И как его заполнил и чем ?
236. yuraos 1008 24.12.13 06:14 Сейчас в теме
Попробуй так:
***
SEL ECT
Рег.iddoc as [Докум$Документ],
Жур.IDDocDef as Докум_вид,

Рег.sp2204 as [код$Перечисление.КодыОпераций],
Рег.sp2194 as Фирма,
Рег.sp2195 as Договор,
Рег.sp2198 as [КредДокумент$Документ],
IIF(Рег.debkred = 1,0,Рег.sp2201) as Приход,
IIF(Рег.debkred = 1,0,Рег.sp2199) as ПриходВ,
IIF(Рег.debkred = 1,Рег.sp2201,0) as Расход,
IIF(Рег.debkred = 1,Рег.sp2199,0) as РасходВ

FR OM
ra2207 as Рег
Left JOIN sc331 as спрФирмы ON спрФирмы.ID=Рег.sp2194
inner JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
Left JOIN sc92 as спрДогов ON спрДогов.ID = Рег.sp2195
Left JOIN sc134 as спрКонтр ON спрКонтр.ID = спрДогов.ParentExt
Where спрКонтр.descr = 'Контрагент' and
Жур.DATE BETWEEN {d '2000-01-01'} AND {d '2013-10-29'}
AND спрФирмы.descr= 'Основная Фирма'
***
Дело в том, что метапарсер использует для типизации
значений "Документ" определенного вида два поля:
1. в одном содержится значение IDDOC
- его алиас может быть любым.
2. во втором содержится значение IDDOCDEF
- его псевдоним должен состоять из алиаса первого поля, дополненного строкой "_вид" - регистро-зависимо!!!
237. sss999 50 24.12.13 11:57 Сейчас в теме
(236) а вот ты с журналом ставил inner а я когда меняю на left то появляются цифры дополнительные в расходах и приходах,что может быть?И еще не могу понять почему в движениях которые показывает запрос стоит код операции "возврат" ,хотя документ движения "ввод остатков" и в движении стоит "ввод остатков" операция,хотел добавить корректировку в исключения просто через операцию.
247. yuraos 1008 24.12.13 13:52 Сейчас в теме
(237) sss999,
left join с таблицей журнала не имеет смысла:

если что-то есть в шапках документа или в регистрах
и одновременно этого нет в связанной с ними по IDDOC таблице журнала
- то это явный системный косяк в данных!!!
238. sss999 50 24.12.13 12:00 Сейчас в теме
(236) да,так работает,откуда ты это знал?))
241. yuraos 1008 24.12.13 12:57 Сейчас в теме
(238) sss999,
Да все оттуда - из мануала, да из статейки "Первые шаги ..."
:)
249. sss999 50 25.12.13 13:02 Сейчас в теме
(241) а есть сокрлп в запросе или,типа того,или например при соединении что бы не точное сравнение было по полям таблицы,я сравниваю по descr
239. sss999 50 24.12.13 12:35 Сейчас в теме
(236) не подскажешь как вывести представление документа что бы без конструкции [Докум$Документ],без использования парсера,из справочников то я descr вытащил,а тут что то типа Жур.IDDocDef+Жур.date+Жур.time+Жур.docno
242. yuraos 1008 24.12.13 13:20 Сейчас в теме
(239)(240) sss999,
насколько я помню ни в таблице журнала ни в таблицах шапок документов поля descr нету. Так-что так просто не получится.
...
есть строки-типизаторы "ВидДокумента" и "ВидДокументаПредставление",
используемые примерно так:

select
***
Жур.IDDOCDEF as [ВидДок$ВидДокумента],
Жур.IDDOCDEF as [ВидДок$ВидДокументаПредставление],
***
Надо полагать (сам не проверял) выводят для документа в колонку результата
строковые значения вида документа и представление вида (синоним).

Но это только начало настоящего строкового представления документа.
245. yuraos 1008 24.12.13 13:46 Сейчас в теме
(242)
думаю единственный вариант накрутить что-нибудь в этом роде:

ICASE(Жур.IDDocDef = $ВидДокумента.Реализация, 'Реализация',
Жур.IDDocDef = $ВидДокумента.ВозвратОтПокупателя, 'Возврат от покупателя',
'Непредусмотренный вид') + ' № ' + STR(Жур.docno) + '(' + DTOC(Жур.date) + ')'

т.е. вручную перечислить в ICASE все возможные варианты
...
только вместо $ВидДокумента
возможно придется воспользоваться другим метаименем - $ВидДокумента36.
248. yuraos 1008 24.12.13 17:24 Сейчас в теме
(245)
вот этот вариант проверен:
***
sel ect
ICASE(Жур.IDDocDef = $ВидДокумента.Реализация, 'Реализация',
Жур.IDDocDef = $ВидДокумента.ВозвратОтПокупателя, 'Возврат от покупателя',
'Непредусмотренный вид') + ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')' as ДокНаименование,
Жур.IDDOCDEF as [ВидДок$ВидДокумента],
Жур.IDDOCDEF as [ПредДок$ВидДокументаПредставление],
Жур.IDDOCDEF, *
fr om 1sjourn as Жур
***

под 1cpp.dll версии 3.2.2.0, что стоит у меня,
строки-типизаторы "ВидДокумента" и "ВидДокументаПредставление",
описанные в документации, - не работают.

по видимому, это добавлено в более поздних версиях библиотеки
252. sss999 50 25.12.13 14:58 Сейчас в теме
(248) в 1с 8 есть возможность вставить null в запрос в строку ,как здесь не знаешь?
253. yuraos 1008 25.12.13 18:48 Сейчас в теме
(252) sss999,
литерал NULL в foxpro имеется, но с его использованием какие-то заморочки.
***
например такой запрос выполняется без ошибок:
sel ect
IIF(1=0,NULL,1) as null_value
from
1ssystem

***
а такой (почти такой же) уже с ошибкой времени выполнения:
select
IIF(1=1,NULL,1) as null_value
fr om
1ssystem

сообщает, что "cannot determine datatype of SQL Column: NULL_VALUE"
...
возможно это можно как-то поправить с помощью настроек foxpro
254. yuraos 1008 25.12.13 18:51 Сейчас в теме
(253)
причем это заморочка связана именно с провайдером данных.
в скульной базе 7.7 аналогичный запрос:
***
sel ect
(CASE WHEN 1=1 THEN NULL ELSE 1 END) as null_value
fr om
_1ssystem

***
выполняется на ура!
255. sss999 50 25.12.13 21:18 Сейчас в теме
(254) ну прикольно ты через case засунул а я просто писал sel ect ..,null fr om ..
256. yuraos 1008 25.12.13 21:23 Сейчас в теме
(255) sss999, да я такой ... как сказал Ёпрст - ИЗВРАЩЕНЕЦ!
257. sss999 50 25.12.13 21:54 Сейчас в теме
(256) ну запрос быстро достаточно отрабатывает.от 5 сек до 10 так что индексы непонадобятся,а так я видел изыскания Кирюхи на форуме.
258. yuraos 1008 26.12.13 06:18 Сейчас в теме
(257) sss999,
вопрос о производительности - он тонкий ... как Восток.
***
если отчет мотается приемлемо быстро ...
если много дешевых аппаратных ресурсов ...
то зачем дальше заморачиваться - нажми на кнопку и получишь результат.

***
мой начальник, например, вообще считает нормальным,
если "аналитический" отчет мотается минут 5-10.

Ну а вообще в последнее время мне постоянно
приходится оптимизировать отчеты разными способами,
разгоняя их раз в 10, иногда - на собственную голову.

Разогнал как то раз любимый гипер-отчет генерального
(в который выводилось все, включая анализ мочи продавцов).
Раньше за год его нельзя было смотать, теперь можно.

И началось...а почему так мотается, а не эдак!!!
259. yuraos 1008 26.12.13 06:26 Сейчас в теме
(258)
МЫ - НЕ РАБЫ, быстродействующих вычислительных машин!
РАБЫ - НЕ МЫ, быстродействующих вычислительных машин!
263. sss999 50 26.12.13 14:33 Сейчас в теме
(259) я тут немножко у тебя кода украл )сделал свою консоль для встроенного запроса в 77.консоль простая,но добавил ввод параметров от твоей,думаю выложить тут на сайте.
264. yuraos 1008 26.12.13 14:39 Сейчас в теме
(263) sss999,
ну выкладывай,
если ссылочку на мою статью вставишь - то даже плусану.
;)
260. sss999 50 26.12.13 12:58 Сейчас в теме
(258) я вот думаю что нужно как то накрутить цикл что бы подольше выводился а то отчет не дешевый выходит
261. yuraos 1008 26.12.13 13:05 Сейчас в теме
(260) sss999, ага
***
а потом этот цикл закомментарить - и еще бабла срубить (за "оптимизацию").
;)
262. yuraos 1008 26.12.13 13:13 Сейчас в теме
(260) sss999, вот те полезная процедурка, реализующая функционал команды SLEEP(ВремяMSec):

// Функция задержки выполнения процесса.
//
Процедура ЗадержкаВВыполнении(ВремяОжидания)

   Попытка
      xPing = "ping -n 1 -w "+Формат(1000*ВремяОжидания, "ЧГ=0")+" 127.255.255.255";
      WshShell = СоздатьОбъект("WScript.Shell");
      WshShell.Run(xPing, 0, -1);
   Исключение
   КонецПопытки;
    
КонецПроцедуры
Показать


взято из этой работы: http://infostart.ru/public/165702/.

при задержке не грузит процессор (как это получается в цикле) и
время задержки - с точностью до миллисекунды.
265. sss999 50 26.12.13 14:49 Сейчас в теме
(262) спасибо как нибудь проверю,а не знаешь что может быть в копейках?вот приход в консоли в запросе показывает например
18290 а расход 18290.25 и вот так копейки лезут везде причем смотрю в документе реализация стоят цифры как в расходе ,реализация зачетом аванса идет
366. Ёпрст 1068 28.01.15 14:39 Сейчас в теме
(265) С абрикоса упал ?
:))))))))))))
271. sss999 50 27.12.13 13:55 Сейчас в теме
(248) да вот эти строчки работают
ICASE(Жур.IDDocDef = $ВидДокумента.Реализация, 'Реализация',
Жур.IDDocDef = $ВидДокумента.ВозвратОтПокупателя, 'Возврат от покупателя',
'Непредусмотренный вид') + ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')' as ДокНаименование
272. yuraos 1008 27.12.13 14:07 Сейчас в теме
(271) sss999, я как-то не сомневался в этом...
:)
273. sss999 50 27.12.13 15:07 Сейчас в теме
(272) а как группировку сделать чет не работает SEL ECT
Рег.sp2194 as Фирма,
Рег.sp2195 as Договор,
ICASE(Жур.IDDocDef = ' X3', 'Реализация'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' FI', 'Возврат от покупателя'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' YL', 'Реализация розница'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' O4', 'Отчет комитенту'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' DA', 'ВводОстатковПокупателя'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' R2', 'Приходный кассовый ордер'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' L0', 'Приходный2 кассовый ордер'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
'Непредусмотренный вид') as КредДокумент,
Max(Жур.date) as ДатаДок ,
SUM(IIF(Рег.debkred = 1,0,1)*Рег.sp2201) as Приход,
SUM(IIF(Рег.debkred = 1,0,Рег.sp2199)) as ПриходВ,
SUM(IIF(Рег.debkred = 1,1,0)*Рег.sp2201) as Расход,
SUM(IIF(Рег.debkred = 1,Рег.sp2199,0)) as РасходВ
FR OM
ra2207 as Рег
Left JOIN sc331 as спрФирмы ON спрФирмы.ID=Рег.sp2194
INNER JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
WHERE
Жур.DATE BETWEEN {d '2000-01-01'} AND {d '2013-10-29'}
AND спрФирмы.descr= 'Фирма ООО'
and Жур.IDDocDef <> ' DA'
GROUP BY
Рег.sp2194,
Рег.sp2195,
ICASE(Жур.IDDocDef = ' X3', 'Реализация'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' FI', 'Возврат от покупателя'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' YL', 'Реализация розница'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' O4', 'Отчет комитенту'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' DA', 'ВводОстатковПокупателя'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' R2', 'Приходный кассовый ордер'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
Жур.IDDocDef = ' L0', 'Приходный2 кассовый ордер'+ ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')',
'Непредусмотренный вид')
275. yuraos 1008 27.12.13 17:17 Сейчас в теме
(273) sss999, используй вложенные подзапросы, например так:
***
SEL ECT
TMP.Фирма as Фирма,
TMP.Договор as Договор,
TMP.КредДокумент as КредДокумент,
Max(TMP.ДатаДок) as ДатаДок ,
SUM(TMP.Приход) as Приход,
SUM(TMP.ПриходВ) as ПриходВ,
SUM(TMP.Расход) as Расход,
SUM(TMP.РасходВ) as РасходВ
FROM
(SELECT
Рег.sp2194 as Фирма,
Рег.sp2195 as Договор,
ICASE(Жур.IDDocDef = ' X3', 'Реализация',
Жур.IDDocDef = ' FI', 'Возврат от покупателя',
Жур.IDDocDef = ' YL', 'Реализация розница',
Жур.IDDocDef = ' O4', 'Отчет комитенту',
Жур.IDDocDef = ' DA', 'ВводОстатковПокупателя',
Жур.IDDocDef = ' R2', 'Приходный кассовый ордер',
Жур.IDDocDef = ' L0', 'Приходный2 кассовый ордер',
'Непредусмотренный вид') + ' № ' + Жур.docno + ' (' + DTOC(Жур.date) + ')' as КредДокумент,
Жур.date as ДатаДок ,
IIF(Рег.debkred = 1,0,1)*Рег.sp2201 as Приход,
IIF(Рег.debkred = 1,0,Рег.sp2199) as ПриходВ,
IIF(Рег.debkred = 1,1,0)*Рег.sp2201 as Расход,
IIF(Рег.debkred = 1,Рег.sp2199,0) as РасходВ
FR OM
ra2207 as Рег
Left JOIN sc331 as спрФирмы ON спрФирмы.ID=Рег.sp2194
INNER JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
WH ERE
Жур.DATE BETWEEN {d '2000-01-01'} AND {d '2013-10-29'}
AND спрФирмы.descr= 'Фирма ООО')
and Жур.IDDocDef <> ' DA'
)
as TMP
GROUP BY
TMP.Фирма,
TMP.Договор,
TMP.КредДокумент
***
foxpro, похоже не умеет "группировать" в явном виде по вычисляемым выражениям.
276. yuraos 1008 27.12.13 17:28 Сейчас в теме
(275)
чей-то ты намудрил в ICASE()
:)
...
я в своем примере вынес повторяющий кусок за функцию.
282. sss999 50 27.12.13 23:00 Сейчас в теме
(276) я разобрался заработало,я просто соединял жоурнал не с тем полем,нужно было с кред доком а я с регистратором.да я имел ввиду вид документа это же ссылка и интересно было в разных базах она разная или нет как она генерируется.ну это ладно
285. yuraos 1008 28.12.13 08:49 Сейчас в теме
(282) sss999,
Физически внутренние идентификаторы таблиц и их соответствие с именами объектов конфигурации
прописывается в текстовом файле 1Cv7.dd (для DBF) или 1Cv7.dds (для SQL).

вот фрагмент файла 1Cv7.dd:
*****
#============================================================­===================
#==TABLE no 120 : Документ Реализация
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=DH1611 |Документ Реализация |A |DH1611 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=IDDOC |ID Document's |C |9 |0
F=SP3338 |(P)КодОперации |C |9 |0
F=SP1587 |(P)ДокОснование |C |13 |0
F=SP1593 |(P)Склад |C |9 |0
F=SP1583 |(P)Контрагент |C |9 |0
F=SP1584 |(P)Договор |C |9 |0
F=SP1585 |(P)Валюта |C |9 |0
F=SP1586 |(P)Курс |N |11 |4
F=SP8602 |(P)Кратность |N |8 |0
F=SP1589 |(P)УчитыватьНДС |N |2 |0
F=SP1590 |(P)СуммаВклНДС |N |2 |0
F=SP1591 |(P)УчитыватьНП |N |2 |0
F=SP1592 |(P)СуммаВклНП |N |2 |0
F=SP1595 |(P)ТипЦен |C |9 |0
F=SP1596 |(P)Скидка |C |9 |0
F=SP1594 |(P)СуммаВзаиморасчет|N |16 |2
F=SP1588 |(P)ДатаОплаты |D |8 |0
F=SP7550 |(P)ФлагСвертки |N |2 |0
F=SP1604 |(P)Сумма |N |16 |2
F=SP1605 |(P)СуммаНДС |N |16 |2
F=SP1606 |(P)СуммаНП |N |16 |2
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=ID |of IDDOC |0 |IDDOC |ID
#
*****
здесь 1611 - внутренний идентификатор документа "Реализация" - в десятичном представлении.
В используемом для хранения в таблицах dbf 36-ричном это будет ' 18R'.
286. sss999 50 28.12.13 09:01 Сейчас в теме
(285) осталось посмотреть как переводить в 36 ричное представление )обработку можно написать интересно
289. yuraos 1008 28.12.13 09:38 Сейчас в теме
(288)
Если вдруг не знаешь - есть еще ВК 1sqlite.dll.
Сделана для выполнения прямых запросов в DBF, используя другие технологии доступа к данным.

Там есть две встроенные функции:

Функция str2id

Синтаксис: str2id(СтрИД)

Параметры:
СтрИД: Строка представляющая число в 36ричной записи
Возвращает: Целое число.

Описание: Преобразует строку - запись числа в 36ричном формате в целое число



Функция id2str

Синтаксис: id2str(ИД, чДлинаСтроки)

Параметры:
ИД: Преобразуемое число
чДлинаСтроки - Необходимая длина возвращаемой строки
Возвращает: Строку заданной длины.

Описание: Преобразует целое число в строку - запись числа в 36ричном формате.

Длина строки устанавливается равной заданной длине, число выравнивается по правому краю, с заполнением пустого места пробелами.

Показать
290. sss999 50 30.12.13 09:33 Сейчас в теме
(289) не знаешь как сделать в консоли что бы она сохраняла текущую строку постоянно не прыгала в начало после нажатий?
291. yuraos 1008 30.12.13 09:43 Сейчас в теме
(290) sss999,
имеешь ввиду - сохраняла позицию курсора в поле ввода с текстом запроса?
292. sss999 50 30.12.13 09:46 Сейчас в теме
293. sss999 50 30.12.13 09:46 Сейчас в теме
(291) или участок текста который я вижу что бы я его и видел а сам он не менялся на начало )
294. sss999 50 30.12.13 09:47 Сейчас в теме
(291) это старая проблема у меня и в восьмерке такая же проблема,в семерке стандартными средствами то врядли установишь а вот через формекс поди можно
296. yuraos 1008 30.12.13 10:00 Сейчас в теме
(294) sss999,
ну в 8-ке это, как я понимаю, можно решить при желании.
У объектов "ПолеВвода", "ПолеТекстовогоДокумента" и прочих
есть методы:

ПолеТекстовогоДокумента (TextDocumentField)
ПолучитьГраницыВыделения (GetTextSelectionBounds)
Синтаксис:

ПолучитьГраницыВыделения(<НачалоСтроки>, <НачалоКолонки>, <КонецСтроки>, <КонецКолонки>)
Параметры:

<НачалоСтроки> (обязательный)

Тип: Число.
Номер строки начала выделения.
<НачалоКолонки> (обязательный)

Тип: Число.
Номер колонки начала выделения.
<КонецСтроки> (обязательный)

Тип: Число.
Номер строки конца выделения.
<КонецКолонки> (обязательный)

Тип: Число.
Номер колонки конца выделения.
Описание:

Получает границы выделенной области текста.
Возвращает позицию курсора.

Показать


ПолеТекстовогоДокумента (TextDocumentField)
УстановитьГраницыВыделения (SetTextSelectionBounds)
Вариант синтаксиса: По позициям начала и конца выделения в тексте

Синтаксис:

УстановитьГраницыВыделения(<НачальнаяПозиция>, <КонечнаяПозиция>)
Параметры:

<НачальнаяПозиция> (обязательный)

Тип: Число.
Позиция начала выделения в тексте.
<КонечнаяПозиция> (обязательный)

Тип: Число.
Конечная позиция выделения в тексте.
Вариант синтаксиса: По номерам строк и колонок начала и конца выделения в тексте

Синтаксис:

УстановитьГраницыВыделения(<НачалоСтроки>, <НачалоКолонки>, <КонецСтроки>, <КонецКолонки>)
Параметры:

<НачалоСтроки> (обязательный)

Тип: Число.
Номер строки начала выделения.
<НачалоКолонки> (обязательный)

Тип: Число.
Номер колонки начала выделения.
<КонецСтроки> (обязательный)

Тип: Число.
Номер строки конца выделения.
<КонецКолонки> (обязательный)

Тип: Число.
Номер колонки конца выделениия.
Описание:

Устанавливает границы выделенной области текста.

Показать

проблема может состоять в том, что может не оказаться событий,
в которых можно запоминать и восстанавливать курсор в поле ввода.
297. yuraos 1008 30.12.13 10:01 Сейчас в теме
(296)
а в формекс на вскидку вообще ничего подобного нет.
295. sss999 50 30.12.13 09:59 Сейчас в теме
(291) и еще плохо что нельзя мышью менять размер окна запросов как в восьмерке растягивать
298. yuraos 1008 30.12.13 10:03 Сейчас в теме
(295) sss999,
в смысле - у тебя привязки в форме 1СQA не работают ???
299. sss999 50 30.12.13 10:41 Сейчас в теме
(298) а он в начале говорит что какой то там класс не зарегистрирован,но я не понял как вообще с этими классами работать нигде толком не пишут ничего..там кстати про привязки и написано я прочитал,но только щас,слишком мелко и в конце читать лень
300. yuraos 1008 30.12.13 11:01 Сейчас в теме
(299) ссс999, ну ты брат даешь!
Это, пожалуй, главная исходная интерфейсная фишка в 1CQА.
***
В файлах поставки есть архив FormEx1CPP.rar
в нем есть файлы:
1.КОП_ОбщиеФормаПривязка.ert - обработка-исходник класса
2.Defcls.ert - обработка с объявлениями классов для встраивания в конфигурацию
3.Defcls.prm - файл с объявлениями классов при их подключении из внешних файлов
***

можно включить все в конфигурацию базы
- просто добавляешь обработки
КОП_ОбщиеФормаПривязка.ert и Defcls.ertв конфигурацию.

можно загружать классы и из внешних файлов
- в этом случае нужно скопировать
КОП_ОбщиеФормаПривязка.ert и Defcls.prm
в каталог базы.

я предпочитаю первый вариант.
301. yuraos 1008 30.12.13 11:02 Сейчас в теме
(300)
Да! Если в друг в базе уже используются другие классы
(есть обработка Defcls.ert или внешний файл Defcls.prm)
то содержание файла из архива поставки придется аккуратно добавить к уже имеющимуся в базе.
302. sss999 50 30.12.13 15:24 Сейчас в теме
(300) спасибо братиш, заработало )классы это крутая наверно штука,осталось понять полностью как писать свой класс и что бы он умел еще че нибудь делать интересное
303. yuraos 1008 30.12.13 17:21 Сейчас в теме
(302) sss999,
в классах нет ничего особо сложного.
открывай КОП_ОбщиеФормаПривязка.ert и
по аналогии ваяй что-нибудь свое
...
есть правда тонкости с подключением класса
в Defcls.ert (Defcls.prm),
но этим тоже все достаточно прозрачно.
***
ну конечно полезны будут знания базовых понятий ООП
- которое 1С-цы почему-то ненавидят.

а также полезно будет полазить в документации 1cpp
- чего страшно не любишь ты, любезный друг.
;)
287. yuraos 1008 28.12.13 09:22 Сейчас в теме
(285)
хотя эти номера очевидно также хранятся и в файле 1Cv7.md,
поскольку при изменении порядка объектов в конфигурации и добавления новых объектов
внутренние номера существующих объектов не изменяются
- даже после загрузки измененного md-ника в пустую базу.
***
в общем тебе, sss999, повезло
...
если бы было бы не так - то с разными базами могли быть приколы, которых я опасался.
280. sss999 50 27.12.13 22:56 Сейчас в теме
(275) да я так и сделал как ты писал
274. sss999 50 27.12.13 15:35 Сейчас в теме
(272) где вообще посмотреть название можно по ссылке например если у меня.т.е. обратную операцию проделать парсеру ' R2' это 'ПриходныйКассовыйОрдер'
277. yuraos 1008 27.12.13 18:03 Сейчас в теме
(274) sss999,
насколько я знаю обратная операция метаимени $ВидДокумента.ХХХХ
поддерживается только при типизации
колонок результата запроса при выгрузке в таблицу значений (и то не для всех версии 1cpp).
Об этом я говорил в посте (242).
---
Есть такой вариант (не очень удобный и не самый легкий):
1. по метаданным сгенерить заготовку коррелированного подзапроса
с шаблонами подстановок имен полей,
возвращающий по значению поля IDDocDef
текстовое представление вида документа.
2. в текст исходного запроса программно вставлять
строку этого коррелированный подзапроса
с заменой шаблонов подстановок имен полей на нужные.

Я делал другие вещи подобным образом под SQL, а под DBF - не проверял.
Можно надеяться, что foxpro поддерживает коррелированные подзапросы
(1С-ные запросы, например, этого не умеют).
278. yuraos 1008 27.12.13 18:07 Сейчас в теме
(277)
думаю тебя заинтересует вот эта работа:
http://infostart.ru/public/20823/
там предлагается класс под 1cpp,
выполняющий прямые запросы в 1с-7.7 с дополнительными возможностями.

документация класса во вложении (если нет стартманей)
:)
Прикрепленные файлы:
ПрямойЗапрос.rar
279. yuraos 1008 27.12.13 18:09 Сейчас в теме
(278)
хотя ты о нем и так знаешь.
:)
281. sss999 50 27.12.13 22:58 Сейчас в теме
(278) прямой запрос это зло ))
283. yuraos 1008 28.12.13 07:45 Сейчас в теме
(281) sss999,
"прямой", то он "прямой".
Но ты сам его как то раз назвал "кривым".
;)

Однако запаришься пока напишешь подзапрос
виртуальной таблицы РегистрОстаткиОбороты.
А в DBF это приходится делать самому.

Класс же тебе вместо макроподстановки ВТ вставит
в итоговый текст запроса нужный подзапрос.

Кроме того, класс еще умеет имитировать ВТ бухгалтерских итогов.
Этих ВТ таблиц вообще нет в 1сpp.
284. yuraos 1008 28.12.13 08:28 Сейчас в теме
(242)
Такая типизация
***
Жур.IDDOCDEF as [ВидДок$ВидДокумента],
Жур.IDDOCDEF as [ВидДок$ВидДокументаПредставление],
***
оказывается работает только для запросов через ODBC с помощью объекта ODBCRecordSet
ну еще наверное для прямых запросов через ВК 1sqlite.dll

к сожалению с помощью ODBCRecordSet в DBF у меня не получилось выполнять прямые запросы.
240. sss999 50 24.12.13 12:48 Сейчас в теме
iddocdef как как взять представление как я понимаю из таблицы документов из descr
244. Ёпрст 1068 24.12.13 13:24 Сейчас в теме
И еще, нафига писать вот так ?

Рег.sp2204 ???
Когда в разы проще и понятнее, писать так

$Рег.Вася
246. yuraos 1008 24.12.13 13:49 Сейчас в теме
(244) Ёпрст,
я его все никак не могу от этого отучить!
...
да еще приучить в мануал иногда заглядывать.
250. sss999 50 25.12.13 13:04 Сейчас в теме
(244) Ёпрст, да я не пишу так это парсер потом переводит в такой вид,для того что бы объединить разные dbf можно было .
251. sss999 50 25.12.13 13:40 Сейчас в теме
(244) Ёпрст, вот я просто скопировал кусок который работает после парсера а без нет хз почему
$Рег.Фирма as Фирма,
$Рег.Договор as Договор,
$Рег.КредДокумент as КредДокумент,
SUM(IIF(Рег.debkred = 1,0,$Рег.СуммаРуб)) as Приход,
SUM(IIF(Рег.debkred = 1,0,$Рег.СуммаВал)) as ПриходВ,
SUM(IIF(Рег.debkred = 1,$Рег.СуммаРуб,0)) as Расход,
SUM(IIF(Рег.debkred = 1,$Рег.СуммаВал,0)) as РасходВ
FROM
$Регистр.Покупатели as Рег
Left JOIN sc331 as спрФирмы ON спрФирмы.ID=$Рег.Фирма
INNER JOIN
1SJOURN as Жур ON Рег.IDDOC = Жур.IDDOC
GROUP BY
$Рег.Фирма,
$Рег.Договор,
$Рег.КредДокумент
266. sss999 50 26.12.13 15:40 Сейчас в теме
вот два скрина 18290 сумма обрати внимание,что функция сумма без если суммирует копейки нормально
Прикрепленные файлы:
267. yuraos 1008 27.12.13 06:40 Сейчас в теме
(266) sss999,
ну что ж сказать, прикольно - наверное глюк какой-то у провайдера данных.

возможно это связано с какими-то неявными преобразованиями типов:
foxpro пытается из каких-то соображений преобразовать
значение поля $Рег.СуммаРуб, имеющее тип numeric к типу int.

можно еще и так попробовать:
SUM(IIF(Рег.debkred <> 1,0,1)*$Рег.СуммаРуб) as Приход2,

или так (если порядок следования имеет значение):
SUM($Рег.СуммаРуб*IIF(Рег.debkred <> 1,0,1)) as Приход2,

а еще можно конвертнуть базу в SQL формат, и проверить что будет там
(придется правда все запросы переписывать).
269. sss999 50 27.12.13 09:29 Сейчас в теме
(267) спасибо , первый вариант помог
268. yuraos 1008 27.12.13 07:06 Сейчас в теме
sss999,
я смотрю ты тоже поупражнялся с консолью запросов для 8.х.
занятие довольно популярное
...
и я тоже не смог удержаться от соблазна
:)
моя консоль - составная часть функционала
Подсистемы "COMExchange" для 1С:Предприятие-8.х (обычное приложение)
Эта консоль также может выполнять "прямые" запросы к базе через ADO.

Может работать и без подсистемы как внешняя обработка,
но с ограничением функциональности:
- не будут работать запросы к источникам данных ADO.
- не будут работать продвинутые возможности просмотра табличных объектов,
обеспечиваемых подсистемой "ViewValues", которая включена в состав "COMExchange".
270. sss999 50 27.12.13 09:39 Сейчас в теме
(268) да я тогда как начал изучать запросы восьмерки то не знал что уже была работа с таблицами у Чистова,и вот что бы отлаживать заморочился,разница что него была по номерам таблиц а у меня по наименованиям.
304. lelusha 05.02.14 11:38 Сейчас в теме
Правильно ли понимаю, что в консоль запросов входит и конструктор?
305. yuraos 1008 05.02.14 13:14 Сейчас в теме
(304) lelusha,
На счет конструктора прямых запросов:
1. Работает корректно только для баз SQL
2. работа конструктора обеспечивается ВК qryConsole.dll,
эта внешняя компонента не входит в комплект поставки, но
ее можно скачать в интернете в свободном доступе (смотри ниже).
306. yuraos 1008 05.02.14 13:14 Сейчас в теме
(305)

4) При большом желании (для редактирования запроса в диалоге конструктора) требуется наличие внешней компоненты qryConsole.dll(автор Ivan T Berezdetsky). Обработка при открытии пытается ее загрузить (так же как 1CPP). Если загрузить не удается, то соответствующие элементы управления в обработке становятся недоступными.

Установочный дистрибутив и обсуждение внешней компоненты - на форуме: http://www.1cpp.ru/forum/YaBB.pl?num=1193394153. Для работы ВК qryConsole.dll обязательна установка Office web components (OWC11). Иначе обработка будет вас малоприятно ругать при открытии (беда устраняется или установкой OWC11, или удалением/переименованием файла библиотеки – чтоб вообще не грузилась).


308. lelusha 10.02.14 14:01 Сейчас в теме
а еще непонятно, для чего нужен список Результаты в правом верхнем углу. При открытии он сразу недоступен. Что значит пакетный запрос? (как написано там в всплывающей подсказке)
310. lelusha 10.02.14 14:27 Сейчас в теме
версии все из архива. а как это разных запросов за раз? можно пример? Заранее спасибо.
312. Ёпрст 1068 10.02.14 14:50 Сейчас в теме
(310)

sel ect * from table a
;
select * fr om table b
311. lelusha 10.02.14 14:30 Сейчас в теме
1срр.dll версии 3.2.3.20, а FormEX205101.dll версии 2.0.5.0
313. lelusha 10.02.14 14:52 Сейчас в теме
спасибо. а как быть с привязкой? дело в версиях все-таки?
315. lelusha 10.02.14 15:07 Сейчас в теме
КОП_ОбщиеФормаПривязка.ert из архива. а какой еще класс привязок?
316. Ёпрст 1068 10.02.14 15:15 Сейчас в теме
в предприятии, на закладке о программе, имена каких зарегистрированных классов светятся ?
317. Ёпрст 1068 10.02.14 15:16 Сейчас в теме
Просто есть 2 похожих класса:

Общие.Форма.Привязка и

Общие.Форма.Привязки и
318. lelusha 10.02.14 15:21 Сейчас в теме
там светятся только 1с++ и FormEX.
319. lelusha 10.02.14 15:22 Сейчас в теме
получается Класс Общие.Форма.Привязка не зарегистрирован у меня?
320. Ёпрст 1068 10.02.14 15:55 Сейчас в теме
(319) да, + смотри там версии ВК .., на закладке с 1cpp должны быть имена зарегистрированных классов
321. Ёпрст 1068 10.02.14 15:56 Сейчас в теме
путь до классов и их определение в файле Defcls.prm обычно.
Классы, которые не отлажены, лучше не пихать сразу в мд - так проще исправлять ошибки и логику.
322. lelusha 10.02.14 16:15 Сейчас в теме
на закладке 1cpp

Информация о классах:
Всего зарегистрировано классов: 1
Всего объявлено методов: 10

Имена зарегистрированных классов:
Общие.Форма.Привязка = C:\Users\me\Documents\ge_rus\КОП_ОбщиеФормаПривязка.ert
323. Ёпрст 1068 10.02.14 16:18 Сейчас в теме
ну, тогда смотреть, что передается в коде поделки (где используется класс привязок ) и как используются методы класса.
Возможно, бананльно в архиве не тот класс привязок)
:)
324. lelusha 10.02.14 16:38 Сейчас в теме
закомментил 2 строчки в обработке, на которые ругался, и вроде пошло дело.)
пока не знаю последствия, но лучше уж так. Спасибо за помощь, респект)
325. Ёпрст 1068 10.02.14 16:39 Сейчас в теме
(324) Те 2 строчки, это какие ? кинь на посмотреть
328. lelusha 10.02.14 18:06 Сейчас в теме
(325) Ёпрст, гРФорма.Привязка("тВремя,тВремяЗапроса,тСтрок,тСтрокКол,тКолонок,тКолонокКол,тVer","T","Форма","L","Форма");
329. lelusha 10.02.14 18:31 Сейчас в теме
а каковы функции кнопки Подбор:ОК?
330. yuraos 1008 10.02.14 18:47 Сейчас в теме
(329) lelusha,
консоль может быть открыта в режиме "подбора выборки данных"
(примерно как типовая обработка UChoice):
открываешь ее из другой обработки,
открываешь нужный файл запроса,
выполняешь запрос и его результат возвращаешь в обработку
для каких либо дальнейших действий.
***
примеры использования:
http://infostart.ru/public/100580/
http://infostart.ru/public/103633/
331. lelusha 10.02.14 18:54 Сейчас в теме
Спасибо. А инструкция ВыполнитьXML для чего? можно пример такого запроса
332. yuraos 1008 10.02.14 19:21 Сейчас в теме
(331) lelusha, у тебя мануал есть по 1с++ ???
в общем в этом случае запрос
выполняется вот этим методом объекта ODBCRecordSet:

Синтаксис: ВыполнитьXML([ТекстЗапроса], [ОбъектПриемник])

Параметры:

ТекстЗапроса - тип: Строка. Текст запроса, если пустая строка-запрос считается параметризированным. Необязателен, по умолчанию - пустая строка.
ОбъектПриемник - тип: BinaryData. Объект для получения результата запроса. Необязателен, по умолчанию - пустое значение.
Возвращает: тип: Строка, ПустоеЗначение. Результат запроса или, если передан объект приемник - возвращается ПустоеЗначение.

Описание: выполняет запрос и получает результат как XML данные. Если вторым параметром передан объект BinaryData, то результат записывается в этот объект (с учетом текущей кодировки и текущей позиции в файле), при этом возвращаемое значение метода не определено, если второй параметр - пустое значение, метод возвращает строку - результат запроса.


а возвращаемую запросом XML-строку прописывает в "результат запроса"
333. yuraos 1008 10.02.14 19:22 Сейчас в теме
(332)
в запросе при этом нужно использовать конструкцию
SELECT ... FOR XML.
иначе будет ошибка.
334. sss999 50 12.02.14 15:02 Сейчас в теме
(333) привет, не подскажешь как дату вывести ,выводится через DTOC, не месяц/день/год а день/месяц/год
335. sss999 50 12.02.14 15:33 Сейчас в теме
(333) разобрался спасибо.
336. yuraos 1008 12.02.14 17:16 Сейчас в теме
(335) sss999, не за что!
;)))
337. lelusha 15.02.14 21:59 Сейчас в теме
А почему в базах DBF через ODBC не работают прямые запросы? просто у вас не получилось или это общее ограничение для баз DBF?
338. yuraos 1008 16.02.14 09:43 Сейчас в теме
(337) lelusha,
у меня лично - не получалось. валятся какие-то непонятные ошибки.
вникать сильно в эту тему не стал.
думаю, что дело (как всегда) в отсутствии подходящего драйвера данных.
339. lelusha 16.02.14 16:12 Сейчас в теме
метод ВыполнитьСкалярный() не совсем понятен, хотя в мануале найден и изучен. на все примеры ничего не возвращает. Нет ли примера на эту инструкцию? Заранее спасибо.
340. yuraos 1008 16.02.14 17:13 Сейчас в теме
(339) lelusha, ну например

select
$ВидДокумента.ВозвратОтПокупателя as [ВидДок]
from
_1ssystem

этот запрос возвращает внутренний код вида документа "ВозвратОтПокупателя"
341. yuraos 1008 16.02.14 17:24 Сейчас в теме
(340)
вообще метод ODBCRecordSet::ВыполнитьСкалярный()
довольно замороченный - читай повнимательней мануал.

например,
если запрос возвращает одну строку с несколькими колонками,
то метод вернет объект "Структура" (тот что поставляет ВК 1cpp.dll),
заполненную значениями колонок из строки.

А этот объект, как назло, никак не отображается
в таблице значений результата в консоли,
поэтому и кажется, что метод ничего не возвращает.

По большей части этот метод предназначен для получения
скалярного значения (не объекта) -
- в результате запроса должна быть одна строка и одна колонка.
342. lelusha 17.02.14 16:22 Сейчас в теме
343. lelusha 17.02.14 16:40 Сейчас в теме
есть еще вопрос, наверное, ты уже запарился, но уж очень интересная обработка) на этот раз про поле Набор строк. понятно, что происходит вызов УстНаборМножестваСтрок, если в поле введено число. Он устанавливает размер блока выборки (в виде количества строк), который будет получать за одно обращение к источнику данных. Но вот у меня не работает эта функция. Это же простой вывод первых n записей?
344. yuraos 1008 17.02.14 17:58 Сейчас в теме
(343) lelusha, нет,
этот параметр имеет отношение к особенностям обмена данными между
SQL сервером и клиентским приложением во время выполнения запроса
и перебора строк его результата:

ODBCRecordSet :: УстРазмерМножестваСтрок / SetRowsetSize

Синтаксис: УстРазмерМножестваСтрок(чРазмер)

Параметры:

чРазмер - тип: Число. Размер множества строк.
Описание: устанавливает размер блока выборки (в виде количества строк), который будет получен драйвером ODBC за одно обращение в к источнику данных. Уменьшает количество обращений к источнику, за счет получение получения больших порций данных. Использовать данный метод имеет смысл только до вызова метода Открыть


этот параметр может влиять только на скорость выполнения запроса.
345. yuraos 1008 17.02.14 18:00 Сейчас в теме
(344)
чтобы вернуть NN первых записей, по спецификации языка SQL
в запросе нужно использовать инструкцию выборки данных в виде:
SEL ECT TOP NN
***
FR OM
***
346. lelusha 17.02.14 18:37 Сейчас в теме
понятно. а можно еще поподробнее про план выполнения запроса. я так понял, он вшит в таблицу результата запроса при вызове ВыполнитьИнструкцию? просто из этой тз выводятся колонки определенные. Почему именно эти, в коде видел что некоторые колонки удалялись. и что каждая колонка показывает нам?
347. yuraos 1008 17.02.14 19:02 Сейчас в теме
(346) lelusha,
честно говоря,
примочки с планом выполнения я позаимствовал
в одной из версии консоли на форуме www.1cpp.ru.

об этом предмете я имею самое общее представление -
- знаю что такое и для чего оно, но не более того (на практике не использовал).

думаю что Ёпрст может нам много интересного рассказать об этом
;)))
348. yuraos 1008 17.02.14 19:10 Сейчас в теме
(347)
единственное что могу сказать,
что план выполнения -
это своего рода алгоритм действий с физическими таблицами данных,
которое сервер будет осуществлять при выполнении запроса.

используется при оптимизации запросов и индексов таблиц.

в консоли выводится суррогат графической диаграммы плана выполнения.
из "результата запроса" удаляются колонки с дополнительными сведениями,
вывод которых бы портил внешний вид этой "диаграммы".
349. lelusha 17.02.14 19:16 Сейчас в теме
ждем от него комментариев))
еще вопрос про 4)Добавлены служебные типы параметры запроса СписокСсылок9, СписокСсылок13 и ИерархияСсылок9. совсем не понял различие между ними. понял что отличие от обычных значений объектов это списки со значениями, но как их в запросах использовать через #? нужен пример, если нетрудно.
например, сделал список значений перечисления ТипНоменклатуры, а дальше ступр.
и когда открывается форма с редактированием списка параметра, понятно, что первая вкладка - это собственно выбор элементов/объектов для списка, а вторая вкладка "Отбор по значениям реквизитов" зачем?
350. yuraos 1008 17.02.14 20:33 Сейчас в теме
(349) lelusha,
СписокСсылок9 -
- cписок значений типа "Справочник", "Документ", "Счет" определенного вида

СписокСсылок13 -
- список значений типа "Справочник", "Документ", "Счет" уже НЕ-определенного вида

ИерархияСсылок9 -
- тоже самое, что СписокСсылок9, но только в список также
включаются все подчиненные элементы из групп справочника, выбранных в списке.
352. yuraos 1008 17.02.14 20:40 Сейчас в теме
(350)
обрабатываются эти параметры особым образом.

Для СписокСсылок9 и ИерархияСсылок9 выбранные списки значений
фактически укладывается во временную таблицу с именем #<ИмяПараметра>
с помощью метода ODBCRecordSet :: УложитьСписокОбъектов()

ODBCRecordSet :: УложитьСписокОбъектов / PutObjectList

Синтаксис: УложитьСписокОбъектов(Список, ИмяТаблицы, [ВидЭлементов])

Параметры:

Список - тип: СписокЗначений, Справочник, Счет. Объект, содержание которого будет отправляться на сервер. Если передан список значений, во врем. таблицу попадает содержимое списка. Допустимо также передавать группу справочника, элемент справочника, группу счетов, счет - в этом случае во временную таблицу поступает переданное значение, однако если указан ВидЭлементов (вид справочника, или план счетов), то будет попытка включить в таблицу все подчененные элементы.
ИмяТаблицы - тип: Строка. Имя временной таблицы.
ВидЭлементов - тип: Строка. Вид справочника для иерархического включения элементов или вид плана счетов для иерархического включения счетов. Если параметр не указан, иерархического включения не происходит.
Описание: сохраняет список внутренних идентификаторов объектов во временной таблице MS SQL. Идентификаторы объектов из списка сохраняются во временной таблице в поле val char(9). Имя таблицы должно начинаться с символа "#".

Если указан вид ВидЭлементов - идентификатор иерархического справочника, то таблица будет содержать элементы, иерархически принадлежащие группам переданным в списке. (Подобно оператору "в" стандартного языка запросов 1С.)

Замечание: метод допустимо применять только для источника данных Microsoft SQL Server.

Показать
353. yuraos 1008 17.02.14 20:42 Сейчас в теме
(352)
Для СписокСсылок13 используется другой метод:

ODBCRecordSet :: УложитьСписокОбъектов13 / PutObjectList13

Синтаксис: УложитьСписокОбъектов13(Список, ИмяТаблицы)

Параметры:

Список - тип: СписокЗначений, Справочник, Счет. Объект, содержание которого будет отправляться на сервер. Если передан список значений, во врем. таблицу попадает содержимое списка.
ИмяТаблицы - тип: Строка. Имя временной таблицы.
Описание: сохраняет список объектов во временной таблице MS SQL. Идентификаторы объектов из списка сохраняются во временной таблице. Таблица имеет единственное поле val char(13). Имя таблицы должно начинаться с символа "#".

351. lelusha 17.02.14 20:36 Сейчас в теме
как обратиться к параметру из списка в запросе?
354. yuraos 1008 17.02.14 20:47 Сейчас в теме
(351) lelusha,
Просто #<ИмяПараметра>.
Но надо иметь ввиду, что это фактически имя временной таблицы.
Пример:
SEL ECT *
FR OM
$Справочник.Контрагенты AS Спр
WH ERE
Спр.ID IN (SELECT Val FR OM #СписокКонтрагентов)

здесь СписокКонтрагентов параметр типа
СписокСсылок9 или ИерархияСсылок9 типа-вида Справочник.Контрагенты.
355. yuraos 1008 17.02.14 20:51 Сейчас в теме
(354)
Использование параметров этих типов буквально в том виде,
как оно описано выше, справедливо только для баз SQL.

Для DBF - "механика" этого процесса несколько отличается,
но внешне выглядит так же.
356. lelusha 17.02.14 21:17 Сейчас в теме
Понятно, благодарствую :) а что с вкладкой "Отбор по значениям реквизитов" ?
357. yuraos 1008 18.02.14 07:01 Сейчас в теме
(356) lelusha, что-то не припомню такую "вкладку" ...
скриншот выложи, освежи память.
;)))
358. yuraos 1008 18.02.14 07:08 Сейчас в теме
(357)
возможно ты спрашиваешь о том, как редактируются списки значений
СписокСсылок9
СписокСсылок13
ИерархияСсылок9
***
Эти списки редактируются в модальном режиме
в подправленной обработке UChoice
http://infostart.ru/public/97811/
(идет в полном комплекте поставки)
359. EugenLiquor 18.02.14 10:45 Сейчас в теме
Как я понял, эта обработка не будет работать на 8.2... А жалко, очень хорошая и полезная вещь, авторам спасибо!
360. yuraos 1008 18.02.14 10:59 Сейчас в теме
(359) EugenLiquor,
если нужны прямые запросы в 8-ке, то могу посоветовать
обработку "Консоль запросов 1С + ADO"
http://infostart.ru/public/169973/
"пример" использования
Подсистема "COMExchange": «прямые» запросы к базе 1С через ADO или как простые элементы сделать “предопределёнными”.
http://infostart.ru/public/172514/
***
правда с прямыми запросами в 8-ке не все так просто:
структура таблиц данных на порядок сложней.
361. lelusha 24.02.14 13:53 Сейчас в теме
поигрался с обработкой на простеньких запросах. Решил сделать что-то посложнее - остаток по счету. Это возможно получить? буду благодарен за помощь.
362. yuraos 1008 24.02.14 17:12 Сейчас в теме
(361) lelusha,
остатки и обороты по регистрам для SQL-базы
легко получаются с помощью виртуальных таблиц (смотри описаловку к 1cpp.dll).

а вот с бухгалтерскими итогами и в случае баз DBF - вилы!
все запросы по остаткам и оборотам приходится "рисовать" руками.
363. lelusha 24.02.14 21:14 Сейчас в теме
Да, нашел там при виртуальные таблицы РегистрОстатки, Обороты. А они связаны с Метаданными Регистры, которые в конфигураторе в дереве объектов. Дело в том, что в моей демо версии нет никаких таких регистров.
364. yuraos 1008 25.02.14 17:46 Сейчас в теме
(363) lelusha,
как я понял тебе нужны бухгалтерские итоги.

К сожалению разработчики 1cpp.dll не уделили особого внимания бухгалтерскому учету.
Нет соответствующих виртуальных таблиц остатков-оборотов по бухг.счетам.

Потому приходится городить их самому, используя следующие таблицы:

_1SACCS - счета
_1SENTRY - проводки
_1SBKTTLC - обороты между счетами
_1SBKTTL - остатки по счетам в разрезе субконто

Выкладываю смотрелку структуры таблиц баз 1С-7.7 (в файлах 1Cv7.DD / 1Cv7.DDS)
Она меня часто выручала
Прикрепленные файлы:
VIEWDD.rar
365. Xershi 1566 28.01.15 14:32 Сейчас в теме
Взял запрос из конструктора в конфигураторе
Период С НачГода по ДатаОкончания;
Без итогов;
Валюта = Документ.Приходная.Валюта,Документ.ПриходнаяМатериалы.Валюта;
ДатаДок = Документ.Приходная.ДатаДок,Документ.ПриходнаяМатериалы.ДатаДок;
ТНВЭД = Документ.Приходная.ТНВЭД,Документ.ПриходнаяМатериалы.ТНВЭД;
Количество = Документ.Приходная.Количество,Документ.ПриходнаяМатериалы.Количество;
Единица = Документ.Приходная.Единица,Документ.ПриходнаяМатериалы.Единица;
Коэффициент = Документ.Приходная.Единица.Коэффициент,Документ.ПриходнаяМатериалы.Единица.Коэффициент;
СуммаСтроки = Документ.Приходная.Сумма,Документ.ПриходнаяМатериалы.Сумма;
Функция Объем = Сумма(Количество*Коэффициент) Когда (ДатаДок >= ДатаНачала);
Функция ОбъемСНачалаГода = Сумма(Количество*Коэффициент);
Функция Сумма = Сумма(Пересчет(СуммаСтроки,Валюта,БазВалюта,ДатаДок)) Когда (ДатаДок >= ДатаНачала);
Функция СуммаСНачалаГода = Сумма(Пересчет(СуммаСтроки,Валюта,БазВалюта,ДатаДок));
Условие(Валюта<>ВалютаРубли);
Группировка ТНВЭД Без групп;
Показать
запихнул его в обработку и выкинуло ошибку
Запрос >>> ODBCRecordset:ВыполнитьИнструкцию() error:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near 'НачГода'.


Обработка не работает с таким форматом?
367. yuraos 1008 28.01.15 18:58 Сейчас в теме
(365) Xershi,
Дык это же не консоль для запросов на встроенном языке 1С!!!
;)))
Надо писать запрос на T-SQL
используя внутренние имена 1с-ных таблиц и полей
или их макро-подстановки.
368. yuraos 1008 28.01.15 19:02 Сейчас в теме
369. Xershi 1566 29.01.15 15:25 Сейчас в теме
(367) пол дня убил, на то чтобы понять что это не та консоль запросов как в 1С 8.

Не подскажите есть ли для 1с 7.7 консоль запросов по аналогии, как в 1С 8?
370. yuraos 1008 29.01.15 19:10 Сейчас в теме
(369) Xershi,

Не подскажите есть ли для 1с 7.7 консоль запросов по аналогии, как в 1С 8?


если в том смысле, что для штатных запросов 1с-7.7 и с конструктором в режиме 1С-предприятие,
то таких я не видел.
371. yuraos 1008 29.01.15 19:15 Сейчас в теме
(370)
если нужен просто конструктор запросов в консоли и устроят прямые запросы к базе,
то эта консоль умеет работать с конструктором прямых запросов,
поставляемым ВК qryConsole.dll:


4) При большом желании (для редактирования запроса в диалоге конструктора) требуется наличие внешней компоненты qryConsole.dll(автор Ivan T Berezdetsky). Обработка при открытии пытается ее загрузить (так же как 1CPP). Если загрузить не удается, то соответствующие элементы управления в обработке становятся недоступными.

Установочный дистрибутив и обсуждение внешней компоненты - на форуме: http://www.1cpp.ru/forum/YaBB.pl?num=1193394153. Для работы ВК qryConsole.dll обязательна установка Office web components (OWC11). Иначе обработка будет вас малоприятно ругать при открытии (беда устраняется или установкой OWC11, или удалением/переименованием файла библиотеки – чтоб вообще не грузилась).
373. Xershi 1566 30.01.15 15:59 Сейчас в теме
(371) нет, мне нужен синтаксис 1С 7.7.
Поэтому и нужна обработка как из 1С 8.х.
374. yuraos 1008 30.01.15 18:04 Сейчас в теме
(373) Xershi,
(372) - достаточно универсальный пример консоли простенькой для штатных запросов 1с-7.7
Я бы сказал даже - "академический"
Поскольку (как я припоминаю) что похожее в учебных курсах по 1с-7.7 было...


375. yuraos 1008 30.01.15 18:08 Сейчас в теме
(374)
***
к сожалению любую возможную консоль запросов 1с-7.7
в принципе нельзя сделать "полностью" универсальной
как в 1с-8.х.

поскольку в запросах 1с-7.7 нет параметров запроса как таковых.
вместо них используются имена переменные контекста выполнения.

можно конечно навтыкать реквизитов диалога соотвествующих типов
для часто встречаемых параметров - но это конечно уже не то.
376. yuraos 1008 30.01.15 18:11 Сейчас в теме
(375)
PS
... ну и конечно, большой минус, - не доступен конструктор запросов 1с-7.7 в режиме предприятия
(только в конфигураторе при редактировании текстов модулей)
377. yuraos 1008 30.01.15 18:16 Сейчас в теме
(376)
PS
PS
конечно может быть есть какая-нибудь могучая внешняя внешняя компонента
для конструктора штатных запросов 1с-7.7...но что-то я сомневаюсь.
***
ну а проблема с произвольными именами параметров запроса -
- в принципе не решаемая.
381. Xershi 1566 12.03.16 16:14 Сейчас в теме
(375) я так и сделал, когда эту тему изучал. Но зато было похоже на 1с8.
372. Xershi 1566 30.01.15 15:51 Сейчас в теме
(370) консоль запросов 7.7 тут описано как сделать обработку. Но думаю она не универсальная или стоит самому написать?
378. Зеленоград 10.08.15 11:35 Сейчас в теме
Как можно сохранить результат запроса?
382. Xershi 1566 12.03.16 16:16 Сейчас в теме
(378) Зеленоград, я думаю нужно табличный документ делать или свой код писать, который это сохранит в нужном файле.
379. basf 03.03.16 14:25 Сейчас в теме
Не совсем понимаю (точнее, пока совсем не понимаю), как с конструктором запросов в виртуальную таблицу остатков/оборотов подставляется период. Да и параметры как указывать, которые в консоли введены. Кроме как снимать галочку КЗ и дописывать запрос дальше вручную :)
380. yuraos 1008 12.03.16 11:13 Сейчас в теме
(379) basf,
в этом конструкторе (который сделан на подобие конструктора запросов 1С-8.х)
у виртуальных таблиц в списке выбранных таблиц сверху доступна кнопочка ее свойств.

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

Список параметров можно потом заполнить по тексту запроса,
а не заполнять его руками предварительно.
Для отправки сообщения требуется регистрация/авторизация