пятница, 14 февраля 2014 г.

1С и OLE Automation


Для запуска системы 1С-Предприятия в качесте OLE Automation сервера из внешнего приложения выполняется следующая последовательность действий:
Создается объект Новый COMObject() с OLE идентификатором (регистр символов непринципиален):
  • V1CEnterprise.Application - версия независимый ключ;
  • V77.Application - версия зависимый ключ;
  • V77S.Application - версия зависимый ключ, SQL версия;
  • V77L.Application - версия зависимый ключ, локальная версия;
  • V77M.Application - версия зависимый ключ, сетевая версия.
Выполняется инициализация системы 1С-Предприятие методом Initialize().

Ошибка "Ошибка при вызове конструктора (COMObject): Интерфейс не поддерживается: Интерфейс не поддерживается" связана в первую очередь с неправильным указанием идентификатора (той версии к которой подключаемся!)!

Здесь много справочной информации

среда, 12 февраля 2014 г.

ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ

1. Конструкции ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ позволяют объединить несколько запросов. Каждый запрос собирает данные самостоятельно, а упорядочивание результатов и расчет итогов выполняются над результатом объединения.

2. Конструкция ОБЪЕДИНИТЬ соединяет два результата и группирует повторяющие строки, в отличии от ОБЪЕДИНИТЬ ВСЕ которая не группирует автоматически строки результата.

3. Настоятельно рекомендуется использовать ОБЪЕДИНИТЬ ВСЕ в запросах, где заведомо невозможно получения одинаковых строк. Это существенно повышает производительность – система не пытается группировать строки.

4. Объединяемые запросы должны иметь одинаковое количество полей в списке полей выборки. В случае отсутствия соответствующего поля у одного из запросов ставится 0 (числовое поле) или Null (конструктор запросов расставляет Null автоматически).

понедельник, 10 февраля 2014 г.

"Получить" Регистратор в таблице ОстаткиИОбороты...

РегистрНакопления.Партии.ОстаткиИОбороты(&ДатаКон, &ДатаКон, Регистратор, , )
или в Конструкторе запроса- Параметры виртуальной таблицы- Периодичность- Регистратор!

"Физические" и "виртуальные" таблицы регистров накопления

Самое важное отличие- "физическая"-





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

Т.о. если нам нужны Остатки по РН ТоварыНаСкладах то из физической таблицы мы их не получим! Мы можем только сгруппировать их по нужному нам признаку (к примеру ВидДвижения) и применить агрегирование (функцию)!

Сложности написания + выборка ВСЕХ записей регистра и лишь затем фильтрация, суммация и пр. (см. ниже материал с ныне недоступного сайта 1cexpo.ru).

Параметры виртуальных таблиц

При организации выборок в реальных задачах в подавляющем большинстве случаев организуется отбор данных в соответствии с некоторыми критериями.
В случае, когда выборка делается из реальной таблицы, никаких сложностей не возникает. Данные обрабатываются абсолютно тривиально:
В том случае, когда источником в запросе выступает виртуальная таблица, ситуация становится несколько сложнее.
Язык запросов позволяет наложить условие на выборку из виртуальных таблиц двумя способами: в предложении ГДЕ и с помощью параметров виртуальных таблиц. Оба способа приведут к одному результату (за исключением некоторых специфических случаев), но, тем не менее, они далеко не эквиваленты.
Мы уже знаем, что виртуальные таблицы потому и называются виртуальными, что в базе их на самом деле нет. Формируются они только в тот момент, когда к ним обращается запрос. Несмотря на это, нам (то есть, тем, кто составляет запрос) удобно рассматривать виртуальные таблицы именно как реально существующие. Что же произойдёт в системе 1С Предприятие 8, когда составленный нами запрос всё-таки обратится к виртуальной таблице?
На первом шаге, система построит виртуальную таблицу. На втором шаге из полученной таблицы будут выбраны записи, удовлетворяющие условию, заданному в предложении ГДЕ:
Хорошо видно, что в итоговую выборку попадут не все записи из виртуальной таблицы (а, следовательно, и из базы данных), а только те, которые удовлетворяют заданному условию. А остальные записи просто будут исключены из результата.
Таким образом, система проделает не просто бесполезную, а двойную бесполезную работу! Сначала будут затрачены ресурсы на построение виртуальной таблицы на основе лишних данных (на рисунке они помечены как «области данных А и Б»), а потом ещё будет проделана работа по фильтрации этих данных из окончательного результата.
Нельзя ли сразу, на этапе построения виртуальной таблицы, отказаться от использования ненужных данных? Оказывается, можно. Именно для этого и предназначены параметры виртуальных таблиц:
Параметризируя виртуальную таблицу, мы сразу ограничиваем объём данных, который будет обрабатываться запросом.

Активность записей

В реальных таблицах регистров 1С Предприятия есть весьма специфическое поле Активность. При работе с реальными таблицами, оно не отличается от любого другого поля, его можно записывать, читать и изменять. Его особенности проявляются при работе с виртуальными таблицами.
Механизм запросов 1С Предприятия устроен так, что при построении виртуальных таблиц в них включаются только записи, у которых поле Активность равно Истина. Для чего это нужно?
Самое главное, такое поведение системы очень удобно использовать в конфигурациях бухгалтерского учёта. Допустим, нужно сделать так, что бы у нас была возможность у какого-то документа «выключить проводки», То есть, нужно, что бы при необходимости этот документ не попадал в отчёты.
Конечно, можно просто отменять проведение документа. Но такой путь не удобен по двум причинам. При проведении документа, как правило, выполняются довольно громоздкие расчёты. И, значит, на то, что бы выключить/включить проводки у нас уйдёт некоторое (иногда, весьма значительное) время. Но с этим ещё можно с грехом пополам смириться. Гораздо хуже другое.
Как правило, в бухгалтерских конфигурациях существует документ для ввода ручных проводок (к примеру, он может называться «Ручная операция»). Этот документ устроен весьма незатейливо: у него нет своих табличных частей, а вместо этого пользователю предоставляется возможность вносить (корректировать, удалять) записи непосредственно в регистр. В то время, как обычные документы формируют движения при проведении, документ ручного ввода, естественно, работает иначе. Он не может формировать и удалять движения по регистру стандартным образом, потому что в его случае эти записи делаются вручную. Если мы удалим движения такого ручного документа, то восстановить их потом не сможем в принципе!
Что бы разрешить эту проблему, как раз и можно использовать поле Активность. Как мы уже говорили, с этим полем можно работать как с любым другим. А значит, для того, что бы движения документа не попадали в отчёты, достаточно записать Ложь в поле Активность во всех записях, относящихся к данному регистратору.