|
не формируются движения | ☑ | ||
---|---|---|---|---|
0
Slowresponse
21.08.18
✎
20:09
|
Всем доброго дня!
В программировании новичок, не судите строго :) Есть код, формирующий движения по регистру накопления (а-ля партионный учет). При проведении ошибок нет. но нет и движений. Помогите найти ошибку, заранее благодарен) Движения.Себестоимость.Записывать = Истина; ВТ = Новый МенеджерВременныхТаблиц; Запрос4 = Новый Запрос; Запрос4.МенеджерВременныхТаблиц = ВТ; Запрос4.Текст = "ВЫБРАТЬ | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Количество КАК КоличествоДок, | ОказаниеУслугиПереченьНоменклатуры.Сумма |ПОМЕСТИТЬ ВТ |ИЗ | Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры |ГДЕ | ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Количество, | ОказаниеУслугиПереченьНоменклатуры.Сумма"; Запрос4.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос4.Выполнить(); Запрос5 = Новый Запрос; Запрос5.МенеджерВременныхТаблиц = ВТ; Запрос5.Текст = "ВЫБРАТЬ | ВТ.Номенклатура КАК Номенклатура, | ВТ.КоличествоДок КАК КоличествоДок, | ВТ.Сумма КАК Сумма, | ОстаткиНоменклатурыОстатки.Партия КАК Партия, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОст, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаСп |ИЗ | ВТ КАК ВТ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Себестоимость.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | ВТ.Номенклатура | ИЗ | ВТ КАК ВТ)) КАК ОстаткиНоменклатурыОстатки | ПО ВТ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура |ГДЕ | ОстаткиНоменклатурыОстатки.Номенклатура.ВидНоменклатуры = &Материал | |СГРУППИРОВАТЬ ПО | ВТ.Номенклатура, | ОстаткиНоменклатурыОстатки.Партия, | ВТ.КоличествоДок, | ВТ.Сумма, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0), | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0)"; Запрос5.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос5.УстановитьПараметр("Ссылка",Ссылка); Запрос5.УстановитьПараметр("Материал", Перечисления.ВидыНоменклатуры.Материал); РезультатЗапроса = Запрос5.Выполнить(); ВыборкаДетальныеЗаписи= РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл КупленныеСписать = ВыборкаДетальныеЗаписи.КоличествоДок; Если НЕ КупленныеСписать = 0 И НЕ ВыборкаДетальныеЗаписи.КоличествоОст = 0 Тогда Списать = Мин(КупленныеСписать, ВыборкаДетальныеЗаписи.КоличествоОст); СуммаСписания = ВыборкаДетальныеЗаписи.СуммаСп/ВыборкаДетальныеЗаписи.КоличествоОст * Списать; Движение = Движения.Себестоимость.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Регистратор = Ссылка; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Количество = Списать; Движение.Сумма = СуммаСписания; Движение.Партия = ВыборкаДетальныеЗаписи.Партия; Движения.Записать(); КонецЕсли; КонецЦикла; |
|||
2
Бухгалтер76
21.08.18
✎
20:42
|
Номенклатура.ВидНоменклатуры - тип точно перечисление?
А так надо в отладчике посмотреть, возвращает ли запрос непустую выборку и выполняется ли условие "НЕ КупленныеСписать = 0 И НЕ ВыборкаДетальныеЗаписи.КоличествоОст = 0" |
|||
5
Slowresponse
21.08.18
✎
21:01
|
Так, я не знаю что я сделал, но проводка появляется, но всего одна, хотя в документе несколько строк ТЧ. Есть идеи?)
|
|||
6
Slowresponse
21.08.18
✎
21:28
|
Теперь что-то совсем плохо. Он мне брал остатки только с послденего документа, в запросе дописал:
|ИТОГИ | СУММА(КоличествоОст) |ПО | Номенклатура Теперь выборка дает сумму и номенклатуру, остальные поля NULL |
|||
7
Cyberhawk
21.08.18
✎
21:42
|
Запись движений вынеси из цикла, либо в без режима замещения пиши
|
|||
8
Slowresponse
21.08.18
✎
21:45
|
(7) Не совсем понял. Если я из цикла вынесу, он же не сделает движений на каждую позицию в документе?
А что за режим замещения не знаю, где можно почитать? |
|||
9
Eastert
21.08.18
✎
21:50
|
(8) движения.записать() из цикла надо вынести
|
|||
10
hhhh
21.08.18
✎
22:01
|
(6) этот код должен тебе дать сумму и номенклатуру, остальные поля NULL
|
|||
11
hhhh
21.08.18
✎
22:03
|
(8) вот это слово
Движения.Записать(); у тебя внутри цикла. Ты записываешь одно и то же 150 раз |
|||
12
Slowresponse
21.08.18
✎
22:04
|
(10) Я так подумал, даже нашёл статью, сделал такой запрос:
| ВТ.Номенклатура КАК Номенклатура, | ВТ.КоличествоДок КАК КоличествоДок, | ВТ.Сумма КАК Сумма, | ОстаткиНоменклатурыОстатки.Партия КАК Партия, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОст, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаСп |ИЗ | ВТ КАК ВТ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Себестоимость.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | ВТ.Номенклатура | ИЗ | ВТ КАК ВТ)) КАК ОстаткиНоменклатурыОстатки | ПО ВТ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура |ГДЕ | ОстаткиНоменклатурыОстатки.Номенклатура.ВидНоменклатуры = &Материал | |СГРУППИРОВАТЬ ПО | ВТ.Номенклатура, | ОстаткиНоменклатурыОстатки.Партия, | ВТ.КоличествоДок, | ВТ.Сумма, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0), | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) | |УПОРЯДОЧИТЬ ПО | ОстаткиНоменклатурыОстатки.Партия.МоментВремени |ИТОГИ | МАКСИМУМ(КоличествоДок), | МАКСИМУМ(Сумма), | СУММА(КоличествоОст), | СУММА(СуммаСп) |ПО | Номенклатура" В итоге он с ума сошёл, на одну позицию делает 3 движения - по одному из каждой партии и одно без партии вообще |
|||
13
hhhh
21.08.18
✎
22:09
|
(12) ну правильно делает, ИТОГИ - это у вас дерево. То есть первая строка - это корень дерева, у нее три подчиненных строки по партиям. Всего 4 строки по номенклатуру. Непонятно, чего удивляться.
|
|||
14
Slowresponse
21.08.18
✎
22:22
|
(13) Значит для одного движения нужно в итогах оставить одну строку? Но тогда при выполнении ошибка -
Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {Документ.ОказаниеУслуги.МодульОбъекта(204)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата) Списать = Мин(КупленныеСписать, ВыборкаДетальныеЗаписи.КоличествоОст); Потому что значение ВыборкаДетальныеЗаписи.КоличествоОст получается NULL |
|||
15
Slowresponse
21.08.18
✎
22:26
|
(13) Я просто даже базовые принципы работы ИТОГИ не очень понимаю, руководство разработчика не помогает. Поэтому тяжело допереть как правильно сделать
|
|||
16
hhhh
21.08.18
✎
23:52
|
(15) ну выбросьте итоги. Они тут не нужны.
|
|||
18
Slowresponse
22.08.18
✎
11:14
|
(16) Тогда он с каждой партии списывает.
|
|||
19
Buster007
22.08.18
✎
11:22
|
напоминает задачу на спеца)
|
|||
20
Slowresponse
22.08.18
✎
11:26
|
(19) Делал по аналогии часть кода)
|
|||
21
hhhh
22.08.18
✎
23:38
|
(18) и нужно с каждой партии. перебираешь все партии, списываешь. И проверка что всё списал. как только списал, заканчиваешь, с остальных партий не списываешь
|
|||
22
Slowresponse
23.08.18
✎
11:33
|
(21) Сделал, всё ок, но только если в реализации номенклатуры с разных партий. Если 2 товара с одной партии списывает только первый..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |