Создание статусов в 1с
Всем привет. Скажу сразу, я совсем новенький, так что сразу извиняюсь, если где-то сильно тупить буду. Прошу у вас помощи вот с таким заданием: есть пустая база,с одним документом, создано в целях тренировки, мне необходимо создать механизм проверки документов с тремя статусами, "Проверен", "Не проверен" и "На повторной проверке", которые берутся из перечисления.
Так же создан регистр сведений, в котором есть Измерение с ссылкой на документ, ресурсом "Статус", тип у которого ссылка на перечисление и реквизитами "Проверен"( ссылка на справочник Пользователи), Дата Проверки ( Тип "Дата"), Изменил( справочник.Пользователи) и Дата Изменения( Дата). Суть в том, что пользователь проверяет документ, нажимает на кнопку проверки и должна идти запись в регистр с правильным статусом, т.е. от проведения документа не зависит.
Только созданный документ попадает в регистр со статусом "Не проверен", при нажатии на кнопку должен быть статус "Проверен", а после ее снятия статус "К повторной проверке"
У меня было сделано так, что было 2 статуса проверки "Проверен" и "Не проверен", записи шли, но после проведения документа. Сейчас же появилось третье значение измерения "К повторной проверке"( После снятия кнопки, ставится этот статус) и задача записывать этот статус сразу после нажатия на кнопку, а не после проведения документа. Буду очень признателен, если кто поможет!
Код скидываю ниже:
Процедура ОбработкаПроведения(Документ, СтатусПроверки, ЭтоИзменениеДокумента = Истина) Экспорт
НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗа писей(); // запись документов в регистр сведений
НаборЗаписей.Отбор.Документ.Установить(Документ);
//НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Запись = НаборЗаписей.Добавить();
Иначе //запись уже существует
Запись = НаборЗаписей[0];
КонецЕсли;
Запись.Документ = Документ;
Запись.СтатусПроверки = СтатусПроверки;
ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнф ормационнойБазы.ТекущийПользователь().Имя);
Запись.Проверил = ТекущийПользователь;
Запись.ДатаПроверки = ТекущаяДатаСеанса();
//ЭтоИзменениеДокумента =
//Если ЭтоИзменениеДокумента Тогда
Запись.Изменил = ТекущийПользователь;
Запись.ДатаИзменения = ТекущаяДатаСеанса();
//КонецЕсли;
&НаКлиенте
Процедура ИзменениеСтатусаПроверкиДокумента(Команда)
Если ЭтаФорма.СтатусДокумента = Истина Тогда //обработчик событий кнопки
ЭтаФорма.СтатусДокумента = Ложь ;
ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь Тогда
ЭтаФорма.СтатусДокумента = Истина ;
КонецЕсли;
ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = ЭтаФорма.СтатусДокумента; //Показываем состояние кнопки на декорации форм
Если ЭтаФорма.СтатусДокумента = Истина Тогда
ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь Тогда
ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
КонецЕсли;
//Делаем кнопку нажатой и не нажатой
Элементы.ИзменениеСтатусаПроверкиДокумента.Пометка = НЕ Элементы.ИзменениеСтатусаПроверкиДокумента.Пометка
КонецПроцедуры
&НаСервере
Функция ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЛП_СтатусыПроверкиДокументов.СтатусПроверки КАК СтатусПроверки
|ИЗ
| РегистрСведений.ЛП_СтатусыПроверкиДокументов КАК ЛП_СтатусыПроверкиДокументов
|ГДЕ
| ЛП_СтатусыПроверкиДокументов.Документ = &Документ";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Ложь;
КонецЕсли;
Если ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен Тогда
Возврат Ложь;
Иначе
Возврат Истина;
Не надо запись в регистр привязывать к проведению документа. Для чего хранишь в регистре историю изменения статусов?
Так по заданию надо. Регистр независимый, не подчиненный регистратору. Я, если честно, мало чего понимаю, только учусь
Обработчик кнопки на модуле формы:
&НаКлиенте
Процедура ИзменениеСтатусаПроверкиДокумента(Команда)
Так более понятно должно быть, надеюсь. Повторюсь, что все работало до того, как появился третий статус "К повторной проверке" и необходимость записи статуса в регистр еще до проведения документа. Сейчас при нажатии кнопки запись не идет, а после проведения документа в регистре отображается только статус "Не проверен". Извините, если криво объясняю, просто плохо разбираюсь еще.
Исправил, спасибо. Но все равно после проведения документа запись в регистр идет с пустым статусом, т.е. ничего в статусе документа не отображается. После нажатия на кнопку так же ничего не меняется и лишь после 3 нажатия появляется статус "Не проверен"
Так и не смог разобраться. Код изменил, но все равно запись в регистр неправильно идет. Отображается только статус "Не проверен", а вместо "К повторной проверке" или "Проверен" пустая строка.
Скину код, может кто поймет, в чем дело. Сначала модуль формы:
&НаКлиенте
СтатусДокумента и ЭтаФорма.СтатусДокумента - это одна и таже переменная. Что-то у вас тут в эту переменную пишется Истина и тут же пишете туда перечисление. В общем все полностью перепутано, лучше это всё выбросить и написать по-новой со свежей головой.
(0) Сначала ответь на вопрос
1. Задачу нужно решить как угодно или как правильно?(если как угодно то можно и через реквизит на форме документа, если как надо то через объект конфигурации Бизнес -процессы).
2. Изменять статус документа может кто угодно? или есть ответсвенные роли\лица?
(9) Кстати точно, не замечал этого, спасибо. Сейчас попробую разобраться.
(10) 1. Задачу нужно решить именно через регистр сведений, так в задании написано.
2. Есть ответственные лица, которые могут менять статус документа, для этого создана роль, но работает пока не совсем так, как надо. Но отображаться кнопка должна у всех. Те пользователи, у которых есть доступ, должны видеть ее как галку, нажатую или не нажатую. Те, у кого доступа нет, должны видеть картинку открытого замка( если документ не проверен) и как закрытый замок с подсказкой "Документ проверен, изменение невозможно", затем ФИО проверяющего и дату проверки( берется из этого же регистра сведений)
(12) В связке с обучением. Т.е. я сейчас только обучаюсь, делаю все в пустой базе,тренируюсь, а как сделаю, то этот же механизм реализовать в реальной базе.
(13) а тот кто обучает, разве не давал инфу как это делать, возможно на части было разбиты аспекты. Наверное есть и учебное пособие и видео уроки скорее всего. Просто если тут уже затык, то дальше будет еще хуже. Такие задания лучше пытаться самому решать, если не получается, обратиться к своему наставнику, еще раз почитать литературу, разбить задачу на подзадачи.
(14) У меня составлено задание, там разбито все на части, но в таком виде что "На формах сделать кнопку в виде галочки, создать перечисление с такими-то значениями, разработать регистр сведений с такой то структурой, создать роль и назначить пользователям, при создании документа проверять наличие данного документа в регистре и если он отсутствует, то записывать данные по документу со статусом Не проверен" и т.д. Читаю книгу "Практическое пособие разработчика", смотрю различные видео но все равно застрял. Пытаюсь сам решить, но я полностью застрял, сижу почти неделю с этим уже. Наставнику постоянно некогда, так что я сам по себе практически, помощи почти не бывает
Кстати, СтатусДокумента - реквизит на форме документа с типом Булево, в нем храним значение статуса, поэтому Истина или Ложь.
(16) " при нажатии на кнопку должен быть статус "Проверен", а после ее снятия статус "К повторной проверке" " Я правильно понимаю, нажимая на одну и ту же кнопку будет статус меняться между Проверен и К повторной проверке?
(17) делаете кнопочку у документа, в нее пихаете кусок кода, который проверяет текущий статус, если он проверен то к К повторной проверке и наоборот.
Далее что то типа:
МенеджерЗаписиСтатусаДокумента=РегистрыСведений.ТвойРегистр.СоздатьМенеджерЗаписи();
(18) на форме документа можешь вывести реквизит с текущим статусом, его можешь получать ПриСозданииНаСервере и перезаполнять при нажатии на кнопку смены статуса.
(17) Да, все правильно. Еще суть в том, что перезаписывать документ не надо, необходимо сделать так, чтобы при каждом нажатии на кнопке сразу менялся статус документа, без перепроведения.
(20) а тут и нет привязки к проведению. У тебя есть регистр сведений где хранится история по статусам. Ты можешь вывести в Реквизит формы (не путать с реквизитом документа) последний статус, а по кнопке его обновлять и делать новую запись в регистр
(21) проверять есть такая запись, как ты делаешь через набор нет смысла, у тебя каждый раз будет новая строчка создаваться, так как есть реквизит с датой.
(17) Спасибо, сейчас попробую.
(20) (21) Можно чуть подробнее? Совсем поплыл уже что-то, запутался окончательно
(23) что именно по подробнее? Чем отличается реквизит формы от реквизита документа? Как запросом получить последний статус?
(25) а теперь своими словами расскажи что твой запрос делает и какую именно запись со статусом ты получаешь при "ВыборкаДетальныеЗаписи.Следующий();". У тебя может быть 20 строк со статусами с разным временем изменения, так какую именно строчку ты получишь?
Ой, стоп. Он же просто анализирует состоянии кнопки при статусе "проверен" и при статусе "Не проверен", если я правильно понял. А какую запись получаю при "ВыборкаДетальныеЗаписи.Следующий();"уже всё, не понял. У меня каша в голове совсем стала с этими статусами уже просто. Все работало при двух статусах "Проверен" и "Не проверен" и без условия, чтобы статус обновлялся после нажатия кнопки. Но как это все добавилось, то всё, я поплыл совсем
(27) ну вот, погуляй немного, смени обстановку, и если повезет, может к вечеру светлая мысль придет. А по поводу последнего статуса, то в запросе есть возможность сортировки записей. Вместо всяких там бантиков в виде декораций, можно просто заголовок кнопки менять.
Подсистема позволяет включать для разных видов документов возможность установки, снятия и фильтрации документов по произвольным статусам, не меняя, перезаписывая и не перепроводя сам документ, которому мы меняем статус. Что исключает необходимость перепроводки и изменения документов задним числом из-за изменения их статусов. С возможностью просмотра и хранения истории статусов документа.
Например, когда нужно отслеживать прохождение каких-либо «состояний» документа в бизнес-процессе.
Или, как один из вариантов, когда нужно отслеживать, какие документы уже разослали их распечатанные бумажные копии на подпись и простановку мокрой печати второй стороне, какие из них уже вернули подписанными и с печатью, а какие еще нет и т.п.
Подсистема рассчитана на установку и работу в любой конфигурации, с минимальными изменениями самой конфигурации. Используются внешние компоненты: 1С++, FormEx.
Подробное описание настройки, использования и установки читайте в pdf-файле в архиве с демо-конфигурацией.
Установка и использование подсистемы подробно описаны в pdf-файле в архиве с демо конфигурацией и могут быть сделаны и "продвинутым" пользователем слегка знакомым с конфигуратором, но для разработчиков и программистов, как всегда возможностей больше;-)
Поэтому пусть Вас не пугают эти примечания, можете не обращать на них внимания, установить и использовать подсистему практически также легко, как установить модуль или шаблон в CMS Joomla, например;-)
Файл с документацией выкладываю как отдельно, также он включен и в архив с демо-конфигурацией.
Примечания для разработчиков и программистов:
Вкладка "Статусы" документа для вида которого включены статусы генерируется программно, см. скриншоты.
Реализация подсистемы такова, что документы, которым устанавливаются и изменяют статусы не надо перепроводить и пересохранять при изменении, установке или снятии статусов. Что исключает необходимость перепроводки и изменения документов задним числом из-за изменения их статусов. Т.к. текущий статус и история статусов документа хранятся в служебных подчиненных документах.
Также подсистема рассчитана и на использования в распределенных базах, т.е. учитывает коллизии, которые могут возникнуть при работе со статусами одного и того же документа в разных узлах базы. Это важно, так как текущий статус и история статусов документа хранится в служебных подчиненных документах, как говорилось выше.
Т.е. когда в одном и в другом узле между обменами одному и тому же документу устанавливаются статусы первый раз, т.е. в обоих узлах будут создаваться подчиненные документы статусов для одного и того же документа и при обмене, такой документ станет иметь два подчиненных документа статусов, соответственно, например, текущим будет считаться статус из самого позднего служебного подчиненного документа статусов, а история будет объединена из табличных частей всех служебных подчиненных документов статусов, а вводиться новые данные о текущем статусе и истории будут в последний по дате и времени документ, а при пометке к удалению или снятии ее, она будет ставиться или сниматься со всех подчиненных служебных документов статусов. Причем время и дата служебного документа "отодвигается" в момент установки или снятия статуса подсистемой, что позволяет всегда разрешать подобные коллизии правильно. И так как служебные документы статусов не могут быть проведены и не проводятся, то это также не приводит к изменению последовательностей документов. И нумерация служебных документов подсистемой также идет с учетом префикса номера узла распределенной базы.
В подсистеме в классе 1С++ «статусов документов» реализовано в качестве внешнего интерфейса различные функции программной установки статуса документа, снятия, просмотра и печати истории, определения текущего статуса и т.п. Что позволяет тем, кто устанавливает подсистему в конфигурацию и знаком с программированием внедрить прямо на формы журналов документов возможность просмотра статуса текущего документа, установку или снятие статуса, без открытия формы самого документа, печати его истории статусов и т.п. прямо из формы журнала. Примеры есть в демо-конфигурации, в общем журнале документов. Точно также, с помощью этого интерфейса можно организовать добавления действий установки/снятия статуса в групповые обработки документов и т.п.
Подсистему «Статусы документов» можно установить и использовать в одной конфигурации совместно с другими моими подсистемами, например, с этими:
Как их установить совместно также описано в pdf-файле к этой подсистеме в разделе "Примечание к установке".
На странице Статусы (Контент > Документооборот > Статусы) представлены возможные статусы документов, а также элементов информационных блоков.
Форма поиска
Форма фильтра используется для выбора из списка статусов в соответствии с указанными условиями. Нижеследующая таблица описывает параметры, по которым может выполняться поиск.
Поле | Описание |
---|---|
Найти | Позволяет найти записи по их основным параметрам: Описание, ID или Заголовок. Поле присутствует, даже если фильтр свернут. |
ID* | Поиск статуса по идентификатору. |
Активен | Поиск статуса по признаку активности. |
Заголовок* | Поиск статуса по заголовоку. |
Описание* | Поиск статуса по предполагаемому тексту описания статуса. |
Документов | Поиск статуса по количеству документов, находящихся в указанном статусе. Количество документов может быть указано как в виде диапазона, так и одним числом. |
Логика между полями | Установление логики между полями формы поиска. |
* - для данных полей вы можете воспользоваться специальными логическими выражениями.
Чтобы отобрать статусы документов по заданным критериям поиска, нажмите кнопку Найти. Для отображения всех статусов нажмите кнопку Отменить.
Контекстная панель
Кнопка | Описание |
---|---|
Добавить | Переход к форме создания нового статуса. |
Настроить | Переход к диалогу настройки внешнего вида отчетной формы. |
Excel | Экспорт данных из отображаемой таблицы в MS Excel. |
Список статусов
Пример использования статусов
У вас есть группа авторов, которые пишут статьи на сайте. Также у вас есть главный редактор, проверяющий эти статьи и публикующий их на сайте. Для организации документооборота по данной схеме вам необходимо завести 2 дополнительных статуса:
- Draft (черновик);
- Ready (готов к публикации).
Курс предназначен пользователям, администрирующим сайты на платформе "1С-Битрикс: Управление сайтом". Курс Администратор. Модули позволяет освоить методы выполнения расширенных задач по администрированию модулей не относящихся к коммерческой деятельности Для модулей, связанных с торговлей в Интернете создан отдельный курс Администратор. Бизнес. .
Начальные требования
Необходимый минимум знаний для изучения курса:
- базовые навыки компьютерной грамотности и навыков работы с ОС Windows;
- базовые знания о WWW и организации доступа к веб-серверу;
- базовые навыки установки и администрирования *nix-систем;
- знание системы в рамках курса Контент-менеджер Мы считаем, что вы этот курс уже прошли и знаете многое о Битриксе. Поэтому подсказок во всплывающих окнах будет намного меньше, чем в курсе Контент-менеджер.
Подробнее. , чтобы банально не путаться в интерфейсе. - знание системы в рамках курса Администратор. Базовый Мы считаем, что вы этот курс уже прошли и знаете многое об администрировании "1С-Битрикса". Поэтому подсказок во всплывающих окнах будет намного меньше, как и объяснений о том где и как выполнять общие задачи администрирования.
У нас часто спрашивают, сколько нужно заплатить
Курс полностью бесплатен. Изучение курса, прохождение итоговых тестов и получение сертификатов - ничего из этого оплачивать не нужно.
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
В конце каждого урока есть кнопка Прочитано! . При клике на неё в Вашу итоговую таблицу опыта добавляется то количество баллов, которое указано в прочитанном После нажатия кнопки Прочитано! появится
окно подтверждения:
уроке.
Периодически мы заново оцениваем сложность уроков, увеличивая/уменьшая число баллов, поэтому итоговое количество набранных Вами баллов может отличаться от максимально возможного. Не переживайте! Отличный результат - это если общее число набранных Вами баллов отличается от максимального на 1-2%.
Тесты и сертификат
После изучения курса вам будет предложено пройти итоговые тесты на сертификацию.
Для доступа к итоговым тестам данного курса необходимо успешно сдать итоговые тесты курса Администратор. Базовый.
Всего в данном курсе 4 итоговых теста, и вопросы в них сгруппированы по области применения модулей: средства управления и анализа, средства обучения и помощи, модули информирования и общения, служебные модули.
При успешной сдаче последовательности тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.
Комментарии к урокам
Для преподавания офлайн
Если данный курс берётся в качестве основы для офлайнового преподавания, то рекомендуемая продолжительность: 4 дня (32 академических часа).
Если нет интернета
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
iOS
Marvin for iOS
ShortBook
обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса. Версия файла - от 05.04.2022.
Как проходить учебный курс?
Шаг 1: Вы пробуете найти ответ с помощью быстрого поиска по базе знаний. Если ответ не найден, переходим на Шаг 2. Шаг 2: Для того что бы задать вопрос и получить ответ от нашего специалиста, нам необходима краткая информация о вас. Вы формируете вопрос, заполняете анкету и переходите на Шаг 3. Шаг 3: Если вы еще не наш клиент, Вам предоставляется выбор тарифа. Первый вопрос вы можете задать бесплатно. Важно! Мы работаем только с пользователями лицензионных программ 1С. Чтобы задать вопрос, вы должны знать регистрационный номер вашей программы 1С. Что это и как узнать номер, смотрите здесь.
Проверка регистрационного номера программного продукта показала, что , поэтому мы подготовили для Вас, следующие тарифы:
1C: Задача со статусами документов
Существует следующая задача:
Необходимо отслеживать некий статус документа, например, его оплату. Данный статус могут менять множество других документов.
Вопрос в том как данный механизм реализовать наиболее оптимальным способом?
При это есть определенные условия:
1. В день создается и отслеживается по статусам около 500 документов.
2. Пользователю требуется почти в реальном времени видеть изменения статусов.
Пытался реализовать 2 способами:
1. Самый универсальный: регистр сведений, с измерениями СсылкаНаОбъект, ВидСтатуса и ресурсом ЗначениеСтатуса. Но тут сразу же возникла проблема быстродействия, дело в том, что список документов необходимо регулярно формировать с отборами как по реквизитам документа, так и по значениям статуса, что оказалось весьма тяжелым для БД.
2. Чуть менее универсальный: тот же регистр сведений, только все возможные виды статусов заранее развернуты в виде ресурсов. Чуть быстрее, но проблему быстродействия не решило.
3. Самый быстрый метод: добавление реквизитов в документы для нужных статусов. Отборы работают быстро (с составными индексами, конечно). Но, само решение кривое до тошноты, ведь статус объекта и сам объект — логически разные вещи, и тот факт, что другой документ при проведении меняет реквизиты другого печален. (Как изменять реквизиты — с помощью средств 1С или прямыми запросами не принципиален).
Как поменять статус в 1с
На самом деле это не сложно. Изменить состояние отправки отчетности можно двумя способами. Причем оба будет правильными.
Способ изменения статуса отчета 1С через пользовательский интерфейс
Здесь находим запись с отчетностью, для которой необходимо изменить состояние отправки. Выбираем ее.
На этом изменение окончено.
Способ изменения статуса отчета 1С через регистр
Также поменять статус отправки отчета можно напрямую, через регистр сведений. Отмечу, что этот метод подходит более продвинутым пользователям. По сути метод ничем существенно не отличается, но нужно отметить, что пользоваться им можно только после реальной отправки отчетности.
Далее в дереве объектов находим раздел регистров сведений.
Записываем и закрываем запись регистра. Теперь, если посмотреть в списке регламентированной отчетности, статус редактируемого документа поменялся.
Еще раз напомню, что этим способом можно пользоваться только после реальной отправки отчета.
Если у Вас появились вопросы по статье или остались нерешенные проблемы обсудить их Вы можете на Форуме 1С Вопросы и ответы
Читайте также: