|
При партийном учёте товар списывается с большего числа документов, чем должен | ☑ | ||
---|---|---|---|---|
0
Персиваль
11.09.14
✎
10:36
|
Здравствуйте. Я только начинаю изучать 1с и у меня, периодически, возникают вопросы.
Задача: есть 2 документа (приход \ расход) и регистр накопления. После проведения документов прихода \ расхода, происходит списание товара с указанием партии. Проблема в том, что товар в единственном числе списывается с нескольких приходных документов. Партия указанна в регистре накопления, как ссылка на приходной документ. Подскажите пожалуйста, как можно решить эту проблему ? Код расходного документа: Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Движения.ТоварыНаСкладе.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | ДокументРасходТовары.Номенклатура, | СУММА(ДокументРасходТовары.Количество) КАК Количество, | ДокументРасходТовары.Склад |ПОМЕСТИТЬ ВрТаб |ИЗ | Документ.ДокументРасход.Товары КАК ДокументРасходТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДокументРасход КАК ДокументРасход | ПО ДокументРасходТовары.Ссылка = ДокументРасход.Ссылка |ГДЕ | ДокументРасходТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ДокументРасходТовары.Склад, | ДокументРасходТовары.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВТ; Запрос2.Текст ="ВЫБРАТЬ | ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ВрТаб.Номенклатура КАК Номенклатура, | ВрТаб.Склад КАК Склад, | ВрТаб.Количество КАК Количество, | ТоварыНаСкладеОстатки.Партия КАК Партия, | ТоварыНаСкладеОстатки.Партия.МоментВремени КАК ПартияМоментВремени |ИЗ | ВрТаб КАК ВрТаб | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки( | &МоментВремени, | (Номенклатура, Склад) В | (ВЫБРАТЬ | ВрТаб.Номенклатура, | ВрТаб.Склад | ИЗ | ВрТаб КАК ВрТаб)) КАК ТоварыНаСкладеОстатки | ПО ВрТаб.Номенклатура = ТоварыНаСкладеОстатки.Номенклатура | И ВрТаб.Склад = ТоварыНаСкладеОстатки.Склад | |УПОРЯДОЧИТЬ ПО | ПартияМоментВремени"; Запрос2.УстановитьПараметр("МоментВремени", МоментВремени()); Движения.ТоварыНаСкладе.БлокироватьДляИзменения = Истина; Движения.ТоварыНаСкладе.Записать(); РезультатЗапроса = Запрос2.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Количество > Выборка.КоличествоОстаток Тогда Сообщить("Не хватает товара "+Выборка.Номенклатура+" на складе "+Выборка.Склад); Отказ = истина; Возврат ; КонецЕсли; Движение = Движения.ТоварыНаСкладе.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; ЗаполнитьЗначенияСвойств(Движение, Выборка); Движение.Сумма = Выборка.СуммаОстаток/Выборка.КоличествоОстаток*Выборка.Количество; КонецЦикла; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры |
|||
1
Поpyчик-4
11.09.14
✎
10:58
|
(0) Партийный учёт был когда-то при советской власти и кровавой гэбне. В хозяйственной деятельности применяется учёт партионный. Запишите на бумажку и носите её с собой, если не сможете запомнить.
|
|||
2
Персиваль
11.09.14
✎
13:22
|
В данном форуме отсутствует функция редактирования сообщений. Или я её не нашёл. Извиняюсь за орфографию и безграмотность.
Поручик, может у вас будет что посоветовать по делу ? |
|||
3
alle68
11.09.14
✎
14:07
|
(0) По алгоритму списывается весь остаток.
Обычно используют итоги (здесь, по складу и номенклатуре). |
|||
4
Персиваль
11.09.14
✎
15:37
|
Использовал итоги(по складу и номенклатуре). В данном случае в регистре вообще возникает движения "расход" только по 1 наименованию, из 2-4, имеющихся в проведённом документе.
Так же я произвел подсчет товара, который я списал ранее. Ничего не изменилось. |
|||
5
sf
11.09.14
✎
15:47
|
(4) 1. открой для себя пакетный запрос + консоль запросов
2. перепиши второй запрос - у тебя будет столько же строк по каждой номенклатуре, сколько и партий 3. КонецЦикла; КонецЦикла; где-то ты нас наеживаешь p.s. а что сейчас все дипломы на 1с можно делать? |
|||
6
Персиваль
11.09.14
✎
16:14
|
1) Ок
3) Забыл убрать. Я нашёл немножко похожее задание на "1с специалиста" и разбирал его. 4) Если тема подходит, то почему бы и нет. |
|||
7
Персиваль
13.09.14
✎
14:02
|
Переписал 2-ой запрос. Ниже можно его посмотреть.
Теперь у меня ничего не отображается в столбце "Партия". Почему, можете написать ? Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Движения.ТоварыНаСкладе.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | ДокументРасходТовары.Номенклатура, | СУММА(ДокументРасходТовары.Количество) КАК Количество, | ДокументРасходТовары.Склад |ПОМЕСТИТЬ ВрТаб |ИЗ | Документ.ДокументРасход.Товары КАК ДокументРасходТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДокументРасход КАК ДокументРасход | ПО ДокументРасходТовары.Ссылка = ДокументРасход.Ссылка |ГДЕ | ДокументРасходТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ДокументРасходТовары.Склад, | ДокументРасходТовары.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВТ; Запрос2.Текст ="ВЫБРАТЬ | ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ВрТаб.Номенклатура КАК Номенклатура, | ВрТаб.Склад КАК Склад, | ВрТаб.Количество КАК Количество, | ТоварыНаСкладеОстатки.Партия КАК Партия, | ТоварыНаСкладеОстатки.Партия.МоментВремени КАК ПартияМоментВремени |ИЗ | ВрТаб КАК ВрТаб | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки( | &МоментВремени, | (Номенклатура, Склад) В | (ВЫБРАТЬ | ВрТаб.Номенклатура, | ВрТаб.Склад | ИЗ | ВрТаб КАК ВрТаб)) КАК ТоварыНаСкладеОстатки | ПО ВрТаб.Номенклатура = ТоварыНаСкладеОстатки.Номенклатура | И ВрТаб.Склад = ТоварыНаСкладеОстатки.Склад | |УПОРЯДОЧИТЬ ПО | ПартияМоментВремени |ИТОГИ | СУММА(СуммаОстаток), | СУММА(КоличествоОстаток), | МАКСИМУМ(Количество) |ПО | Номенклатура, | Склад"; Запрос2.УстановитьПараметр("МоментВремени", МоментВремени()); Движения.ТоварыНаСкладе.БлокироватьДляИзменения = Истина; Движения.ТоварыНаСкладе.Записать(); РезультатЗапроса = Запрос2.Выполнить(); Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл СписатьКол=Выборка.Количество; Если Выборка.Количество > Выборка.КоличествоОстаток Тогда Сообщить("Не хватает товара "+Выборка.Номенклатура+" на складе "+Выборка.Склад); Отказ = истина; Возврат ; КонецЕсли; ВыборкаПартии=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПартии.Следующий() Цикл Если ВыборкаПартии.КоличествоОстаток<СписатьКол Тогда СписатьКоличествоЗаказа = ВыборкаПартии.КоличествоОстаток; СуммаСписания = ВыборкаПартии.СуммаОстаток; Иначе СписатьКоличествоЗаказа=СписатьКол; СуммаСписания = ВыборкаПартии.СуммаОстаток/ВыборкаПартии.КоличествоОстаток*ВыборкаПартии.Количество; КонецЕсли; Движение = Движения.ТоварыНаСкладе.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; ЗаполнитьЗначенияСвойств(Движение, Выборка); Движение.Количество = СписатьКоличествоЗаказа; Движение.Сумма = СуммаСписания; КонецЦикла; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры |
|||
8
Мимохожий Однако
13.09.14
✎
14:10
|
Поищи консоль запросов и в ней помучай свои запросы.
|
|||
9
zak555
13.09.14
✎
14:11
|
(7) зачем шаку соединять с тч товары ?
|
|||
10
GROOVY
13.09.14
✎
14:14
|
Вот тут есть классический простой партионный (партийный) учет: http://1c.chistov.pro/2013/07/blog-post_25.html ближе к середине статьи.
А вот тут есть запрос, который рассчитывает списываемое количество без объектной модели: http://1c.chistov.pro/2014/03/blog-post.html |
|||
11
alle68
13.09.14
✎
14:23
|
(7) Так гораздо лучше, но не хватает выборки по складу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |