|
Контроль отрицательных остатков | ☑ | ||
---|---|---|---|---|
0
rowflag
09.11.12
✎
12:32
|
При создании дока и первом проведении все работает. Отрицательные остатки контролируются.
Если же открыть созданный док и нажать "Провести и закрыть", то выдает ошибку. Срабатывает отказ. Как доработать? Модуль объекта: // регистр ОстаткиНаСкладах Расход Движения.ОстаткиНаСкладах.Записывать = Истина; Для Каждого ТекСтрокаТЧСписок Из ТЧСписок Цикл Движение = Движения.ОстаткиНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Наименование = ТекСтрокаТЧСписок.Наименование; Движение.Склад = СкладИсточник; Движение.Количество = 1; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиНаСкладах.Остатки КАК ОстаткиНаСкладахОстатки |ГДЕ | ОстаткиНаСкладахОстатки.Наименование = &Наименование | И ОстаткиНаСкладахОстатки.Склад = &Склад"; Запрос.УстановитьПараметр("Наименование", ТекСтрокаТЧСписок.Наименование); Запрос.УстановитьПараметр("Склад", СкладИсточник); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); ЕстьНулевойОстаток = Истина; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЕстьНулевойОстаток = Ложь; Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 1 Тогда ОстатокРавенЕдинице = Истина; Иначе ОстатокРавенЕдинице = Ложь; // Сообщить("Остаток " + ТекСтрокаТЧСписок.Наименование + " равен " + ВыборкаДетальныеЗаписи.КоличествоОстаток + ". Проведение документа невозможно. Необходимо проверить предыдущие операции. Остаток может быть либо 0 либо 1."); КонецЕсли; КонецЦикла; Если ЕстьНулевойОстаток Тогда ПроводитьНельзя = Истина; ИначеЕсли ОстатокРавенЕдинице Тогда ПроводитьНельзя = Ложь; Иначе ПроводитьНельзя = Истина; КонецЕсли; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ Если ПроводитьНельзя Тогда Отказ = Истина; КонецЕсли; |
|||
1
zak555
09.11.12
✎
12:34
|
> Движение.Количество = 1;
это что ? |
|||
2
Wobland
09.11.12
✎
12:34
|
>ОстатокРавенЕдинице
а почему именно единице? почему вы сказали не килограмм, не тонна, а именно фунт? |
|||
3
Spieluhr
09.11.12
✎
12:34
|
на курсы 1С идти нужно, узнать про параметры виртуальных таблиц и МоментВремени
|
|||
4
Wobland
09.11.12
✎
12:35
|
и вообще, такие забавы с булевыми переменными как в конце - это грязно и низко
|
|||
5
zak555
09.11.12
✎
12:35
|
(0) это типовая УТ ?
|
|||
6
Spieluhr
09.11.12
✎
12:35
|
(5) похоже на задание при приеме на работу
|
|||
7
Wobland
09.11.12
✎
12:36
|
ГДЕ
| ОстаткиНаСкладахОстатки.Наименование = &Наименование о, боже! |
|||
8
Wobland
09.11.12
✎
12:36
|
+(7) две разных тубаретки будет, что делать станешь?
|
|||
9
Web00001
09.11.12
✎
12:36
|
(5)Очень похоже, что это типовое УГ
|
|||
10
zak555
09.11.12
✎
12:37
|
(6) значит оно провалено
|
|||
11
Wobland
09.11.12
✎
12:37
|
(0) в общем, диагноз такой: переписывать всё заново
|
|||
12
zak555
09.11.12
✎
12:38
|
в 7ке ипали за запрос в цикле, а тут...
|
|||
13
Web00001
09.11.12
✎
12:39
|
(7) и это рядом с
| И ОстаткиНаСкладахОстатки.Склад = &Склад"; вот как он разделил, там по наименованию, а тут по ссылке |
|||
14
rowflag
09.11.12
✎
12:39
|
(скажите лучше чем отличается первое проведение от второго (когда док открыли и заново провели))
|
|||
15
rowflag
09.11.12
✎
12:40
|
Наименование имеет тип Справочник.ссылка.
|
|||
16
Cunni
09.11.12
✎
12:40
|
(14) удалить движения?
|
|||
17
Spieluhr
09.11.12
✎
12:41
|
(14) а хоть одно свое предположение есть?
|
|||
18
shuhard
09.11.12
✎
12:41
|
(14) а чё, так не понятно, что в останках сидят движения самого документа ?
|
|||
19
Wobland
09.11.12
✎
12:41
|
(15) браво!
|
|||
20
rowflag
09.11.12
✎
12:43
|
Почему тогда при таком варианте все проходит нормально?
// регистр ОстаткиНаСкладах Приход Движения.ОстаткиНаСкладах.Записывать = Истина; Для Каждого ТекСтрокаТЧСписок Из ТЧСписок Цикл Движение = Движения.ОстаткиНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Наименование = ТекСтрокаТЧСписок.Наименование; Движение.Склад = СкладНазначения; Движение.Количество = ТекСтрокаТЧСписок.Количество; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ движения.ОстаткиНаСкладах.Записать(); // Создать менеджер временных таблиц МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; // Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | картриджи_Отправка_в_филиалТЧСписок.Наименование |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.картриджи_Отправка_в_филиал.ТЧСписок КАК картриджи_Отправка_в_филиалТЧСписок |ГДЕ | картриджи_Отправка_в_филиалТЧСписок.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); // для отладки // ТЗ - Таблица Значений. Отладка - промотр результата запроса - Временной Таблицы ТЗ = ДанныеВнутреннейТаблицыЗапроса(Запрос,"НоменклатураДокумента"); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверить отрицательные остатки Запрос1 = Новый Запрос; Запрос1.МенеджерВременныхТаблиц = МенеджерВТ; Запрос1.Текст = "ВЫБРАТЬ | ОстаткиНаСкладахОстатки.КоличествоОстаток, | ОстаткиНаСкладахОстатки.Наименование, | ОстаткиНаСкладахОстатки.Склад |ИЗ | РегистрНакопления.ОстаткиНаСкладах.Остатки( | , | Наименование В | (ВЫБРАТЬ | НоменклатураДокумента.Наименование | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ОстаткиНаСкладахОстатки |ГДЕ | ОстаткиНаСкладахОстатки.КоличествоОстаток < 0"; //Запрос.УстановитьПараметр("Наименование", "" + Наим + ""); //Запрос.УстановитьПараметр("Склад", "" + Скл + ""); Запрос1.УстановитьПараметр("Склад", СкладИсточник); Результат = Запрос1.Выполнить(); ТЗ = Результат.Выгрузить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); пока ВыборкаДетальныеЗаписи.Следующий() Цикл //Сообщение = новый СообщениеПользователю(); //Сообщение.Текст = "Количество - " + Строка(ВыборкаДетальныеЗаписи.Количество()); //Сообщение.Сообщить(); Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Остаток " + ВыборкаДетальныеЗаписи.наименование + " = " + Строка(ВыборкаДетальныеЗаписи.КоличествоОстаток); Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; |
|||
21
Web00001
09.11.12
✎
12:44
|
(14) тем что в первом случае у документа еще нет движений а во втором есть?
(15) Что??? Ну что же вы курите а? Как такое изящное решение пришло в голову? |
|||
22
Cunni
09.11.12
✎
12:44
|
он троллит, не ведитесь.
|
|||
23
Cunni
09.11.12
✎
12:45
|
(22) во всяком случае я на это надеюсь, что он просто троллит...
|
|||
24
Гефест
09.11.12
✎
12:46
|
(20) Контроль отрицательных остатков при приходе - это мощно!
|
|||
25
rowflag
09.11.12
✎
12:46
|
(21) Какое решение?
|
|||
26
rowflag
09.11.12
✎
12:46
|
(24) расход выше - не скопировал.
|
|||
27
zak555
09.11.12
✎
12:49
|
Очистить(); Записать();
|
|||
28
Spieluhr
09.11.12
✎
12:49
|
(25) решение написали в (16), (18) и (21)
|
|||
29
Serg_1960
09.11.12
✎
12:49
|
(0) Описание ошибок займёт строк больше, чем сам... эээ... алгоритмом это назвать нельзя.
|
|||
30
samozvanec
09.11.12
✎
12:51
|
(0) аххах выложи еще кода пожалуйста
|
|||
31
rowflag
09.11.12
✎
12:51
|
(16)(18)(21) Спасибо!
|
|||
32
rowflag
09.11.12
✎
17:11
|
А всего то надо было в свойствах дока - Движения - Удаление движений поставить "Автоматически" (стояло "Автоматически, при про отмене удаления")
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |