1. Критерии отбора в 1С
2. Пример создания отбора в 1С 8
3. Связанные документы в 1С 8.3
1. Критерии отбора в 1С
Критерии отбора в 1С – это некоторый объект в метаданных, при помощи которого можно производить отборы информации внутри базы системы 1С по представленным параметрам поиска – условиям. Можно сказать, что критерии отбора – это сводка правил, согласно которым может быть произведён выбор информации по некоторому условию в пользовательском режиме.
Рассмотрим, как происходит отбор в журнале по критерию «Контрагент»:
Рис. 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
Рис. 15 Связанные документы в 1С 8.3
Чтобы связи между документами отображались и у пользователя, необходимо в настройках для критериев отбора «СвязанныеДокументы», которые находятся во вкладке «Данные», определить перечень нескольких связанных между собой документов, как продемонстрировано ниже:
Рис. 16 Перечень нескольких связанных между собой документов
Также на панели «Состав» определить те документы, которые могут стать документами-основаниями для других:
Рис. 17 Запрос связанные документы
При помощи механизмов для критериев можно получать связанные документы, а также получать список всех связанных элементов у пользователя. Также, стоит отметить, что при описании необходимых критериев в выборке автоматически будут созданы необходимые запросы для связанных документов. Данное свойство делает проще создание любых критериев по отбору данных, а также упрощает реализацию быстрой выборки по выбранным
Специалист компании «Кодерлайн»
Связанные документы
Отправка
Полученные документы
Отправленные документы
Передача документов на согласование/подпись
Согласование документа
Аннулирование документов
Удаление документов
Работа с валютными документами
Связанные документы
Статусы документооборота
Подарки при покупке модуля 1С
Для действующих и новых клиентов Диадока
Связанные документы и структура подчиненности
Как правило, документы в 1С формируются в определенной хронологической последовательности! Например, сначала делается счет, затем после оплаты создается реализации и для нее создается счет-фактура. Если рассматривать эту цепочку последовательно, то можно увидеть взаимосвязь всех элементов и вывести все объекты в виде иерархической структуры.
Поэтому, в типовых конфигурациях 1С из форм почти всех документов можно вызвать отчет специальный отчет, который называется « Связанные документы
». Вызывается он одноименной командой на панели формы. И предназначен для вывода структуры родительских и подчиненных объектов.
В более ранних версиях данный механизм назывался Структура подчиненности
Данный отчет создает визуальное оформление структуры связанных документов. Взаимосвязь объектов система отслеживает по ссылкам одного объекта внутри другого. Говоря простым языком, анализируются случаи, когда в одном документе присутствует поле, в котором в явном или неявном виде указан другой документ. Например, в счет-фактуре указывается Реализация товаров. В данном случае — реализация будет родительским
элементом, а счет-фактура дочерним
.
Особенности и основные функции
Главной особенностью отчета по связанным объектам является то, что он позволяет из одного объекта программы увидеть всю цепочку взаимосвязанных
с ним других объектов. При этом информация выводится в наглядной форме, а встроенная система навигации позволяет перемещаться и открывать нужные документы непосредственно из списка.

