При записи документа не сохраняются реквизиты

   Eeelena

12 — 16.06.16 — 16:11

(9)

&НаСервере

Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

    
    СтруктураЗаписи = Новый Структура(«Партнер, Агентство, КонтактноеЛицо, Агент»);

    
    ЗаписатьИнформациюОПартнереСервер(СтруктураЗаписи);

    
    ЗаполнитьЗначенияСвойств(Объект,СтруктураЗаписи);

    
    
КонецПроцедуры

&НаСервере

Процедура ЗаписатьИнформациюОПартнереСервер(СтруктураЗаписи)

    
    //П=РеквизитФормыВЗначение(«Объект»);

    СтруктураДляЗаписиНового = Новый Структура;

    СтруктураДляЗаписиНового.Вставить(«CRM_ВидПартнера»,Перечисления.CRM_ВидПартнера.ЧастноеЛицо);

    СтруктураДляЗаписиНового.Вставить(«Клиент», Истина);    

    СтруктураДляЗаписиНового.Вставить(«CRM_Имя»,Объект.Имя);

    СтруктураДляЗаписиНового.Вставить(«CRM_ИНН»,);

    СтруктураДляЗаписиНового.Вставить(«CRM_НапоминатьОДнеРождения»,Истина);

    СтруктураДляЗаписиНового.Вставить(«CRM_Отчество», Объект.Отчество);

    СтруктураДляЗаписиНового.Вставить(«CRM_ТипОтношений», ?(Объект.УК_АгентствоНедвижимости, Справочники.CRM_ТипыОтношений.АгентствоНедвижимости, Справочники.CRM_ТипыОтношений.Покупатель));

    СтруктураДляЗаписиНового.Вставить(«CRM_Фамилия», Объект.Фамилия);

    СтруктураДляЗаписиНового.Вставить(«ДатаРегистрации»,ТекущаяДата());

    СтруктураДляЗаписиНового.Вставить(«ДатаРождения»,Объект.ДатаРождения);

    СтруктураДляЗаписиНового.Вставить(«Наименование», Объект.Фамилия+» «+Объект.Имя+» «+Объект.Отчество);

    СтруктураДляЗаписиНового.Вставить(«ОсновнойМенеджер», Объект.Ответственный);

    СтруктураДляЗаписиНового.Вставить(«Пол», Объект.Пол);

    СтруктураДляЗаписиНового.Вставить(«Возраст»,Объект.Возарст);

    
    
    Если Объект.К_АгентствоНедвижимости Тогда

        
        Если НЕ ЗначениеЗаполнено(Объект.Агентство) Тогда

            Сообщить(«Не заполнено агентство!»);

            Отказ = Истина;

            Возврат;

        КонецЕсли;

        
        ФИОКонтакта = Объект.Фамилия + » » + Объект.Имя + » » + Объект.Отчество;

        ФИОКонтакта = СокрЛП(ФИОКонтакта);

        
        ПоискКонтакта = Справочники.КонтактныеЛицаПартнеров.НайтиПоНаименованию(ФИОКонтакта,Истина,,Объект.Партнер);

        
        Если ПоискКонтакта.Пустая() Тогда

            
            НовыйКонтакт = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент();

            НовыйКонтакт.Наименование = ФИОКонтакта;

            НовыйКонтакт.CRM_Имя = Объект.Имя;

            НовыйКонтакт.CRM_Отчество = Объект.Отчество;

            НовыйКонтакт.CRM_Фамилия = Объект.Фамилия;

            НовыйКонтакт.CRM_Состояние = Перечисления.CRM_Состояние.Работает;

            НовыйКонтакт.ДатаРождения = Объект.ДатаРождения;

            НовыйКонтакт.Пол = Объект.Пол;

            НовыйКонтакт.Владелец = Объект.Партнер;

            
            НовыйТелефон = НовыйКонтакт.КонтактнаяИнформация.Добавить();

            НовыйТелефон.CRM_ОсновнойДляСвязи = Истина;

            НовыйТелефон.Вид = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонКонтактногоЛица;

            НовыйТелефон.НомерТелефона = Объект.НомерТелефона;

            НовыйТелефон.Представление = Объект.НомерТелефона;

            НовыйТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;

            
            НовыйАдрес = НовыйКонтакт.КонтактнаяИнформация.Добавить();

            НовыйАдрес.Вид = Справочники.ВидыКонтактнойИнформации.АдресПроживанияКонтактногоЛица;

            НовыйАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;

            НовыйАдрес.Город = Объект.Город;

            ПредствалениеАдреса = Объект.Город+», «+Объект.Улица+», «+Объект.Дом+», «+Объект.Корпус+», «+Объект.Квартира;            

            НовыйАдрес.Представление = ПредствалениеАдреса;

            
            НовыйКонтакт.Записать();

            
            СтруктураЗаписи.Агент = НовыйКонтакт.Ссылка;

                            
            
        ИначеЕсли ЗначениеЗаполнено(ПоискКонтакта) Тогда

                        
            СтруктураЗаписи.Агент = ПоискКонтакта.Ссылка;

            
        КонецЕсли;

        
    Иначе//Прямой клиент    

    
        Если ЗначениеЗаполнено(Объект.Партнер) Тогда

            
            ОбъектПартнер = Объект.Партнер.ПолучитьОбъект();

            //18.05.2016 КЕС

            Для Каждого КлючИЗначение Из СтруктураДляЗаписиНового Цикл

                Сообщить(КлючИЗначение);

                Сообщить(ОбъектПартнер.CRM_Имя<>»»);

                Если КлючИЗначение=»CRM_Имя» И  ОбъектПартнер.CRM_Имя<>»» Тогда

                    
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»CRM_ИНН» И ОбъектПартнер.CRM_ИНН<>»» Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»CRM_Отчество» И  ОбъектПартнер.CRM_Отчество<>»» Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»CRM_Фамилия» И ОбъектПартнер.CRM_Фамилия<>»» Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»ДатаРегистрации» И  ОбъектПартнер.ДатаРегистрации<>Дата(1,1,1) Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»ДатаРождения» И  ОбъектПартнер.ДатаРождения<>Дата(1,1,1) Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»Наименование» И  ОбъектПартнер.Наименование<>»» Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»ОсновнойМенеджер» И ОбъектПартнер.ОсновнойМенеджер<>Справочники.Пользователи.ПустаяСсылка() Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»Пол» И  ОбъектПартнер.Пол<>Перечисления.ПолФизическогоЛица.ПустаяСсылка() Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                ИначеЕсли КлючИЗначение=»Возраст» И  ОбъектПартнер.Возраст<>»» Тогда

                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);

                КонецЕсли;    

            КонецЦикла;

            ЗаполнитьЗначенияСвойств(ОбъектПартнер, СтруктураДляЗаписиНового);

            ОбъектПартнер.Записать();

            
            //поищем по номеру телефона

            НайденКонтакт = Oktell_Сервер.НайтиКонтактноеЛицоАбонента(Объект.Партнер, Объект.НомерТелефона);

            Если НайденКонтакт.Пустая() Тогда

                
                Контакт = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент();

                ЗаполнитьЗначенияСвойств(Контакт,СтруктураДляЗаписиНового);

                Контакт.Владелец = Объект.Партнер.Ссылка;

                НовыйТелефон = Контакт.КонтактнаяИнформация.Добавить();

                НовыйТелефон.Вид = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонКонтактногоЛица;

                НовыйТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;

                НовыйТелефон.НомерТелефона = Объект.НомерТелефона;

                НовыйТелефон.Представление = Объект.НомерТелефона;

                
                НовыйАдрес = Контакт.КонтактнаяИнформация.Добавить();

                НовыйАдрес.Вид = Справочники.ВидыКонтактнойИнформации.АдресПроживанияКонтактногоЛица;

                НовыйАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;

                НовыйАдрес.Город = Объект.Город;

                ПредствалениеАдреса = Объект.Город+», «+Объект.Улица+», «+Объект.Дом+», «+Объект.Корпус+», «+Объект.Квартира;            

                НовыйАдрес.Представление = ПредствалениеАдреса;

                
                Контакт.Записать();

                                
                СтруктураЗаписи.КонтактноеЛицо = Контакт.Ссылка;

                
            Иначе

                
                Контакт = НайденКонтакт.ПолучитьОбъект();

                ЗаполнитьЗначенияСвойств(Контакт,СтруктураДляЗаписиНового);

                СтруктураЗаписи.КонтактноеЛицо = Контакт.Ссылка;

                
            КонецЕсли;

        Иначе

                            
            НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();

            ЗаполнитьЗначенияСвойств(НовыйПартнер,СтруктураДляЗаписиНового);

            НовыйПартнер.Записать();

            
            Контакт = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент();

            ЗаполнитьЗначенияСвойств(Контакт,СтруктураДляЗаписиНового);

            Контакт.Владелец = НовыйПартнер.Ссылка;

            
            НовыйТелефон = Контакт.КонтактнаяИнформация.Добавить();

            НовыйТелефон.Вид = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонКонтактногоЛица;

            НовыйТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;

            НовыйТелефон.НомерТелефона = Объект.НомерТелефона;

            НовыйТелефон.Представление = Объект.НомерТелефона;

            
            НовыйАдрес = Контакт.КонтактнаяИнформация.Добавить();

            НовыйАдрес.Вид = Справочники.ВидыКонтактнойИнформации.АдресПроживанияКонтактногоЛица;

            НовыйАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;

            НовыйАдрес.Город = Объект.Город;

            ПредствалениеАдреса = Объект.Город+», «+Объект.Улица+», «+Объект.Дом+», «+Объект.Корпус+», «+Объект.Квартира;            

            НовыйАдрес.Представление = ПредствалениеАдреса;

            
            Контакт.Записать();

            
            СтруктураЗаписи.Партнер         = НовыйПартнер.Ссылка;

            СтруктураЗаписи.КонтактноеЛицо     = Контакт.Ссылка;

                
        КонецЕсли;

    КонецЕсли;

Обновлено: 22.03.2023

Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа.
Именно такое сложное чувство непонимания было поначалу и у меня. В процессе обучения и реального опыта была создана эта шпаргалка, целью которой было «разложить всё по полочкам», чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи объектов.

Для чего нам вообще нужны эти обработчики?
Очень часто программисту требуется переопределить стандартное поведение системы во время записи объектов, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п. Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий программисту, работающему на платформе 1С 8.2, необходимо.

В модуле формы или в модуле объекта?
Сначала надо определиться нужны ли нам данные формы? Будет ли запись записываться программным способом или только интерактивно? Будем ли вести диалог с пользователем?
Дело в том, что часть событий выполняется на уровне модуля формы и это значит, что они выполняются только при интерактивной записи, а также в этих событиях мы можем обращаться к данным формы, вести диалог с пользователем.
Другая часть событий выполняется на уровне модуля объекта, как при интерактивной, так и при программной записи.
Потому можно сразу определиться с обработчиком модуля формы или модуля объекта будем работать.

Модуль формы: на клиенте или на сервере?
Далее, если выбран модуль формы, то надо определиться какой обработчик потребуется: исполняемый на клиенте, или исполняемый на сервере. Если потребуется диалог с пользователем, то на клиенте, в противном случае на сервере. Их можно отличить по имени директивы компиляции или по имени обработчика (когда на сервере, это пишется в имени, например ПередЗаписьюНаСервере()).

Как выбрать конкретный обработчик?
Выбор зависит от поставленной задачи. Что конкретно можно делать в каждом обработчике опишу ниже, а пока пример.

title

