|
Поиск "движений" по регистратору | ☑ | ||
---|---|---|---|---|
0
ksTheme
18.02.13
✎
15:29
|
Здравствуйте, недавно столкнулся с проблемой, о которой сейчас расскажу по порядку :)
Появилась необходимость проверки склада при проведении по регистру накопления "ТоварыНаСкладах". Первой мыслью пришло в голову создание проверки в модуле самого регистратора в процедуре "ПередЗаписью", но я не смог получить инф-ию по складам... После этого решил сделать "подписку" (процедура "обработка проведения") на все документы-регистраторы этого регистра. Создал новый модуль (в нем все мои изменения) создал подписку и написал простейший запрос: // Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладах.Склад, | ТоварыНаСкладах.Номенклатура |ИЗ | РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах |ГДЕ | ТоварыНаСкладах.Регистратор = &регистратор"; РегистраторСсылка = Источник.ссылка; Запрос.УстановитьПараметр("регистратор", РегистраторСсылка); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл КонецЦикла; ///////////////////////////////// Результат возвращается пустой! КАК, ПОЧЕМУ? для меня совсем непонятно. решил поэкспериментировать и в этом модуле обратился к типовой экспортной процедуре: "ТаблицаДвижений = ПолныеПрава.ОпределитьНаличиеДвиженийПоРегистратору(РегистраторСсылка);" Результат снова пустой, я уже начал думать что передаваемая ссылка неправильная, но это исключено. Если передавать ссылку на регистратор через реквизит документа (как и реализовано в тип. конф. "на примере перейти-движения по регистрам") все работает. Теперь сижу ломаю мозг. Помогите если сможете плз) |
|||
1
Михаил Козлов
18.02.13
✎
15:32
|
Движения еще не записаны.
|
|||
2
ksTheme
18.02.13
✎
15:38
|
(1) Записаны конечно.
|
|||
3
Reset
18.02.13
✎
15:40
|
Наверное, движения еще не записаны.
|
|||
4
hhhh
18.02.13
✎
15:41
|
Движения еще не записаны, конечно
|
|||
5
ksTheme
18.02.13
✎
15:41
|
Я извиняюсь, забыл уточнить, у меня две подписки на обработкуПроведения и на ОбработкуУдалениеПроведения и результат пустой во втором случае.
|
|||
6
Naumov
18.02.13
✎
15:43
|
а что мешает подписку на набор записей регистра сделать?
|
|||
7
ksTheme
18.02.13
✎
15:45
|
(6) Приведите пример пожалуйста )) И все равно вопрос остается, почему пустой результат, ведь вроде все верно?
|
|||
8
ksTheme
18.02.13
✎
16:24
|
(6)Подписка на набор записей действует при проведении документа, а как сделать при отмене проведения(набор записей пуст)?
|
|||
9
Нуф-Нуф
18.02.13
✎
16:25
|
(8) при отмене проведения подписка тоже сработает
|
|||
10
GANR
18.02.13
✎
16:27
|
(0) Свойство "Удаление движений" у документа во что установлено?
|
|||
11
GANR
18.02.13
✎
16:28
|
+(10) Если "Удалять автоматически" - тогда понятно.
|
|||
12
Naumov
18.02.13
✎
16:32
|
(8) Какое вам дело до удаляемых записей?
|
|||
13
Жан Пердежон
18.02.13
✎
16:34
|
(12) жалко наверно
|
|||
14
ksTheme
18.02.13
✎
16:36
|
(9) При отмене она работает но набор записей пустой, они не вносятся со знаком минус, просто удаляются уже имеющиеся движения
|
|||
15
GANR
18.02.13
✎
16:37
|
(14) что в (10)?
|
|||
16
ksTheme
18.02.13
✎
16:38
|
у нас менеджеры любят проводить и отменять проведение документов по "чужим" складам, а люди материально ответственные из-за этого страдают
|
|||
17
ksTheme
18.02.13
✎
16:39
|
(15) даже не представляю о чем вы ...((
|
|||
18
Михаил Козлов
18.02.13
✎
16:41
|
(16) Обработайте в ПередЗаписью
|
|||
19
GANR
18.02.13
✎
16:42
|
(17) 1С:Конфигуратор \ Документы \ ТвойДокумент
правая кнопка мыши \ свойства Свойство "Удаление движений" не должно быть "Удалять автоматически" - иначе движения документа очистится до обработки проведения и подписок. |
|||
20
ksTheme
18.02.13
✎
16:43
|
(19) конфигурация типовая документ -реализация товаров и услуг
|
|||
21
GANR
18.02.13
✎
16:45
|
(20) релиз конфигурации какой?
а лучше зайди в конфигуратор и посмотри (19) |
|||
22
ksTheme
18.02.13
✎
16:45
|
(18) Перед записью документа, или Регистра? Представляю только как у регистра, но муторно это делать по всем регистраторам, думал есть способ проще, а если перед записью Регистра, то подскажите как потому что набор записей в этом случае отсутствует и как проверить склад я не знаю((
|
|||
23
ksTheme
18.02.13
✎
16:47
|
(21) не удалять автоматически
|
|||
24
Naumov
18.02.13
✎
16:49
|
(16) Не проще РЛС по складу настроить?
И вообще проверять реквизиты документов, а не набор записей регистров. Странная реализация в свете услышанного. |
|||
25
ksTheme
18.02.13
✎
16:49
|
+(22) опечатался представляю как у документа а не регистра
|
|||
26
Serg_1960
18.02.13
✎
16:49
|
(16) "у нас менеджеры любят..." - а вы им ограничения на уровне записей (RLS) - и закончилась их... любовь :) А то, понимаешь, развели тут... любят, не любят...
|
|||
27
Serg_1960
18.02.13
✎
16:50
|
:)
|
|||
28
ksTheme
18.02.13
✎
16:53
|
(24) Я об этом и говорю, РЛС в 1С кривой, работает только на роли менеджерпоПродажам там придется все роли переписывать, в табличной части документа может отображаться склад а не только в реквизитах. Если вы прочтете выше я как раз пытался реализовать подписку при УдаленииПроведения в Документах, но не смог...
|
|||
29
GANR
18.02.13
✎
16:55
|
(23) значит мое предположение неверно
|
|||
30
ksTheme
18.02.13
✎
16:55
|
(29) а конкретнее?)
|
|||
31
ksTheme
18.02.13
✎
16:57
|
(27) вы пользовались РЛС? там только одна роль нормально настроена... в других случаях запреты не действуют показывает всю инфу только вместо запрещенных данных пишет (объект не найден)
|
|||
32
Naumov
18.02.13
✎
16:58
|
(28) Что не смог? перебрать строки ТЧ в цикле?
|
|||
33
ksTheme
18.02.13
✎
17:01
|
(32) смог бы ) просто у меня есть документы в которых нет ТЧ товары соответственно надо к каждому регистратору подходить индивидуально, что займет не мало времени. Я хотел реализовать этот механизм как можно проще, НО ВОТ ОДНА ПРОБЛЕМА когда в простейшем запросе, написанном как мне кажется без ошибок нет элементарных данных, вот в чем загвоздка.
|
|||
34
Naumov
18.02.13
✎
17:03
|
Проще и быстрее - РЛС.
Универсально и без РЛС - проверяйте наличие реквизита через метаданные. |
|||
35
ksTheme
18.02.13
✎
17:08
|
(34) Подскажите тогда пожалуйста как правильно перенести ограничение доступа на все роли из роли МенеджерПоПродажам и по каким бъектам, т.к. если я поставлю галочку ограничивать доступ на уровне записей, у пользователей с ролями отличными от МенеджерПоПродажам начнется каша
|
|||
36
Serg_1960
18.02.13
✎
17:09
|
(28) Не буду заострять внимание на том, что из "я не смог" следует "РЛС в 1С кривой" :)
Вернёмся к началу - почему "первая мысль" не удалось реализовать? Потому что "склад" может быть или в реквизитах, или в табличной части документа? (34) RLS потяжелее будет тормозить. Всегда и везде при обращении к данным. Обход по метаданным - наверное быстрее. В целом - ведь только при проведении документов он будет подтармаживать. Мысль понятна, надеюсь |
|||
37
GANR
18.02.13
✎
17:14
|
(30) тогда движения не должны очищаться перед обработкой проведения
|
|||
38
Михаил Козлов
18.02.13
✎
17:16
|
(22) Документа. Можно подпиской.
|
|||
39
ksTheme
18.02.13
✎
17:16
|
(36) Первой мыслью вы имеете ввиду написать проверку в модуле регистра? Не удалось реализовать потому, что набор записей пуст соответственно, что проверять не понятно. Проверка производится легко при проведении документа, а при удалении движений как я сказал выше проверять нечего набор пуст.
|
|||
40
Naumov
18.02.13
✎
17:17
|
(37) Движения трутся в самом начале процедуры ОбработкиПроведения в типовых, где автоудаление убрано. Поэтому и трутся.
|
|||
41
GANR
18.02.13
✎
17:18
|
(39) см. (40)
|
|||
42
ksTheme
18.02.13
✎
17:20
|
(38) Спасибо, тоже уже склоняюсь к этому варианту ))
|
|||
43
ksTheme
18.02.13
✎
17:29
|
(40) (41) Спасибо, этого ответа я и ждал)
|
|||
44
Serg_1960
18.02.13
✎
18:08
|
PS: интереса ради. болванка по метаданным.
Процедура ПередЗаписьюДокументаПроверкаДоступностиСклада(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; СкладПользователя = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойСклад"); ИщемТип = ТипЗнч(СкладПользователя); МетаданныеДокумента = Источник.Метаданные(); Для Каждого Реквизит Из МетаданныеДокумента.Реквизиты Цикл Если Реквизит.Тип.СодержитТип(ИщемТип) Тогда ТекЗначение = Источник[Реквизит.Имя]; Если ТипЗнч(ТекЗначение) = ИщемТип И ЗначениеЗаполнено(ТекЗначение) И ТекЗначение <> СкладПользователя Тогда Отказ = Истина; КонецЕсли; КонецЕсли; КонецЦикла; Если Не Отказ Тогда Для Каждого Таблица Из МетаданныеДокумента.ТабличныеЧасти Цикл Для Каждого Реквизит Из Таблица.Реквизиты Цикл Если Реквизит.Тип.СодержитТип(ИщемТип) Тогда Для Каждого Строка Из Источник[Таблица.Имя] Цикл ТекЗначение = Строка[Реквизит.Имя]; Если ТипЗнч(ТекЗначение) = ИщемТип И ЗначениеЗаполнено(ТекЗначение) И ТекЗначение <> СкладПользователя Тогда Отказ = Истина; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; #Если НЕ ВнешнееСоединение Тогда Если Отказ Тогда Сообщить("Редактирование документа запрещено - это ""чужой"" склад.", СтатусСообщения.Важное); КонецЕсли; #КонецЕсли КонецПроцедуры // ПередЗаписьюДокументаПроверкаДоступностиСклада |
|||
45
ksTheme
18.02.13
✎
18:08
|
(44) Спасибо, прочитал мои мысли)
|
|||
46
Serg_1960
18.02.13
✎
18:11
|
Но есть подлянка одна - документ перемещения товаров между складами - как тут быть? Два склада - один из них, по любому, - чужой :)
|
|||
47
ksTheme
18.02.13
✎
18:17
|
(46) а у меня по ордерам делается, если не по ордерам соответственно проводится не должен.
|
|||
48
Serg_1960
18.02.13
✎
18:25
|
Мелочь,но... В (44) не учитывается, что юзвер может исправить документ с "чужим" складом на "свой" склад - по хорошему проверку надо делать дважды - ещё и для Источник.Ссылка запускать.
Болванка - она и есть болванка :) |
|||
49
Serg_1960
18.02.13
✎
18:26
|
Ок. Мавр сделал своё дело - мавр может уходить. бб.
|
|||
50
ksTheme
18.02.13
✎
18:29
|
(49) Сапсибо ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |