|
Автоматическое заполнение водителя, при выборе экспедитора в документе. | ☑ | ||
---|---|---|---|---|
0
Varlant1n
12.01.21
✎
08:57
|
Здравствуйте, дорогие форумчане! У меня вопрос о реализации одной задачи. У меня есть документ. В этой форме документа есть поле ввода №1. Рядом с этим полем есть поле ввода №2. Так вот мне надо, чтобы при выборе значения поля ввода №1, поле №2 автоматически брало ПОСЛЕДНЕЕ значение из другого документа, где изначально и создается список в котором есть поле №1 и поле №2 и период. Надеюсь объяснил доходчиво. Спасибо заранее, дорогие друзья.
|
|||
1
ДенисЧ
12.01.21
✎
08:59
|
Не доходчиво.
Не объяснил, в чём проблема. Как поймать изменение Поля1? Или как выбрать последнее значение из документаДругой? |
|||
2
Varlant1n
12.01.21
✎
09:07
|
(1) Еще раз постараюсь объяснить. Есть документ "ЗаданиеМенеджеру", в форме документа "ЗаданиеМенеджеру" есть два поля ввода над списком. Это поле ввода №1 и поле ввода №2. При выборе поля ввода №1, мне надо, чтобы поле ввода №2 автоматически брало свое последнее значение из документа ЗаказКлиента, где в одной из форм данного документа есть список в котором есть период, поле №1 и поле №2. То есть выбираю №1 и документ автоматом мне пишет №2 из другого документа.
|
|||
3
Varlant1n
12.01.21
✎
09:09
|
(2) При этом я надеюсь понятно, что выбирая поле №1 документ выбирает значение поля №2 из другого документа по полю №1 (равно) и последнее по периоду
|
|||
4
acht
12.01.21
✎
09:16
|
(2) Так что не получается-то?
- Не можешь обработать выбор поля1? - Не можешь получить последнее значение из документа? - Не можешь установить значение поля2? - Вооббще ничего не понимаешь? Про что тебе рассказывать? |
|||
5
Paint_NET
12.01.21
✎
09:18
|
(4) Готовый запрос вынь да положь :)
(0) Ты практически всё сформулировал как надо, осталось только переложить это на несколько строк кода и примитивный запрос. |
|||
6
Varlant1n
12.01.21
✎
09:21
|
(4) Не могу установить поле №2.
|
|||
7
Paint_NET
12.01.21
✎
09:26
|
(6) В каком месте? Покажи код.
|
|||
8
acht
12.01.21
✎
09:30
|
(6) Элемент формы, отображающий Поле2 связан с данными. Надо установить этим данным нужное значение. Конкретнее можно сказать, только увидев код/скриншоты/сообщение об ошибке.
|
|||
9
El_Duke
гуру
12.01.21
✎
09:35
|
(0) (2) Все это полный бред и бабуйня, так и передайте постановщику задачи
|
|||
10
Paint_NET
12.01.21
✎
09:37
|
(9) Кстати, да. Корявая реализация.
|
|||
11
El_Duke
гуру
12.01.21
✎
09:55
|
(10) Реализацию можно сделать идеальной, сама идея тупая.
Выбрал ты экспедитора, по нему подобрался водила из прошлого документа 3-х дневной давности. А сегодня он на больничном/в прогуле/в отпуске или вообще уволился. Как это отслеживать ? Все это выдумки ленивого начальника ленивых менеджеров для якобы упрощения работы. Такие хотелки надо зарубать на корню как крайнюю форму тупости |
|||
12
Fedor-1971
12.01.21
✎
11:14
|
(11) Ну уж, так-то сразу, тупым серпом и по кокам
Всё зависит от взаимодействия сотрудников и размера конторы Логика в запросе есть: 1 раз устанавливаем водилу и дальше поле заполняется автоматом, т.е. набиваем машину одному, потом меняем на другого и т.д. Ни что не мешает менеджеру узнать языком кто на линии и в первом документе выбрать его |
|||
13
El_Duke
гуру
12.01.21
✎
11:18
|
(12) И зачем тогда нужны все извраты с подбором, если все равно придется языком узнавать кто есть и выбирать другого если автоматом подобранного нет ?
|
|||
14
Fedor-1971
12.01.21
✎
11:26
|
(13) Узнали 1 раз, а подбираем в многих документах (например, готовим отгрузки в режиме "Вот прямо сейчас повезут").
Если водил штук 20 с близкими фамилиями (Попов, Папов, Папанеску, Попович) или много старых записей с уволенными, то выбор конкретного станет вопросом. Мы же не знаем что за БД у ТС, степень её засорённости и где хранятся данные водителей (вполне возможно, что вместе с доверенностями получателей при реализации) |
|||
15
El_Duke
гуру
12.01.21
✎
11:31
|
(14) Это все замечательно, только это не то что автор хочет
Ему надо по экспедитору подбирать водителя из последнего документа. Но никто не может гарантировать что он сегодня на работе. И если это надо уточнять по телефону - теряется смысл всей задумки т.к. придется все редактировать руками У меня вопрос: зачем весь этот цирк ? |
|||
16
Fedor-1971
12.01.21
✎
11:45
|
(15) так это и есть запрос ТС: Создаём документ, актуализируем 1 раз водилу, сохраняем, в следующем получаем актуального водилу автоматически
Всё это имеет малый смысл, если у менеджера 2-3 документа в день и много водителей Но если возник вопрос, значит менеджеры пашут аки пчёлки с десятком отгрузок в час, что нам не известно. |
|||
17
El_Duke
гуру
12.01.21
✎
11:58
|
(16) Я задачу понял совсем иначе, автору не помешает уточнить еще раз
Пока что никакого смысла в реализации не видно |
|||
18
El_Duke
гуру
12.01.21
✎
12:06
|
Если много отгрузок, то зачем выбирать одного и того же водителя ? Он уже уехал с предыдущим грузом, а мы его выбираем под другую доставку ? Смысл ?
|
|||
19
Varlant1n
12.01.21
✎
12:31
|
Ребят, я немного поменял, некоторые моменты, во-первых перенес данные в регистр сведений. То есть туда будет записываться пара Поле №1 (Экспедитор) и Поле №2 (Водитель) и оттуда будут браться данные для документа. ТО есть при выборе Поля №1 в документе, автоматов из регистра сведений будет браться его пара, то есть Поле №2. Таким образом я написал запрос, но в нем я затупил, точнее знаний не хватает, сорри, я учусь((( Посмотрите, я вообще правильно иду? :
Запрос = Новый Запрос "ВЫБРАТЬ | СведенияОбЭкспедиторахСрезПоследних.Период КАК Период, | СведенияОбЭкспедиторахСрезПоследних.Экспедитор КАК Экспедитор, | СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель |ИЗ | РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних КАК СведенияОбЭкспедиторахСрезПоследних |УПОРЯДОЧИТЬ ПО | СведенияОбЭкспедиторахСрезПоследних.Период УБЫВ"; Запрос.УстановитьПараметр("Экспедитор", Экспедитор); Запрос.УстановитьПараметр("Водитель", Водитель); Результат = Запрос.Выполнить().Выбрать(); ВыбранныйЭкспедитор = ЭтаФорма.Элементы.Экспедитор; Пока Результат.Следующий() Цикл Если ВыбранныйЭкспедитор = Экспедитор Тогда Водитель.Выбрать(); КонецЕсли; КонецЦикла; Но что длеать с этим всем я не понимаю |
|||
20
El_Duke
гуру
12.01.21
✎
12:37
|
(19) Ты не объяснил толком для чего все это нужно, где и как все это будет применяться. Поэтому невозможно оценить правильно/неправильно
Давай для примера практическую ситуацию где это должно работать |
|||
21
Varlant1n
12.01.21
✎
12:44
|
(20) Ситуация такая. Логист планирует пару на период. Каждому экспедитору водителя. Эти данные сохраняются в регистре сведений. Потом при оформлении документы Заказы клиентов. При выборе экспедитора этому заказу, должна автоматом заполниться его пара. То есть его водитель из регистра
|
|||
22
El_Duke
гуру
12.01.21
✎
12:46
|
(21) Прекрасно
Допустим запланировал ваш логист эту пару на понедельник. Экспедитор вышел на работу, а водитель забухал и не вышел Что делать будете ? |
|||
23
acht
12.01.21
✎
12:52
|
(22) Задолбал.
Без доработки: Если не вышел, то исправит ручками. Если вышел, то исправит ручками. С доработкой: Если не вышел, то исправит ручками. Если вышел, то мышкой не пошевелит Как думаешь, что лучше и какой случай "вышел/не вышел" чаще? |
|||
24
Varlant1n
12.01.21
✎
12:53
|
(22) Поэтому поле (водитель) остается полем ввода, на всякий случай, если надо будет вводить ручками
|
|||
25
El_Duke
гуру
12.01.21
✎
12:57
|
(23) Простой вопрос о работе алгоритма тебя бесит ? Может что с нервами не так ?
(24) В чем тогда смысл такой автоматизации ? |
|||
26
Bigbro
12.01.21
✎
12:59
|
(25) в том что невыход - редкое событие и в 95% случаев у нас все нормально.
|
|||
27
acht
12.01.21
✎
13:01
|
(25) В упрощении работы менеджера по заполнению документа путем подстановки значений по умолчанию. Ваш К.О.
|
|||
28
Varlant1n
12.01.21
✎
13:03
|
Я переделал таким образом, потому что при изменении объект может быть и удалением, то есть пустым значением
Если Объект.Экспедитор.ПроверитьЗаполнение() Тогда Запрос = Новый Запрос "ВЫБРАТЬ | СведенияОбЭкспедиторахСрезПоследних.Период КАК Период, | СведенияОбЭкспедиторахСрезПоследних.Экспедитор КАК Экспедитор, | СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель |ИЗ | РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних КАК СведенияОбЭкспедиторахСрезПоследних |УПОРЯДОЧИТЬ ПО | СведенияОбЭкспедиторахСрезПоследних.Период УБЫВ"; Запрос.УстановитьПараметр("Экспедитор", Экспедитор); Запрос.УстановитьПараметр("Водитель", Водитель); Результат = Запрос.Выполнить().Выбрать(); ВыбранныйЭкспедитор = Объект.Экспедитор; Пока Результат.Следующий() Цикл Если ВыбранныйЭкспедитор = Экспедитор Тогда Объект. КонецЕсли; КонецЦикла; |
|||
29
Varlant1n
12.01.21
✎
13:54
|
Переделал дальше. Можете подсказать, как мне из данного запроса значение поля Водитель вставить в документе?
ВыбранныйЭкспедитор = Объект.Экспедитор; Если ЗначениеЗаполнено(ВыбранныйЭкспедитор) Тогда Запрос = Новый Запрос "ВЫБРАТЬ | СведенияОбЭкспедиторахСрезПоследних.Период КАК Период, | СведенияОбЭкспедиторахСрезПоследних.Экспедитор КАК Экспедитор, | СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель |ИЗ | РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних КАК СведенияОбЭкспедиторахСрезПоследних |УПОРЯДОЧИТЬ ПО | СведенияОбЭкспедиторахСрезПоследних.Период УБЫВ"; Запрос.УстановитьПараметр("Экспедитор", Экспедитор); Запрос.УстановитьПараметр("Водитель", Водитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Если ВыбранныйЭкспедитор = Экспедитор Тогда Водитель.Выбрать(); КонецЕсли; КонецЦикла; КонецЕсли; |
|||
30
Varlant1n
12.01.21
✎
14:12
|
Я переделал еще и вот итог:
ВыбранныйЭкспедитор = Объект.Экспедитор; Если ЗначениеЗаполнено(ВыбранныйЭкспедитор) Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СведенияОбЭкспедиторахСрезПоследних.Период КАК Период, | СведенияОбЭкспедиторахСрезПоследних.Экспедитор КАК Экспедитор, | СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель |ИЗ | РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних КАК СведенияОбЭкспедиторахСрезПоследних |УПОРЯДОЧИТЬ ПО | СведенияОбЭкспедиторахСрезПоследних.Период УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Если ВыбранныйЭкспедитор = Выборка.Экспедитор И Объект.Дата = Выборка.Период Тогда КонецЕсли; КонецЦикла; КонецЕсли; |
|||
31
acht
12.01.21
✎
14:26
|
(30) Держи уж
Если ЗначениеЗаполнено(Объект.Экспедитор) Тогда Запрос = Новый Запрос(" |ВЫБРАТЬ ПЕРВЫЕ 1 | СведенияОбЭкспедиторахСрезПоследних.Водитель КАК Водитель |ИЗ | РегистрСведений.СведенияОбЭкспедиторах.СрезПоследних(&Период, | Экспедитор = &Экспедитор | ) КАК СведенияОбЭкспедиторахСрезПоследних |УПОРЯДОЧИТЬ ПО | СведенияОбЭкспедиторахСрезПоследних.Период УБЫВ"); Запрос.УстановитьПараметр("Период", Объект.Дата); Запрос.УстановитьПараметр("Экспедитор", Объект.Экспедитор); Выборка = Запрос.Выполнитью.Выбрать(); Если Выборка.Следующий() Тогда Объект.Водитель = Выборка.Водитель; КонецЕсли; КонецЕсли; |
|||
32
Varlant1n
12.01.21
✎
14:47
|
(31) Так и сделал минут пять назад, но почему-то не заполняется значение поля водитель в документе.
|
|||
33
acht
12.01.21
✎
14:50
|
(32) Значит у тебя или поле редактирования свящано с другими данными, или типа водителя в регистре не совпадает с типом водителя в документе. Бери отладчик и вперед.
|
|||
34
Varlant1n
12.01.21
✎
15:06
|
(33) Типы одни и те же. И отладчик не работает почему-то. То есть никак не реагирует на изменения происходящие с объектом Экспедитор.
|
|||
35
acht
12.01.21
✎
15:13
|
(34) А как он должен реагировать?
|
|||
36
Fedor-1971
12.01.21
✎
16:49
|
(34) Поставь точку останова на строке Выборка = Запрос.Выполнитью.Выбрать();
Таки убедись, что изменения применены (F5 - сохраняем изменения и запускаем 1С) Открываем документ, выбираем экспедитора и попадаем на точку останова шагаем по коду F10 (F11 - если надо зайти в процедуру) Смотрим изменения чего нам надо либо в Табло (Ctrl+Alt+W), либо в Вычислить выражения (Shift + F9) На вкус и цвет все фломастеры разные Если БД серверная, надо убедиться, что на сервере включена отладка |
|||
37
acht
12.01.21
✎
16:57
|
(36) После
Если Объект.Экспедитор.ПроверитьЗаполнение() Тогда Я бы сначала убедился, что он вообще прописал обработчик изменения. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |