База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как объединить одинаковые товары в приходной накладной при разных ценах на экзам
- В этой теме 1 ответ, 2 участника, последнее обновление 18 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
23 октября 2026 в 15:19 #38898
У меня есть обычная приходная накладная. Хочу, чтобы при проведении не было двух записей с одним и тем же товаром, чтобы они схлопывались. Как это сделать на экзамене 1с:Специалист? И как поступать, если товар один и тот же, а цены на него разные?
-
23 октября 2026 в 15:19 #38899
Да, на экзамене это делается через группировку строк табличной части перед формированием движений. Но сначала нужно определить, что именно должно считаться одинаковой записью.
## 1. Что значит «схлопнуть записи»
Допустим, в приходной накладной есть строки:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Товар 1 | 10 | 100 | 1 000 |
| Товар 1 | 5 | 100 | 500 |Если в регистре измерения:
1С (Код)12СкладНоменклатураа ресурсы:
1С (Код)12КоличествоСуммато эти строки можно объединить в одно движение:
1С (Код)1Товар 1, количество 15, сумма 1 500Если же цена разная:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Товар 1 | 10 | 100 | 1 000 |
| Товар 1 | 5 | 120 | 600 |то дальнейшие действия зависят от методики учета.
—
# 2. Если цена не участвует в определении партии
Если вам не нужно вести FIFO/LIFO и цена является только расчетным показателем, строки можно полностью объединить по номенклатуре.
В этом случае:
1С (Код)12Количество = 10 + 5 = 15Сумма = 1 000 + 600 = 1 600Средняя учетная цена будет:
1С (Код)11 600 / 15 = 106,6667То есть нельзя просто взять цену первой строки. Нужно складывать отдельно количество и сумму.
На экзамене это реализуется запросом с
СУММА()иСГРУППИРОВАТЬ ПО.## Пример запроса для объединения строк
1С (Код)123456789101112|ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.СкладВ результате для одной номенклатуры и одного склада будет одна строка независимо от количества строк в документе.
## Формирование движений
1С (Код)12345678910111213141516171819202122232425262728293031Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад";Запрос.УстановитьПараметр("Ссылка", Ссылка);Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() ЦиклДвижение = Движения.ТоварыНаСкладах.ДобавитьПриход();Движение.Период = Дата;Движение.Номенклатура = Выборка.Номенклатура;Движение.Склад = Выборка.Склад;Движение.Количество = Выборка.Количество;Движение.Сумма = Выборка.Сумма;КонецЦикла;Перед этим в процедуре проведения необходимо включить запись движений:
1С (Код)1Движения.ТоварыНаСкладах.Записывать = Истина;Полная структура процедуры:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637Процедура ОбработкаПроведения(Отказ, РежимПроведения)Движения.ТоварыНаСкладах.Записывать = Истина;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад";Запрос.УстановитьПараметр("Ссылка", Ссылка);Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() ЦиклДвижение = Движения.ТоварыНаСкладах.ДобавитьПриход();Движение.Период = Дата;Движение.Номенклатура = Выборка.Номенклатура;Движение.Склад = Выборка.Склад;Движение.Количество = Выборка.Количество;Движение.Сумма = Выборка.Сумма;КонецЦикла;КонецПроцедурыНазвания реквизитов нужно заменить на названия из вашей конфигурации.
—
# 3. Если цена разная и используется FIFO или LIFO
В этом случае объединять разные цены нельзя.
Причина простая: разные цены означают разные учетные слои.
Например, поступило:
1С (Код)1210 штук по 100 рублей5 штук по 120 рублейПри FIFO продажа 12 штук должна списать:
1С (Код)1210 штук по 100 рублей2 штуки по 120 рублейПри LIFO продажа 12 штук должна списать:
1С (Код)125 штук по 120 рублей7 штук по 100 рублейЕсли при поступлении объединить все в одну строку:
1С (Код)115 штук, сумма 1 600 рублейто информация о двух партиях будет потеряна. После этого корректно реализовать FIFO и LIFO уже невозможно.
Поэтому при использовании FIFO/LIFO разные цены должны оставаться отдельными партиями.
## Правильная структура регистра для FIFO/LIFO
Например, регистр накопления
ТоварыНаСкладах:### Измерения
1С (Код)123СкладНоменклатураПартия### Ресурсы
1С (Код)12КоличествоСуммаПартия должна однозначно определять слой товара.
Можно использовать:
— документ поступления как партию, если в одном документе одна цена на товар;
— ссылку на документ плюс номер строки;
— отдельный справочник партий;
— составной идентификатор партии.На экзамене часто удобно использовать отдельную партию для каждой строки поступления. Иначе две строки одного документа с разными ценами могут попасть в одну и ту же партию.
—
# 4. Почему одного документа в качестве партии может быть недостаточно
Предположим, в одной приходной накладной есть две строки:
| Номер строки | Номенклатура | Количество | Цена |
|—:|—|—:|—:|
| 1 | Товар 1 | 10 | 100 |
| 2 | Товар 1 | 5 | 120 |Если в качестве измерения
Партиязаписывать только ссылку на приходную накладную, у обеих строк будет одинаковая партия:1С (Код)1Партия = ПриходнаяНакладная00001Тогда регистр не сможет различить цены 100 и 120.
Есть несколько решений.
## Вариант 1. Добавить номер строки как измерение
В регистр добавляются:
1С (Код)12ПартияНомерСтрокиПартииПри проведении:
1С (Код)12Движение.Партия = Ссылка;Движение.НомерСтрокиПартии = СтрокаТовара.НомерСтроки;Тогда партии будут различаться:
1С (Код)12ПриходнаяНакладная00001, строка 1ПриходнаяНакладная00001, строка 2Это рабочий вариант для экзамена, если задача разрешает такую структуру.
## Вариант 2. Создать отдельный справочник партий
Например, справочник
ПартииТоваровс реквизитами:1С (Код)1234ДокументПоступленияНомерСтрокиДатаПоступленияЦенаВ регистр записывается ссылка на элемент справочника
ПартииТоваров.Это более полноценное решение, но оно требует дополнительной логики создания партий.
## Вариант 3. Использовать составной ключ партии
Если в задаче отдельный справочник не нужен, можно логически считать партией сочетание:
1С (Код)1ДокументПоступления + НомерСтрокиФизически составной ссылочный реквизит в стандартном регистре напрямую не хранится, поэтому обычно используют отдельное измерение номера строки или отдельный справочник партий.
—
# 5. Как группировать приход при FIFO/LIFO
При FIFO/LIFO нужно группировать не только по номенклатуре и складу, а по полному набору измерений регистра.
Например:
1С (Код)1234567891011121314|ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| Товары.НомерСтроки,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад,| Товары.НомерСтрокиЕсли каждая строка документа является отдельной партией, то фактически каждая строка останется отдельной записью. Это правильно, если цены разные.
Если две строки имеют одну и ту же номенклатуру, склад и одну и ту же партию, их можно объединить:
1С (Код)1234|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад,| Товары.ПартияЦена при этом обычно не должна быть отдельным измерением регистра. Ее лучше хранить через сумму партии:
1С (Код)12Количество партииСумма партииЦена рассчитывается:
1С (Код)1Цена = Сумма / КоличествоНо если цена определяет партию, она должна участвовать в логике формирования партии или быть отдельным реквизитом партии.
—
# 6. Важное правило по цене
## Цена одинаковая
Строки можно объединить, если совпадают все измерения регистра:
1С (Код)1234567НоменклатураСкладПартияОрганизацияХарактеристикаСерияНазначениеКонкретный состав зависит от вашей задачи.
Например:
1С (Код)1210 штук по 1005 штук по 100можно заменить на:
1С (Код)115 штук по 100## Цена разная, FIFO/LIFO не используется
Можно объединить:
1С (Код)1210 по 1005 по 120в:
1С (Код)1215 штуксумма 1 600Но цена после объединения будет средней. Если нужно сохранить исходные цены, одной записи будет недостаточно.
## Цена разная, FIFO/LIFO используется
Объединять нельзя. Нужно оставить разные партии:
1С (Код)12Партия 1: 10 штук, сумма 1 000Партия 2: 5 штук, сумма 600Именно это нужно для правильного последующего списания.
—
# 7. Что лучше сделать на экзамене
Если задача просто про приход и остатки, без FIFO/LIFO, используйте запрос с группировкой:
1С (Код)123|СУММА(Количество)|СУММА(Сумма)|СГРУППИРОВАТЬ ПО Номенклатура, СкладЕсли задача содержит FIFO или LIFO:
1. Не группируйте разные цены в одну партию.
2. Добавьте в регистр измерение партии.
3. Обеспечьте уникальность партии для разных строк с разными ценами.
4. В приходе делайте отдельное движение по каждой партии.
5. В расходе получайте остатки партий с сортировкой по дате партии.
6. Для FIFO используйте сортировку по возрастанию.
7. Для LIFO используйте сортировку по убыванию.
8. Количество и сумму списывайте пропорционально выбранной партии.Если требуется именно убрать дубли движений при одинаковой цене, группируйте строки по всем измерениям регистра и суммируйте ресурсы:
1С (Код)12|СУММА(Товары.Количество) КАК Количество,|СУММА(Товары.Сумма) КАК СуммаА если цена различается и партия должна сохраняться, цена не должна использоваться для механического объединения строк. В этом случае разделяйте партии, иначе FIFO/LIFO будет работать неправильно.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.