YFred, да
Добавлено (31.03.2014, 22:32)
---------------------------------------------
CeHbKA, быстро просмотрел твое решение.отчеты не глядел.
1) В приходной накладной лучше сразу в запросе отсекать услуги, а не при обходе результата запроса.И если ты уже выбираешь запросом, то группируй записи.
2) В расходной накладной:
а) я бы в это код
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.ОстаткиТоваров.Очистить();
добавил
Движения.ОстаткиТоваров.Записать();
б) Зачем в запросе по получению остатков в итогах берешь СРЕДНЕЕ(Количество), я бы взял МАКСИМУМ(Количество)
в)при расчете себестоимости ты пишешь так: Движение.Стоимость = (ВыборкаНоменклатура.Стоимость/ВыборкаНоменклатура.Остаток)*НужноСписать.
правильно так:Движение.Стоимость = ?(ВыборкаНоменклатура.Остаток>НужноСписать, НужноСписать*ВыборкаНоменклатура.Стоимость/ВыборкаНоменклатура.Остаток,ВыборкаНоменклатура.Стоимость);
г) не забывай индексировать поля в запросах
д) Движения.Продажи.БлокироватьДляИзменения = Истина; Это лишнее
е) при обходе, чтобы отделить услуги, я бы сразу написал вот так(не принципиально конечно):
Если не Выборка.ЭтоУслуга Тогда
контроль остатков и т.д.....
КонецЕсли
движения по продажам.
А ты везде проверяешь на услуги.
ж)
твой контроль остатков
Если Выборка.Количество>Выборка.Остаток И НЕ Выборка.ЭтоУслуга Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара "+Выборка.Номенклатура;
Сообщение.Сообщить();
Продолжить;
КонецЕсли;
Правильнее так:
Если Выборка.Количество>Выборка.Остаток И НЕ Выборка.ЭтоУслуга Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара "+Выборка.Номенклатура;
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли
Удачи....