История изменения контактной информации контрагентов, на примере cохранения истории изменений адресов партнеров и контрагентов, для УТ 11.2

13.01.17

Задачи пользователя - Адаптация типовых решений

Сохраняем историю изменений адресов партнеров и контрагентов для УТ 11.2 с возможностью печати документов задним числом с нужными адресами. В публикации описаны необходимые минимальные доработки конфигурации для: хранения истории изменений и автоматической подстановки нужного адреса (в зависимости от даты) в печатные бланки.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ЗаполнитьИсториюТекущимиКонтактнымиДанными
.epf 7,02Kb
4
4 Скачать (1 SM) Купить за 1 850 руб.

Доработка тестировалась на конфигурации: Управление Торговлей 11.2 (11.2.3.129).

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

Реализация:

1) Создадим периодический "Регистр сведений", в котором будем хранить историю контактной информации.

- Наименование: ИсторияКонтактнойИнформации
- Синоним: История изменения контактной информации 
- Переодичность: В пределах секунды
- Режим записи : Независимый
- Измерения: Объект(СправочникСсылка.Контрагенты, СправочникСсылка.Партнеры), Тип, Вид, ВидДляСписка
- Ресурсы: Представление, ЗначенияПолей, Страна, Регион, Город, АдресЭП, ДоменноеИмяСервера, НомерТелефона, НомерТелефонаБезКодов

Измерения и ресурсы полностью взяты из табличной части "КонтактнаяИнформация" справочника "Контрагенты", кроме имерения "Объект". Данный регистр сведений позволит хранить историю любую контактной информации справочников "Партнеры" и "Контрагенты".
Не забываем на вкладке "права" настроить права для нужных ролей.

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

Процедура СохранитьИсториюКонтактнойИнформации(спрОбъект) Экспорт
    
    текДата = ТекущаяДатаСеанса();
    
    //Получаем уже сохраненную историю(на последнюю актуальную дату)...
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    История.Тип,
                          |    История.Вид,
                          |    История.ВидДляСписка,
                          |    История.Представление,
                          |    История.ЗначенияПолей,
                          |    История.Страна,
                          |    История.Регион,
                          |    История.Город,
                          |    История.АдресЭП,
                          |    История.ДоменноеИмяСервера,
                          |    История.НомерТелефона,
                          |    История.НомерТелефонаБезКодов
                          |ИЗ
                          |    РегистрСведений.ИсторияКонтактнойИнформации.СрезПоследних(&Дата, Объект = &Объект) КАК История");
    
    Запрос.УстановитьПараметр("Дата", текДата);
    Запрос.УстановитьПараметр("Объект", спрОбъект.Ссылка);
    
    РезультатЗапросаИстория = Запрос.Выполнить();
    табИстория = РезультатЗапросаИстория.Выгрузить();
    ПараметрыПоиска = Новый Структура;
    РеквизитыКонтактнойИнформации = спрОбъект.Метаданные().ТабличныеЧасти.КонтактнаяИнформация.Реквизиты;
    
    //Идем по контактной информации и сохраняем измененную и новую...
    Для каждого стрИнф из спрОбъект.КонтактнаяИнформация Цикл
        
        СохранятьКонтактнуюИнформацию = Ложь;
        
        //Если нет данных сохраняем сразу...
        Если РезультатЗапросаИстория.Пустой() Тогда
            СохранятьКонтактнуюИнформацию = Истина;
        Иначе
            
            ПараметрыПоиска.Очистить();
            ПараметрыПоиска.Вставить("Тип", стрИнф.Тип);
            ПараметрыПоиска.Вставить("Вид", стрИнф.Вид);
            ПараметрыПоиска.Вставить("ВидДляСписка", стрИнф.ВидДляСписка);
            
            //Ищем...
            масСтрок = табИстория.НайтиСтроки(ПараметрыПоиска);
            
            Если масСтрок.Количество() = 0 Тогда 
                СохранятьКонтактнуюИнформацию = Истина;

            Иначе
                
                //Сравним каждую колонку...
                Для каждого Рек из РеквизитыКонтактнойИнформации Цикл
                    Если масСтрок[0][Рек.имя] <> стрИнф[Рек.имя] Тогда
                        СохранятьКонтактнуюИнформацию = Истина;
                        Прервать;
                    КонецЕсли;    
                КонецЦикла;    
                
            КонецЕсли;    
            
        КонецЕсли;    
        
        //Сохраняем...
        Если СохранятьКонтактнуюИнформацию Тогда    
            
            НовКонИнф = РегистрыСведений.ИсторияКонтактнойИнформации.СоздатьМенеджерЗаписи();
            НовКонИнф.Объект = спрОбъект.Ссылка;
            НовКонИнф.Период = текДата;
        
            Для каждого Рек из РеквизитыКонтактнойИнформации Цикл
                НовКонИнф[Рек.имя] = стрИнф[Рек.имя];    
            КонецЦикла;    
        
            НовКонИнф.Записать();
            
        КонецЕсли;    
        
    КонецЦикла;
    
КонецПроцедуры 

   

3) В модуле объекта справочников "Партнеры" и "Контрагенты" в процедуре "ПередЗаписью" вызовем нашу процедуру "СохранитьИсториюКонтактнойИнформации". На данном этапе доработки история контактной информации уже будет сохраняться. 

4) В модуле менеджера нашего регистра сведений создадим экспортную функцию "ПолучитьПредставление". 

Функция ПолучитьПредставление(спрСсылка, Дата, Тип, Вид, ВидДляСписка = Неопределено) Экспорт
    
    Если ВидДляСписка = Неопределено Тогда
        ВидДляСписка = Справочники.ВидыКонтактнойИнформации.ПустаяСсылка();    
    КонецЕсли;    
    
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    История.Представление
                          |ИЗ
                          |    РегистрСведений.ИсторияКонтактнойИнформации.СрезПоследних(
                          |            &Дата,
                          |            Объект = &Объект
                          |                И Тип = &Тип
                          |                И Вид = &Вид
                          |                И ВидДляСписка = &ВидДляСписка) КАК История");
    
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("Объект", спрСсылка);
    Запрос.УстановитьПараметр("Тип", Тип);
    Запрос.УстановитьПараметр("Вид", Вид);
    Запрос.УстановитьПараметр("ВидДляСписка", ВидДляСписка);
    
    ИсторияВыборка = Запрос.Выполнить().Выбрать();
    
    Если ИсторияВыборка.Следующий() Тогда 
        Возврат ИсторияВыборка.Представление;
   
    Иначе
        Возврат "";
    КонецЕсли;
    
КонецФункции

5) Для того, чтобы при печати адреса подставлялись из нашей сохраненной истории, вызовем функцию "ПолучитьПредставление" из модуля менеджера нашего регистра сведений. Место, откуда будем вызывать функцию, - это модуль "ФормированиеПечатныхФорм", в нем ищем функцию "ПолучитьАдресИзКонтактнойИнформации". Комментируем кусок кода и вызываем нашу функцию, как показано на скрине ниже.

6) В этом же модуле находим функцию "СведенияОЮрФизЛице" и добавляем параметр "ДатаПериода" в вызов функции "ПолучитьАдресИзКонтактнойИнформации".

7) Все готово.

Р.S. Не забываем перезаписать все справочники "Партнеры" и "Контрагенты", чтобы текущая контактная информация сохранилась в регистре сведений "ИсторияКонтактнойИнформации". 

история адресов сохранить историю адресов история изменения адресов УТ

См. также

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    4426    17    1    

35

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    6318    15    5    

24

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    7006    75    17    

31

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5424    dimanich70    15    

22

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

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    7845    dimanich70    10    

20

Адаптация типовых решений Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    3850    30    TempTablesManager    14    

54

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3818    60    progmaster    9    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gzharkoj 520 15.09.16 08:40 Сейчас в теме
А чем вам не подошел стандартный механизм версионирования?
2. sergey512 35 15.09.16 12:56 Сейчас в теме
(1) ifal, При использовании стандартного механизма версионирования, получим только историю изменения для просмотра. При печати документов задним числом, в печатный бланк будут подставляться текущие данные контактной информации, а не данные актуальные на дату документа. Т.е.перед печатью задним числом, придется менять все вручную. В способе описанном выше, адрес в печатный бланк подставится актуальный на дату документа. Аналогично адресу, можно подставлять и другие актуальные, на дату документа, данные из контактной информации.
3. gzharkoj 520 15.09.16 13:42 Сейчас в теме
(2) Вы не поняли, что я спрашиваю. Я хочу узнать зачем делать новый регистр сведений, писать код, чтобы туда что-то сохранять, если есть подсистема версионирования, которая все это делает из коробки. Остается только достать оттуда данные и все. А в Платформе 8.3.9 можно будет через расширение решить вашу задачу, не снимая с поддержки конфигурацию, если опираться на версионирование.
4. sergey512 35 15.09.16 14:07 Сейчас в теме
(3) ifal, Согласен. Моя публикация - это всего лишь пример решения данной задачи. В ближайшее время напишу публикацию, по решению данной задачи с помощью механизма версионирования. Интересно будет сравнить быстродействие работы двух вариантов реализации.
5. bluntschi 15.12.22 12:03 Сейчас в теме
(4)добрый день, а удалось сделать с помощью механизма версионирования?
Оставьте свое сообщение