Обратите внимание! Объект, из которого сформирован отчет (назовем его основным
), выделяется жирным шрифтом. Дерево родительских объектов строится вверх
со сдвигом вправо от основного
объекта. Дерево дочерних объектов строится вниз
со сдвигом вправо от основного
объекта
Стандартный вариант данного отчета, имеет несколько дополнительных функций. Во-первых, с помощью двойного щелчка мышью по любому присутствующем в списке объекту можно открыть форму этого объекта. Во-вторых, на форме присутствует команда Обновить.
С ее помощь можно заново сформировать отчет. Это удобно делать, когда после открытия одного из связанных документов были внесены изменения. Ну и в-третьих, с помощью команды Вывести для текущего
можно сформировать отчет Связанные документы,
но уже для выделенного объекта.
Если отчет по связанным объектом, помимо названия и даты документа, выводит еще и сумму в валюте документа в том случае если она в нем присутствует.
Сквозной пример работы со структурой подчиненности
- Давайте на примере конфигурации 1С:Бухгалтерия (редакции 3.0) рассмотрим классический пример связанных объектов. Начнем с документа Счет на оплату
. На начальном этапе при формировании списка связанных документов в списке будет присутствовать только одна запись.
Рис. 2 - Теперь сделаем Поступление
на расчетный счет
денежных средств от покупателя. Поступление делаем на основании текущего счета. Благодаря этому, счет сразу будет указан в поступлении. Вновь сформировав список связанный документов из этого счета (можно нажать кнопку Обновить
) убеждаемся, что в списке теперь выводятся два документа. Жирным выделен счет, потому что именно из него мы формировали отчет. При этом счет в списке находится на первом месте и является родительским
объектом. Поступление содержит
наш счет и является подчиненным
объектом.
Рис. 3 - Теперь произведем отгрузку товаров по нашему счету. Как и поступление денег, вводим его на основании счета. В этом случае счет также будет указан в реализации. А при формировании списка связанных документов в нем отобразятся уже три документа. Также стоит обратить внимание на иерархическую структуру отчета. В схеме слева можно четко увидеть связь подчиненных
объектов.
Рис. 4 - Теперь из реализации создадим счет-фактуру и снова обновим отчет. При этом в списке появится счет-фактура (рис. 5). Он будет подчинен он уже реализации. Это хорошо видно на схеме документа (рис. 5).
Рис. 5 - Наконец, создадим из реализации еще один документ. Пусть это будет корректировка
реализации. И опять обратимся к структуре подчиненности. В этот раз сформируем отчет не только для счета, но и для реализации. Обратите внимание, на различия выводимых данных. При выводе связанных документов для Реализации поступление
выводиться не будет. Так как в реализации не было ссылки на документ поступления. Этот момент обязательно нужно учитывать при формировании.
Рис. 6
На этом все. Приятной и удобной работы!
Поделитесь ссылкой, если Вам понравилась эта статья.
—
Выводит информацию о связанных документах на форму списка документов «Заказы клиентов» и «Заказы поставщикам».
Скачать файлы
Доработка выполнена в виде расширения конфигурации, что позволяет добавить функционал, не включая возможность редактирования.
Для подключения необходимо в режиме конфигуратора подключить расширение и загрузить его из файла.
Проверено на УТ 11.4.14.181.
УТ11
Связанные документы
Структура подчиненности
Заказы клиентов
Заказы поставщикам
См. также
«Мобильный ТСД» — инвентаризация и сбор штрихкодов для iOS и Android
Сканер штрих-кода
Терминал сбора данных
Мобильная разработка
Монитор заказов
Оптовая торговля
Розничная торговля
Ценообразование, анализ цен
Платформа 1С v8.3
Мобильная платформа
1С:Розница 2
1С:Управление нашей фирмой 1.6
1С:ERP Управление предприятием 2
1С:Управление торговлей 11
1С:Комплексная автоматизация 2.х
Розничная и сетевая торговля (FMCG)
Оптовая торговля, дистрибуция, логистика
Управленческий учет
Платные (руб)
Простой мобильный терминал сбора данных для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения — все необходимое придет на почту автоматически.
Подсистема «Диспетчеризация обслуживания». Предварительная запись, планирование, регистрация и анализ этапов обслуживания или производства для любых конфигураций на платформе 8. 6+ с использованием планировщика
Монитор заказов
Производство готовой продукции (работ, услуг)
Учет рабочего времени
Оперативный учет
Анализ и прогнозирование
Бизнес-процессы
Конфигурации 1cv8
Управленческий учет
Платные (руб)
Подсистема предназначена для оперативной регистрации, анализа и оптимизации различных процессов, имеющих определенную продолжительность по времени, с помощью удобного графического интерфейса. Может стать как неотъемлемой частью CRM-системы вашей организации, так и незаменимым инструментом для организации работы ваших сотрудников или подразделений. Может применяться для решения самых разных задач: от простой предварительной записи клиентов, осуществляемой одним или несколькими операторами одновременно, до планирования и контроля этапов выполнения различных производственных процессов. Код разработки открыт и доступен для модификации. Подсистема легко и быстро интегрируется в любые конфигурации 1С как на управляемых, так и на обычных формах.
Обеспечение заказов покупателей – контроль дефицита товаров для обеспечения потребностей – УТ 11, КА 2, ЕРП 2
Монитор заказов
Платформа 1С v8.3
Оперативный учет
1С:ERP Управление предприятием 2
1С:Управление торговлей 11
1С:Комплексная автоматизация 2.х
Управленческий учет
Платные (руб)
Отчет выводит актуальные заказы покупателей в статусах, отличных от «Закрыт», и показывает обеспечение этих заказов: сколько товаров на складе, сколько из них доступно, сколько планируется обеспечить из заказов поставщикам, а сколько никак не обеспечено.
Товары, которые планово обеспечены заказами поставщикам, подсвечиваются желтым. Товары, которые никак не обеспечены, подсвечиваются красным.
1. Критерии отбора в 1С
2. Пример создания отбора в 1С 8
3. Связанные документы в 1С 8.3
1. Критерии отбора в 1С
Критерии отбора в 1С – это некоторый объект в метаданных, при помощи которого можно производить отборы информации внутри базы системы 1С по представленным параметрам поиска – условиям. Можно сказать, что критерии отбора – это сводка правил, согласно которым может быть произведён выбор информации по некоторому условию в пользовательском режиме.
Рассмотрим, как происходит отбор в журнале по критерию «Контрагент»:
Рис. 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
Рис. 15 Связанные документы в 1С 8.3
Чтобы связи между документами отображались и у пользователя, необходимо в настройках для критериев отбора «СвязанныеДокументы», которые находятся во вкладке «Данные», определить перечень нескольких связанных между собой документов, как продемонстрировано ниже:
Рис. 16 Перечень нескольких связанных между собой документов
Также на панели «Состав» определить те документы, которые могут стать документами-основаниями для других:
Рис. 17 Запрос связанные документы
При помощи механизмов для критериев можно получать связанные документы, а также получать список всех связанных элементов у пользователя. Также, стоит отметить, что при описании необходимых критериев в выборке автоматически будут созданы необходимые запросы для связанных документов. Данное свойство делает проще создание любых критериев по отбору данных, а также упрощает реализацию быстрой выборки по выбранным
Специалист компании «Кодерлайн»
Пример решения простой и распространенной задачи — автоматическое создание документа на основании другого документа.
Предисловие
Вы любите свое дело? Я да! Десятки, сотни или может даже тысячи (трудно уже подсчитать) решенных задач. Огромное количество человеко-часов потрачено. С опытом начинаешь использовать некоторые решения в качестве шаблонов, даже если считаешь их костылями. Просто приходится.
В одной из прошлых статей
«Три костыля. Сказ про фокусы в коде»
мы уже касались этой темы. Практически все понимают, что решенная в адекватные сроки задача приносит куда больше успеха, чем идеальное решение за границей дедлайна.
Именно о таком решении, которое может создавать сомнения в постановке задачи и качестве ее решения, мы сегодня и поговорим. А именно — об автоматическом создании документа на основании другого документа. На практике она не редкость.
Постановка задачи
Решим практическую задачу. Необходимо при проведении документа «Перемещение товаров» для ордерных складов автоматически создавать на основании документ «Расходный ордер на товары». При последующих изменения документа перемещения нужно изменять и расходный ордер. Доработка выполняется на конфигурации «Управление производственным предприятием» редакции 1.3.
Да, я конечно же понимаю, что это устаревшая конфигурация и так далее. Но вся информация в статье актуальна и для современных конфигураций, а продемонстрированный ниже код может быть использован Вами с необходимыми модификациями.
Это не идеальное решение. Вообще, автоматическое синхронное создание документов на основании документа при проведении / записи / другом событии — это сомнительное решение в любом случае. К этому мы еще вернемся.
Общий принцип
Изменение связанных документов от записываемого / проводимого документа-основания лучше всего выполнять в обработчике «ПриЗаписи», чтобы не влиять на процедуру проведения документа. Рекомендация действительна только в тех случаях, когда это позволяет логика прикладного решения или поставленной задачи.
На следующем листинге показан пример обработчика изменения связанного документа:
// Источник - объект документа источника, на основании которого
// должны автоматически создаваться другие документы
// СвязанныйДокумент - объект документа, создаваемого автоматически
//
// Перед выполнением дальнейшего алгоритма выполняется поиск связанного
// документа. Если документ не найден, то создается новый
//
Если Источник.Проведен Тогда
// Если источник проведен, то зависимый документ перезаполняется
// на основании источника и проводится
СвязанныйДокумент.ПометкаУдаления = Ложь;
ОбновитьЗависимыйДокумент(СвязанныйДокумент, Источник);
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Проведение);
ИначеЕсли Источник.ПометкаУдаления Тогда
// Если источник помечен на удаление, то связанный документ также
// помечается на удаление. Если он был проведен, то процедура
// "УстановитьПометкуУдаления" инициирует отмену проведения документа
Если НЕ СвязанныйДокумент.ЭтоНовый() Тогда
// Если связанный документ еще не записан в базу, то
// никакие действия не выполняются
СвязанныйДокумент.УстановитьПометкуУдаления(Истина);
КонецЕсли;
Иначе // Выполняется запись документа без проведения или установки
// пометки удаления
Если СвязанныйДокумент.ЭтоНовый() Тогда
// Если связанный документ не записан в базу, то заполняем его и
// выполняем запись документа без проведения
ОбновитьЗависимыйДокумент(СвязанныйДокумент, Источник);
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Запись);
ИначеЕсли СвязанныйДокумент.Проведен Тогда
// Если связанный документ был проведен, то выполняем отмену проведения
СвязанныйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе
// В остальных случаях просто записываем зависимый документ
// Если была установлена пометка удаления - снимаем ее
СвязанныйДокумент.ПометкаУдаления = Ложь;
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЕсли
Реализация
В типовой конфигурации «Управление производственным предприятием» для автосоздания документа расходного ордера товаров создадим подписку на событие «ПриЗаписиДокументаПеремещения» на событие «ПриЗаписи» со следующим обработчиком:
Процедура ПриЗаписиДокументаПеремещенияПриЗаписи(Источник, Отказ) Экспорт
// Находим подчиненный документ "Расходный ордер на товары"
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасходныйОрдерНаТовары.Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
|ГДЕ
| РасходныйОрдерНаТовары.ДокументПередачи = &ДокументПередачи
| И РасходныйОрдерНаТовары.ВидОперации =
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходныйОрдер.Перемещение)";
Запрос.УстановитьПараметр("ДокументПередачи", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Источник.ВидОперации = Перечисления.ВидыОперацийПеремещениеТоваров.ТоварыПродукцияПоОрдерам Тогда
Если Выборка.Следующий() Тогда
СвязанныйДокумент = Выборка.Ссылка.ПолучитьОбъект();
Иначе
СвязанныйДокумент = Документы.РасходныйОрдерНаТовары.СоздатьДокумент();
СвязанныйДокумент.Дата = Источник.Дата+1;
ОбновитьНумерациюОбъектов(Метаданные.Документы.РасходныйОрдерНаТовары);
СвязанныйДокумент.УстановитьНовыйНомер();
КонецЕсли;
// должны автоматически создаваться другие документы
// СвязанныйДокумент - объект документа, создаваемого автоматически
//
// Перед выполнением дальнейшего алгоритма выполняется поиск связанного
// документа. Если документ не найден, то создается новый
//
Если Источник.Проведен Тогда
// Если источник проведен, то зависимый документ перезаполняется
// на основании источника и проводится
СвязанныйДокумент.ПометкаУдаления = Ложь;
ОбновитьРасходныйОрдер(СвязанныйДокумент, Источник);
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Проведение);
ИначеЕсли Источник.ПометкаУдаления Тогда
// Если источник помечен на удаление, то связанный документ также
// помечается на удаление. Если он был проведен, то процедура
// "УстановитьПометкуУдаления" инициирует отмену проведения документа
Если НЕ СвязанныйДокумент.ЭтоНовый() Тогда
// Если связанный документ еще не записан в базу, то
// никакие действия не выполняются
СвязанныйДокумент.УстановитьПометкуУдаления(Истина);
КонецЕсли;
Иначе // Выполняется запись документа без проведения или установки
// пометки удаления
Если СвязанныйДокумент.ЭтоНовый() Тогда
// Если связанный документ не записан в базу, то заполняем его и
// выполняем запись документа без проведения
ОбновитьРасходныйОрдер(СвязанныйДокумент, Источник);
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Запись);
ИначеЕсли СвязанныйДокумент.Проведен Тогда
// Если связанный документ был проведен, то выполняем отмену проведения
СвязанныйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе
// В остальных случаях просто записываем зависимый документ
// Если была установлена пометка удаления - снимаем ее
СвязанныйДокумент.УстановитьПометкуУдаления(Ложь);
КонецЕсли;
КонецЕсли
Иначе
// При смене вида операции "ТоварыПродукцияПоОрдерам" помечаем на удаление
// зависимый документ расходного ордера
Если Выборка.Следующий() Тогда
СвязанныйДокумент = Выборка.Ссылка.ПолучитьОбъект();
СвязанныйДокумент.ПометкаУдаления = Ложь;
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Сама процедура заполнения зависимого расходного ордера очень проста:
Процедура ОбновитьРасходныйОрдер(ДокументРасхода, Источник)
// Заполняем одноименные реквизиты расходной накладной
// из документа перемещения
ЗаполнитьЗначенияСвойств(ДокументРасхода, Источник, , "Номер");
// Дату расходного ордера увеличиваем на 1 секунду
// от даты документа перемещения
ДокументРасхода.Дата = Источник.Дата + 1;
ДокументРасхода.ВидОперации = Перечисления.ВидыОперацийРасходныйОрдер.Перемещение;
ДокументРасхода.ДокументПередачи = Источник.Ссылка;
// Заполняем таб. часть "Товары" из документа перемещения
ДокументРасхода.Товары.Очистить();
Для Каждого Стр Из Источник.Товары Цикл
СтрокаТовары = ДокументРасхода.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТовары,Стр);
КонецЦикла;
КонецПроцедуры
Представленное решение не является универсальным и служит лишь небольшим примером. Такие ситуации, когда существует несколько зависимых документов, не обрабатываются.
На скриншоте выше результат проделанной работы.
В типовых конфигурациях
Подобные решения встречаются не только в доработанных конфигурациях, но и в типовых решения как от фирмы «1С», так и в отраслевых конфигурациях от ее партнеров.
Возьмем самую популярную из них — «Бухгалтерия предприятия 3.0» (КОРП или нет — не важно). Практическим всем знаком документ «Реализация товаров и услуг» и документ на ее основании — «Счет-фактура выданный». Так вот, при проведении реализации товаров происходит актуализация данных в счет-фактуре.
Как это происходит? В обработчике реализации «ОбработкаПроведения» в сааамом конце процедуры есть такая строчка.
УчетНДСПереопределяемый.УстановитьСостояниеСчетаФактуры(ПараметрыДействия, Отказ, НЕ УстановленСтатусДокумента);
Мы не будем рассматривать что, куда и зачем передается, лишь общий принцип. В этой процедуре выполняются общие действия для счет-фактур при проведении или отмене проведения.
// Выполняет общие для всех документов действия связанные с проведением или отменой проведения счета-фактуры.
// При отсутствии явного указания счета-фактуры выполняется её поиск по документу-основанию.
//
// Параметры:
// ПараметрыДействия - Структура - см. НовыеПараметрыСостоянияСчетаФактуры().
// ОбновлятьСтатусСчетаФактурыПоДокументу - признак того, что по документу-основанию не установлен статус счета-фактуры,
// следовательно статус счета-фактуры должен установить сам счет-фактура.
// Отказ - Булево - в случае ошибки получает значение Истина при выполнении процедуры.
//
Процедура УстановитьСостояниеСчетаФактуры(ПараметрыДействия, Отказ = Ложь, ОбновлятьСтатусСчетаФактурыПоДокументу = Истина) Экспорт
// ...
В зависимости от типа изменения (изменена пометка удаления или флаг «Проведен») алгоритм актуализирует данные документа и записывает ее с соответствующим режимом записи (проведение, запись или отмена проведения).
Конечно, даже по сравнению с примером выше из УПП 1.3, это выглядит не так «страшно» и особо не должно влиять на качество работы информационной системы, но не всегда. Все-таки счет-фактура формирует движения, имеет различную логику при проведении или отмене проведения. Все это может занимать некоторое время, что увеличит длину транзакции основного документа реализации при проведении. Хорошо это или плохо — зависит от конкретной ситуации.
Это норма?
Вообще, с подобными решениями сталкивался довольно часто. Самая простая ситуация — нужно избавить пользователей от ручного ввода зависимых документов (расходных ордеров, счет-фактур, документов поступления или реализации и т.д.). Да, это может ломать логику типовых конфигураций, создавать проблемы производительности и сопровождения. Но все это неважно!
Почему это может привести к проблемам с производительностью и можно ли этого избежать
Почему? Да потому что это приносит почти мгновенный эффект! «Запилил» днем, обновил вечером, а завтра все уже радуются, что у них больше времени на кофе и совещания :).
Обратная сторона — это увеличение технического долга, снижение пропускной способности системы в многопользовательской среде, усложнение разработки и тестирования. Но если бизнесу это не важно, то зачем «платить больше»?
Заключение
Выше продемонстрирован пример создания обработчика по синхронизации изменений основного и связанного документов. Пример можно использовать в большинстве задач, однако в сложных ситуациях такой подход вообще может быть не применим. Например, если критична производительность в многопользовательской среде, лучшим вариантом может стать доработка алгоритмов проведения документа по регистрам, чем создание таким способом зависимых документов.
Плюс ко всему, это может усложнить доработку решения, ведь никогда не знаешь, что таится за алгоритмом записи / проведения в подписках. Одно изменение по задаче — 2 часа сломанной конфигурации и простой бизнеса.
Имеет ли такой подход при разработке? Имеет, т.к. он может быть куда эффективней, чем «перепиливание» внутренностей процедур проведения или каких-либо регламентных алгоритмов в общих модулях.
1с БП3 Связанные документы
☑
0
semiluki
✎
Результат запроса пустой.
И даже если вообще не задавать параметры к виртуальной таблице все равно пустой. С чем это может быть связано?
<span name="1" onclick="click_N
«> 1
Волшебник
✎
Наверное, у &Документ нет связанных документов, зарегистрированных в этом критерии отбора.
<span name="2" onclick="click_N
«> 2
semiluki
✎
Есть. И даже если запустить запрос вообще без параметров, то результат запроса пустой. И интерактивно показывает связанные документы. Б П типовая на поддержке.
<span name="3" onclick="click_N
«> 3
Волшебник
✎
значит неверно указываете параметр
<span name="4" onclick="click_N«> 4
dmt
✎
(0) Опиши, что с чем связано, и какой параметр указываешь. Возможно, родительский документ пытаешься найти
<span name="5" onclick="click_N
«> 5
semiluki
✎
По документу «Поступление на расчетный счет» пытаюсь найти связанный документ «Счет на оплату покупателю». Интерактивно через структуру подчиненности все нахожу. Программно никак. Конфигурация БП 3.0 Типовая на поддержке
<span name="6" onclick="click_N
«> 6
Волшебник
✎
покажите передачу параметра
<span name="7" onclick="click_N
«> 7
semiluki
✎
Запрос. УстановитьПараметр(«Документ», Док) Где Док — ссылка на документ «Поступление на расчетный счет»
<span name="8" onclick="click_N
«> 8
dmt
✎
ну т.е. ты ищещь родительский документ
попробуй в параметр передать Счет, что будет
Поиск по критерию отбора — это поиск по всем реквизитам документов, указанным в Составе критерия, для которых значение реквизита равно заданному параметру.
<span name="9" onclick="click_N
«> 9
Волшебник
✎
Это ещё надо доказать. Покажите присвоение Док
<span name="10" onclick="click_N
«> 10
semiluki
✎
Да я ищу родительские документы к документу «Поступление на расчетный счет», если указываю счет то выводит все подчиненные объекты, мне надо наоборот по подчиненному получить родительские.
<span name="11" onclick="click_N
«> 11
Мультук
✎
Читать текст
процедура ВывестиРодительскиеОбъекты(ОсновнойОбъект, ДеревоРодительскиеОбъекты, ВыведенныеОбъекты);
<span name="12" onclick="click_N
«> 12
dmt
✎
хорошо что тут телепаты собрались
выбрать ДокументОснование из Документ. ПоступлениеНаРасчетныйСчет где Ссылка = &Ссылка
<span name="13" onclick="click_N«> 13
semiluki
✎
Нет, в том то и дело что документ основание не заполнено в Документ. ПоступлениеНаРасчетныйСчет а в структуре подчинености есть родительский документ «Счет на оплату» Помогло это ОбщаяФорма. СвязанныеДокументы «ВывестиРодительскиеОбъекты(ОсновнойОбъект, ДеревоРодительскиеОбъекты, ВыведенныеОбъекты);»
14
shuhard
✎
низяяя, 150000 раз обсуждалось
Есть два варианта установки связей между документами.
Вариант 1. Создание документов на основании других документов.
На командной панели карточки каждого документа есть команда «Создать на основании». С ее помощью можно создавать другие внутренние, входящие и исходящие документы на основании уже существующих, автоматически устанавливая связь между ними.
При записи такого документа, созданного на основании внутреннего, программа предложит установить между ними связь.
Исходящий документ удобно создавать как ответ на входящий документ. Это можно сделать при помощи меню «Создать на основании» в карточке входящего документа. При этом поля нового исходящего документа автоматически заполнятся данными из входящего документа. Между документами будет автоматически установлена связь, которая отобразится на закладке «Связи» карточек этих документов.
Вариант 2. Установка связи вручную.
После выбора документа следует нажать кнопку «Далее» либо дважды щелкнуть по выбранной строке. Помощник создания связи перейдет на следующий шаг – выбор типа связи.
В окне выбора типа связи расположены следующие поля:
■ Что связать – предмет, из которого создается новая связь;
■ С чем связать – предмет, который выбран для создания связи;
■ Тип связи – список возможных типов связи между выбранными предметами;
Созданная связь будет показана на закладке «Связи» карточки документа.
На закладке «Связи» видны не только связанные документы, но и их файлы. То есть, не открывая карточку связанного документа, можно ознакомиться с его файлами, сохранить их на диск или напечатать.