Вход | Регистрация


1С:Предприятие ::

Метки: 

Динамический список. Отбор. Как реализовать?

Я
   George_e30
 
04.09.18 - 14:22
Всем доброго дня!

Итак вопрос вот в чем. программно создаются счета из файла (файлов) внешней обработкой. Я прикрепил к ней Динамический список со ссылкой на СчетаНаОплатуПокупателям, там отображаются все счета.
Сумел сделать отбор так, чтоб показывало только последний созданный:

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

    ЭлементОтбора.ПравоеЗначение = Счет.Номер;

Но я хочу сделать, чтоб там в списке появлялся каждый созданный. Ибо обработка забирает все файлы из папки, и создает по ним счета.

Если убрать вот это:
Загружено.Отбор.Элементы.Очистить();
То первый загруженный (по одному) отображается, но попытка загрузить второй - приводит к пустому списку, не реагирующему и на строку поиска...

Подскажите, как организовать? Я попробовал инициализировать поиск ПриОткрытии()
&На Клиенте
Процедура ПриОткрытии()
ЭлементОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
 ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
    ЭлементОтбора.ПравоеЗначение = "4004 Д     ";

Но "на сервере", где выполняется создание счета, Элемент отбора - неопределенная переменная.

Подскажите, как организовать))
p.S. Я последний раз кодил в 7.7 году этак в 2003, поэтому здесь сразу столкнулся с этими трудностями "На клиенте" на сервере", где не понял, как вообще обмен переменными организовать..
 
 
   Krolik Bezobraznik
 
1 - 04.09.18 - 15:02
Вы хотите чтобы в динамический список добавлялся документ по мере того, как он создается у вас при импорте из файла?
   Пес Барбос
 
2 - 04.09.18 - 15:02
Может "ВидСравнения" установить = "Всписке" и "ПравоеЗначение" = массив с номера созданных документов?
   George_e30
 
3 - 04.09.18 - 15:16
попробовал вот так:
    ГруппаОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;

//далее добавляем первое условие отбора

ЭлементОтбора =ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
//ЭлементОтбора.Родитель = ГруппаОтбора;

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = Счет.Номер;

Не помогло..
   George_e30
 
4 - 04.09.18 - 15:17
(1) да (2) У меня подозрение, что повторная инициализация ЭлементаОтбора и дает пропадание всего из списка..
кмк надо вынести в функцию, только как с передачей переменных быть..
   Fragster
 
5 - 04.09.18 - 15:20
надо выкинуть динамический список и отображать вместо него таблицу значений со своими добавленными счетами.
   George_e30
 
6 - 04.09.18 - 15:22
(5) И как это сделать?
   Жан Пердежон
 
7 - 04.09.18 - 15:23
(6) позвать настоящего программиста
   George_e30
 
8 - 04.09.18 - 15:31
(2) Как передать с сервера на клиент этот массив?
Идея хорошая, но создавать в цикле отбор не реально, я уже уверен, что повторно инициализировать ЭлементОтбора нельзя. В цикле я создам массив, и как передать его значение в обработку, которая ищет файлы в папке по нажатию кнопки "загрузить"?
Возврат "массив"?
   Михаил Козлов
 
9 - 04.09.18 - 16:06
(6) Завести ТЧ, поместить на форму, при создании - заполнять ТЧ.
Динамический список - странный элемент для такой задачи.
   Krolik Bezobraznik
 
10 - 04.09.18 - 16:53
(8) передавайте список значений, он доступен на сервере и клиенте. Передается элементарно
 
 Рекламное место пустует
   Krolik Bezobraznik
 
11 - 04.09.18 - 16:54
(8) А вообще не ясна цель? Просто отобразить документу, которые были созданы?
   George_e30
 
12 - 04.09.18 - 16:55
(11) И по клику открыть созданный документ
   Krolik Bezobraznik
 
13 - 04.09.18 - 16:56
(12) Ну так вам проще тогда так (9)
   George_e30
 
14 - 04.09.18 - 16:58
(13) Пробую разобраться. Но не могу пока найти как..
   Krolik Bezobraznik
 
15 - 04.09.18 - 16:58
(12) Сделайте ТЧ в обработке с реквизитом ссылка на документ и по мере создания документов добавляйте строку в ТЧ
   George_e30
 
16 - 04.09.18 - 17:16
Не понял как строку добавить. Гуглю варианты)
   George_e30
 
17 - 04.09.18 - 17:17
Добавил на форму ТаблицаЗначений. Сделал поле Сыылка на док. А как в него внести - не понятно
   Krolik Bezobraznik
 
18 - 04.09.18 - 17:23
В той процедуре, где создаешь документы, сделай добавление в ТЧ, после успешной записи документа.

Объект обработка доступен и на сервере и на клиенте.
   George_e30
 
19 - 04.09.18 - 17:23
   D_E_S_131
 
20 - 04.09.18 - 17:23
"...Динамический список со ссылкой на СчетаНаОплатуПокупателям, там отображаются все счета"
и
"Но я хочу сделать, чтоб там в списке появлялся каждый созданный"

Что сделать-то в итоге хочешь сам понимаешь?
   George_e30
 
21 - 04.09.18 - 17:24
   George_e30
 
22 - 04.09.18 - 17:24
(20) Мне нужен список созданных счетов. Клик по строчке - открытие нужного счета
   D_E_S_131
 
23 - 04.09.18 - 17:25
(22) А динамический список не выводит тебе "список созданных счетов"?
   George_e30
 
24 - 04.09.18 - 17:29
(23) Он выводит список всех счетов. А "отбор" мне удалось создать только по последнему загруженному.
Изначальный вопрос и был, как сделать правильный отбор.
   D_E_S_131
 
25 - 04.09.18 - 17:33
(24) При создании новых документов запоминай ссылки в массиве, а по завершении поставь этот массив как условие отбора или параметр запроса динсписка.
   D_E_S_131
 
26 - 04.09.18 - 17:34
Хотя наверное правильнее все же ТЗ заполнять...
   Chameleon1980
 
27 - 04.09.18 - 17:38
Заведи РС который заполняешь ссылками на свои созданные на сервере доки.

в форме уже (если так хочется) выводи ДС с РС
   George_e30
 
28 - 04.09.18 - 17:46
(18) Так вот..
Загружено.Счет = Счет.Ссылка
Сохранилось без ошибок.
Но при запуске - "поле объекта не обнаружено "счет""
(фото не прикрепляется, хотя посмотреть можно)

(24) Попробовал.
&НаКлиенте
Перем ЗагрСписок Экспорт;

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

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

Результат - пустое поле
   George_e30
 
29 - 04.09.18 - 17:48
(27) Ничего не понял в Сокращениях "ДС" "РС"
   George_e30
 
30 - 04.09.18 - 18:09
Вставил в при открытии:

Процедура ПриОткрытии(Отказ)
    Сообщить("открываем");
    ЗагрЗнач = Новый Массив;
    ЗагрЗнач.Добавить("4012       ");
    ЗагрЗнач.Добавить("4015       ");
    //Загружено.Отбор.ДоступныеПоляОтбора.НайтиПоле("Номер")

ГруппаОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;

//далее добавляем первое условие отбора

ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
//ЭлементОтбора.Родитель = ГруппаОтбора;

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ЗагрЗнач;

Отработало!
Копаю в сторону передачи массива между функцией СоздатьСчет (в котором соберется массив) и ЗагрузитьИзПапки в котором активизируется отбор по массиву

Хотя ТЗ - Интересно понять как
   Garykom
 
31 - 04.09.18 - 18:15
(0) Хммм вам бы после древней 77 для начала понять что такое клиент-сервер и как оно работает.

Будет намного легче и дурацких идей реализовывать не придется ))
   Garykom
 
32 - 04.09.18 - 18:16
(29) Динамический Список, Регистр Сведений
   George_e30
 
33 - 04.09.18 - 18:17
Так вот и непонятно :)) Я и с созданием повозился, но гугл помог))
 
 
   George_e30
 
34 - 05.09.18 - 12:45
Итак, уважаемые форумчане, расскажите мне как заставить вот это работать:

&НаКлиентe
Процедура ПриОткрытии(отказ)
ЗагрДок = Новый Массив;
Конец процедуры

&НаКлиентe
Процедура ЗагрузитьВсё()
//Выбрать все файлы из папки и 

Цикл Пока файлы не кончились :)
СоздатьСчет(имяфайла)
КонецЦикла;

ГруппаОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;


ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

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

&НаСервере
Функция СоздатьСчет(ИмяФайла)
//Тут значится создаем и сохраняем счет "Счет"

ЗагрДок.Добавить(Счет.номер);
Возврат ЗагрДок;
КонецФункции

.....
Как заставить это работать? чтоб переменная массива была везде доступна. В таком виде даже не сохраняется обработка - переменная ЗагрДок неопределенная.
Как ее сделать "определенной" и доступной?
В 7.7 таких проблем, сколько помню не было...
   Вафель
 
35 - 05.09.18 - 12:55
добавь как реквизит формы
   George_e30
 
36 - 05.09.18 - 14:28
(35) Тип "Массив" не может использоваться в данных формы.
   George_e30
 
37 - 05.09.18 - 16:29
Что ж, господа, я добился своего (но не до конца) с Динамическим списком.

Единственное, что пока не совсем устраивает каждое нажатие на "загрузить" переинициализирует массив. Т.е. он при каждом нажатии на кнопку "Загрузить" стирается(удаляются записи), и создаются новые. Как объявить его (массив) всего один раз - не понял, может все-таки кто поможет?

Сделал так:

&НаСервере
Функция СоздатьСчет(ИмяФайла, ЗагрДок)
    //Создаем счет "Счет", записываем

    ЗагрДок.Добавить(Счет.Номер);
    Возврат ЗагрДок;
КонецФункции

&НаКлиенте
Процедура Загрузить(//Вызывается по нажатию кнопки

    ЗагрДок = Новый Массив;
    //Поиск файлов в папке и 

Цикл Пока "Файлы не кончились"
    СоздатьСчет(ИмяФайла, ЗагрДок);
КонецЦикла;
    //Очищаем отобор

    //Создаем отбор снова

    ЭлементОтбора.ПравоеЗначение = ЗагрДок;
КонецПроцедуры

Мне получается надо избавится от объявления переменной ЗагрДок в процедуре "загрузить", и объявить ее ПриОткрытии, но так, чтоб она "попала" в процедуру "загрузить", чтоб в дальнейшем в нее только прибавляло значения...
Как это сделать?
Как ее передать
   Михаил Козлов
 
38 - 05.09.18 - 16:40
(37) Отказаться от ДС.
   George_e30
 
39 - 05.09.18 - 16:49
(38) И что сделать? ТЗ?
Я вчера вообще не понял, как ее заполнять, когда она на форме создана...

Как разберусь с ДС, попробую повторить всё то же самое с ТЗ, а пока нашему бухгалтеру надо сделать рабочий вариант)

попробовал вот так:
Если ЗагрДок = Неопределено Тогда ЗагрДок = Новый Массив;
КонецЕсли

Но... Опять "переменная не определена"(( в условии
   Chameleon1980
 
40 - 05.09.18 - 17:09
Блин ну подсказали уже что такое ДС и РС

пиши при создании чего-то там в Регистр сведений (РС)
и отображай этот РС в ДС (динамический список).
никаких заморочек лишних
   Михаил Козлов
 
41 - 05.09.18 - 17:47
(39) 1. Добавляете в обработку ТЧ "СозданныеСчета".
2. В реквизитах формы появляется реквизит СозданныеСчета - ТЧ обработки с реквизитами ТЧ.
3. Вытягиваете этот реквизит на форму.
4. При создании нового счета в Объект.СозданныеСчета добавляете новую строку со ссылкой на созданный документ.
   George_e30
 
42 - 06.09.18 - 12:58
(41) ТЧ и ТЗ - это одно и то же?
Я добавил ТЗ, добавил ей реквизит "счет", справочникСсылка.СчетаНаОплатуПокупателям.

Как туда добавить строку? Вот чего я не понял. СозданныеСчета.Счет = Счет.Ссылка - Поле объекта не обнаружено..
...............................................

(40) Тоже пробовал посмотреть. Добавляю реквизит формы, и пробую ему присвоить тип РегистрСведений. Но их там полно, и я е нашел подходящего.. Что за РегистрСведений, и какого типа он должен быть...
   George_e30
 
43 - 06.09.18 - 13:50
(41) Не СправочникСсылка, а ДокументСсылка

Нагуглил:
НовСтр = СозданныеСчета.Добавить();
НовСтр = Счет.Ссылка;
Сделал - в результате 2 пустые (2счета создаю) строки, в которые можно выбрать счет
   Garykom
 
44 - 06.09.18 - 13:55
Поймите простую вещь, даже если вы были супер-пупер программистом на 1С "7.7 году этак в 2003" то писать на 8.Х УФ не выйдет.

Никак не выйдет - сложность освоить 1С8 + УФ + клиент/сервер примерно в 3 раза выше чем простую 1С 7.7
   George_e30
 
45 - 06.09.18 - 14:03
(44) Не спорю) Но я упертый)) И в общем-то всему научился сам))
Счет-то я как-то создал. Причем нигде не нашел полной информации, например как СрокОплаты сделать. Кстати с этим вопросом тут и зарегился, но ответ нашел сам.
У меня что-то уже выходит с ТЗ, но кмк я все таки вернусь к результату с РС и ДС.
Подскажите только как РС использовать :)
   Garykom
 
46 - 06.09.18 - 14:06
(45) Читай Радченко
   George_e30
 
47 - 06.09.18 - 14:09
Спасибо! Уже скачал)
   Chameleon1980
 
48 - 06.09.18 - 14:46
запись в РС менеджером примерно так выглядит:

МенеджерЗаписи=РегистрСведений.Твой.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Поле1=Значение1;
МенеджерЗаписи.Поле2=Значение2;
МенеджерЗаписи.Записать();
   George_e30
 
49 - 06.09.18 - 14:50
Всем спасибо, я получил, что хотел :)

&НаКлиенте
Перем ЗагрДок Экспорт;

&НаСервере
Функция СоздатьСчет(ИмяФайла, ЗагрДок)
    //Создаем счет "Счет", записываем


    ЗагрДок.Добавить(Счет.Номер);
    Возврат ЗагрДок;
КонецФункции

&НаКлиенте
Процедура Загрузить(//Вызывается по нажатию кнопки


    //Поиск файлов в папке и 


Цикл Пока "Файлы не кончились"
    СоздатьСчет(ИмяФайла, ЗагрДок);
КонецЦикла;
    //Очищаем отобор


    //Создаем отбор снова


    ЭлементОтбора.ПравоеЗначение = ЗагрДок;
КонецПроцедуры

Процедура ПриОткрытии()
    ЗагрДок = Новый Массив;
КонецПроцедуры

Отдельная благодарность  Garykom за подсказаную книжку
и  Chameleon1980 за подсказку по РегиструСведений. Сейчас буду пробовать его..

ТЗ не очень удобно - там клик по строчке не откроет счет, а даст выбрать (как номенклатуру в счете) ДС в моем случае - удобнее.
 
 Рекламное место пустует
   Михаил Козлов
 
50 - 06.09.18 - 16:13
(43) Так не пробовали: НовСтр.Счет = Ссылка на созданный документ "СчетНаОплатуПокупателю";
НовСтр.Счет - реквизит (ТЗ или ТЧ) нужного типа.
(49) "ТЗ не очень удобно" - Вы не правы: посмотрите свойства поля ввода. Можно "снести" возможность выбора, а кнопка открытия ставится автоматом. Можно еще использовать события поля ввода.
   George_e30
 
51 - 12.09.18 - 12:47
И еще раз всем добрый день!
Вопрос вот в чем. У списка счетов есть столбец "оплачен", ПеречисленеСсылка.СтатусОплатыСчетов.
В форме списка самих счетов (а там тоже динамич.список) все ок

А у меня этот столбец называется почему-то УдалитьСтатусОплаты, имеет ссылку туда же ПеречисленеСсылка.СтатусОплатыСчетов, а на форме выглядит вот так "(не используется) Статус Оплаты), и реально не используется, т.е. не отобюражается значение.

Как заставить его использоваться?
   hhhh
 
52 - 12.09.18 - 13:35
(51) нуЮ у поля на форме поменять заголовок. Вместо "(не используется) Статус Оплаты" вбить туда "Статус оплаты".
   George_e30
 
53 - 12.09.18 - 13:59
(52) Заголовка не было вообще. Ввел, он появился.. Но данные в списке но отображаются... Почему и как исправить?



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует