База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Можно ли переделать структуру регистров, добавив регистр сведений «Продажи»?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 час, 13 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
31 октября 2026 в 16:03 #38940
Слишком много ресурсов. А если сделать оставить ресурсы количество и себестоимость, а отдельно реализовать регистр сведений «Продажи» подчинённые регистратору и в пределах секунды, с измерением номенклатура и ресурсами количество, себестоимость, сумма продажи. Так получится переделать решение?
-
31 октября 2026 в 16:03 #38941
Да, так переделать можно. Более того, для этой задачи это будет более аккуратная архитектура:
— регистр накопления
ОстаткиНоменклатурыхранит только складские остатки и себестоимость;
— регистр сведенийПродажихранит оборотные данные для первого отчета;
— отчет по остаткам строится по регистру накопления;
— отчет по продажам строится по регистру сведений.Но есть важный нюанс по формулировке задания.
Если в условии буквально сказано, что оба отчета должны строиться по регистру
ОстаткиНоменклатуры, то использование отдельного регистра сведений формально отступает от требования. Если же экзаменатор допускает вспомогательный регистр для хранения продаж, такой вариант нормальный и логичный.Для учебной задачи я бы предложил именно эту структуру.
—
# 1. Итоговая структура
## Регистр накопления
1С (Код)1ОстаткиНоменклатурыВид:
1С (Код)1ОстаткиИзмерения:
1С (Код)123НоменклатураСкладПартияРесурсы:
1С (Код)12КоличествоСебестоимость—
## Регистр сведений
1С (Код)1ПродажиНастройки:
1С (Код)123ПериодическийПериодичность: В пределах секундыПодчинение регистратору: ДаИзмерение:
1С (Код)1НоменклатураРесурсы:
1С (Код)123КоличествоСебестоимостьСуммаПродажиРегистраторами регистра сведений сделать:
1С (Код)12РасходнаяНакладнаяКорректировкаРегистровКорректировкаРегистровдобавляется регистратором только в том случае, если пользователь должен иметь возможность вручную корректировать данные продаж. Если документ корректировки работает только с регистром остатков, достаточно оставить регистратором толькоРасходнаяНакладная.—
# 2. Регистр накопления «ОстаткиНоменклатуры»
## Измерения
1С (Код)123НоменклатураСкладПартияТипы:
1С (Код)12345678НоменклатураСправочникСсылка.НоменклатураСкладСправочникСсылка.СкладыПартияДокументСсылка.ПриходнаяНакладнаяПартия будет ссылкой на приходную накладную.
Например:
| Номенклатура | Склад | Партия | Количество | Себестоимость |
|—|—|—|—:|—:|
| Куртка | Основной | Приходная накладная № 1 | 10 | 1000 |
| Куртка | Основной | Приходная накладная № 2 | 5 | 600 |## Ресурсы
1С (Код)12КоличествоСебестоимостьТипы:
1С (Код)12345КоличествоЧисло, 15, 3СебестоимостьЧисло, 15, 2В этом регистре не будет данных о выручке и количестве продаж. Только складской остаток.
—
# 3. Регистр сведений «Продажи»
Создать регистр сведений:
1С (Код)1Продажи## Настройки регистра
1С (Код)123Периодичность: В пределах секундыПодчинение регистратору: ДаРежим записи: НезависимыйУ регистра сведений, подчиненного регистратору, платформа автоматически использует:
—
Период;
—Регистратор;
—Номер строки.Пользователь самостоятельно создает только измерение
Номенклатура.## Измерения
1С (Код)1НоменклатураТип:
1С (Код)1СправочникСсылка.Номенклатура## Ресурсы
1С (Код)123КоличествоСебестоимостьСуммаПродажиТипы:
1С (Код)12345678КоличествоЧисло, 15, 3СебестоимостьЧисло, 15, 2СуммаПродажиЧисло, 15, 2Склад в регистр продаж добавлять не обязательно, потому что в отчете продаж по фотографии склад не выводится.
Если в будущем потребуется отчет продаж по складам, тогда
Складнужно добавить измерением регистра сведений.—
# 4. Что хранится в регистре «Продажи»
## Продажа товара
Например, продано 3 штуки товара на сумму 500, себестоимость 320.
В регистре сведений:
| Номенклатура | Количество | Себестоимость | СуммаПродажи |
|—|—:|—:|—:|
| Куртка | 3 | 320 | 500 |## Продажа услуги
Например, оказана услуга доставки в количестве 1 на сумму 331.
В регистре сведений:
| Номенклатура | Количество | Себестоимость | СуммаПродажи |
|—|—:|—:|—:|
| Доставка | 1 | 0 | 331 |Таким образом, услуги не попадают в регистр остатков, но попадают в регистр продаж.
—
# 5. Проведение приходной накладной
Приходная накладная записывает данные только в регистр накопления
ОстаткиНоменклатуры.Для товара:
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859Процедура ОбработкаПроведения(Отказ, РежимПроведения)Если Не ЗначениеЗаполнено(Склад) ТогдаОтказ = Истина;Сообщить("Не указан склад.");Возврат;КонецЕсли;Движения.ОстаткиНоменклатуры.Записывать =Истина;Для каждого СтрокаТовара Из Товары ЦиклЕсли Не ЗначениеЗаполнено(СтрокаТовара.Номенклатура) ТогдаОтказ = Истина;Сообщить("Не указана номенклатура.");Возврат;КонецЕсли;Если СтрокаТовара.Количество <= 0 ТогдаОтказ = Истина;Сообщить("Количество должно быть больше нуля.");Возврат;КонецЕсли;Если СтрокаТовара.Номенклатура.ВидНоменклатуры =Перечисления.ВидыНоменклатуры.Услуга ТогдаПродолжить;КонецЕсли;Движение =Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения =ВидДвиженияНакопления.Приход;Движение.Период = Дата;Движение.Номенклатура =СтрокаТовара.Номенклатура;Движение.Склад = Склад;Движение.Партия = Ссылка;Движение.Количество =СтрокаТовара.Количество;Движение.Себестоимость =СтрокаТовара.Сумма;КонецЦикла;КонецПроцедурыУслуги в приходной накладной не формируют остатки.
—
# 6. Проведение расходной накладной
При проведении расходной накладной нужно:
1. определить метод списания;
2. списать товар изОстаткиНоменклатуры;
3. рассчитать себестоимость проданных товаров;
4. записать продажи товаров и услуг в регистр сведенийПродажи.В регистр накопления попадают только складские движения товаров.
В регистр сведений попадают продажи товаров и услуг.
—
# 7. Списание товара
Получение остатков по партиям остается практически таким же, как в предыдущем варианте.
Для FIFO:
1С (Код)12345678910111213141516171819ЗапросОстатки = Новый Запрос;ЗапросОстатки.Текст ="ВЫБРАТЬ| Остатки.Номенклатура,| Остатки.Склад,| Остатки.Партия,| Остатки.КоличествоОстаток КАК Количество,| Остатки.СебестоимостьОстаток КАК Себестоимость|ИЗ| РегистрНакопления.ОстаткиНоменклатуры.Остатки(| &Момент,| Номенклатура = &Номенклатура| И Склад = &Склад| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Партия.Дата,| Остатки.Партия";Для LIFO заменить сортировку:
1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.Партия.Дата УБЫВ,| Остатки.Партия УБЫВДля метода средней себестоимости порядок партий не влияет на стоимость единицы, но партии по-прежнему используются для распределения количества.
—
# 8. Движения по регистру накопления при продаже товара
Для товара движение в регистре
ОстаткиНоменклатурыформируется по каждой партии:1С (Код)123456789101112131415161718Движение =Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения =ВидДвиженияНакопления.Расход;Движение.Период = Дата;Движение.Номенклатура =ВыборкаТоваров.Номенклатура;Движение.Склад = Склад;Движение.Партия =СтрокаОстатка.Партия;Движение.Количество =КоличествоИзПартии;Движение.Себестоимость =СтоимостьИзПартии;В регистр накопления не записывается сумма продажи.
—
# 9. Формирование записей регистра «Продажи»
После списания товаров нужно сформировать записи регистра сведений.
## Создание набора записей
1С (Код)123456789101112НаборЗаписейПродажи =РегистрыСведений.Продажи.СоздатьНаборЗаписей();НаборЗаписейПродажи.Отбор.Регистратор.Использование =Истина;НаборЗаписейПродажи.Отбор.Регистратор.Значение =Ссылка;НаборЗаписейПродажи.Прочитать();НаборЗаписейПродажи.Очистить();Почему сначала выполняются
Прочитать()иОчистить():— при перепроведении документа нужно удалить старые записи;
— если пользователь изменил количество, цену или номенклатуру, старые продажи не должны остаться;
— набор записей должен содержать только актуальные данные документа.—
## Запись продажи товара
После расчета себестоимости товара:
1С (Код)123456789101112131415ЗаписьПродажи =НаборЗаписейПродажи.Добавить();ЗаписьПродажи.Период = Дата;ЗаписьПродажи.Номенклатура =ВыборкаТоваров.Номенклатура;ЗаписьПродажи.Количество =ВыборкаТоваров.Количество;ЗаписьПродажи.Себестоимость =СебестоимостьТовара;ЗаписьПродажи.СуммаПродажи =ВыборкаТоваров.Сумма;Так как регистр подчинен регистратору, дополнительно устанавливать
Регистраторобычно не требуется. Он определяется платформой при записи набора с отбором по регистратору. Если в конкретной версии платформы поле доступно для записи, можно установить:1С (Код)1ЗаписьПродажи.Регистратор = Ссылка;Но в обычном наборе записей регистратора достаточно установить через отбор.
—
# 10. Запись услуг в регистр «Продажи»
Услуги не обрабатываются алгоритмом списания.
Их необходимо выбрать из табличной части документа и записать в регистр сведений.
1С (Код)1234567891011121314151617ЗапросУслуги = Новый Запрос;ЗапросУслуги.Текст ="ВЫБРАТЬ| РасходнаяНакладнаяТовары.Номенклатура,| СУММА(РасходнаяНакладнаяТовары.Количество)| КАК Количество,| СУММА(РасходнаяНакладнаяТовары.Сумма)| КАК Сумма|ИЗ| Документ.РасходнаяНакладная.Товары| КАК РасходнаяНакладнаяТовары|ГДЕ| РасходнаяНакладнаяТовары.Ссылка = &Ссылка| И РасходнаяНакладнаяТовары.Номенклатура.ВидНоменклатуры =| &ВидНоменклатурыУслуга|СГРУППИРОВАТЬ ПО| РасходнаяНакладнаяТовары.Номенклатура";Параметры:
1С (Код)123456ЗапросУслуги.УстановитьПараметр("Ссылка", Ссылка);ЗапросУслуги.УстановитьПараметр("ВидНоменклатурыУслуга",Перечисления.ВидыНоменклатуры.Услуга);Запись:
1С (Код)123456789101112131415161718192021ВыборкаУслуг =ЗапросУслуги.Выполнить().Выбрать();Пока ВыборкаУслуг.Следующий() ЦиклЗаписьПродажи =НаборЗаписейПродажи.Добавить();ЗаписьПродажи.Период = Дата;ЗаписьПродажи.Номенклатура =ВыборкаУслуг.Номенклатура;ЗаписьПродажи.Количество =ВыборкаУслуг.Количество;ЗаписьПродажи.Себестоимость = 0;ЗаписьПродажи.СуммаПродажи =ВыборкаУслуг.Сумма;КонецЦикла;В конце:
1С (Код)1НаборЗаписейПродажи.Записать();—
# 11. Важное замечание о времени регистра «Продажи»
Периодичность регистра:
1С (Код)1В пределах секундынужна для того, чтобы записи можно было получать за произвольный период с точностью до секунды.
Например, отчет задает:
1С (Код)12Начало: 01.12.2017 00:00:00Конец: 31.12.2017 23:59:59В запросе к регистру сведений используется поле
Период:1С (Код)12|ГДЕ| Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериодаСам по себе регистр сведений не имеет виртуальной таблицы
Обороты, как регистр накопления. Поэтому отчет будет читать записи напрямую и агрегировать их черезСУММА.—
# 12. Полный фрагмент обработки проведения расходной накладной
Общая структура будет такой:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455Процедура ОбработкаПроведения(Отказ, РежимПроведения)Если Не ЗначениеЗаполнено(Склад) ТогдаОтказ = Истина;Сообщить("Не указан склад.");Возврат;КонецЕсли;МетодСписания =ПолучитьМетодСписанияНаДату(Дата,Отказ);Если Отказ ТогдаВозврат;КонецЕсли;Движения.ОстаткиНоменклатуры.Записывать =Истина;НаборЗаписейПродажи =РегистрыСведений.Продажи.СоздатьНаборЗаписей();НаборЗаписейПродажи.Отбор.Регистратор.Использование =Истина;НаборЗаписейПродажи.Отбор.Регистратор.Значение =Ссылка;НаборЗаписейПродажи.Прочитать();НаборЗаписейПродажи.Очистить();ОбработатьПродажуТоваров(МетодСписания,НаборЗаписейПродажи,Отказ);Если Отказ ТогдаВозврат;КонецЕсли;ЗаписатьПродажуУслуг(НаборЗаписейПродажи,Отказ);Если Отказ ТогдаВозврат;КонецЕсли;НаборЗаписейПродажи.Записать();КонецПроцедурыВспомогательная процедура
ОбработатьПродажуТоваровдолжна:— получить сгруппированные товары;
— проверить остатки;
— определить партии;
— рассчитать себестоимость;
— сформировать движения расхода поОстаткиНоменклатуры;
— добавить одну запись вНаборЗаписейПродажипо каждой номенклатуре.—
# 13. Отчет «Продажи товаров»
Теперь этот отчет строится по регистру сведений:
1С (Код)1Продажи## Запрос отчета
1С (Код)12345678910111213141516171819|ВЫБРАТЬ| Продажи.Номенклатура.ВидНоменклатуры| КАК ВидНоменклатуры,| Продажи.Номенклатура| КАК Номенклатура,| СУММА(Продажи.Количество)| КАК Количество,| СУММА(Продажи.Себестоимость)| КАК Себестоимость,| СУММА(Продажи.СуммаПродажи)| КАК Продажа|ИЗ| РегистрСведений.Продажи КАК Продажи|ГДЕ| Продажи.Период МЕЖДУ| &НачалоПериода И &КонецПериода|СГРУППИРОВАТЬ ПО| Продажи.Номенклатура.ВидНоменклатуры,| Продажи.НоменклатураПараметры:
1С (Код)12НачалоПериодаКонецПериодаГруппировки СКД:
1С (Код)12ВидНоменклатурыНоменклатураРесурсы:
1С (Код)123КоличествоСебестоимостьПродажаВ результате будет получена структура:
1С (Код)123456ТоварыКуртка замшеваяПортсигарУслугиДоставкаДля услуг поле
Себестоимостьбудет равно нулю.—
# 14. Отчет «Остатки товаров»
Этот отчет по-прежнему строится по регистру накопления:
1С (Код)1ОстаткиНоменклатуры## Запрос
1С (Код)1234567891011121314151617181920|ВЫБРАТЬ| Остатки.Номенклатура| КАК Номенклатура,| Остатки.Склад| КАК Склад,| Остатки.Партия| КАК Партия,| Остатки.КоличествоОстаток| КАК Количество,| Остатки.СебестоимостьОстаток| КАК Стоимость|ИЗ| РегистрНакопления.ОстаткиНоменклатуры.Остатки(| &Период,| Номенклатура.ВидНоменклатуры =| &ВидНоменклатурыТовар| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток <> 0| ИЛИ Остатки.СебестоимостьОстаток <> 0Параметры:
1С (Код)12ПериодВидНоменклатурыТоварГруппировки:
1С (Код)123НоменклатураСкладПартияРесурсы:
1С (Код)12КоличествоСтоимость—
# 15. Документ «КорректировкаРегистров»
Документ корректировки работает с регистром накопления
ОстаткиНоменклатуры.Табличная часть:
1С (Код)1ДвиженияОстатковПоля:
1С (Код)123456ВидДвиженияНоменклатураСкладПартияКоличествоСебестоимостьПроведение:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637Процедура ОбработкаПроведения(Отказ, РежимПроведения)Если ПустаяСтрока(Комментарий) ТогдаОтказ = Истина;Сообщить("Не заполнен комментарий.");Возврат;КонецЕсли;Движения.ОстаткиНоменклатуры.Записывать =Истина;Для каждого СтрокаДвиженияИз ДвиженияОстатков ЦиклДвижение =Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения =СтрокаДвижения.ВидДвижения;Движение.Период = Дата;Движение.Номенклатура =СтрокаДвижения.Номенклатура;Движение.Склад =СтрокаДвижения.Склад;Движение.Партия =СтрокаДвижения.Партия;Движение.Количество =СтрокаДвижения.Количество;Движение.Себестоимость =СтрокаДвижения.Себестоимость;КонецЦикла;КонецПроцедурыЕсли корректировка должна влиять также на отчет продаж, тогда в документ нужно добавить отдельную табличную часть
Продажии формировать записи регистра сведенийПродажи. Но для условия задачи это не требуется.—
# 16. Переходы между методами списания
Механизм не меняется.
В регистр сведений
УчетнаяПолитикавводятся записи:1С (Код)12301.01.2017 FIFO01.07.2017 Средняя01.09.2017 LIFOПри проведении документа используется запись, действующая на его дату.
Регистр продаж на выбор метода не влияет. В нем просто записывается рассчитанная при проведении себестоимость.
Например, если документ проведен методом FIFO, в регистр
Продажизаписывается себестоимость FIFO.Если документ проведен методом средней, в регистр
Продажизаписывается себестоимость по средней.Поэтому отчет продаж не пересчитывает себестоимость повторно. Он получает уже рассчитанное значение из регистра сведений.
—
# 17. Преимущества такого варианта
## Регистр накопления простой
В нем только необходимые складские данные:
1С (Код)12КоличествоСебестоимость## Продажи не влияют на остатки
Продажи хранятся отдельно и не создают лишних ресурсов в регистре накопления.
## Услуги обрабатываются естественно
Услуги не имеют склада и партии, но могут иметь:
1С (Код)123КоличествоСебестоимость = 0Сумма продажи## Себестоимость фиксируется на момент проведения
Это важно. Если позже изменится учетная политика, старые продажи не изменятся, потому что в регистре
Продажиуже сохранена фактическая себестоимость, рассчитанная при проведении документа.## Перепроведение работает корректно
Перед записью продаж по документу старые записи регистра сведений удаляются:
1С (Код)12НаборЗаписейПродажи.Прочитать();НаборЗаписейПродажи.Очистить();Затем записывается актуальный набор.
—
# 18. Что нужно сказать на экзамене
Корректная формулировка архитектуры:
> Регистр накопления
ОстаткиНоменклатурыпредназначен для хранения складских остатков товаров по складам и партиям. В нем хранятся ресурсыКоличествоиСебестоимость. Для формирования отчета по продажам используется периодический регистр сведенийПродажи, подчиненный регистраторам. В него при проведении расходной накладной записываются количество, рассчитанная себестоимость и сумма продажи по каждой номенклатуре. Услуги в регистр остатков не попадают, а в регистр продаж записываются с нулевой себестоимостью. Метод списания определяется по региструУчетнаяПолитикана дату документа.Такое решение технически корректно и существенно проще варианта с четырьмя ресурсами в одном регистре.
Единственное формальное ограничение: если экзаменатор требует, чтобы отчет по продажам обязательно строился именно по регистру накопления
ОстаткиНоменклатуры, тогда отдельный регистр сведений использовать нельзя. Если такого жесткого требования нет, предложенный вариант является вполне рабочим.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.