1с получить связанные документы программно
Вводная: реализовать ввод Заказа поставщику на основании Заказа на Ремонт. решить через расширения конфигурации.
Хочу обратить ваше внимание, не нужно добавлять в расширение критерий отбора, для 8.3.12 нам не доступно добавление\изменение состава критерия. Более того может зависать конфигуратор (столкнулся с последней версией 8.3.14 + ERP)
Разработку рекомендую вести с применением хранилища и для расширения. Иначе устанете потом выгребать чего лишнего включили в расширение при добавлении таких или схожих обектов с составными типами и подобное.
Все текущие типовые решения сейчас идут в режиме совместимости 8.3.12, в прочем и для 8.3.14 (и даже 8.3.15 ничего не поменялось).
Что нам нужно было бы сделать при отказе от поддержки:
1) добавить наш документ в Критерий отбора (состав, реквизиты);
2) в раздел Ввод на основании целевого документа.
И что с целью сохранения поддержки. Как сделать это же для расширения:
1) Добавить реквизит расширения Документы.ЗаказПоставщику._ЗаказНаРемонт (ДокументСсылка.ЗаказНаРемонт)
2) Добавить команду расширения Документы.ЗаказНаРемонт.Команды._СоздатьЗаказПоставщику (группа: форма \ ввести на основании, параметр: ДокументСсылка.ЗаказНаРемонт)
ПараметрыФормы = Новый Структура ( "Основание" , ПараметрКоманды ) ; ОткрытьФорму ( "Документ.ЗаказПоставщику.ФормаОбъекта" , ПараметрыФормы , ПараметрыВыполненияКоманды . Источник , ПараметрыВыполненияКоманды . Уникальность , ПараметрыВыполненияКоманды . Окно , ПараметрыВыполненияКоманды . НавигационнаяСсылка ) ;
3) Переопределить метод модуля объекта Документы.ЗаказПоставщику
&После("ОбработкаЗаполнения") Процедура лв_ОбработкаЗаполнения ( ДанныеЗаполнения , СтандартнаяОбработка ) Если ТипЗнч ( ДанныеЗаполнения ) = Тип ( "ДокументСсылка.ЗаказНаРемонт" ) Тогда
&НаСервере &Вместо("ВывестиРодительскиеОбъекты") Процедура _ВывестиРодительскиеОбъекты ( ТекущийОбъект , ДеревоРодитель ) // Типовой код, актуально для ERP 2.4.9.91 // делаем примеси для включения реквизитов расширения СтрокиДерева = ДеревоРодитель . ПолучитьЭлементы ( ) ; МетаданныеОбъекта = ТекущийОбъект . Метаданные ( ) ; СписокРеквизитов = Новый СписокЗначений ; //( РасширенныйСостав = Новый Массив ; РасширенныйСостав . Добавить ( Метаданные . Документы . ЗаказПоставщику . Реквизиты . _ЗаказНаРемонт ) ; //) Для Каждого Реквизит Из МетаданныеОбъекта . Реквизиты Цикл //( Если РасширенныйСостав . Найти ( Реквизит ) = Неопределено Тогда //) Если Не Метаданные . КритерииОтбора . СвязанныеДокументы . Состав . Содержит ( Реквизит ) Тогда Продолжить ; КонецЕсли ; //( КонецЕсли ; //) КонецПроцедуры &НаСервере &Вместо("ОбъектыПоКритериюОтбора") Функция _ОбъектыПоКритериюОтбора ( ЗначениеКритерияОтбора ) Результат = ПродолжитьВызов ( ЗначениеКритерияОтбора ) ; // делаем примеси для включения реквизитов расширения Если ТипЗнч ( ЗначениеКритерияОтбора ) = Тип ( "ДокументСсылка.ЗаказНаРемонт" ) Тогда Запрос = Новый Запрос ; Запрос . УстановитьПараметр ( "ЗначениеКритерияОтбора" , ЗначениеКритерияОтбора ) ; Запрос . Текст = "ВЫБРАТЬ | ЗаказПоставщику.Ссылка КАК Ссылка |ИЗ | Документ.ЗаказПоставщику КАК ЗаказПоставщику |ГДЕ | ЗаказПоставщику._ЗаказНаРемонт = &ЗначениеКритерияОтбора" ; ОбщегоНазначенияКлиентСервер . ДополнитьТаблицу ( Запрос . Выполнить ( ) . Выгрузить ( ) , Результат ) ; КонецЕсли ; Возврат Результат ; КонецФункции
Проверка наличия зависимых документов
Из-за частых ошибок ввода данных в базу была поставлена задача создания запрета отмены проведения документов, если на их основании введен хотя бы один проведенный документ.
В тестовой конфигурации имеются три документа: "Заявка", "Расходный ордер" и "Приходный ордер". Связь между документами следующая:
В соответствии с этой связью и нужно выполнить задание.
Способы реализации
Есть несколько путей решения. Например, мы можем в подписке на событие перед записью документа выполнять запрос на выборку документов, введенных на основании. Разумеется, для каждого документа нужно будет составлять свой запрос. Например, для документа "ПриходныйОрдер" из тестовой базы программный код проверки наличия связанных документов с проведенным статусом приведен в следующем листинге:
Вариант рабочий, но тогда нам придется для каждого документа писать свой запрос. Даже если мы будем формировать текст запроса автоматически с учетом структуры метаданных и типов реквизитов документа, то мы не сможем обработать все возможные ситуации. Хотя бы потому, что мы не знаем точную связь между документами, а также по каким реквизитам она устанавливается.
Еще один вариант - использование критериев отбора. В одной из предыдущих статей "Критерии отбора на простом примере" был продемонстрирован простой пример работы с этим объектом конфигурации. Аналогично мы можем изменить программный код обработки проверки зависимых документов и получим более универсальное решение.
В настройке критерия отметим лишь настройку его состава:
Вариант будет работать, причем его реализация относительно универсальная. Проверка будет опираться на настройку состава используемого критерия отбора.
Заключение
Из рассмотренных двух вариантом наиболее оптимальным является второй - использование критерия отбора. С позиции разработчика реализация не займет много времени, а дальнейшая доработка будет простой. Однако при решении задач, где производительность - критический фактор, нужно описывать все необходимые действия проверки "вручную", а также возможно использовать дополнительные таблицы. Но эти способы выходят за рамки статьи.
Критерии отбора в 1С – это некоторый объект в метаданных, при помощи которого можно производить отборы информации внутри базы системы 1С по представленным параметрам поиска – условиям. Можно сказать, что критерии отбора – это сводка правил, согласно которым может быть произведён выбор информации по некоторому условию в пользовательском режиме.
Рассмотрим, как происходит отбор в журнале по критерию «Контрагент»:
Рис. 1 Отбор по критерию «Контрагент»
Данный метод очень удобен для создания структуры с подчинённостями. Её можно посмотреть, кликнув на «Перейти к иерархическому списку связанных документов», как показано ниже:
Рис. 2 Перейти к иерархическому списку связанных документов в 1С
Рассмотрим, как происходит работа связанных критериев отбора в системе 1С. Запустим 1С как «Конфигурато и откроем в метаданных раздел с критериями, как показано ниже:
Рис. 3 Раздел с критериями отбора в 1С
В «Данных» будет задан «Тип», соответствующий типу значений, которые будут подлежать отбору для поиска.
Как пример, в «ДокументыПоКонтрагенту» – тип «СправочникСсылка.Контрагенты», отбору «ДокументыСотрудников» соответствует тип «СправочникСсылка.ФизическиеЛица», как можно увидеть на скриншотах ниже:
Рис. 4 Использование критериев отбора данных
Рис. 5 Пример с критериями отбора в 1С
Стоит учесть, что можно прописывать любой тип или же определять объект по древу конфигурации, указывая некоторую произвольную ссылку:
Рис. 6 Использование критериев отбора в 1С с произвольной ссылкой
Удобство критериев отбора данных заключается в том, что внутри критерия можно задействовать и реквизиты из различных таблиц.
Во вкладке «Состав» видны элементы, для которых соответствуют данные того типа, который был прописан для работы критерия отбора. В данном окне нужно проставить «галочки» около элементов, при помощи которых производится отбор. Как только данный перечень будет указан, отбор начнёт работать.
Рис. 7 Работа критерия отбора
Видов критериев по отбору может быть много, но для работы с ними необходимо создание форм, которые в последствии можно помещать на панель с инструментами и в меню пользователя. Критерии всех выделенных объектов можно будет просматривать, кликнув на «Ещё».
Рис. 8 Форма критериев отбора в 1С
2. Пример создания отбора в 1С 8
Рассмотрим на примере создание отбора в 1С 8. Создадим «ДокументыПоНоменклатуре», кликнув на «Добавить», как показано на скриншоте с примером ниже:
Рис. 9 Создание отбора в 1С 8
На вкладке «Данные» прописываем его тип «СправочникСсылка.Номенклатура».
На вкладке «Состав» нужно проверить всю документацию и около необходимой проставить «галочки» в «Номенклатура». Это и есть те элементы, при помощи которых происходит отбор.
Рис. 10 Выбор элементов для отбора в 1С 8
Также стоит отметить, что для работы отбора в 1С 8 необходимо, чтобы он находился на рабочем экране у пользователя. Находим на древе справочник «Номенклатура», после чего открываем форму для элемента. На вкладке «Командный интерфейс» устанавливаем «галочку» около строки «Документы по номенклатуре», как показано на скриншоте ниже:
Рис. 11 Критерий отбора в 1С ДокументыПоНоменклатуре
Далее запускаем команду «Обновить конфигурацию базу данных» и делаем сверку работы отбора. Запускаем любой из элементов внутри справочника «Номенклатура» и переходим на ссылку «Ещё», где находится строка «Документы по номенклатуре», как можно увидеть ниже:
Рис. 12 Проверка работы отбора в 1С 8
Кликаем на вышеописанную ссылку, после чего появится перечень документов, внутри которых содержится выбранная позиция:
Рис. 13 Список документов с критерием отбора в 1С
При помощи критериев отбора происходит программно динамический отбор и отображаются все данные, которые являются результатом поиска. Для того чтобы результат был корректным, не стоит делать слишком много видов критериев по отбору.
3. Связанные документы в 1С 8.3
Теперь, как только основные понятия были закреплены, можно перейти к основной теме статьи – связанным документам. Связанные документы в 1С 8.3 работают по схожему принципу. Связи между документами можно увидеть, нажав на «Перейти к иерархическому списку связанных документов». Данная кнопка располагается на панели с инструментами, как показано ниже на скриншоте:
Рис. 15 Связанные документы в 1С 8.3
Чтобы связи между документами отображались и у пользователя, необходимо в настройках для критериев отбора «СвязанныеДокументы», которые находятся во вкладке «Данные», определить перечень нескольких связанных между собой документов, как продемонстрировано ниже:
Рис. 16 Перечень нескольких связанных между собой документов
Также на панели «Состав» определить те документы, которые могут стать документами-основаниями для других:
Рис. 17 Запрос связанные документы
При помощи механизмов для критериев можно получать связанные документы, а также получать список всех связанных элементов у пользователя. Также, стоит отметить, что при описании необходимых критериев в выборке автоматически будут созданы необходимые запросы для связанных документов. Данное свойство делает проще создание любых критериев по отбору данных, а также упрощает реализацию быстрой выборки по выбранным
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Посмотреть все результаты поиска похожих
Еще в этой же категории
Как программно получить Картинку из базы и сохранить ее преобразовав в другой формат? 4
//Получим и сохраним Общую картинку из библиотеку картинок конфигурации ИмяКартинки = Метаданные.ОбщиеКартинки.OutlookExpress; ВыбраннаяКартинка = БиблиотекаКартинок ; // Сохраним полученную картинку в c: temp ВыбраннаяКартинка.Записать(" c: te Получить список Справочников конфигурации 2
НаКлиенте Процедура ПоКнопкеЧтениеИзМетаданных(Команда) // Вставить содержимое обработчика. Перем СписокСправочников; СписокСправочников = Новый СписокЗначений; СписокСправочников = СправочникиИзМетаданных(); Для Сч = 0 По СписокСправочников Перебор Основных Реквизитов формы 0
//Перебор Основных Реквизитов формы Для Каждого Рек из ЭтаФорма.Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" - " +рек.Синоним+" - " +Строка(рек.Тип)); КонецЦикла; // или так Для Каждого Рек из Метаданные().Реквизиты Цикл Сообщить(рек.Имя+" Функция устанавливает новое значение реквизита документа или справочника. 0
//функция устанавливает новое значение реквизита документа или справочника и задает вопрос, если новое значение не соответствует предыдущему Функция гЗначение(Ко,Атрибут,Значение) Экспорт Знач1=Ко.ПолучитьАтрибут(Атрибут); Знач2=Значение; //про Функция возвращает ссылку на заданный реквизит объекта метаданных Документ 0
// Документ - ссылка на документ, Реквизит - название реквизита, например " Контрагент" Функция гРеквизитДокумента(Документ,Реквизит) Экспорт Если Метаданные.Документ(Документ).РеквизитШапки(Реквизит).Выбран()=1 Тогда Возврат Метаданные.Докумен Посмотреть все в категории Метаданные
В типовых конфигурациях 1С из форм многих документов можно вызвать отчет «Связанные документы». Этот функционал реализован в подсистеме «Структура подчиненности» Библиотеки стандартных подсистем. Рассмотрим как добавить в этот отчет новый тип документа и прописать взаимосвязь с родительскими и дочерними объектами.
Для реализации поставленной задачи необходимо выполнить следующие действия:
1. Добавить кнопку вывода отчета на форму
Для этого можно:
- Включить документ в список типов выбранных объектов общей команды СтруктураПодчиненности. В этом случае на формы документа будет выведена кнопка .
- Использовать функционал подсистемы БСП «Подключаемые команды». Для этого необходимо найти любой документ, в котором уже выведена кнопка «Структура подчиненности» и перенести из формы этого документа код, обрамленный в комментарии
// СтандартныеПодсистемы.ПодключаемыеКоманды
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
В этом случае переход к отчету «Связанные документы» будет осуществляться через меню Отчеты командной панели формы.
2. Настроить критерий отбора СвязанныеДокументы
Документы в отчете «Связанные документы» выводятся в виде дерева. Элементы могут иметь как родительские объекты, так и подчиненные.
Для указания перечня родительских объектов в критерии объектов «Связанные документы» заполняется свойство Тип на закладке Данные.
Перечень подчиненных объектов указывается на вкладке Состав.
Для доступа к отчету «Связанные документу» в БСП создана специальная роль «ПросмотрСвязанныеДокументы».
Если не устраивает представление выводимого в отчете объекта, есть возможность его переопределить. Для этого необходимо прописать свой код в общем модуле СтруктураПодчиненностиПереопределяемый. Процедуры этого модуля имеют подробное описание.
Остались вопросы?
Спросите в комментариях к статье.
В типовых конфигурациях, основанных на БСП, в документах заполняется список отчетов, в числе которых есть Движение документа и Связанные документы. Данные отчеты очень помогают при работе с документами, поэтому если вы добавили в дерево метаданных новый документ, то добавление этих двух отчетов будет хорошим тоном при доработке типовой конфигурации.
Для добавления этих отчетов необходимо выполнить ряд условий. Можно открыть какой-нибудь документ в конфигураторе и копировать данные от него.
Первоначально необходимо создать области на форме документа. Их можно скопировать от другого документа.
Важно! В свойствах Источник команд скопированных групп может прописаться Форма, необходимо очистить это поле, чтобы было как на скриншоте.
После этого переходим к написанию кода. В модуле формы в обработчике ПриСозданииНаСервере прописываем строку:
В модуле формы добавляем следующие процедуры:
В модуле менеджера документа добавляем процедуру:
После этого в нашем документе должно появиться меню с отчетами.
В запросе к Критерию отбора СвязанныеДокументы, можно передать в параметре только ссылку на один документ. Можно ли решить задачу, когда этих документов несколько. То есть нужно получить, скажем, все связанные документы с документами, ссылки на которые уже отобранны в виртуальную таблицу.
В случае с одним (Док — ссылка на документ, по которому нужно отобрать все связанные с ним документы):
Читайте также: