Изменение реквизитов существующих объектов (документов) 1С без сохранения

14.06.19

Задачи пользователя - Корректировка данных

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

Скачать файлы

Наименование Файл Версия Размер
Изменение реквизитов объектов 1С без проведения (база):
.rar 45,37Kb
3
.rar 1 45,37Kb 3 Скачать
Изменение реквизитов объектов 1С без проведения (конфигурация):
.cf 20,11Kb
0
.cf 1 20,11Kb Скачать

Предвосхищая предложения коллег, спешу ответить на вопрос, - почему не воспользоваться стандартным механизмом БСП дополнительных сведений и реквизитов?

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

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

Привожу пример изменения конфигурации.

Нам потребуется добавить регистр сведений - «ДополнительныеРеквизитыДокументов».

Свойства регистра: Непериодический, независимый.

Независимым его необходимо сделать, т.к. объектами  с дополнительным реквизитом может быть любой объект – Документ, Справочник, План счетов или ПВХ.

Измерения:

  • ДокументСсылка – имеющий тип, объекты для которых необходим реквизит;

Синоним «Документ»

Ресурсы:

  • ОригиналПолучен – тип «Булево»;

Синоним «Оригинал получен»

В модуле менеджера накидываем процедуры и функции для работы с записями регистра

// Формирует структуру записи регистра
//
// Параметры:
//
// Возвращаемое значение:
//   <Структура>   - структурированные параметры записи регистра
//
Функция ПолучитьСтруктуруРегистра() Экспорт

                Возврат Новый Структура("ДокументСсылка, ОригиналПолучен");

КонецФункции // ПолучитьСтруктуруРегистра()

// <Производит запись в регистр по заданой структуре
//
// Параметры:
//  <СтруктураЗаписи>  - <Структура> - структурированные параметры записи регистра
//
// Возвращаемое значение:
//   <Булево>   - признак успешной операции
//
Функция ЗаписатьВРегистрПоСтруктуре(СтруктураЗаписи) Экспорт

                Успех = Истина;

                ЗаписьРегистра = РегистрыСведений.ДополнительныеРеквизитыДокументов.СоздатьМенеджерЗаписи();
                ЗаполнитьЗначенияСвойств(ЗаписьРегистра, СтруктураЗаписи);
                Попытка
                               ЗаписьРегистра.Записать(Истина);
                Исключение
                               ОписаниеОшибки = ОписаниеОшибки();
                               Успех = Ложь;
                               Сообщение = Новый СообщениеПользователю;
                               Сообщение.Текст = ОписаниеОшибки;
                               Сообщение.Сообщить();
                КонецПопытки;

                Возврат Успех;

КонецФункции // ЗаписатьВРегистрПоСтруктуре()

// <Заполняет структуру полученными из базы параметрами>
//
// Параметры:
//  <СтруктураЗаписи>  - <Структура> - структурированные параметры записи регистра
//
Процедура ПолучитьДополнительныеРеквизитаДокумента(СтруктураЗаписи) Экспорт

                Если Не ЗначениеЗаполнено(СтруктураЗаписи["ДокументСсылка"]) Тогда
                               СтруктураЗаписи["ОригиналПолучен"] = Ложь;
                               Возврат;
                КонецЕсли;
                Запрос = Новый Запрос;
                Запрос.Текст = "ВЫБРАТЬ

                               |             ДополнительныеРеквизитыДокументов.ДокументСсылка КАК ДокументСсылка,

                               |             ДополнительныеРеквизитыДокументов.ОригиналПолучен КАК ОригиналПолучен

                               |ИЗ

                               |             РегистрСведений.ДополнительныеРеквизитыДокументов КАК ДополнительныеРеквизитыДокументов

                               |ГДЕ

                               |             ДополнительныеРеквизитыДокументов.ДокументСсылка = &ДокументСсылка";

                // Установка параметров
                Запрос.УстановитьПараметр("ДокументСсылка", СтруктураЗаписи["ДокументСсылка"]);
                // Выполнение запроса
                Результат = Запрос.Выполнить();
                // Проверка результатов
                Если НЕ Результат.Пустой() Тогда
                               Выборка = Результат.Выбрать();
                               Выборка.Следующий();
                               ЗаполнитьЗначенияСвойств(СтруктураЗаписи, Выборка);
                Иначе
                               СтруктураЗаписи["ОригиналПолучен"] = Ложь;
                КонецЕсли;

КонецПроцедуры // ПолучитьДополнительныеРеквизитаДокумента()

 

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

 

В форме объекта изменяю процедуру «ПриСозданииНаСервере»

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

                //...
                // Различный код типовых конфигураций
                //...

                // Доработка под дополнительный реквизит
                
                мРеквизитыДобавить = Новый Массив;
                Реквизит = Новый РеквизитФормы("Доп_ОригиналПолучен", Новый ОписаниеТипов("Булево"), "", "Оригинал получен", Ложь);
                мРеквизитыДобавить.Добавить(Реквизит);
                ИзменитьРеквизиты(мРеквизитыДобавить);
                НовыйЭлем = Элементы.Добавить("ФормаДоп_ОригиналПолучен", Тип("ПолеФормы"));
                НовыйЭлем.Вид = ВидПоляФормы.ПолеФлажка;
                НовыйЭлем.ПутьКДанным = "Доп_ОригиналПолучен";
                НовыйЭлем.Заголовок = "Оригинал получен";
                НовыйЭлем.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
                НовыйЭлем.УстановитьДействие("ПриИзменении", "Обработчик_ОригиналПолученПриИзменении");
                Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
                               СтруктураЗаписи = РегистрыСведений.ДополнительныеРеквизитыДокументов.ПолучитьСтруктуруРегистра();
                               СтруктураЗаписи["ДокументСсылка"] = Объект.Ссылка;
                РегистрыСведений.ДополнительныеРеквизитыДокументов.ПолучитьДополнительныеРеквизитаДокумента(СтруктураЗаписи);
                               ЭтаФорма["Доп_ОригиналПолучен"] = СтруктураЗаписи["ОригиналПолучен"];
                КонецЕсли;
                
                // конец

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

 

Вношу изменения в процедуру «ПослеЗаписи»

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

                //...
                // Различный код типовых конфигураций
                //...
               
                // Доработка под дополнительный реквизит

                Подключаемый_ЗаписатьДополнительныеРеквизитыНаКлиенте();

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

 

Дописываю свои процедуры и обработчики в этой же форме объекта

&НаКлиенте
Процедура Обработчик_ОригиналПолученПриИзменении(Элемент)

                Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
                    Возврат;
                КонецЕсли;
                Подключаемый_ЗаписатьДополнительныеРеквизитыНаКлиенте();

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

&НаКлиенте
Процедура Подключаемый_ЗаписатьДополнительныеРеквизитыНаКлиенте()

                Подключаемый_ЗаписатьДополнительныеРеквизитыНаСервере();
                ОповеститьОбИзменении(Объект.Ссылка);

КонецПроцедуры // Подключаемый_ЗаписатьДополнительныеРеквизитыНаКлиенте()

&НаСервере
Процедура Подключаемый_ЗаписатьДополнительныеРеквизитыНаСервере()

                СтруктураЗаписи = РегистрыСведений.ДополнительныеРеквизитыДокументов.ПолучитьСтруктуруРегистра();
                СтруктураЗаписи["ДокументСсылка"] = Объект.Ссылка;
                СтруктураЗаписи["ОригиналПолучен"] = ЭтаФорма["Доп_ОригиналПолучен"];
                РегистрыСведений.ДополнительныеРеквизитыДокументов.ЗаписатьВРегистрПоСтруктуре(СтруктураЗаписи);

КонецПроцедуры // Подключаемый_ЗаписатьДополнительныеРеквизитыНаСервере()

Этого достаточно, чтобы начать работать с дополнительным реквизитом.

В дополнение привожу изменения кода для форы списка.

В форме списка изменяю процедуру «При созданииНаСервере»

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

                //...
                // Различный код типовых конфигураций
                //...

                // Доработка под дополнительный реквизит

                Список.ТекстЗапроса = Подключаемый_ПолучитьТекстЗапросаНаСервере();
                НовыйЭлем = Элементы.Добавить("Доп_ОригиналПолучен", Тип("ПолеФормы"), Элементы.Список);
                НовыйЭлем.Вид = ВидПоляФормы.ПолеФлажка;
                НовыйЭлем.ПутьКДанным       = "Список.ОригиналПолучен";
                НовыйЭлем.Заголовок               = "Оригинал получен";

                //конец

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

 

А также вставляю свою дополнительную процедуру для формирования текста запроса списка

&НаСервереБезКонтекста
Функция Подключаемый_ПолучитьТекстЗапросаНаСервере()

                Возврат "ВЫБРАТЬ
                        |    ДокументДокументТест.Ссылка КАК Ссылка,
                        |    ДокументДокументТест.ПометкаУдаления КАК ПометкаУдаления,
                        |    ДокументДокументТест.Номер КАК Номер,
                        |    ДокументДокументТест.Дата КАК Дата,
                        |    ДокументДокументТест.Проведен КАК Проведен,
                        |    ДокументДокументТест.ТектовыйРеквизит КАК ТектовыйРеквизит,
                        |    ДокументДокументТест.МоментВремени КАК МоментВремени,
                        |    ЕСТЬNULL(ДополнительныеРеквизитыДокументов.ОригиналПолучен, ЛОЖЬ) КАК ОригиналПолучен
                        |ИЗ
                        |    Документ.ДокументТест КАК ДокументДокументТест
                        |                    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеРеквизитыДокументов КАК ДополнительныеРеквизитыДокументов
                        |                    ПО ДополнительныеРеквизитыДокументов.ДокументСсылка = ДокументДокументТест.Ссылка";

КонецФункции

 

Данное решение можно тиражировать. При необходимости, требуется не много времени для реализации и добавления в другие объекты.

Пример реализации приведен в базе, которая доступна для скачивания. Реализация для платформы 8.3.13 и выше.

Изменение реквизитов без проведения дополнительные сведения объектов разработка модернизация конфигурация

См. также

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    2138    28    14    

32

Тестирование и исправление ключей аналитики ERP, УТ11, КА

Корректировка данных Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    106559    631    173    

673

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27144    78    146    

59

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

Закрытие периода Корректировка данных Платформа 1С v8.3 Система компоновки данных 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 руб.

13.07.2015    50089    171    29    

121

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22221    298    35    

71

Исправление ошибок по НДФЛ и взаиморасчетам с сотрудниками в 1С:Бухгалтерия 3.0

Корректировка данных Зарплата Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    565    1    4    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 14.06.19 15:10 Сейчас в теме
- создать обработку с выбором дополнительных реквизитов или сведения объектов.
- записывать только их.
2. BraunAlex 136 14.06.19 16:35 Сейчас в теме
(1)
или сведения объектов

А на форму в нужное место? Все равно конфигу менять.
3. VmvLer 14.06.19 16:37 Сейчас в теме
есть расширения же
для эстетов в последних платформах создали всплывающие формы
4. BraunAlex 136 14.06.19 16:56 Сейчас в теме
(3)
есть расширения же


А кто против?
Чем больше вариантов решения тем лучше
5. par_62 15.06.19 20:05 Сейчас в теме
По моему не надо огород городить, а создать отдельную форму длкумента и воспользоватьмя БСП шными доп реквизитами и идентификаторами для разработчиков ( ежели таковая есть).
Добавить свою пописку на процедуру менеджера документа по получению формы. Создать привязки форм к пользователям. А в этой форме уже размещать доп реквизиты и т.п. как угодно.
6. BraunAlex 136 16.06.19 08:09 Сейчас в теме
(5)
По моему не надо огород городить, а создать отдельную форму длкумента

В стандартных конфигурациях в модуле формы может быть типовой код. Строк типового кода может быть от 0 до ОченьМногоСтрокКода. Их надо поддерживать и не терять типовую функциональность от дистрибьютора.

Твое предложение увеличивает расходы на поддержку конфигурации, Даже если это будет расширение.
7. par_62 16.06.19 12:04 Сейчас в теме
Ок. Но есть и обратная сторона. Обычно кроме этих реквизитов в дальнейшем потребуется и доп функционал. По крайней мере, в моей практике это постоянно. Начинается также как описал аатор, а затем входят во вкус- нужны доп контроли, регистрации и тому подобное. Согласен,если использовать описанное в статье к общим вопросам ,тогда может и так
8. BraunAlex 136 16.06.19 23:24 Сейчас в теме
(7)
а затем входят во вкус- нужны доп контроли, регистрации и тому подобное

Аппетит приходит во время еды.
Я не претендую на "Самое крутое решение". Это один из вариантов, который пока что работает (уже более года)
9. telo71 7 06.09.20 14:58 Сейчас в теме
Спасибо, достаточно просто и недурно работает!
Оставьте свое сообщение