Пример выбора обработчиков событий записи объекта:
Бывают задачи, когда потребуется использовать несколько обработчиков для решения одной задачи. Например, надо запросить информацию у пользователя во время записи: «Будем создавать новый документ на основании этой записи?» и, если пользователь ответит утвердительно, то надо создать новый документ с ссылкой на записываемый объект. Причем запись нового документа надо выполнять в транзакции, т.к. если текущая запись по каким то причинам будет отменена, то и уже созданный и записанный документ не должен остаться в базе данных.
Для решения этой задачи потребуется использовать обработчики события модуля формы по двум причинам:
1) Диалог с пользователем возможен только на клиенте, а клиентеские обработчики есть только в модуле формы. Для диалога будем использовать клиентскую процедуру модуля формы ПередЗаписью(), и сохраним ответ пользователя в параметре этой процедуры «ПараметрыЗаписи».
2) А в процедуре ПриЗаписиНаСервере() модуля формы примем этот параметр и в зависимости от него будем создавать документ или нет. Почему именно эта процедура? Ссылка будет получена только после записи, но поскольку нам нужно записывать в транзакции, то нужно использовать процедуры ДО завершения транзакции, но уже имеющие ссылку на записываемый объект. ПередЗаписью() не подходит , так как ещё нет ссылки, а ПослеЗаписи() не подходит, так как транзакция уже завершена. Остаётся ПриЗаписи(), но перед нами встаёт выбор: модуля формы или модуля объекта? Поскольку обработчик события ПриЗаписи() модуля объекта не содержит параметр, содержащий ответ пользователя, а событие ПриЗаписиНаСервере() модуля формы содержит, то ответ очевиден-используем это событие ПриЗаписиНаСервере() модуля формы потому что:
1) Это событие выполняется в транзакции 2) Содержит параметр «ПараметрыЗаписи», в котором уже содержится ответ пользователя, который передался из процедуры ПередЗаписью() 3) Ссылка уже создана и можно создавать новый документ, используя эту ссылку.

Ну и теперь последовательность запуска событий (в том порядке, в каком они перечислены) и небольшие подробности :
Во многих обработчиках есть параметр «Отказ». Там, где этот параметр присутствует означает, что в этом обработчике ещё можно отказаться от записи, присвоив параметру «Отказ» значение Истина, и тогда запись произведена не будет.
1) Модуль формы ПередЗаписью(Отказ, ПараметрыЗаписи)
Выполняется на клиенте!
Этот обработчик следует использовать, если необходимо организовать диалог с пользователем перед тем, как записать объект. Запросить дополнительную информацию, предупредить о чём-либо, дать возможность отказаться и т.п.
Второй параметр этого обработчика «ПараметрыЗаписи» имеет тип «Структура». У документов эти параметры заполняются системой предопределенными параметрами РежимЗаписи, РежимПроведения. Можно добавить свои.
Эти параметры передаются между событиями формы ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, где их можно благополучно использовать. Например, при записи регистра сведений, надо сделать запись в другой регистр сведений старое значение ресурса. Можно передать старое значение в эти самые параметры и уже в ПриЗаписиНаСервере сделать запись в другой регистр.
2) Модуль формы ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
3) Модуль объекта ОбработкаПроверкиЗаполнения (Отказ, ПроверяемыеРеквизиты)
Эти два обработчика проверки заполнения реализуются через параметр «ПроверяемыеРеквизиты» типа Массив, содержащий реквизиты, которые надо проверять (т.е. которым установлено свойство проверки заполнения «Выдавать ошибку»)
И если из этого массива убрать реквизит, то проверяться он не будет, если добавить, то будет выполняться проверка заполнения.
Таким образом, можно сказать, что эти два обработчика событий предназначены :
Для включения в проверку заполнения тех реквизитов, у которых в свойствах «ПроверкаЗаполнения» указано «Не проверять». Для этого надо добавить этот реквизит в массив параметр «ПроверяемыеРеквизиты»
Для того, чтобы исключить из автоматической проверки реквизиты, у которых установлено свойство проверки заполнения «Выдавать ошибку» в зависимости от каких-то условий. Для этого надо удалить этот реквизит из массива параметра «ПроверяемыеРеквизиты»
Имеется несколько особенностей, которые необходимо учитывать:
Если у формы из которой записывается объект в свойствах не установлено «ПроверятьЗаполнениеАвтоматически», то тогда эти обработчики проверки заполнения не вызываются и проверки не происходят!
Вызываются только при интерактивной записи! При программной записи не вызываются. Для проверки нужно использовать метод объекта ПроверитьЗаполнение(), который инициирует запуск этих событий.
Для документов, имеющих возможность проведения , эти события проверки заполнения вызываются только при проведении!
Оба эти события выполняются на сервере, отличие в том, что ОбработкаПроверкиЗаполненияНаСервере() это событие модуля формы и, следовательно, есть доступ к данным формы. А ОбработкаПроверкиЗаполнения() — событие модуля объекта.
4) Модуль формы ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки. Есть доступ к данным формы. Есть параметр ТекущийОбъект.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Т.е. экземпляр класса объект создан, и можно обратиться к его свойствам и методам, но в базу данных ещё не записан.
Начало транзакции
5) Модуль объекта ПередЗаписью(Отказ)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки.
Для документов в параметры данного обработчика добавляются ещё два параметра:РежимЗаписи, РежимПроведения.
Запись
6) Модуль объекта ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Возникает в момент, когда выполняется установка номера нового документа, задачи или бизнес-процесса.
Или ПриУстановкеНовогоКода(СтандартнаяОбработка,Префикс)
Возникает в момент, когда выполняется установка нового кода элемента справочника, узла плана обмена или кода плана видов характеристик.
Эти событии вызываются для объектов у которых указано свойство «Автонумерация» и только для новых объектов.
Если установить параметру СтандартнаяОбработка значение Ложь, то новый номер генерироваться не будет и можно программно задать код объекта в данном обработчике.
7) Модуль объекта ПриЗаписи(Отказ)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи.
Ссылка уже есть и можно записать в базу данных дополнительные данные на основании текущего объекта, используя эту ссылку.
Например, при записи создавать другой документ, содержащий реквизит ссылку на записываемый.
8) Модуль формы ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи. Есть доступ к данным формы. Есть последний шанс отказаться от записи.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Можно обратиться к его свойствам и методам.
Завершение транзакции
9) Модуль формы ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Выполняется на сервере.
Можно использовать для того, чтобы визуально что-то отобразить на форме.
10) Модуль формы ПослеЗаписи(ПараметрыЗаписи)
Выполняется на клиенте!
Можно использовать для того, чтобы визуально что-то отобразить на форме или выдать предупреждение пользователю.

Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа.
Именно такое сложное чувство непонимания было поначалу и у меня. В процессе обучения и реального опыта была создана эта шпаргалка, целью которой было «разложить всё по полочкам», чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи объектов.

Для чего нам вообще нужны эти обработчики?
Очень часто программисту требуется переопределить стандартное поведение системы во время записи объектов, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п. Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий программисту, работающему на платформе 1С 8.2, необходимо.

В модуле формы или в модуле объекта?
Сначала надо определиться нужны ли нам данные формы? Будет ли запись записываться программным способом или только интерактивно? Будем ли вести диалог с пользователем?
Дело в том, что часть событий выполняется на уровне модуля формы и это значит, что они выполняются только при интерактивной записи, а также в этих событиях мы можем обращаться к данным формы, вести диалог с пользователем.
Другая часть событий выполняется на уровне модуля объекта, как при интерактивной, так и при программной записи.
Потому можно сразу определиться с обработчиком модуля формы или модуля объекта будем работать.

Модуль формы: на клиенте или на сервере?
Далее, если выбран модуль формы, то надо определиться какой обработчик потребуется: исполняемый на клиенте, или исполняемый на сервере. Если потребуется диалог с пользователем, то на клиенте, в противном случае на сервере. Их можно отличить по имени директивы компиляции или по имени обработчика (когда на сервере, это пишется в имени, например ПередЗаписьюНаСервере()).

Как выбрать конкретный обработчик?
Выбор зависит от поставленной задачи. Что конкретно можно делать в каждом обработчике опишу ниже, а пока пример.

title

Пример выбора обработчиков событий записи объекта:
Бывают задачи, когда потребуется использовать несколько обработчиков для решения одной задачи. Например, надо запросить информацию у пользователя во время записи: «Будем создавать новый документ на основании этой записи?» и, если пользователь ответит утвердительно, то надо создать новый документ с ссылкой на записываемый объект. Причем запись нового документа надо выполнять в транзакции, т.к. если текущая запись по каким то причинам будет отменена, то и уже созданный и записанный документ не должен остаться в базе данных.
Для решения этой задачи потребуется использовать обработчики события модуля формы по двум причинам:
1) Диалог с пользователем возможен только на клиенте, а клиентеские обработчики есть только в модуле формы. Для диалога будем использовать клиентскую процедуру модуля формы ПередЗаписью(), и сохраним ответ пользователя в параметре этой процедуры «ПараметрыЗаписи».
2) А в процедуре ПриЗаписиНаСервере() модуля формы примем этот параметр и в зависимости от него будем создавать документ или нет. Почему именно эта процедура? Ссылка будет получена только после записи, но поскольку нам нужно записывать в транзакции, то нужно использовать процедуры ДО завершения транзакции, но уже имеющие ссылку на записываемый объект. ПередЗаписью() не подходит , так как ещё нет ссылки, а ПослеЗаписи() не подходит, так как транзакция уже завершена. Остаётся ПриЗаписи(), но перед нами встаёт выбор: модуля формы или модуля объекта? Поскольку обработчик события ПриЗаписи() модуля объекта не содержит параметр, содержащий ответ пользователя, а событие ПриЗаписиНаСервере() модуля формы содержит, то ответ очевиден-используем это событие ПриЗаписиНаСервере() модуля формы потому что:
1) Это событие выполняется в транзакции 2) Содержит параметр «ПараметрыЗаписи», в котором уже содержится ответ пользователя, который передался из процедуры ПередЗаписью() 3) Ссылка уже создана и можно создавать новый документ, используя эту ссылку.

Ну и теперь последовательность запуска событий (в том порядке, в каком они перечислены) и небольшие подробности :
Во многих обработчиках есть параметр «Отказ». Там, где этот параметр присутствует означает, что в этом обработчике ещё можно отказаться от записи, присвоив параметру «Отказ» значение Истина, и тогда запись произведена не будет.
1) Модуль формы ПередЗаписью(Отказ, ПараметрыЗаписи)
Выполняется на клиенте!
Этот обработчик следует использовать, если необходимо организовать диалог с пользователем перед тем, как записать объект. Запросить дополнительную информацию, предупредить о чём-либо, дать возможность отказаться и т.п.
Второй параметр этого обработчика «ПараметрыЗаписи» имеет тип «Структура». У документов эти параметры заполняются системой предопределенными параметрами РежимЗаписи, РежимПроведения. Можно добавить свои.
Эти параметры передаются между событиями формы ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, где их можно благополучно использовать. Например, при записи регистра сведений, надо сделать запись в другой регистр сведений старое значение ресурса. Можно передать старое значение в эти самые параметры и уже в ПриЗаписиНаСервере сделать запись в другой регистр.
2) Модуль формы ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
3) Модуль объекта ОбработкаПроверкиЗаполнения (Отказ, ПроверяемыеРеквизиты)
Эти два обработчика проверки заполнения реализуются через параметр «ПроверяемыеРеквизиты» типа Массив, содержащий реквизиты, которые надо проверять (т.е. которым установлено свойство проверки заполнения «Выдавать ошибку»)
И если из этого массива убрать реквизит, то проверяться он не будет, если добавить, то будет выполняться проверка заполнения.
Таким образом, можно сказать, что эти два обработчика событий предназначены :
Для включения в проверку заполнения тех реквизитов, у которых в свойствах «ПроверкаЗаполнения» указано «Не проверять». Для этого надо добавить этот реквизит в массив параметр «ПроверяемыеРеквизиты»
Для того, чтобы исключить из автоматической проверки реквизиты, у которых установлено свойство проверки заполнения «Выдавать ошибку» в зависимости от каких-то условий. Для этого надо удалить этот реквизит из массива параметра «ПроверяемыеРеквизиты»
Имеется несколько особенностей, которые необходимо учитывать:
Если у формы из которой записывается объект в свойствах не установлено «ПроверятьЗаполнениеАвтоматически», то тогда эти обработчики проверки заполнения не вызываются и проверки не происходят!
Вызываются только при интерактивной записи! При программной записи не вызываются. Для проверки нужно использовать метод объекта ПроверитьЗаполнение(), который инициирует запуск этих событий.
Для документов, имеющих возможность проведения , эти события проверки заполнения вызываются только при проведении!
Оба эти события выполняются на сервере, отличие в том, что ОбработкаПроверкиЗаполненияНаСервере() это событие модуля формы и, следовательно, есть доступ к данным формы. А ОбработкаПроверкиЗаполнения() — событие модуля объекта.
4) Модуль формы ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки. Есть доступ к данным формы. Есть параметр ТекущийОбъект.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Т.е. экземпляр класса объект создан, и можно обратиться к его свойствам и методам, но в базу данных ещё не записан.
Начало транзакции
5) Модуль объекта ПередЗаписью(Отказ)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки.
Для документов в параметры данного обработчика добавляются ещё два параметра:РежимЗаписи, РежимПроведения.
Запись
6) Модуль объекта ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Возникает в момент, когда выполняется установка номера нового документа, задачи или бизнес-процесса.
Или ПриУстановкеНовогоКода(СтандартнаяОбработка,Префикс)
Возникает в момент, когда выполняется установка нового кода элемента справочника, узла плана обмена или кода плана видов характеристик.
Эти событии вызываются для объектов у которых указано свойство «Автонумерация» и только для новых объектов.
Если установить параметру СтандартнаяОбработка значение Ложь, то новый номер генерироваться не будет и можно программно задать код объекта в данном обработчике.
7) Модуль объекта ПриЗаписи(Отказ)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи.
Ссылка уже есть и можно записать в базу данных дополнительные данные на основании текущего объекта, используя эту ссылку.
Например, при записи создавать другой документ, содержащий реквизит ссылку на записываемый.
8) Модуль формы ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи. Есть доступ к данным формы. Есть последний шанс отказаться от записи.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Можно обратиться к его свойствам и методам.
Завершение транзакции
9) Модуль формы ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Выполняется на сервере.
Можно использовать для того, чтобы визуально что-то отобразить на форме.
10) Модуль формы ПослеЗаписи(ПараметрыЗаписи)
Выполняется на клиенте!
Можно использовать для того, чтобы визуально что-то отобразить на форме или выдать предупреждение пользователю.

Для чего может пригодиться знание последовательности, в которой отрабатывают такие предопределенные процедуры модуля документа и модуля формы документа, как ПередЗаписью(), ПриЗаписи(), ПослеЗаписи() и ОбработкаПроведения() ?
Ответ прост — что бы правильно организовать обработку данных на разных этапах и режимах проведения документа.

Итак, начнем с самого распространенного режима — проведение документа пользователем из его формы (проще говоря нажатием на кнопку «Провести» или «Ок» в форме документа).

Последовательность запуска процедур будет выглядеть следующим образом:
Форма. Перед записью.
Модуль. Перед записью.
Модуль. При записи.
Модуль. Обработка проведения.
Форма. При записи.
Форма. После записи.
При простой интерактивной записи документа (без проведения) порядок будет тот-же, за исключением процедуры ОбработкаПроведения(), которая в режиме записи не запускается. А при отмене проведения вместо нее запускается процедура ОбработкаОтменыПроведения();

На этапах 1 и 2 Вы еще можете программно внести изменения в документ, если это требуется — запись документа в базу еще не произошла и транзакция записи еще не начата. Начиная с этапа 3 внести изменения уже не получится, т.к. процесс записи документа уже совершился, но транзакция еще не завершена. Транзакция завершится только после завершения этапа 5, когда все требуемые данные и движения документа будут полностью физически записаны в базу данных.

Теперь давайте рассмотрим проведение документа без открытия формы документа (с помощью обработки или из формы списка). Последовательность запуска процедур будет выглядеть следующим образом:
Модуль. Перед записью.
Модуль. При записи.
Модуль. Обработка проведения.
Как видите, процедуры модуля формы не запустились.

Вывод: Если Вы хотите провести какие-то проверки в процессе оформления документа (т.е. пока он открыт у пользователя), и не хотите, чтобы они выполнялись например при регламентном перепроведении документов, то их следует располагать в модуле формы документа. В противном случае, если надо эти проверки проводить всегда, то код целесообразно разместить в модуле документа. Но при этом надо помнить, что в серверном варианте работы БД код модуля документа выполняется на сервере, поэтому обязательно надо помнить, какие методы программы работают на сервере, а какие нет.

Что конкретно удалил либо поменял пользователь в конкретном документе в 1С? Для решения этого вопроса разработчики внедрили специальный механизм хранения версий объектов — так называемое версионирование, с помощью которого вы как раз можете увидеть всю конкретику измененных документов.

В этой статье мы расскажем обо всех плюсах и минусах версионирования, а также покажем на конкретном примере в 1С: Зарплата и управление персоналом ред. 3.1, как работает механизм.

Начиная с платформы 8.3.11, механизм версионирования встроен в систему и называется «История данных». Он имеется во всех конфигурациях, работающих на основе библиотеки стандартных подсистем (БСП). Например, в 1С: Бухгалтерия предприятия он реализован, начиная с версии 3.0.35.

Использование этого механизма актуально как на этапах начала работы с программой, так и при дальнейшем ее использовании, когда имеются пользователи «новички», которые могут что-то «подпортить» в учете.

Версионирование — это механизм хранения истории изменения объектов в 1С, который позволяет:

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

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

Плюсов у этого функционала, конечно много.

Но есть и минусы, их тоже нужно учитывать. Важно грамотно подходить к настройке версионирования, т.к. использование данного функционала однозначно приводит к замедлению работы 1С. Это связано с тем, что история данных занимает какое-то место и при неправильной, беспорядочной настройке она может занимать больше места, нежели чем сам объект.

Центр обучения «Клерка» приглашает разобрать не менее важный аспект бухгалтерского учета — ведение учета запасов по новому ФСБУ 5/2019. Бесплатный вебинар уже совсем скоро — 20 августа.

Как включить версионирование в 1С?

Этот механизм может включить как разработчик в конфигураторе, так и сам пользователь в пользовательском режиме.

Для включения версионирования объектов выполните следующие пункты.

Шаг 1. Перейдите в раздел «Администрирование» — «Общие настройки».

Пример раздела в 1С: Зарплата и управление персоналом, ред. 3.1:

Пример раздела в 1С: Бухгалтерия предприятия ред. 3.0.

Шаг 2. Разверните подраздел «История изменений» и установите галочку «Хранить историю изменений». Для перехода к настройкам нажмите гиперссылку «Настроить».

