Изменение реквизитов существующих объектов (документов) 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    2622    29    15    

35

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

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

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

3600 руб.

10.02.2017    107286    636    173    

679

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

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

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

14400 руб.

29.04.2020    27930    82    146    

61

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 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    22555    302    35    

74

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

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

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

2400 руб.

13.07.2015    50319    171    29    

121

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

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

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

3600 руб.

09.02.2024    717    3    4    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
Спасибо, достаточно просто и недурно работает!
+
Оставьте свое сообщение