Думал, что простая задача, а не получается :(
Есть внешняя обработка с табличной частью "Ведомости на выплату зарплаты". Нужно заполнить эту табличную часть так, чтобы каждая ведомость была только один раз. Просто?
Но еще пожелание такое, чтобы при добавления ведомости не происходило, если такая ведомость в табличной части уже есть.
По кнопке "Подбор" запускается такое:
```1c
    &НаКлиенте
    Процедура Подбор(Команда)

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);

    ОткрытьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.ФормаСписка", ПараметрыФормы,
    Элементы.СписокВедомостей, УникальныйИдентификатор);

    КонецПроцедуры
```
Что здесь неправильно? Или все неправильно? У меня при двойном клике на ведомости открывается сам ведомость.
---
формально нужно использовать ФормаВыбора + оповещение

```1c
    &НаКлиенте
    Процедура Подбор(Команда)
    Оповещение=Новый ОписаниеОповещения("ПодборЗавершение",ЭтотОбъект);
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
    ПараметрыФормы.Вставить("РежимВыбора", Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
    ОткрытьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.ФормаВыбора",ПараметрыФормы,,,,,Оповещение,
    РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПодборЗавершение(Результат,ДопПараметры) ЭКСПОРТ
    Если Результат=Неопределено Тогда
    Возврат;
    КонецЕсли;
    Для каждого Эл из Результат Цикл
    Если Таблица.НайтиСтроки(Новый Структура("Док",Эл)).Количество()=0 Тогда
    НовСтр=Таблица.Добавить();
    НовСтр.Док=Эл;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
При подборе обрабатывать выбранное значение - сначала искать в таблице, есть ли такой документ. Если нет, добавлять, если есть пропускать.
---
формально нужно использовать ФормаВыбора + оповещение

```1c
    &НаКлиенте
    Процедура Подбор(Команда)
    Оповещение=Новый ОписаниеОповещения("ПодборЗавершение",ЭтотОбъект);
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
    ПараметрыФормы.Вставить("РежимВыбора", Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
    ОткрытьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.ФормаВыбора",ПараметрыФормы,,,,,Оповещение,
    РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПодборЗавершение(Результат,ДопПараметры) ЭКСПОРТ
    Если Результат=Неопределено Тогда
    Возврат;
    КонецЕсли;
    Для каждого Эл из Результат Цикл
    Если Таблица.НайтиСтроки(Новый Структура("Док",Эл)).Количество()=0 Тогда
    НовСтр=Таблица.Добавить();
    НовСтр.Док=Эл;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
(1) формально нужно использовать ФормаВыбора + оповещениеЭто работает! Сделал так:
```1c
    //***********************************************************
    &НаКлиенте
    Процедура Подбор(Команда)

    Оповещение=Новый ОписаниеОповещения("ПодборЗавершение",ЭтотОбъект);

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
    ПараметрыФормы.Вставить("РежимВыбора", Истина);

    ОткрытьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.ФормаВыбора",ПараметрыФормы,,,,,Оповещение,
    РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

    &НаКлиенте
    Процедура ПодборЗавершение(Результат,ДопПараметры) ЭКСПОРТ
    Если Результат=Неопределено Тогда
    Возврат;
    КонецЕсли;
    Таблица = Объект.СписокВедомостей;
    Для каждого Эл из Результат Цикл
    Если Таблица.НайтиСтроки(Новый Структура("Ведомость",Эл)).Количество()=0 Тогда
    НовСтр=Таблица.Добавить();
    НовСтр.Ведомость=Эл;
    НовСтр.КВыплате = ПолучитьКВыплатеНаСервере(Эл)
    Иначе
    Сообщить("Уже есть - "+Эл);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры

    //***********************************************************
```
Вот только форма выбора каждый раз закрывается. Это как-то можно победить?
```1c
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
```
Результата не дает - выбор вообще не происходит.
---
ПараметрыФормы .Вставить("РежимВыбора", Истина);
 ПараметрыФормы .Вставить("МножественныйВыбор", МножественныйВыбор);
---
неправильно все, зачем открывать форму? надо по периоду выбрать запросом нужные доки, и поместить их в тзТакая возможность сделана, но бухгалтеру хочется, чтобы можно было выбирать ведомости.
Можно было бы еще свернуть ТЧ (суммы заполняются из ведомостей), но мне показалось, что это не красиво.
---
Если в тч есть колонка ведомость, то буху никто не мешает нажать кнопку добавить и туда добавить что хочет, если надо красиво, осваивайте открытие формы списка и выбор оттуда, и очень много многоточий... Свертка ТЧ типовой функционал, если это ТЧ объекта - выгрузить в ТЗ, Свернуть и обратно
---
буху никто не мешает нажать кнопку добавить и туда добавить что хочетСейчас так и делается. Просто иногда случайно могут в списке получиться дубли документов, а это плохо. Хотел сделать хорошее для бухгалтера. Получиться - хорошо, не получиться - ну что ж поделаешь.
---
ну, тут Вам решать, сколько за это платят, если ни сколько, объясните что сделать нельзя, если сколько-то занимайтесь с формой подбора, ну а проверять дубли можно в тч, например по событию ПриОкончанииРедактирования
---
ПараметрыФормы .Вставить("РежимВыбора", Истина);В списке для выбора есть кнопка "Выбрать", но дальше ни при нажатии на эту кнопку, ни при двойном клике ничего не происходит.
(2) ПараметрыФормы .Вставить("МножественныйВыбор", МножественныйВыбор);Вероятно, предварительно нужно написать
```1c
    МножественныйВыбор=Истина
```
?
---
что мешает посмотреть реализацию функционала подбора в ЗУП?
---
(5) что мешает посмотреть реализацию функционала подбора в ЗУП?Там все как-то сложно. Может я "сложные" места находил? Я раньше что-то похожее делал на ОФ, и это было гораздо проще.
---
неправильно все, зачем открывать форму? надо по периоду выбрать запросом нужные доки, и поместить их в тз