Как видите, в 1С: ЗУП и 1С: Бухгалтерии предприятия эти пункты выглядят совершенно одинаково.

Соответственно, и настройка версионирования во всех конфигурациях 1С выполняется аналогично, т.к. это одна подсистема.

Настройки истории хранения изменений

Рассмотрим основные настройки подсистемы «Версионирование» и механизма «Хранение данных» на примере программы 1С: Зарплата и управление персоналом ред. 3.1.

В составе объектов настройки два пункта: справочники и документы.

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

В разделе «Документы» перечислены все имеющиеся в конфигурации документы, для которых также отдельно выполняется настройка хранения данных.

Параметр «Когда сохранять версии»

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

Значение параметра «Когда сохранять версии» может принимать значение:

  • «При записи» — версия сохраняется при создании или изменении справочника либо документа;
  • «При проведении» — применима для документов, для которых предусмотрено проведение. Запись производится при их проведении;
  • «Никогда» — запись истории изменения объекта не ведется.

Применить настройки можно и к группе объектов.

Выберите несколько объектов с помощью кнопки Shift (в указанном диапазоне «с какого по какой») или Ctrl (выборочное выделение) и, нажав кнопку «Установить когда сохранять версии», выберите нужное значение для указанных объектов.

В этом пункте, кроме описанных выше вариантов, доступна настройка «По умолчанию». В данном случае устанавливаются рекомендуемые настройки. Для справочников это — «Никогда», для документов — «При проведении».

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

Параметр «Срок хранения версий»

Аналогично задается параметр «Срок хранения версий».

Выделите ячейку и выберите вариант срока хранения заданного элемента.

Он может принимать значение:

  • «За последнюю неделю»;
  • «За последний месяц»;
  • За последние три месяца«;
  • «За последний год»;
  • «Бессрочно».

Для выбранной группы объектов изменить этот параметр также можно с помощью кнопки «Установить срок хранения версий».

Выделите объекты, нажмите вышеуказанную кнопку и выберите нужное значение.

Рассмотрим настройку на примере.

Пример настройки версионирования в 1С: ЗУП ред. 3.1

Установите настройки хранения истории изменений для документа «Начисление зарплаты и взносов». Значение параметра «Когда сохранять версии» — При проведении«, «Срок хранения» — «За последнюю неделю» (для примера).

После того, как активировано версионирование, в объектах 1С станут доступны кнопки в виде карандаша с часиками — «Перейти к истории изменений».

В нашем примере она расположена в журнале документов на панели инструментов, а также по нажатию кнопки «Еще».

Во втором варианте она выглядит как строка — «История изменений».

При открытии документа, в нем также присутствует такая кнопка и команда по нажатию кнопки «Еще».

Рассмотрим пример, когда бухгалтер вносила изменения в документ «Начисление зарплаты и взносов».

Для иллюстрации примера изменим заработную плату Булочкиной О.И. с 67000 руб. на 75000 руб. и посмотрим, как программа сохранит версии документов и сможем ли мы, используя механизм хранения данных, вернуться к прежней версии.

Нажмите «кнопку-карандашик» — «Перейти к истории изменений».

Становится видно информацию о версиях документа «Начисление зарплаты и взносов»: кто изменил данный объект, а также дату и время изменения.

Для просмотра версии выделите строку и нажмите кнопку «Открыть версию».

В отчете представлены вся информация, показатели и данные документа выделенной версии. Кнопками » » и «-» можно свернуть и развернуть блоки для удобства чтения.

В нашем примере мы знаем, что пользователь изменил зарплату по окладу Булочкиной О.И. на 75000 руб.

Но как же пользователь проанализирует такой объем информации и определит, какие изменения произведены в какой версии?

Для этого есть функция сравнения с помощью одноименной кнопки «Сравнить».

Для сравнения версий выделите нужные строки (с помощью Shift или Ctrl) и нажмите кнопку «Сравнить».

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

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

Пролистав таблицу, мы видим, что пользователем Кругловой О. были изменены данные по Булочкиной О.И. Сохраненные версии № 1 и № 2 идентичные, а в версии № 3 прослеживаются изменения.

Обратите внимание на значение поля «Изменения в реквизитах». По умолчанию установлено — «Все». Поэтому отчет получился объемным. Нажав кнопку выбора с тремя точками, пользователь может задать выводимые реквизиты, отметив нужные галочками.

Главный бухгалтер, проанализировав ситуацию, приняла решение восстановить данные документа «Начисления зарплаты и взносов» до внесения изменений зарплаты.

Как это сделать?

Выделите версию объекта, на который хотите перейти и нажмите кнопку «Перейти на версию».

В моделируемом примере нас устроит версия № 2 (до внесения изменений). На нее и перейдем.

В результате проведенных манипуляций в таблице «История изменений: Начисление зарплаты и взносов от 31.08.2021» появилась четвертая версия документа с пометкой — «Выполнен переход к версии № 2 от 10.08.2021 18:32:49» (пример моделировался 10.08.2021).

Откройте документ и проверьте, что в нем изменилось.

Документ перешел к варианту до внесения в него изменений. В нашем примере зарплата сотрудника Булочкиной О.И. автоматически изменилась на 67000 руб. (напомним, она была изменена ранее на 75000 руб.). Начисление НДФЛ и страховых взносов также приняло прежние значения. Т.е. документ полностью принял первоначальный вид.

Этот способ очень удобен. Он позволяет не только отслеживать, когда и кем были произведены изменения, но и «откатывать» состояние объекта в предшествующее состояние. Перейдя на версию объекта и не получив результата, пользователь может повторить операцию снова. Переходы от версии к версии не ограничены и их можно выполнять в пределах хранящихся версий.

Напоминаем, единственный минус версионирования — это то, что хранящиеся данные занимают место и при больших объемах накопленной информации программа может начать притормаживать и подвисать, особенно при работе на слабых компьютерах. Поэтому возможно имеет смысл устанавливать версионирование только для конкретных документов в программе, по которым могут быть спорные моменты.

Объем хранимых версий объектов и их удаление в 1С

Вернемся к разделу «Настройка и хранение истории изменений».

Нажмите гиперссылку «Количество и объем хранения версий объектов».

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

В нашем примере видно, что объект — документ «Начисление зарплаты и взносов» имеет четыре версии и этот объем данных занимает 0,01Мб.

Но это всего лишь один документ. Поэтому, если вы настраиваете версионирование и активно им пользуетесь, смотрите какой объем занимают данные.

Обратите внимание на строку «Очистка устаревших версий». У нас пока таковых не имеется, но при их появлении появится кнопка «Очистить». Здесь также выводится информация об их количестве и объеме. Нажав на эту кнопку старые, неактуальные версии удаляются.

Для автоматизации процесса удаления устаревших версий, установите одноименную галочку «Автоматически удалять устаревшие версии» и вам не придется постоянно отвлекаться на контроль этого процесса.

Теперь вы знаете что такое версионирование и как настроить хранение истории изменения справочников и документов в программах 1С.

Как говорится: «Все гениальное — просто!». Экспериментируйте, используйте этот функционал программы и, главное, не бойтесь что-то испортить, ведь всегда можно вернуть версию объекта. Если вы сочтете это ненужным, то в любой момент вы сможете отключить эту настройку.

Читайте также:

      

  • Weeknum excel как пользоваться
  •   

  • Пунктирная таблица в ворде как убрать
  •   

  • Где поставить мкс в 1с зуп
  •   

  • Паспорт трубопровода образец заполнения в ворде
  •   

  • Найденный документооборот не в статусе ожидает извещения 1с отчетность

Всем привет. Ребят, помогите. Конфигурация своя. Есть документ. На форме документа есть реквизит «Сотрудник». Программно подгружаю в него имена сотрудников из справочника. Список появляется все нормально, могу выбрать он отображается в реквизите, но после проведения и записи, при повторном открытии документа, реквизит Сотрудник пустой. Опять нужно выбирать. При чем, если ввожу вручную данные напрямую в палитре свойств, все работает нормально.

А в базу-то твой сотрудник записывается? Чем докажешь?

Если это реквизит формы, а не объекта, он и не должен сохраняться

так это понятно. Реквизит на форме это реквизит документа. Сори не правильно написала

После записи, если запросом обратиться, реквизит заполнен?

Как вариант неподходящий тип значения в СЗ

В свойствах реквизита точно указан «элемент справочника»? А что помещается в твоем СЗ? не текст-ли?

так списки выбора и не сохраняются

есть другой вариант такого исполнения? или надо отдельно куда то записывать.

делай таб часть и туда записывай своих сотрудников

ТЫ чего-то путаешься в показаниях «Список появляется все нормально, могу выбрать он отображается в реквизите, но после проведения и записи, при повторном открытии документа, реквизит Сотрудник пусто» Это может быть если путь данных реквизита не Объект.Сотрудник. Если в СЗ для выбора значения не подходящего типа для поля объекта Сотрудник.

Реквизит на форме ссылается на реквизит документа?  Как вариант еще возможно что где-то очищается он. Пробегись отладчиком в ПередЗаписью, передЗаписьюНаСервере и в обработке проведения и посмотри, где этот реквизит перестает быть заполненным

Ты в список складываешь наименования, а надо .Ссылка. Поэтому и не летает твое ераплан.

кажется я не понимаю как туда ссылку записать :/

не юзай список выбора, сделай через ВыбратьИзСписка

ну и как он потом ссылки в список выбора элементу управления засунет?

он же уже запихнул Элементы.Сотрудник.СписокВыбора.ЗагрузитьЗначения(СЗ);

и там таки ссылки можно прописать!?

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

возможно, давно не работаю с ОФ

в УФ юзаются ДанныеВыбора, а не СписокВыбора

Ничто не мешает сделать так:

уточню у «Элементы.Сотрудник.СписокВыбора.ЗагрузитьЗначения» тип значения ожидается массив

У нее по женской логике:-) СЗ = Новый Массив;

при чем здесь женская логика?)

Ну в переменную СЗ (я так понимаю, это типа список значений) пихать массив, а не список значений)))

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

 0 

   

Распечатать

1С 8.3 : Реквизит ~ Как сохранять и восстанавливать значения Объектов и Реквизитов на форме УП?

У управляемой формы реквизиты заведенные как реквизиты формы, при закрытии и открытии ее заново могут сохраняться и восстанавливаться, достаточно только поставить напротив галочку сохранять и в свойствах формы выбрать «АвтоматическоеСохранениеДанныхВНастройках» — Использовать.

 

Подробнее в этой статье Как сохранять и восстанавливать значения реквизитов на форме? и там же пример для обычных форм.


А что же делать с реквизитами, которые выступают в роли реквизитов объектов ?

у них такой настройки нет ) нет — напишем:

Код 1C v 8.3

 &НаСервере
Процедура ВосстановитьНастройки()
КлючОбъекта = "ЗагрузкаИЗPDF_All4CF.ru";
КлючНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ОписаниеНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ИмяПользователя = "";

ЗначениеНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);

Если ТипЗнч(ЗначениеНастроек) = Тип("Соответствие") Тогда
Объект.Склад = ЗначениеНастроек.Получить("Склад");
Объект.Организация = ЗначениеНастроек.Получить("Организация");
Объект.ПутьКPDF2TXT = ЗначениеНастроек.Получить("ПутьКPDF2TXT");
Объект.ПутьКPDF = ЗначениеНастроек.Получить("ПутьКPDF");
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВосстановитьНастройки();
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройки()  
КлючОбъекта = "ЗагрузкаИЗPDF_All4CF.ru";
КлючНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ОписаниеНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ИмяПользователя = "";

Настройки = Новый Соответствие;
Настройки.Вставить("ПутьКPDF2TXT", Объект.ПутьКPDF2TXT);
Настройки.Вставить("ПутьКPDF", Объект.ПутьКPDF);
Настройки.Вставить("Склад", Объект.Склад);
Настройки.Вставить("Организация", Объект.Организация);

ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
КонецПроцедуры  

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
 СохранитьНастройки();
КонецПроцедуры

Открыв обработку и заполним поля закрываем ее, при следующем открытии все поля заполнены из сохраненных настроек:

Показывать по
10
20
40
сообщений

Новая тема

Ответить

gala2009

Дата регистрации: 11.03.2009
Сообщений: 319

«В док-те ПриказНаОплатуПоСреднему в форме вставила флаг с идентификатором Личный. В форме задаю условие Если Личный = 1 тогда Календ = ГрафикРаботы.ОсновныеЧасы; Иначе календ = СоздатьОбъект(«Календарь.Пятидневка»); то есть меняю график работнику и все срабатывает. Но! при выходе из док-та и повторном заходе флажок чистый без галки, то есть его значение не сохраняется. как сохранить?»

StarS

Дата регистрации: 15.07.2003
Сообщений: 1623

Кто ж Вам кроме автора на такой вопрос ответит? А автор явно не 1С. Конфигурация не типовая.

gucci76

Дата регистрации: 16.03.2008
Сообщений: 364

Флаг в вашем случае, скорее всего элемент формы, а не реквизит документа.

gala2009

Дата регистрации: 11.03.2009
Сообщений: 319

конфигурация типовая. это я рисую флажок Личный и такое условие, и оно срабатывает без проблем. Стандартно там при Выборе события — сохр.заработок при тудоустр. календ = Пятидневка, а мне нужно чтобы брался иногда личный график (но не всегда, для этого и флажок)и он работает до выхода из документа. То есть думаю, ведь если ставлю галку, значение Личный становится =1, да так и есть, по расчету видно, умножает средний заработок на большее число дней чем при пятидневке. но при выходе сбрасывается и расчет происходит по пятидневке. где и как сохранить это значение флага? он не реквизит. может завести переменную или че?

gala2009

Дата регистрации: 11.03.2009
Сообщений: 319

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

CheshirskyCat

Дата регистрации: 09.01.2004
Сообщений: 326

Если ваш флажок «Личный» не реквизит документа, то и сохранятся вместе с документом он не будет.<br>Нужно завести реквизит документа для хранения этого флажка. <br>Но тогда конфигурация перестанет быть типовой, и при обновлениях, нужно будет не забывать про этот Вами добавленный реквизит.<br><br>Либо программно сохранять этот элемент формы(где нибудь в комментарии документа например в виде строчки [Личный=1] как вам больше понравиться). Опять, же нужно будет менять модуль формы и модуль проведения документа, чтобы извлекать значение флага из комментария при открытии(проведении) и сохранять значение флага при записи документа. Тогда при обновлениях нужно каждый раз править модуль формы и проведения вашего документа.<br>

maestro_voln

Дата регистрации: 04.03.2009
Сообщений: 289

Сразу заводится реквизит Тип значения=Число, Длина=1, Точность=0<br>Потом<br>Открываем форму<br>меню>вставить>реквизиты выбераем свой, в списке выбрать там где написано «вставлять» выбрать «флажок»<br>должно работать<br>

gala2009

Дата регистрации: 11.03.2009
Сообщений: 319

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

Показывать по
10
20
40
сообщений

В этой статье разберем, как работать с сохранением данных на форме в 1С 8.3.

Сохраняемые данные формы 1С

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

Например, у меня на форме обработки имеются поля, данные в которых сохраняются при закрытии формы и восстанавливаются при последующем открытии.

Форма обработки 1С

Это поля Контрагент и Цена.

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

Первое. У свойства формы  «Автоматическое сохранение данных в настройках» установить значение «Использовать».

 Свойство управляемой формы 1С Автоматическое сохранение данных в настройках

Второе. После того, как будет установлено значение в свойство, которое упоминали выше, у реквизитов формы появится колонка «Сохранение». Именно в этой колонке и нужно поставить флажки рядом с теми реквизитами, значения которых мы хотим сохранять при закрытии формы.

Свойство Сохранить реквизитов управляемой формы 1С

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

Хранилище настроек в 1С

Вышеприведенный способ позволяет сохранять последние данные, с которыми работали на форме. Но, могут возникнуть ситуации, когда нужно будет сохранять какую-то произвольную комбинацию значений реквизитов, а потом восстановить её. Если рассматривать ситуацию выше, то это может быть комбинация контрагента и цены: для одного контрагента одна цена, для другого другая и т.д.

Для того, чтобы такая возможность имелась, необходимо в свойстве «Хранилище данных настроек» управляемой формы установить значение «Использовать список».

Свойство управляемой формы Хранилище данных настроек

А потом, у нужных реквизитов формы следует установить флаг у свойства «Сохраняемые данные».

Свойство Сохраняемые данные реквизита управляемой формы

После таких изменений, у формы в группе Ещё появятся команды «Сохранить параметры» и «Восстановить параметры».

Команды управляемой формы Сохранить параметры и Восстановить параметры

Теперь мы можем сохранить любую комбинацию реквизитов Контрагент – Цена.

Команда управляемой формы Сохранить параметры
Команда управляемой формы Сохранить параметры

И можем восстановить нужную комбинацию в любой момент работы с формой, а не только при открытии.

Команда управляемой формы Восстановить параметры
Команда управляемой формы Восстановить параметры

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Сохранение значений реквизитов форм.


Posted: 26 октября, 2017 in Введение в конфигурирование в системе «1с:Предприятие 8» .

Частенько приходится делать некий отчёт или обработку и затем проверять её работу. При этом постоянно вводить значение каких-нибудь отборов.

Между тем в типовых формах существуют кнопки «сохранить значение», «восстановить значение».

Конечно можно прописывать подстановку просто в коде типа:

Процедура ПриОткрытии()
Склад=Справочники.Склады.НайтиПоНаименованию(«НаименованиеКакое нить»);
КонецПроцедуры

Но можно задействовать уже существующий механизм. Для этого в свойствах формы поставить галочку «Сохранять значение», в поле «Сохраняемые значения» выбрать необходимые реквизиты, и поставить галочку «ВосстанавливатьЗначенияПриОткрытии»форма

В результате увидим две кнопки как в типовом отчёте:

форма1

Легко. Просто где вот простому смертному это увидеть. Типа учитесь… Было бы чему!

Понравилась статья? Поделить с друзьями:
  • При смене юр адреса что меняется в реквизитах
  • Почта россии балашиха часы работы в праздники
  • Помещение 500 кв м какой бизнес можно открыть
  • При угловом расположении реквизитов документа
  • Почта россии в сыктывкаре адреса время работы