|
v7: Сводный остаток | ☑ | ||
---|---|---|---|---|
0
Касандер72
18.06.12
✎
10:19
|
Добрый день всем!
Конфа - переделанная, сетевая, на скуле 2005. Пользователи - в терминале и на прямую. Проблема в следующем: при проведении документа выдает ошибку - ругается на метод сводный остаток, пример кода: Процедура ОбработкаПроведения() спрУпаковок = СоздатьОбъект("Справочник.ШтрихкодыУпаковок"); спрСоставы = СоздатьОбъект("Справочник.СоставУпаковок"); Остатки = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(Остатки); Остатки.Свернуть("Номенклатура,Обмер,Цвет,Индекс","Количество"); Остатки.НоваяКолонка("Остаток","Число",10,0); Остатки.ВыбратьСтроки(); Пока Остатки.ПолучитьСтроку() = 1 Цикл Остатки.Остаток = Регистр.ЗаказыПроизводства.СводныйОстаток(Остатки.Номенклатура,Остатки.Обмер,Остатки.Цвет,"Количество"); КонецЦикла; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Заказ = 0; НомСтроки = 0; Если Остатки.НайтиЗначение(Индекс,НомСтроки,"Индекс") > 0 Тогда Остатки.ПолучитьСтрокуПоНомеру(НомСтроки); Если Остатки.Остаток > 0 Тогда Заказ = 1; Регистр.ЗаказыПроизводства.Номенклатура = Номенклатура; Регистр.ЗаказыПроизводства.Размер = Обмер; Регистр.ЗаказыПроизводства.Расцветка = Цвет; Если Остатки.Остаток - Количество > 0 Тогда Регистр.ЗаказыПроизводства.Количество = Количество; Остатки.Остаток = Остатки.Остаток - Количество; Иначе Регистр.ЗаказыПроизводства.Количество = Остатки.Остаток; Остатки.Остаток = 0; КонецЕсли; Регистр.ЗаказыПроизводства.ДвижениеРасходВыполнить(); КонецЕсли; КонецЕсли; глПеремещениеУпаковки(ШКупаковки,Перечисление.ОперацииСизделиями.УпаковкаИзделия,ОбъектУпаковки,ТекущийДокумент()); УстановитьРеквизитСправочника(ШКупаковки,"Заказ",Заказ,ДатаДок); КонецЦикла; КонецПроцедуры // ОбработкаПроведения() Интересно то что обработка с аналогичным кодом работает без проблем с теми же правами - доступ к регистрам стоит. Кто сталкивался с подобным - поверните мой голова в нужный направление, либо подскажите в каком гене у меня ошибка. Заранее благодарю. |
|||
1
1Сергей
18.06.12
✎
10:21
|
а где рассчет временных остатков?
|
|||
2
1Сергей
18.06.12
✎
10:21
|
и что за ошибка выходит?
|
|||
3
1Сергей
18.06.12
✎
10:22
|
структура регистра?
|
|||
4
Ёпрст
18.06.12
✎
10:30
|
(0) с объекта
<Регистр.> получать останки моветон, этот объект должен использоваться только для записи движений регистра. |
|||
5
Ёпрст
18.06.12
✎
10:30
|
ну и вот этот код
Пока Остатки.ПолучитьСтроку() = 1 Цикл Остатки.Остаток = Регистр.ЗаказыПроизводства.СводныйОстаток(Остатки.Номенклатура,Остатки.Обмер,Остатки.Цвет,"Количество"); КонецЦикла; тоже бредятина.. |
|||
6
Касандер72
18.06.12
✎
10:39
|
(1) на кой временной расчет?
(2) ругается что метод "СводныйОстаток" не может быть выполнен - на тестовой базе без проблем (3) Номенклатура,Размер,Расцветка-Количество; (4) на тестовой все получает (5) не мучай голову - это мультисчетчик |
|||
7
Касандер72
18.06.12
✎
10:40
|
+(6) Тестовая база - полная копия на том же серваке - другой каталог просто
|
|||
8
1Сергей
18.06.12
✎
10:41
|
(6) про проведение задним числом когда-нибудь что-нибудь слышал? ну, там, краем уха хотя бы
|
|||
9
Касандер72
18.06.12
✎
10:42
|
(8) слышал - все доки в реале проводятся - упаковка на конвейерах идет
|
|||
10
Касандер72
18.06.12
✎
10:44
|
+(8) проблема не в этом (пусть даже неверные считает) - почему в аналогичной базе выбрыки дает - в чем может быть причина?
|
|||
11
Ёпрст
18.06.12
✎
10:47
|
(10) в днк вестимо
|
|||
12
1Сергей
18.06.12
✎
10:47
|
(10) сделай по нормальному и не мучай ни себя, ни людей
|
|||
13
Касандер72
18.06.12
✎
10:48
|
(12) нормально, это как?
|
|||
14
1Сергей
18.06.12
✎
10:51
|
Рег = СоздатьОбъект("Регистры");
РегЗаказы = Рег.ЗаказыПроизводства; Если ИтогиАктуальны()<>1 Тогда РегЗаказы.ВременныйРасчет(1); Рег.РассчитатьРегистрыНа(ТекущийДокумент()); КонецЕсли; ... Остатки.Остаток = РегЗаказы.СводныйОстаток(Остатки.Номенклатура,Остатки.Обмер,Остатки.Цвет,"Количество"); |
|||
15
Касандер72
18.06.12
✎
10:53
|
(14) да пробовали предварительный расчет, пробовали - этой дуре ПОЕ..ТЬ)
тем более, что на тестовой ругани нет |
|||
16
1Сергей
18.06.12
✎
10:54
|
(11)+1
|
|||
17
Касандер72
18.06.12
✎
10:55
|
+(15) и даже в обработку код переносили - тоже работает, в модуле проведения - не взлетает (
|
|||
18
Касандер72
18.06.12
✎
10:58
|
(11) и (16) проблемы в ДНК - тоже вариант - вопрос в чьем? )
|
|||
19
Boroda
18.06.12
✎
10:58
|
А не лучше сделать один раз "ВыгрузитьИтоги" предварительно задав набор нужных фильтров?
|
|||
20
1Сергей
18.06.12
✎
10:59
|
(19) в большинстве случаев да. но, у него тут из шапки реквизиты не берутся, нет общих значений измерений. Потому лучше в цикле
|
|||
21
Касандер72
18.06.12
✎
11:01
|
(19) каждый раз фильтры менять - дольше по времени - проверено на отладчике
|
|||
22
1Сергей
18.06.12
✎
11:02
|
(21) он не предлагает тебе каждый раз менять фильтр. Он предлагает запихнуть все нужные значения измерений в списки значений и по ним отфильтровать один раз.
Но, это тоже может замедлить. От задачи зависит в общем |
|||
23
Касандер72
18.06.12
✎
11:05
|
Во избежание обсуждения генов: нижеприведенный код тоже тестился - та же проблема
Процедура ОбработкаПроведения() ВсеРегистры = СоздатьОбъект("Регистры"); РегЗаказы = ВсеРегистры.ЗаказыПроизводства; Если ИтогиАктуальны()<>1 Тогда РегЗаказы.ВременныйРасчет(1); ВсеРегистры.РассчитатьРегистрыНа(ТекущийДокумент()); КонецЕсли; Остатки = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(Остатки); Остатки.Свернуть("Номенклатура,Обмер,Цвет,Индекс","Количество"); Остатки.НоваяКолонка("Остаток","Число",10,0); Остатки.ВыбратьСтроки(); Пока Остатки.ПолучитьСтроку() = 1 Цикл Остатки.Остаток = РегЗаказы.СводныйОстаток(Остатки.Номенклатура,Остатки.Обмер,Остатки.Цвет,"Количество"); КонецЦикла; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Заказ = 0; НомСтроки = 0; Если Остатки.НайтиЗначение(Индекс,НомСтроки,"Индекс") > 0 Тогда Остатки.ПолучитьСтрокуПоНомеру(НомСтроки); Если Остатки.Остаток > 0 Тогда Заказ = 1; Регистр.ЗаказыПроизводства.Номенклатура = Номенклатура; Регистр.ЗаказыПроизводства.Размер = Обмер; Регистр.ЗаказыПроизводства.Расцветка = Цвет; Если Остатки.Остаток - Количество > 0 Тогда Регистр.ЗаказыПроизводства.Количество = Количество; Остатки.Остаток = Остатки.Остаток - Количество; Иначе Регистр.ЗаказыПроизводства.Количество = Остатки.Остаток; Остатки.Остаток = 0; КонецЕсли; Регистр.ЗаказыПроизводства.ДвижениеРасходВыполнить(); КонецЕсли; КонецЕсли; глПеремещениеУпаковки(ШКупаковки,Перечисление.ОперацииСизделиями.УпаковкаИзделия,ОбъектУпаковки,ТекущийДокумент()); УстановитьРеквизитСправочника(ШКупаковки,"Заказ",Заказ,ДатаДок); КонецЦикла; КонецПроцедуры // ОбработкаПроведения() |
|||
24
Ёпрст
18.06.12
✎
11:08
|
Заказ = 0; НомСтроки = 0;
Если Остатки.НайтиЗначение(Индекс,НомСтроки,"Индекс") > 0 Тогда Индекс - Это что ? |
|||
25
Ёпрст
18.06.12
✎
11:11
|
в регистре ЗаказыПроизводства - 3 измерения, или сколько ?
|
|||
26
Boroda
18.06.12
✎
11:12
|
Как вариант:
Попробуй завести сперва переменную типа: врНоменклатура = Остатки.Номенклатура; а потом эту переменную подсунь как параметр функции Сводныйостаток. |
|||
27
Касандер72
18.06.12
✎
11:13
|
(24) строка = Номенклатура+Размер+Расцветка
точнее: Индекс = Номенклатура.Артикул + "=" + СокрЛП(Обмер.Представление) + "=" + СокрЛП(Цвет.Наименование); вставлено как ускоритель: чтобы не устраивать перебор+сравнение по 3-м реквизитам |
|||
28
Ёпрст
18.06.12
✎
11:14
|
>>>>документа выдает ошибку - ругается на метод сводный остаток
полный текст ошибки какой ? |
|||
29
Касандер72
18.06.12
✎
11:15
|
(26) типа получить конечную ссылку и работать с ней - спс, попробую
|
|||
30
1Сергей
18.06.12
✎
11:16
|
(26) чушь
|
|||
31
Boroda
18.06.12
✎
11:16
|
(29) и сделать это ко всем параметрам фунцции !!!
|
|||
32
Касандер72
18.06.12
✎
11:18
|
(28) копипаст не смогу сделать - ошибка только на рабочей проге вылетает - геморно останавливать фабрику и полуправления
по памяти "Метод СводныйОстаток(...) не может быть быть выполнен - вроде-бы |
|||
33
Boroda
18.06.12
✎
11:18
|
Согласен, чушь. Но вот смотрю, у него практически ничем не отличается от типовой глСписаниеТМЦ. Та же таблица, тот же перебор по номенклатуре... а ошибка выскакивает...
|
|||
34
Касандер72
18.06.12
✎
11:18
|
(30) я на такой баг ранее нарывался пару раз
|
|||
35
1Сергей
18.06.12
✎
11:18
|
(33) просто у него ДНК не той системы
|
|||
36
Voronve
18.06.12
✎
11:20
|
(0) Структура регистра какая ? и типы полей ?
|
|||
37
Boroda
18.06.12
✎
11:20
|
Вместо глСписаниеТМЦ читать глСписаниеОстатковТМЦ. Это я смотрю типовую ТиС.
|
|||
38
Касандер72
18.06.12
✎
11:22
|
(35) люди со стандартными ДНК на нашем предприятии не приживаются)
скажу больше - стараемся избавляться от них из-за устраиваемого мелочного гемора - не смотрят в корень проблемы, а цеплются за го..но всякое - вони пипец ... |
|||
39
Mikeware
18.06.12
✎
11:24
|
(38) корень проблемы как раз в вас...
|
|||
40
Касандер72
18.06.12
✎
11:24
|
(36) Номенклатура = Справочник.Номенклатрура
Размер = Справочник.Размеры = Обмер - в доке Расцетка = Справочниик.Цвета = Цвет - в доке |
|||
41
Касандер72
18.06.12
✎
11:25
|
(39) может быть - скучно нам со стандартными релизами стало ... да и толку от них ... не удовлетворяют оне нас)
|
|||
42
Ork
18.06.12
✎
11:26
|
(0) Зачем использовать сводныйОстаток указывая все измерения? Хотя ошибка и не в этом. Просто интересно.
Сценарий возникновения ошибки может быть таким : В форме документа для каких либо целей уже использовано обращение к объекту Регистр без создания объекта. Вместо Рег = СохдатьОбъект("Регистр.ЗаказыПроизводства"); Остаток = Рег.Остаток... использовано Регистр.ЗаказыПроизводства.Остаток |
|||
43
Ork
18.06.12
✎
11:28
|
+(42) В таком варианте использовать ВременныйРасчет нельзя.
ЗЫ. Все-таки хотельсь бы описание ошибки получить без применения телепат.длл |
|||
44
Касандер72
18.06.12
✎
11:28
|
(42) смотри (23) та же хрень ...
|
|||
45
Ёпрст
18.06.12
✎
11:29
|
Количество измерений в регистре, сколько ?
|
|||
46
Ёпрст
18.06.12
✎
11:29
|
порядок следований их какой ?
|
|||
47
Касандер72
18.06.12
✎
11:30
|
(43) возможно только в течение суток - коня на скаку куем
|
|||
48
Ork
18.06.12
✎
11:30
|
+(43) Проверить можно просто. Вместо проведения из формы - провести либо Операции - > Проведение документов. Либо из внешней обработки.
|
|||
49
Ork
18.06.12
✎
11:31
|
(44) Толку смотреть в (23). Там переменные тоже не изолированы в модуле ОбработкаПроведения.
Попробуй (48) - отпиши результат. |
|||
50
Касандер72
18.06.12
✎
11:32
|
(45,46) три измерения: Номенклатура,Размер,Расцветка - в таком порядке и идут, Ресурс - Количество
почему все пропускают одну значащую фразу: "На тестовой аналогичной базе - все срабатывает без ошибок" ? |
|||
51
Ёпрст
18.06.12
✎
11:32
|
>>>Интересно то что обработка с аналогичным кодом работает без проблем
Какая обработка с тем же кодом ? Документ проводится сам по себе, но спотыкается групповое перепроведение документов через Операция-Проведение документов, или что ? Если да - то нехер объявлять переменные в операторах основной программы - они кешируются и компилятся 1 раз при начале группового проведения. |
|||
52
Касандер72
18.06.12
✎
11:33
|
(48) уже писал, что тестил через обработку - срабатывают оба варианта (0) и (23) без ошибок !!!
|
|||
53
1Сергей
18.06.12
✎
11:34
|
(52) кароче, ты сам не знаешь, взлетело (23) или нет, так?
|
|||
54
Касандер72
18.06.12
✎
11:34
|
(51) тот же код (0) или (23) - таблица "Остатки" на форме - все данные заполняются
|
|||
55
Касандер72
18.06.12
✎
11:35
|
(53) научись читать внимательно - код (23) тестился гораздо раньше - и даже в цикле - были 2 ветки на эту тему
|
|||
56
Voronve
18.06.12
✎
11:36
|
(40) Размер и Цвет - не строки случаем ?
|
|||
57
Касандер72
18.06.12
✎
11:37
|
(56) я что по-твоему совсем олень? только утро - вчера не пил
|
|||
58
Mikeware
18.06.12
✎
11:38
|
(41) Дело не в "стандартных релизах" - вместо того, чтоб продумать систему, вы лепите кучу заплаток.
|
|||
59
Касандер72
18.06.12
✎
11:40
|
(58) все хотят много, вкусно и быстро - этот релиз - и есть разведка системы - заказчики и их технологи сопли жуют вместо постановки задачи - посему такой выход. Закончим разведк боем - перепишем норм на 8-ке
|
|||
60
Mikeware
18.06.12
✎
11:41
|
(59)"мужик, наточи пилу!
-- некогда, мне пилить надо!" © |
|||
61
Voronve
18.06.12
✎
11:42
|
(57) Сам просил ошибку в днк поискать
|
|||
62
Касандер72
18.06.12
✎
11:42
|
(60) что то занкомое: не угадал - напильника нет)
|
|||
63
Касандер72
18.06.12
✎
11:43
|
(61) а, ну да согласен)))
|
|||
64
1Сергей
18.06.12
✎
11:45
|
развод
|
|||
65
Ork
18.06.12
✎
11:46
|
Если в обработке выполняется - см. (42).
В форме документа объявлять все переменные. Регистры напрямую не юзать. Только через СоздатьОбъект. И буИт вам многА счастия. |
|||
66
Ork
18.06.12
✎
11:47
|
+(65) "В форме документа объявлять все переменные." + во всех процедурах и функциях.
А то судя по вот этому вот : Процедура ОбработкаПроведения() ВсеРегистры = СоздатьОбъект("Регистры"); РегЗаказы = ВсеРегистры.ЗаказыПроизводства; с объявлением переменных у вас явные проблеммы. |
|||
67
Касандер72
18.06.12
✎
11:48
|
(66) подробнее, плиз ...
|
|||
68
Касандер72
18.06.12
✎
11:49
|
+(67) с примера в инете бралось ... или ты по поводу имярека "ВсеРегистры" ?
|
|||
69
Ork
18.06.12
✎
11:51
|
(67) Куда подробней?
Процедура ОбработкаПроведения() //Вот сюда Перем ВсеРегистры, РегЗаказы; //И только потом ВсеРегистры = СоздатьОбъект("Регистры"); РегЗаказы = ВсеРегистры.ЗаказыПроизводства; |
|||
70
Касандер72
18.06.12
✎
11:53
|
(69) упс, сие настолько значимо? а переменные при присвоении значений часом не объявляются? таки не паскаль же 1С-ка то ...
|
|||
71
Касандер72
18.06.12
✎
12:06
|
Народ. а проблема может быть в распределении доступа на серваке? когда скуль отдельно лежит.
Давеча домен упал - босс только что сказал, что доставил права доступа и у меня одной галки в правах не хватало ... щас проверяю |
|||
72
Злопчинский
18.06.12
✎
12:55
|
стать на поток. фотопаарат наготове - вывалится ошибка, сфоткать идать полный текст ошибки, как уже просили.. ;-)
|
|||
73
Касандер72
18.06.12
✎
13:13
|
А ларчик просто открывался: монопольно отрыли ещё один период - итоги пересчитались - сейчас все работает: оба варианта повесил на переключатель - тестируем. По ходу база глюкнула.
ВСЕМ ОГРОМНОЕ СПС ЗА ПОДДЕРЖКУ. ТЕМА ЗАКРЫТА. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |