|
Динамический список. Отбор. Как реализовать? | ☑ | ||
---|---|---|---|---|
0
George_e30
04.09.18
✎
14:22
|
Всем доброго дня!
Итак вопрос вот в чем. программно создаются счета из файла (файлов) внешней обработкой. Я прикрепил к ней Динамический список со ссылкой на СчетаНаОплатуПокупателям, там отображаются все счета. Сумел сделать отбор так, чтоб показывало только последний созданный: Загружено.Отбор.Элементы.Очистить(); ЭлементОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = Счет.Номер; Но я хочу сделать, чтоб там в списке появлялся каждый созданный. Ибо обработка забирает все файлы из папки, и создает по ним счета. Если убрать вот это: Загружено.Отбор.Элементы.Очистить(); То первый загруженный (по одному) отображается, но попытка загрузить второй - приводит к пустому списку, не реагирующему и на строку поиска... Подскажите, как организовать? Я попробовал инициализировать поиск ПриОткрытии() &На Клиенте Процедура ПриОткрытии() ЭлементОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; ЭлементОтбора.ПравоеЗначение = "4004 Д "; Но "на сервере", где выполняется создание счета, Элемент отбора - неопределенная переменная. Подскажите, как организовать)) p.S. Я последний раз кодил в 7.7 году этак в 2003, поэтому здесь сразу столкнулся с этими трудностями "На клиенте" на сервере", где не понял, как вообще обмен переменными организовать.. |
|||
1
Krolik Bezobraznik
04.09.18
✎
15:02
|
Вы хотите чтобы в динамический список добавлялся документ по мере того, как он создается у вас при импорте из файла?
|
|||
2
Пес Барбос
04.09.18
✎
15:02
|
Может "ВидСравнения" установить = "Всписке" и "ПравоеЗначение" = массив с номера созданных документов?
|
|||
3
George_e30
04.09.18
✎
15:16
|
попробовал вот так:
ГруппаОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; //далее добавляем первое условие отбора ЭлементОтбора =ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); //ЭлементОтбора.Родитель = ГруппаОтбора; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = Счет.Номер; Не помогло.. |
|||
4
George_e30
04.09.18
✎
15:17
|
(1) да (2) У меня подозрение, что повторная инициализация ЭлементаОтбора и дает пропадание всего из списка..
кмк надо вынести в функцию, только как с передачей переменных быть.. |
|||
5
Fragster
гуру
04.09.18
✎
15:20
|
надо выкинуть динамический список и отображать вместо него таблицу значений со своими добавленными счетами.
|
|||
6
George_e30
04.09.18
✎
15:22
|
(5) И как это сделать?
|
|||
7
Жан Пердежон
04.09.18
✎
15:23
|
(6) позвать настоящего программиста
|
|||
8
George_e30
04.09.18
✎
15:31
|
(2) Как передать с сервера на клиент этот массив?
Идея хорошая, но создавать в цикле отбор не реально, я уже уверен, что повторно инициализировать ЭлементОтбора нельзя. В цикле я создам массив, и как передать его значение в обработку, которая ищет файлы в папке по нажатию кнопки "загрузить"? Возврат "массив"? |
|||
9
Михаил Козлов
04.09.18
✎
16:06
|
(6) Завести ТЧ, поместить на форму, при создании - заполнять ТЧ.
Динамический список - странный элемент для такой задачи. |
|||
10
Krolik Bezobraznik
04.09.18
✎
16:53
|
(8) передавайте список значений, он доступен на сервере и клиенте. Передается элементарно
|
|||
11
Krolik Bezobraznik
04.09.18
✎
16:54
|
(8) А вообще не ясна цель? Просто отобразить документу, которые были созданы?
|
|||
12
George_e30
04.09.18
✎
16:55
|
(11) И по клику открыть созданный документ
|
|||
13
Krolik Bezobraznik
04.09.18
✎
16:56
|
(12) Ну так вам проще тогда так (9)
|
|||
14
George_e30
04.09.18
✎
16:58
|
(13) Пробую разобраться. Но не могу пока найти как..
|
|||
15
Krolik Bezobraznik
04.09.18
✎
16:58
|
(12) Сделайте ТЧ в обработке с реквизитом ссылка на документ и по мере создания документов добавляйте строку в ТЧ
|
|||
16
George_e30
04.09.18
✎
17:16
|
Не понял как строку добавить. Гуглю варианты)
|
|||
17
George_e30
04.09.18
✎
17:17
|
Добавил на форму ТаблицаЗначений. Сделал поле Сыылка на док. А как в него внести - не понятно
|
|||
18
Krolik Bezobraznik
04.09.18
✎
17:23
|
В той процедуре, где создаешь документы, сделай добавление в ТЧ, после успешной записи документа.
Объект обработка доступен и на сервере и на клиенте. |
|||
19
George_e30
04.09.18
✎
17:23
|
<a target="_blank" href="https://radikal.ru"><img src="https://d.radikal.ru/d40/1809/f2/7ad4ebac867b.jpg" /></a>
|
|||
20
D_E_S_131
04.09.18
✎
17:23
|
"...Динамический список со ссылкой на СчетаНаОплатуПокупателям, там отображаются все счета"
и "Но я хочу сделать, чтоб там в списке появлялся каждый созданный" Что сделать-то в итоге хочешь сам понимаешь? |
|||
21
George_e30
04.09.18
✎
17:24
|
||||
22
George_e30
04.09.18
✎
17:24
|
(20) Мне нужен список созданных счетов. Клик по строчке - открытие нужного счета
|
|||
23
D_E_S_131
04.09.18
✎
17:25
|
(22) А динамический список не выводит тебе "список созданных счетов"?
|
|||
24
George_e30
04.09.18
✎
17:29
|
(23) Он выводит список всех счетов. А "отбор" мне удалось создать только по последнему загруженному.
Изначальный вопрос и был, как сделать правильный отбор. |
|||
25
D_E_S_131
04.09.18
✎
17:33
|
(24) При создании новых документов запоминай ссылки в массиве, а по завершении поставь этот массив как условие отбора или параметр запроса динсписка.
|
|||
26
D_E_S_131
04.09.18
✎
17:34
|
Хотя наверное правильнее все же ТЗ заполнять...
|
|||
27
Chameleon1980
04.09.18
✎
17:38
|
Заведи РС который заполняешь ссылками на свои созданные на сервере доки.
в форме уже (если так хочется) выводи ДС с РС |
|||
28
George_e30
04.09.18
✎
17:46
|
(18) Так вот..
Загружено.Счет = Счет.Ссылка Сохранилось без ошибок. Но при запуске - "поле объекта не обнаружено "счет"" (фото не прикрепляется, хотя посмотреть можно) (24) Попробовал. &НаКлиенте Перем ЗагрСписок Экспорт; &НаСервере Функция СоздатьСчет(имяфайла) ЗагрСписок = Новый Массив; ........(создаем счет, записываем) ЗагрСписок.Добавить(Счет.Номер) Возврат (ЗагрСпсок) КонецФункции &НаКлиенте Процедура загрузить(Команда); (ищем файлы в папке) цикл пока есть файлы СоздатьСчет(имяфайла) ... ЭлементОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = ЗагрСписок; Результат - пустое поле |
|||
29
George_e30
04.09.18
✎
17:48
|
(27) Ничего не понял в Сокращениях "ДС" "РС"
|
|||
30
George_e30
04.09.18
✎
18:09
|
Вставил в при открытии:
Процедура ПриОткрытии(Отказ) Сообщить("открываем"); ЗагрЗнач = Новый Массив; ЗагрЗнач.Добавить("4012 "); ЗагрЗнач.Добавить("4015 "); //Загружено.Отбор.ДоступныеПоляОтбора.НайтиПоле("Номер") ГруппаОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; //далее добавляем первое условие отбора ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); //ЭлементОтбора.Родитель = ГруппаОтбора; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = ЗагрЗнач; Отработало! Копаю в сторону передачи массива между функцией СоздатьСчет (в котором соберется массив) и ЗагрузитьИзПапки в котором активизируется отбор по массиву Хотя ТЗ - Интересно понять как |
|||
31
Garykom
гуру
04.09.18
✎
18:15
|
(0) Хммм вам бы после древней 77 для начала понять что такое клиент-сервер и как оно работает.
Будет намного легче и дурацких идей реализовывать не придется )) |
|||
32
Garykom
гуру
04.09.18
✎
18:16
|
(29) Динамический Список, Регистр Сведений
|
|||
33
George_e30
04.09.18
✎
18:17
|
Так вот и непонятно :)) Я и с созданием повозился, но гугл помог))
|
|||
34
George_e30
05.09.18
✎
12:45
|
Итак, уважаемые форумчане, расскажите мне как заставить вот это работать:
&НаКлиентe Процедура ПриОткрытии(отказ) ЗагрДок = Новый Массив; Конец процедуры &НаКлиентe Процедура ЗагрузитьВсё() //Выбрать все файлы из папки и Цикл Пока файлы не кончились :) СоздатьСчет(имяфайла) КонецЦикла; ГруппаОтбора = Загружено.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = ЗагрДок; КонецПроцедуры &НаСервере Функция СоздатьСчет(ИмяФайла) //Тут значится создаем и сохраняем счет "Счет" ЗагрДок.Добавить(Счет.номер); Возврат ЗагрДок; КонецФункции ..... Как заставить это работать? чтоб переменная массива была везде доступна. В таком виде даже не сохраняется обработка - переменная ЗагрДок неопределенная. Как ее сделать "определенной" и доступной? В 7.7 таких проблем, сколько помню не было... |
|||
35
Вафель
05.09.18
✎
12:55
|
добавь как реквизит формы
|
|||
36
George_e30
05.09.18
✎
14:28
|
(35) Тип "Массив" не может использоваться в данных формы.
|
|||
37
George_e30
05.09.18
✎
16:29
|
Что ж, господа, я добился своего (но не до конца) с Динамическим списком.
Единственное, что пока не совсем устраивает каждое нажатие на "загрузить" переинициализирует массив. Т.е. он при каждом нажатии на кнопку "Загрузить" стирается(удаляются записи), и создаются новые. Как объявить его (массив) всего один раз - не понял, может все-таки кто поможет? Сделал так: &НаСервере Функция СоздатьСчет(ИмяФайла, ЗагрДок) //Создаем счет "Счет", записываем ЗагрДок.Добавить(Счет.Номер); Возврат ЗагрДок; КонецФункции &НаКлиенте Процедура Загрузить()//Вызывается по нажатию кнопки ЗагрДок = Новый Массив; //Поиск файлов в папке и Цикл Пока "Файлы не кончились" СоздатьСчет(ИмяФайла, ЗагрДок); КонецЦикла; //Очищаем отобор //Создаем отбор снова ЭлементОтбора.ПравоеЗначение = ЗагрДок; КонецПроцедуры Мне получается надо избавится от объявления переменной ЗагрДок в процедуре "загрузить", и объявить ее ПриОткрытии, но так, чтоб она "попала" в процедуру "загрузить", чтоб в дальнейшем в нее только прибавляло значения... Как это сделать? Как ее передать |
|||
38
Михаил Козлов
05.09.18
✎
16:40
|
(37) Отказаться от ДС.
|
|||
39
George_e30
05.09.18
✎
16:49
|
(38) И что сделать? ТЗ?
Я вчера вообще не понял, как ее заполнять, когда она на форме создана... Как разберусь с ДС, попробую повторить всё то же самое с ТЗ, а пока нашему бухгалтеру надо сделать рабочий вариант) попробовал вот так: Если ЗагрДок = Неопределено Тогда ЗагрДок = Новый Массив; КонецЕсли Но... Опять "переменная не определена"(( в условии |
|||
40
Chameleon1980
05.09.18
✎
17:09
|
Блин ну подсказали уже что такое ДС и РС
пиши при создании чего-то там в Регистр сведений (РС) и отображай этот РС в ДС (динамический список). никаких заморочек лишних |
|||
41
Михаил Козлов
05.09.18
✎
17:47
|
(39) 1. Добавляете в обработку ТЧ "СозданныеСчета".
2. В реквизитах формы появляется реквизит СозданныеСчета - ТЧ обработки с реквизитами ТЧ. 3. Вытягиваете этот реквизит на форму. 4. При создании нового счета в Объект.СозданныеСчета добавляете новую строку со ссылкой на созданный документ. |
|||
42
George_e30
06.09.18
✎
12:58
|
(41) ТЧ и ТЗ - это одно и то же?
Я добавил ТЗ, добавил ей реквизит "счет", справочникСсылка.СчетаНаОплатуПокупателям. Как туда добавить строку? Вот чего я не понял. СозданныеСчета.Счет = Счет.Ссылка - Поле объекта не обнаружено.. ............................................... (40) Тоже пробовал посмотреть. Добавляю реквизит формы, и пробую ему присвоить тип РегистрСведений. Но их там полно, и я е нашел подходящего.. Что за РегистрСведений, и какого типа он должен быть... |
|||
43
George_e30
06.09.18
✎
13:50
|
(41) Не СправочникСсылка, а ДокументСсылка
Нагуглил: НовСтр = СозданныеСчета.Добавить(); НовСтр = Счет.Ссылка; Сделал - в результате 2 пустые (2счета создаю) строки, в которые можно выбрать счет |
|||
44
Garykom
гуру
06.09.18
✎
13:55
|
Поймите простую вещь, даже если вы были супер-пупер программистом на 1С "7.7 году этак в 2003" то писать на 8.Х УФ не выйдет.
Никак не выйдет - сложность освоить 1С8 + УФ + клиент/сервер примерно в 3 раза выше чем простую 1С 7.7 |
|||
45
George_e30
06.09.18
✎
14:03
|
(44) Не спорю) Но я упертый)) И в общем-то всему научился сам))
Счет-то я как-то создал. Причем нигде не нашел полной информации, например как СрокОплаты сделать. Кстати с этим вопросом тут и зарегился, но ответ нашел сам. У меня что-то уже выходит с ТЗ, но кмк я все таки вернусь к результату с РС и ДС. Подскажите только как РС использовать :) |
|||
46
Garykom
гуру
06.09.18
✎
14:06
|
(45) Читай Радченко
|
|||
47
George_e30
06.09.18
✎
14:09
|
Спасибо! Уже скачал)
|
|||
48
Chameleon1980
06.09.18
✎
14:46
|
запись в РС менеджером примерно так выглядит:
МенеджерЗаписи=РегистрСведений.Твой.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Поле1=Значение1; МенеджерЗаписи.Поле2=Значение2; МенеджерЗаписи.Записать(); |
|||
49
George_e30
06.09.18
✎
14:50
|
Всем спасибо, я получил, что хотел :)
&НаКлиенте Перем ЗагрДок Экспорт; &НаСервере Функция СоздатьСчет(ИмяФайла, ЗагрДок) //Создаем счет "Счет", записываем ЗагрДок.Добавить(Счет.Номер); Возврат ЗагрДок; КонецФункции &НаКлиенте Процедура Загрузить()//Вызывается по нажатию кнопки //Поиск файлов в папке и Цикл Пока "Файлы не кончились" СоздатьСчет(ИмяФайла, ЗагрДок); КонецЦикла; //Очищаем отобор //Создаем отбор снова ЭлементОтбора.ПравоеЗначение = ЗагрДок; КонецПроцедуры Процедура ПриОткрытии() ЗагрДок = Новый Массив; КонецПроцедуры Отдельная благодарность Garykom за подсказаную книжку и Chameleon1980 за подсказку по РегиструСведений. Сейчас буду пробовать его.. ТЗ не очень удобно - там клик по строчке не откроет счет, а даст выбрать (как номенклатуру в счете) ДС в моем случае - удобнее. |
|||
50
Михаил Козлов
06.09.18
✎
16:13
|
(43) Так не пробовали: НовСтр.Счет = Ссылка на созданный документ "СчетНаОплатуПокупателю";
НовСтр.Счет - реквизит (ТЗ или ТЧ) нужного типа. (49) "ТЗ не очень удобно" - Вы не правы: посмотрите свойства поля ввода. Можно "снести" возможность выбора, а кнопка открытия ставится автоматом. Можно еще использовать события поля ввода. |
|||
51
George_e30
12.09.18
✎
12:47
|
И еще раз всем добрый день!
Вопрос вот в чем. У списка счетов есть столбец "оплачен", ПеречисленеСсылка.СтатусОплатыСчетов. В форме списка самих счетов (а там тоже динамич.список) все ок А у меня этот столбец называется почему-то УдалитьСтатусОплаты, имеет ссылку туда же ПеречисленеСсылка.СтатусОплатыСчетов, а на форме выглядит вот так "(не используется) Статус Оплаты), и реально не используется, т.е. не отобюражается значение. Как заставить его использоваться? |
|||
52
hhhh
12.09.18
✎
13:35
|
(51) нуЮ у поля на форме поменять заголовок. Вместо "(не используется) Статус Оплаты" вбить туда "Статус оплаты".
|
|||
53
George_e30
12.09.18
✎
13:59
|
(52) Заголовка не было вообще. Ввел, он появился.. Но данные в списке но отображаются... Почему и как исправить?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |