Выбор Адреса контрагента из Контактной информации. Пример работы с "Оповестить о выборе"

16.01.23

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

Решение задачи выбора Адреса контрагента из Контактной информации на платформах 8.2, 8.3, на обычных и управляемых формах, Бухгалтерии 2.0 и 3.0

Скачать файл

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

Наименование По подписке [?] Купить один файл
ПримерРаботыСОповеститьОВыборе.epf
.epf 12,89Kb
10
10 Скачать (1 SM) Купить за 1 850 руб.

I. Решение задачи для для конфигураций на платформе 8.2, обычных форм, Бухгалтерии 2.0

пример кода для выбора адреса из Контактной информации:

ФормаВыбора = РегистрыСведений.КонтактнаяИнформация.ПолучитьФормуСписка("ФормаСписка", ЭтаФорма);
ФормаВыбора.РежимВыбора = Истина;

ФормаВыбора.РегистрСведенийСписок.Отбор.Объект.Значение = Контрагент;
ФормаВыбора.РегистрСведенийСписок.Отбор.Объект.Использование = Истина;

СтруктураОтбораАдресов = Новый СписокЗначений;
СтруктураОтбораАдресов.Добавить(Перечисления.ТипыКонтактнойИнформации.Адрес);
ФормаВыбора.РегистрСведенийСписок.Отбор.Тип.ВидСравнения = ВидСравнения.ВСписке;
ФормаВыбора.РегистрСведенийСписок.Отбор.Тип.Значение = СтруктураОтбораАдресов;
ФормаВыбора.РегистрСведенийСписок.Отбор.Тип.Использование = Истина;
ФормаВыбора.ЭлементыФормы.РегистрСведенийСписок.Колонки.Тип.Видимость = Ложь;

ВыбранныйАдрес = ФормаВыбора.ОткрытьМодально();

Если ЗначениеЗаполнено(ВыбранныйАдрес) Тогда
    Элемент.Значение = ВыбранныйАдрес;
КонецЕсли;

II. Решение задачи через СписокЗначений для конфигураций на платформе 8.3, управляемых форм, Бухгалтерии 3.0

пример кода:

&НаКлиенте
Процедура ТабличнаяЧасть1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ДанныеВыбора = Новый СписокЗначений;
    ДанныеВыбора.ЗагрузитьЗначения(ТабличнаяЧасть1НачалоВыбораНаСервере());
    
КонецПроцедуры

&НаСервере
Функция ТабличнаяЧасть1НачалоВыбораНаСервере()
    
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
    НайденныеСтроки = Объект.Контрагент.КонтактнаяИнформация.НайтиСтроки(ПараметрыОтбора);
    МассивВыбора = Новый Массив;
    Для Каждого Строка из НайденныеСтроки Цикл
        МассивВыбора.Добавить(Строка.Представление);
    КонецЦикла;
    Возврат МассивВыбора;
    
КонецФункции

Получившийся выпадающий список адресов:

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

 

III. Решение задачи через ФормуВыбора для конфигураций на платформе 8.3, управляемых форм, Бухгалтерии 3.0

III.1.Что нужно сделать в форме-приемнике (форме Владельца)

У нас есть некая табличная часть. В один из её реквизитов мы хотим добавить адрес контрагента, используя форму выбора адреса. В моем примере это "ТабличнаяЧасть1" с реквизитом "Адрес" типа Строка. Соотвественно в моей обработке есть и сам реквизит "Контрагент" типа СправочникСсылка.Контрагенты. Важно не забыть добавить кнопку выбора.

 

Дальше объявляем у Адреса событие НачалоВыбора. В диалоговом окне выбираем только "на клиенте"

В этом событии должен отработать следующий код:

&НаКлиенте
Процедура ТабличнаяЧасть1АдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    //Не забудем отменить Стнадартную обработку
    СтандартнаяОбработка = Ложь;
    
    //Проверим, чтобы был выбран контрагент
    Если Объект.СсылкаКонтрагент.Пустая() Тогда
        ВвестиЗначение(Объект.СсылкаКонтрагент, "Выберите контрагента");
    КонецЕсли;
    
    Если НЕ Объект.СсылкаКонтрагент.Пустая() Тогда
        
        //Откроем форму выбора адреса
        //В параметры можно передать все необходимые данные для формы выбора. Но в нашем случае это только Контрагент
        ПараметрыФормы = Новый Структура();
        ПараметрыФормы.Вставить("СсылкаКонтрагент", Объект.СсылкаКонтрагент);
        
        ОткрытьФорму("ВнешняяОбработка.ПримерРаботыСОповеститьОВыборе.Форма.ВыборАдреса", ПараметрыФормы, ЭтаФорма);
        
    КонецЕсли;
    
КонецПроцедуры

III.2.Что нужно сделать в форме-источнике

Дошли до формы выбора адреса. У меня получилась такая простенькая форма:

Нам понадобятся два реквизита СпрОбъект (тип СправочникОбъект.Контрагенты) и соответственно СсылкаКонтрагент. Вытаскиваем (перетягиваем) на форму Табличную часть "Контактная информация" у СпрОбъект и ничего заполнять не надо, просто в дальнейшем получим объект у СсылкаКонтрагент и информация будет отражаться на форме.

Что необходимо сделать в модуле формы выбора:

Во-первых,

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Заполним реквизиты формы из ранее переданных параметров.
    ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, "СсылкаКонтрагент");
КонецПроцедуры

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

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

&НаСервере
Процедура ПриОткрытииНаСервере()
    
    //Заполним таблицу контактной информации
    КонтрагентОбъект = СсылкаКонтрагент.ПолучитьОбъект();
    ЗначениеВРеквизитФормы(КонтрагентОбъект, "СпрОбъект");  
                                                                                
КонецПроцедуры

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

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

III.3.Что еще нужно сделать в форме-приемнике


Объявить процедуру ОбработкаВыбора только "на клиенте" и вставить подобный код:

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    
    ДанныеСтроки = Новый Структура("Адрес, АдресЗаполнено"); //имя заполняемого реквизита
    ТекущиеДанные = Элементы.ТабличнаяЧасть1.ТекущиеДанные;
    
    ЗаполнитьЗначенияСвойств(ДанныеСтроки, ВыбранноеЗначение); //заполним структуру
    
    ЗаполнитьЗначенияСвойств(ТекущиеДанные, ДанныеСтроки); //заполним табличную часть
    
    Модифицированность = Истина;
    
КонецПроцедуры

III.4.Как записать изменения Контактной информации из формы выбора

Как видно из рисунка выше, у меня объявлена Команда формы - ЗаписатьИзменения. На ней "висит" следующая процедура:

//Записать изменения
&НаКлиенте
Процедура ЗаписатьИзменения(Команда)
    ЗаписатьИзмененияНаСервере();
КонецПроцедуры

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

 

IV. Вопрос к Знатокам- "Баг или криворук?"

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

Вопрос очень простой: Что же делать, как же быть в такой ситуации?

Покопавшись самостоятельно, удалось найти, что в самых свежих релизах Бухгалтерии 3.0 такая ошибка не воспроизводится. Разработчики добавили реквизит формы типа "Булево" (у меня это АдресЗаполнено, у них это АналитикаУчетаЗаполнена) и его в ОбработкеВыбора исходной формы заполняют. НО если (с учетом этого добавления) запустить мою обработку на старом релизе - строчка пропадет, если на новом - останется. Платформу при этом не меняем. В связи с этим, всё равно хочется докопаться до сути. КАК при одной платформе, но разных релизах один и тот же код отрабатывает по-разному, учитывая, что никакие общие модули не используем?

 

Форма выбора ОповеститьОВыборе() ОповеститьОВыборе оповестить о выборе контактная информация КонтактнаяИнформация Контрагенты БП 3.0 бухгалтерия пропадает строка справочник контрагентов форма контактной

См. также

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

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

7200 руб.

02.08.2023    4400    17    1    

35

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

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

29400 руб.

29.06.2023    6273    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    6966    74    17    

30

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

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

2 стартмани

22.04.2024    5396    dimanich70    15    

22

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

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

01.03.2024    7698    dimanich70    10    

19

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

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

1 стартмани

27.10.2023    3792    30    TempTablesManager    14    

54

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

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

2 стартмани

22.08.2023    3769    59    progmaster    8    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. GAVe 10.01.17 17:13 Сейчас в теме
Пора скрывать это к БП 3.0 относится.
ИМХО, у всех уже БП 3.1.
2. spacecraft 10.01.17 17:23 Сейчас в теме
(1) и как оно там в будущем? Коммунизм победит?
3. Designer1C 456 28.11.19 17:54 Сейчас в теме
Благодарю за статью !
Как для меня, так очень доходчиво написано !
Быстро помогло решить одну интерфейсную задачку.
4. ilya4 20.01.21 19:49 Сейчас в теме
Тоже наблюдал баг с исчезновением заполненных реквизитов, когда есть передача данных между переменными типа "объект".
Для исправления мне помогло для передачи данных между объектом-реквизитом формы и объектом-источником воспользоваться командой КопироватьДанныеФормы(ОбъектИсточник,ОбъектНаФорме) , на сервере
Оставьте свое сообщение