Этот гайд предназначен для специалистов, обучающихся работе с конфигурацией 1С, и подробно раскрывает процесс автоматизации расчётов и организации учёта товаров с помощью регистров сведений и накопления. В нем пошагово описаны основные приёмы создания вычислений, настройки документов и использование общих модулей для повышения эффективности работы с торговыми операциями. Следуя этому руководству, вы сможете легко повторить и внедрить указанные решения в своей информационной системе.
Создание автоматического расчёта суммы по цене и количеству в документе
- Откройте форму документа, в табличной части найдите поле Количество.
- Двойным щелчком откройте свойства этого поля.
- Перейдите в раздел События и выберите событие ПриИзменении.
- Нажмите на значок лупы и выберите вариант создания обработчика на клиенте. Откроется редактор программного кода.
- Вставьте следующий код, который будет автоматически рассчитывать сумму для текущей строки при изменении количества:
&НаКлиенте
Процедура ПереченьТоваровКоличествоПриИзменении(Элемент)
// Получение текущей строки табличной части
СтрТабЧасти = Элементы.ПереченьТоваров.ТекущиеДанные;
// Расчёт суммы: Цена * Количество
СтрТабЧасти.Сумма = СтрТабЧасти.Цена * СтрТабЧасти.Количество;
КонецПроцедуры
Аналогично откройте свойства поля Цена в табличной части, перейдите к событию ПриИзменении, создайте обработчик на клиенте и добавьте такой же код с расчётом суммы.
В результате сумма будет автоматически пересчитываться при вводе или изменении цены и количества в любой последовательности.
Создание сообщения при записи документа о количестве строк и общем количестве товаров
- Перейдите в редактор формы документа и откройте вкладку Модуль формы.
- Создайте событие ПриЗаписиНаСервере с параметрами (Отказ, ТекущийОбъект, ПараметрыЗаписи).
- Добавьте код для вывода сообщения, где указывается количество строк и общее количество товаров в табличной части:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Сообщить("Всего в документе " +
Строка(ТекущийОбъект.ПереченьТоваров.Количество()) + " строк(и) с количеством товаров " +
Строка(ТекущийОбъект.ПереченьТоваров.Итог("Количество")) + " шт");
КонецПроцедуры
Теперь при проведении или записи документа пользователи будут видеть обобщённое сообщение.
Создание регистра сведений для хранения истории цен поступления
- В конфигураторе 1С правой кнопкой мыши на элементе Регистры сведений выберите Добавить новый регистр с именем, например, "Цены поступления".
- На вкладке Основные установите:
Периодичность — "В пределах дня"
Режим записи — "Подчиняется регистратору" - На вкладке Данные добавьте:
Измерение: Товар (тип — СправочникСсылка.Товары)
Ресурс: ЦенаПоступления (тип — число, длина 10, точность 2) - На вкладке Регистраторы установите документ ПоступлениеТоваров в качестве регистратора.
- Сохраните изменения.
4. Редактирование документа «Поступление товаров» для формирования движений по регистру сведений
- В конфигураторе откройте объект документа ПоступлениеТоваров.
- Перейдите на вкладку Движения.
- Отметьте выбранным регистр сведений ЦеныПоступления.
- Нажмите кнопку Конструктор движений.
- Выберите табличную часть документа (ПереченьТоваров) в выпадающем списке.
- Нажмите кнопку Заполнить выражения, чтобы автоматически заполнить связи между полями документа и регистра.
- Подтвердите изменения и сохраните.
- В редакторе кода на вкладке Модуль объекта появится автоматически сгенерированная процедура, которая будет формировать движения по регистру при проведении документа:
&НаСервере
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ЦеныПоступления.Записывать = Истина;
Для Каждого ТекСтрокаИз ПереченьТоваров Цикл
Движение = Движения.ЦеныПоступления.Добавить();
Движение.Период = Дата;
Движение.Товар = ТекСтрока.Товар;
Движение.ЦенаПоступления = ТекСтрока.Цена;
КонецЦикла;
КонецПроцедуры
Проведите повторно все документы поступления товаров, чтобы заполнить регистр данными.
Создание и использование общего модуля для получения актуальной цены по дате
- В конфигураторе откройте раздел Общие модули.
- Создайте новый общий модуль с именем ОбщиеФункции.
- В свойствах модуля установите флаги:
Компиляция на сервере (Сервер)
Вызов с сервера (Вызов сервера) - В модуле создайте функцию ЦенаНаДень, которая принимает дату и товар, и возвращает последнюю цену из регистра:
Функция ЦенаНаДень(АктуальнаяДата, ЭлементТовар) Экспорт
Отбор = Новый Структура;
Отбор.Вставить("Товар", ЭлементТовар);
ЗначенияРесурсов = РегистрыСведений.ЦеныПоступления.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Если ЗначенияРесурсов = Неопределено Тогда
Возврат 0;
КонецЕсли;
Возврат ЗначенияРесурсов.ЦенаПоступления;
КонецФункции
Теперь данную функцию можно вызвать из форм документов для подстановки актуальной закупочной цены.
Добавление реквизита Цена поступления и автоматическая подстановка в документ «Продажа товаров»
- В конфигураторе открываем документ ПродажаТоваров.
- На вкладке Реквизиты табличной части создаём новое поле типа число с названием ЦенаПоступления (аналогично рисунку в исходном тексте).
- Добавляем это поле на форму документа в табличную часть.
- Для поля Товар табличной части документа настроим событие ПриИзменении.
- В обработчике события добавьте вызов функции из общего модуля для загрузки цены поступления:
&НаКлиенте
Процедура ПереченьТоваровТоварПриИзменении(Элемент)
СтрТабЧасти = Элементы.ПереченьТоваров.ТекущиеДанные;
СтрТабЧасти.ЦенаПоступления = ОбщиеФункции.ЦенаНаДень(Объект.Дата, СтрТабЧасти.Товар);
КонецПроцедуры
Проверьте работу документа в режиме 1С:Предприятие — при выборе товара автоматически заполнится актуальная цена поступления.
Создание регистра накопления для учёта количества товаров
- В конфигураторе в дереве объектов выберите Регистры накопления, правой кнопкой мыши создайте новый регистр с именем, например, "КоличествоТоваров".
- На вкладке Основные установите, что регистр является регистром остатков.
- На вкладке Данные добавьте измерения:
Товар (тип справочника Товары)
Филиал (тип справочника Филиалы) - Добавьте ресурс Количество (тип число, длина 10, точность 3).
Настройка документа «Поступление товаров» для движений по регистру накопления количества товаров
- В объекте документа ПоступлениеТоваров перейдите на вкладку Движения.
- Отметьте регистр накопления КоличествоТоваров.
- Нажмите Конструктор движений.
- Добавьте табличную часть документа (ПереченьТоваров).
- Заполните выражения автоматически, соотнеся поля документа с полями регистра.
- Подтвердите и сохраните.
- В модуле объекта документа появится процедура проведения с автоматическим формированием движений по регистру.
Аналогичная настройка документа «Продажа товаров» с уменьшением количества (регистром расхода)
- В объекте документа ПродажаТоваров откройте вкладку Движения.
- Отметьте регистр накопления КоличествоТоваров.
- В конструкторе движений установите тип движения как Расход.
- Добавьте табличную часть, заполните выражения.
- Подтвердите и сохраните.
- В модуле документа будет процедура, уменьшающая количество при проведении продажи.
10. Создание оборотного регистра накопления для учёта продаж по филиалам
- В регистры накопления создайте новый регистр с типом Обороты и именем, например, "ПродажиПоФилиалам".
- На вкладке Данные добавьте измерения:
Филиал (тип справочника Филиалы)
Менеджер (тип справочника Менеджеры) - Добавьте ресурс Сумма (тип число, длина 13, точность 2).
- Настройте движение по этому регистру через документ ПродажаТоваров:
В конструкторе движений документа ПродажаТоваров добавьте регистр ПродажиПоФилиалам.
Заполните поля движений по табличной части. - Подтвердите и сохраните.
- При проведении документов продажи будут формироваться движения сразу по двум регистрами (количество и продажи по филиалам).
Этот гайд систематически описывает создание автоматизации расчётов, работу с регистрами сведений и накопления, расширение документа и использование общего модуля для получения актуальных значений. Следуя этому руководству, можно воспроизвести весь описанный функционал в конфигурации 1С.