|
При проведении документа вылезает ошибка,что типы сравниваемых переменных различные. | ☑ | ||
---|---|---|---|---|
0
malex18
11.08.17
✎
10:44
|
Проверял через Shift + F9. и правда. Не находит тип "КоличествоОстаток" в выражении :
ЕСЛИ КоличествоОстаток < ТекСтрокаТовары.Количество Тогда "ЕСТЬNULL" использовать надо?куда только не подставлял. подскажите без гонора пожалуйста) Движения.ОстаткиТоваров.Записывать = Истина; Движения.ОстаткиТоваров.Записать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Количество КАК Количество, | Товары.ЦенаПродажи КАК Цена, | Товары.Сумма КАК Сумма |ПОМЕСТИТЬ ВременнаяТаб |ИЗ | &Товары КАК Товары |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаб.Номенклатура КАК Номенклатура, | СУММА(ВременнаяТаб.Количество) КАК Количество, | ВременнаяТаб.Цена КАК Цена |ИЗ | ВременнаяТаб КАК ВременнаяТаб | |СГРУППИРОВАТЬ ПО | ВременнаяТаб.Номенклатура, | ВременнаяТаб.Цена"; Запрос.УстановитьПараметр("Товары",Товары); ТоварыСвертка = Запрос.Выполнить().Выгрузить(); Для Каждого ТекСтрокаТовары Из ТоварыСвертка Цикл Движение = Движения.ОстаткиТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура, | СУММА(ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток, | СУММА(ОстаткиТоваровОстатки.СуммаОстаток) КАК СуммаОстаток |ПОМЕСТИТЬ ВремТабл |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки(&Период, Номенклатура = &Номенклатура) КАК ОстаткиТоваровОстатки | |СГРУППИРОВАТЬ ПО | ОстаткиТоваровОстатки.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремТабл.Номенклатура, | ЕСТЬNULL(ВремТабл.СуммаОстаток, 0) / ЕСТЬNULL(ВремТабл.КоличествоОстаток, 0) КАК ЦенаЗаЕд, | ЕСТЬNULL(ВремТабл.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | ВремТабл КАК ВремТабл"; Запрос.УстановитьПараметр("Номенклатура", ТекСтрокаТовары.Номенклатура); Запрос.УстановитьПараметр("Период", Дата); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КонецЕсли; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; ЕСЛИ КоличествоОстаток < ТекСтрокаТовары.Количество Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Данного товара осталось " +КоличествоОстаток+ " шт."; Сообщение.Сообщить(); КонецЕсли; КонецЦикла; |
|||
1
DexterMorgan
11.08.17
✎
10:50
|
Ну результат не возвращает ничего,
ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() если нет записей - не пиши ВыборкаДетальныеЗаписи.КоличествоОстаток |
|||
2
DexterMorgan
11.08.17
✎
10:51
|
ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА
Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; ЕСЛИ КоличествоОстаток < ТекСтрокаТовары.Количество Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Данного товара осталось " +КоличествоОстаток+ " шт."; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; |
|||
3
DexterMorgan
11.08.17
✎
10:53
|
К спецу готовишься?)
|
|||
4
DexterMorgan
11.08.17
✎
10:59
|
Запрос.УстановитьПараметр("Период", Дата);
помница там нужно не дату передавать, а Новый Граница(МоментВермени(), ВидГраницы.Включая) |
|||
5
DexterMorgan
11.08.17
✎
11:00
|
И БлокироватьДляИзменения = Истина
|
|||
6
AsadRoman
11.08.17
✎
11:02
|
Может мне кто-нибудь объяснить почему сначала делают движения. а потом проверяют условие возможности проведения? На мой взгляд нужно делать наоборот. Далее по коду зачем в запросе запихивать данные во временную таблицу, чтобы затем из нее выбирать тоже самое, только с математическими действиями? Можно ведь сразу. И последнее: за создание лишней ТЗ снимают балл. Поэтому лучше сразу делать запрос по всеми необходимыми реквизитами чтобы затем
Движения.ОстаткиТоваров.Загрузить(Запрос.Выполнить.Выгрузить()); |
|||
7
DexterMorgan
11.08.17
✎
11:04
|
(6) Деревня, не позорься
|
|||
8
AsadRoman
11.08.17
✎
11:05
|
(7) с Этого момента поподробней.
|
|||
9
malex18
11.08.17
✎
11:05
|
Какой спец))вы что)
это стажировочное задание) вот пытаюсь разобраться сказали исправить эту ошибку. |
|||
10
DexterMorgan
11.08.17
✎
11:06
|
Да запрос в цикле это ужас
|
|||
11
malex18
11.08.17
✎
11:06
|
Это я тоже понимаю,
но сказали на первое время пойдет.и нужно с этой ошибкой разобраться |
|||
12
DexterMorgan
11.08.17
✎
11:08
|
(8) ну вот это почитай http://курсы-по-1с.рф/articles/2017-02-12-two-methods-for-inventory-check/
|
|||
13
AsadRoman
11.08.17
✎
11:13
|
(12) Почитал и что? В чем я не прав?
|
|||
14
h-sp
11.08.17
✎
11:24
|
(13) ну а в чем прав? Твой метод хороший, но он в два раза медленнее. Поэтому мы выбираем (12). А ты можешь по-старому фигачить.
|
|||
15
DexterMorgan
11.08.17
✎
11:26
|
(13) в том, что на твой взгдяд нужно делать наоборот
|
|||
16
AsadRoman
11.08.17
✎
11:31
|
(14) (15) Вы сами то статью до конца внимательно прочитали? Где вы увидели в два раза медленнее?
|
|||
17
Buster007
11.08.17
✎
11:33
|
КоличествоОстаток = 0;
ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЕсли; |
|||
18
AsadRoman
11.08.17
✎
11:33
|
Сделайте документ с 1000 строк и посмотрите что у вас будет: сначала в цикле (!) создать движения, затем опять в цикле (!) проверить можно ли проводить. Ага : проводить нельзя. Давай удалять созданное.
|
|||
19
Buster007
11.08.17
✎
11:34
|
Код - УГ, но может быть научится
|
|||
20
AsadRoman
11.08.17
✎
11:38
|
Я так запросом выбираю только отрицательные остатки. Если запрос пустой, то проводим. Если непустой то вывожу сообщения по всем позициям в запросе.
|
|||
21
DexterMorgan
11.08.17
✎
11:40
|
(18) Речь не про реализацию ТС, а о различиях в старой и новой методике проведения. Плюсы указаны в конце статьи:
/// Нет необходимости очищать старые движения документа. По сути это операция записи в БД пустого набора движений и удаление существующих движений — это довольно ресурсоемкие операции 2.Запрос, получающий данные по отрицательным остаткам, обращается только к одной таблице — нет необходимости делать левое соединение с данными документа и применять функцию «ЕСТЬNULL()» |
|||
22
DexterMorgan
11.08.17
✎
11:41
|
(18) "Нормальный" код без блокировок, там тоже приведен:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) // 1. Получение запросом данных документа Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | СУММА(Товары.Количество) КАК Количество |ПОМЕСТИТЬ Товары |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК Товары |ГДЕ | Товары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | Товары.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Количество КАК Количество |ИЗ | Товары КАК Товары"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); // 2. Формирование движений-расход регистра Движения.СвободныеОстатки.Очистить(); ВыборкаТовары = РезультатЗапроса.Выбрать(); Пока ВыборкаТовары.Следующий() Цикл Движение = Движения.СвободныеОстатки.ДобавитьРасход(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаТовары.Номенклатура; Движение.Количество = ВыборкаТовары.Количество; КонецЦикла; // 3. Запись движений в БД Движения.СвободныеОстатки.Записывать = Истина; Движения.Записать(); // 4. Запрос, получающий отрицательные остатки из регистра Запрос.Текст = "ВЫБРАТЬ | Остатки.Номенклатура КАК Номенклатура, | ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Номенклатура) КАК НоменклатураПредставление, | -Остатки.КоличествоОстаток КАК Дефецит |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура | ИЗ | Товары КАК Товары)) КАК Остатки |ГДЕ | Остатки.КоличествоОстаток < 0"; ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая); Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля); РезультатЗапроса = Запрос.Выполнить(); // 5. Вывод сообщений о недостатке товаров Если Не РезультатЗапроса.Пустой() Тогда Отказ = Истина; ВыборкаОшибки = РезультатЗапроса.Выбрать(); Пока ВыборкаОшибки.Следующий() Цикл Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара "+ВыборкаОшибки.НоменклатураПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефецит+" шт."; Сообщение.Сообщить(); КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
23
DexterMorgan
11.08.17
✎
11:43
|
(18) Во сколько раз быстрее - уже от конкретной ситуации зависит, сколько одновременно работющих пользователей и т.д.
|
|||
24
DexterMorgan
11.08.17
✎
11:44
|
(20) Че ты ща съезжаешь? Ты сросил:
"Может мне кто-нибудь объяснить почему сначала делают движения. а потом проверяют условие возможности проведения?" Тебе объяснили? |
|||
25
AsadRoman
11.08.17
✎
11:45
|
(24) Цитирую дословно: Ok, значит, нужно всегда использовать новую методику, верно? Нет, это не так! Источник: ©Курсы-по-1С.рф
|
|||
26
AsadRoman
11.08.17
✎
11:46
|
Короче парни: я все равно останусь при своем.
|
|||
27
DexterMorgan
11.08.17
✎
11:47
|
(25) В случае ТС это именно тот случай когда нужно использовать новую методику
|
|||
28
AsadRoman
11.08.17
✎
11:48
|
(22) А вот это уже ответ на вопрос по теме. Чел пусть воспользуется.
|
|||
29
DexterMorgan
11.08.17
✎
11:48
|
(25) старая нужна, только если например себестоимость нужно расчитать для списания
|
|||
30
DexterMorgan
11.08.17
✎
11:49
|
(25) Ты мастер вырывать фразы из контекста
|
|||
31
DexterMorgan
11.08.17
✎
11:50
|
(26) Да мне по барабану, позорься дальше
|
|||
32
malex18
11.08.17
✎
11:51
|
Товарищи программисты, прочитал и старую и новую методику.
Ответа не это так и не дало. Скажите конкретнее пожалуйста почему типы разные и что сделать? запрос может пустой просто? для тупых пожалуйста |
|||
33
malex18
11.08.17
✎
11:51
|
для "тупых"-для меня в смысле)
|
|||
34
h-sp
11.08.17
✎
11:51
|
(26) вот это читал? Особенно 2 последних абзаца
Нет необходимости очищать старые движения документа. По сути это операция записи в БД пустого набора движений и удаление существующих движений — это довольно ресурсоемкие операции Запрос, получающий данные по отрицательным остаткам, обращается только к одной таблице — нет необходимости делать левое соединение с данными документа и применять функцию «ЕСТЬNULL()» Кроме этого, при нормальном течении бизнес-процессов пользователь указывает количество, не превышающее остаток на складе. В этом случае второй запрос не вернет никаких данных и проведение документа будет максимально быстрым. Источник: ©Курсы-по-1С.рф |
|||
35
DexterMorgan
11.08.17
✎
11:52
|
(33) Мля, я тебе в (1), (2) написал
|
|||
36
h-sp
11.08.17
✎
11:55
|
(26) ну то есть тут дело в теории вероятностей. То есть с вероятностью 99% пользователь вводит правильные данные.
твоя ошибка, ты думаешь, что отакт назад будет в 100% случаев. а на самом деле откат будет только в 1% всех случаев. а в 99% будет максимальная скорость. Просто тупо сразу запись. |
|||
37
malex18
11.08.17
✎
11:55
|
Он тогда контроль остатков не производит
|
|||
38
Бубр
11.08.17
✎
11:55
|
(8) новая методика проведения документов. на спеце проверяется в том или ином виде.
|
|||
39
h-sp
11.08.17
✎
11:58
|
(37) ну так
КоличествоОстаток = 0; ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЕсли; |
|||
40
malex18
11.08.17
✎
12:01
|
Простите, но ничего не изменилось)
|
|||
41
DexterMorgan
11.08.17
✎
12:02
|
(40) Перезапусти отладку
|
|||
42
malex18
11.08.17
✎
12:03
|
(41) Ну я не на столько "тупой"-то))
|
|||
43
malex18
11.08.17
✎
12:05
|
На складе сейчас 1000.
Провожу реализацию - 1000 Второй раз также можно провести на любое количество-к примеру на 500 А третий раз уже пишет "что остаток -500" |
|||
44
mistеr
11.08.17
✎
12:06
|
(0) 1. Ты обращаешься к ВыборкаДетальныеЗаписи.КоличествоОстаток даже в том случае, если выборка пустая. Все обращения к выборке помести внутрь условия "ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА".
2. В выражении "ЕСТЬNULL(ВремТабл.СуммаОстаток, 0) / ЕСТЬNULL(ВремТабл.КоличествоОстаток, 0)" возможно деление на 0. Сейчас не стрельнуло, потом обязательно стрельнет. Твоя ошибка скорее всего связана с п. 1. Через Shift + F9 посмотри типы, ТипЗнч(ВыборкаДетальныеЗаписи.КоличествоОстаток) и ТипЗнч(ТекСтрокаТовары.Количество). |
|||
45
malex18
11.08.17
✎
12:13
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; ЕСЛИ КоличествоОстаток < ТекСтрокаТовары.Количество Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Данного товара осталось " +КоличествоОстаток+ " шт."; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; |
|||
46
malex18
11.08.17
✎
12:13
|
так?
|
|||
47
malex18
11.08.17
✎
12:14
|
Не изменилось ничего
|
|||
48
malex18
11.08.17
✎
12:14
|
(43)
|
|||
49
DexterMorgan
11.08.17
✎
12:15
|
Посмотри еще раз внимательно (39)
|
|||
50
mistеr
11.08.17
✎
12:15
|
(47) Типы посмотри уже.
|
|||
51
AsadRoman
11.08.17
✎
12:16
|
(34) Тогда давай разберемся: новый вариант. Движения записались. Затем отказ = истина. Что с движениями делается?
|
|||
52
h-sp
11.08.17
✎
12:18
|
(51) что значит отказ = истина? кто его выдает?
|
|||
53
AsadRoman
11.08.17
✎
12:19
|
(52) Т.е. отрицательные остатки
|
|||
54
h-sp
11.08.17
✎
12:20
|
(53) еще раз для непонятливых. Отказ = Истина по статистике выдается в 1% всех случаев записи.
То есть твоя методика быстрее в 1% случаев. Новая методика рулит в 99% случаев. |
|||
55
AsadRoman
11.08.17
✎
12:21
|
(54) Пользователи косячат в 80% (!) случаев. Это не теория вероятностей, это факт.
|
|||
56
AsadRoman
11.08.17
✎
12:22
|
(54) Спуститесь на землю идите посмотрите что творят пользователи
|
|||
57
AsadRoman
11.08.17
✎
12:25
|
Да и хватит тут не по делу спорить. Челу помочь нуно.
|
|||
58
h-sp
11.08.17
✎
12:26
|
(55) ну это ты загнул, насчет 80%. Но даже если у тебя такая суперфирма, где все косячат. То всё равно получается в 20% случаев выигрыш. А 80% примерно то же самое
|
|||
59
malex18
11.08.17
✎
12:30
|
Можете пожалуйста написать код правильный и объяснить, что и как в новом коде. может так разберусь.Радченко проштудировал.но таких тонкостей нет там.и что делать не знаю.подскажите пжл.
|
|||
60
AsadRoman
11.08.17
✎
12:35
|
(59) ДА перепиши ты свой код по (12) и будет тебе счастье
|
|||
61
malex18
11.08.17
✎
12:39
|
Подскажите только какие данные мне подставлять в часть про "дефицит"?)
|
|||
62
AsadRoman
11.08.17
✎
12:42
|
вот здесь
ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КонецЕсли; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; сделай так: КоличествоОстаток = 0; ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЕсли; будет быстро и сердито. |
|||
63
malex18
11.08.17
✎
12:46
|
Сделал)не изменилось ничегО)
|
|||
64
malex18
11.08.17
✎
12:47
|
А нет.именилось.теперь в регистр накопления не пишутся записи про реализацию)
|
|||
65
AsadRoman
11.08.17
✎
12:48
|
(64) т.е. от ошибки сравнения типов избавился?
|
|||
66
malex18
11.08.17
✎
12:49
|
Ну вообще да)
Спасибо) |
|||
67
malex18
11.08.17
✎
12:49
|
А почему в регистр не пишется теперь ничего?
и остатки собственно не контролируются? |
|||
68
AsadRoman
11.08.17
✎
12:54
|
Движения.ОстаткиТоваров.Записать();
перенеси в самый конец |
|||
69
malex18
11.08.17
✎
12:57
|
в регистр теперь все заносится, но снова вылезает ошибки про невоможность сравнения двух переменных разного типа
|
|||
70
malex18
11.08.17
✎
12:57
|
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.Записать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Количество КАК Количество, | Товары.ЦенаПродажи КАК Цена, | Товары.Сумма КАК Сумма |ПОМЕСТИТЬ ВременнаяТаб |ИЗ | &Товары КАК Товары |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаб.Номенклатура КАК Номенклатура, | СУММА(ВременнаяТаб.Количество) КАК Количество, | ВременнаяТаб.Цена КАК Цена |ИЗ | ВременнаяТаб КАК ВременнаяТаб | |СГРУППИРОВАТЬ ПО | ВременнаяТаб.Номенклатура, | ВременнаяТаб.Цена"; Запрос.УстановитьПараметр("Товары",Товары); ТоварыСвертка = Запрос.Выполнить().Выгрузить(); Для Каждого ТекСтрокаТовары Из ТоварыСвертка Цикл Движение = Движения.ОстаткиТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура, | СУММА(ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток, | СУММА(ОстаткиТоваровОстатки.СуммаОстаток) КАК СуммаОстаток |ПОМЕСТИТЬ ВремТабл |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки(&Период, Номенклатура = &Номенклатура) КАК ОстаткиТоваровОстатки | |СГРУППИРОВАТЬ ПО | ОстаткиТоваровОстатки.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремТабл.Номенклатура, | ЕСТЬNULL(ВремТабл.СуммаОстаток, 0) / ВремТабл.КоличествоОстаток КАК ЦенаЗаЕд, | ЕСТЬNULL(ВремТабл.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | ВремТабл КАК ВремТабл"; Запрос.УстановитьПараметр("Номенклатура", ТекСтрокаТовары.Номенклатура); Запрос.УстановитьПараметр("Период", Дата); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ЕСЛИ ВыборкаДетальныеЗаписи.Следующий() ТОГДА Движение.Сумма=ТекСтрокаТовары.Количество*ВыборкаДетальныеЗаписи.ЦенаЗаЕд; КоличествоОстаток = ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЕсли; ЕСЛИ КоличествоОстаток < ТекСтрокаТовары.Количество Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Данного товара осталось " +КоличествоОстаток+ " шт."; Сообщение.Сообщить(); КонецЕсли; Движения.ОстаткиТоваров.Записать(); КонецЦикла; |
|||
71
malex18
11.08.17
✎
12:58
|
Теперь код такой.может в запросе что не так?
|
|||
72
Ёпрст
11.08.17
✎
13:02
|
(71) да всё не так, весь код в топку.
Запрос в цикле там не нужен, если что. |
|||
73
AsadRoman
11.08.17
✎
13:12
|
(71) КоличествоОстаток = 0;
забыл добавить |
|||
74
AsadRoman
11.08.17
✎
13:13
|
И
Движения.ОстаткиТоваров.Записать(); вынеси из цикла |
|||
75
malex18
11.08.17
✎
14:48
|
Движения.Продажи.Очистить();
Движения.Продажи.Записывать = Истина; Движения.Записать(); Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | РеализацияТовары.Номенклатура КАК Номенклатура, | СУММА(РеализацияТовары.Количество) КАК Количество |ПОМЕСТИТЬ РеализацияТовары |ИЗ | Документ.Реализация.Товары КАК РеализацияТовары |ГДЕ | РеализацияТовары.Ссылка=&Ссылка | |СГРУППИРОВАТЬ ПО | РеализацияТовары.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |///////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | ПРЕДСТАВЛЕНИЕССЫЛКИ(Товары.Номенклатура) КАК НоменклатураПредставление, | Товары.Количество КАК Количество, | ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток |ИЗ | РеализацияТовары КАК Товары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, Номенклатура В (ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура | ИЗ | Товары КАК Товары)) КАК Остатки | ПО Товары.Номенклатура = Остатки.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаТовары.Следующий() Цикл Дефицит = ВыборкаТовары.Количество - ВыборкаТовары.Остаток; Если Дефицит>0 Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара "+ВыборкаТовары.НоменклатураПредставление+" недостаточно в количестве "+Дефицит+" шт."; Сообщение.Сообщить(); КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; Движение = Движения.ОстаткиТоваров.ДобавитьРасход(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаТовары.Номенклатура; Движение.Количество = ВыборкаТовары.Количество; КонецЦикла; Движения.ОстаткиТоваров.Записывать = Истина; |
|||
76
malex18
11.08.17
✎
14:48
|
Вот сделал код по "Старой Методике".
но видимо неправильно подставил свои данные. что не так здесь? |
|||
77
malex18
11.08.17
✎
14:50
|
Все, подправил.Всем СПАСИБО!!!!
AsadRoman - СПАСИБО ЗА ТЕРПЕНИЕ))) |
|||
78
AsadRoman
11.08.17
✎
14:55
|
(77) Да не за что. Всегда рад помочь.
|
|||
79
h-sp
11.08.17
✎
15:20
|
(77) так в чем было дело в итоге?
|
|||
80
malex18
11.08.17
✎
16:11
|
Во всем в принципе.все неправильно было. нужно было делать по старой методике.толко подставив свои данные.вот и все
|
|||
81
Buster007
11.08.17
✎
16:31
|
Офигеть с (17) до (62)...
Трудно тебе будет... Может ну его нафиг? |
|||
82
malex18
14.08.17
✎
09:12
|
Русские не сдаются)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |