Файл: Разработка конфигурации Магазин "Продукты" на платформе 1С: Предприятие.pdf
Добавлен: 28.06.2023
Просмотров: 166
Скачиваний: 4
Приложение
Код модуля "Учетпрдуктов"
&НаКлиенте
Процедура ПриНачалеРаботыСистемы() // предопределенная процедура,
// запускается при начале работы в 1С:Предприятии
Перем Значение; // Объявляем переменную
Перем Рез;
Если Константы.МетодСписания.Выбран()=0 Тогда // если константа не заполнена
Рез=ВвестиЗначение(Значение,"Выберите способ списания", "Перечисления.МетодСписания");
// просим выбрать способ списания. Рез=1, если выбор произведен, 0 – если нет
Если Рез=1 Тогда
Константы.МетодСписания=Значение; // установим константе выбранное значение
Иначе
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Код модуля " МагазинПродуктов"
&НаСервере
Функция ПолучитьСреднЦенуТоваров(ДатаО, СкладО, Номенклатура) Экспорт
СредняяЦена = 0;
ОбщийОстаток = 0;
ОбщаяСтоимость = 0;
Момент = Новый Граница(КонецДня(ДатаО), ВидГраницы.Включая);
СчетТоваров = ПланыСчетов.ОсновнойПланСчетов.Материалы;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Субконто1,
| Остатки.Субконто2,
| Остатки.КоличествоОстатокДт КАК КоличествоДт,
| Остатки.КоличествоОстатокКт КАК КоличествоКт,
| Остатки.СуммаОстатокДт КАК СуммаДт,
| Остатки.СуммаОстатокКт КАК СуммаКт
|ИЗ
| РегистрБухгалтерии.ОсновнойРегистрБухгалтерии.Остатки(&Момент, Счет = &Счет, , Организация = &Организация) КАК Остатки
|ГДЕ
| Остатки.Субконто1 = &Скл
| И Остатки.Субконто2 = &Номенкл";
Запрос.УстановитьПараметр("Момент", Момент);
Запрос.УстановитьПараметр("Счет", СчетТоваров);
Запрос.УстановитьПараметр("Организация", Справочники.Организация.НайтиПоКоду("000000001"));
Запрос.УстановитьПараметр("Номенкл", Номенклатура);
Запрос.УстановитьПараметр("Скл", СкладО);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОбщийОстаток = Выборка.КоличествоДт - Выборка.КоличествоКт;
ОбщаяСтоимость = Выборка.СуммаДт - Выборка.СуммаКт;
КонецЦикла;
Если ОбщийОстаток>0 Тогда
СредняяЦена = ОбщаяСтоимость/ОбщийОстаток;
КонецЕсли;
Возврат СредняяЦена;
КонецФункции
Код документа "ПриходПродуктов"
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр РегистрУчетПродуктов Приход
Движения.РегистрУчетПродуктов.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.РегистрУчетПродуктов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Организация = Справочники.Организация.НайтиПоКоду("000000001");
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Магазин = Магазин;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;
// регистр РегистрУчетПродуктовОб
Движения.РегистрУчетПродуктовОб.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.РегистрУчетПродуктовОб.Добавить();
Движение.Период = Дата;
Движение.Организация = Справочники.Организация.НайтиПоКоду("000000001");
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Магазин = Магазин;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Всего = ЭтотОбъект.Товары.Итог("Сумма");
КонецПроцедуры
//---------------------------------------------------------------------------------------
Перем Номенкл;
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
РасчетСуммыСтроки();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
РасчетСуммыСтроки();
КонецПроцедуры
&НаКлиенте
Процедура РасчетСуммыСтроки()
ДанныеТекущейСтроки = Элементы.Товары.ТекущиеДанные;
ДанныеТекущейСтроки.Сумма = ДанныеТекущейСтроки.Цена * ДанныеТекущейСтроки.Количество;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.ЕдИзм = ПолучитьДанные(Строка.Номенклатура);
КонецПроцедуры
&НаСервере
Функция ПолучитьДанные(Ссылка)
Возврат Ссылка.ЕдиницаИзмерения;
КонецФункции
Код документа " РасходПродуктов"
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр РегистрУчетПродуктов Расход
Движения.РегистрУчетПродуктов.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.РегистрУчетПродуктов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Организация = Справочники.Организация.НайтиПоКоду("000000001");
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Магазин = Магазин;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;
// регистр РегистрУчетПродуктовОб
Движения.РегистрУчетПродуктовОб.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.РегистрУчетПродуктовОб.Добавить();
Движение.Период = Дата;
Движение.Организация = Справочники.Организация.НайтиПоКоду("000000001");
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Магазин = Магазин;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Всего = ЭтотОбъект.Товары.Итог("Сумма");
КонецПроцедуры
//---------------------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем Запись, Документ;
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
РасчетСуммыСтроки();
КонецПроцедуры
&НаКлиенте
Процедура РасчетСуммыСтроки()
ДанныеТекущейСтроки = Элементы.Товары.ТекущиеДанные;
ДанныеТекущейСтроки.Сумма = ДанныеТекущейСтроки.Цена * ДанныеТекущейСтроки.Количество;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
РасчетСуммыСтроки();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент) Экспорт
Для Итератор = 1 По Объект.Товары.Количество() Цикл
СтрокаТЗ = Объект.Товары[Итератор-1];
СтрокаТЗ.Цена = МагазинПродуктов.ПолучитьСреднЦенуТоваров(Объект.Дата, Объект.Магазин, СтрокаТЗ.Номенклатура);
КонецЦикла;
РасчетСуммыСтроки();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.ЕдИзм = ПолучитьДанные(Строка.Номенклатура);
Строка.Цена = МагазинПродуктов.ПолучитьСреднЦенуТоваров(Объект.Дата, Объект.Магазин, Строка.Номенклатура);
РасчетСуммыСтроки();
КонецПроцедуры
&НаСервере
Функция ПолучитьДанные(Ссылка)
Возврат Ссылка.ЕдиницаИзмерения;
КонецФункции
Код документа "ПоступлениеПродуктов"
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ВсегоКоличество = ЭтотОбъект.Товары.Итог("Количество");
ВсегоСумма = ЭтотОбъект.Товары.Итог("Сумма");
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр ОсновнойРегистрБухгалтерии
Движения.ОсновнойРегистрБухгалтерии.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОсновнойРегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ОсновнойПланСчетов.Товары;
Движение.СчетКт = ПланыСчетов.ОсновнойПланСчетов.РасчетыСПоставщикамиИПодрядчиками;
Движение.Период = Дата;
Движение.Организация = Справочники.Организация.НайтиПоКоду("000000001");
Движение.Сумма = ТекСтрокаТовары.Сумма;
Движение.КоличествоДт = ТекСтрокаТовары.Количество;
Движение.Содержание = "Покупка товаров";
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Товары] = ТекСтрокаТовары.Номенклатура;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Склады] = Магазин;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Организация] = Поставщик;
КонецЦикла;
КонецПроцедуры
//---------------------------------------------------------------------------------------
&НаСервере
Функция ПолучитьЕдИзм(Ссылка)
Возврат Ссылка.ЕдиницаИзмерения;
КонецФункции
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.ЕдИзм = ПолучитьЕдИзм(Строка.Номенклатура);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.Сумма = Строка.Цена * Строка.Количество;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСуммаПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.Цена = Строка.Сумма / Строка.Количество;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.Сумма = Строка.Цена * Строка.Количество;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьПрихОрдер(Команда)
СформироватьПО();
КонецПроцедуры
&НаСервере
Процедура СформироватьПО()
НовыйПО = Документы.ПриходПродуктов.СоздатьДокумент();
НовыйПО.Дата = Объект.Дата;
НовыйПО.Магазин = Объект.Магазин;
НовыйПО.Основание = Объект.Ссылка;
ТаблЧастьПО = НовыйПО.Товары;
ТаблЧастьРезультат = Объект.Товары;
Для каждого СтрокаТаблЧастьРез Из ТаблЧастьРезультат Цикл
НоваяСтрока = ТаблЧастьПО.Добавить();
НоваяСтрока.Номенклатура = СтрокаТаблЧастьРез.Номенклатура;
НоваяСтрока.ЕдИзм = ПолучитьЕдИзм(СтрокаТаблЧастьРез.Номенклатура);
НоваяСтрока.Количество = СтрокаТаблЧастьРез.Количество;
НоваяСтрока.Цена = СтрокаТаблЧастьРез.Цена;
НоваяСтрока.Сумма = СтрокаТаблЧастьРез.Сумма;
КонецЦикла;
НовыйПО.Записать();
Сообщить("Создан приходный ордер №"+ ЗначениеВСтрокуВнутр(НовыйПО.Номер), СтатусСообщения.Внимание);
КонецПроцедуры
Код документа "РеализацияПродуктов"
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ВсегоКоличество = ЭтотОбъект.Товары.Итог("Количество");
ВсегоСумма = ЭтотОбъект.Товары.Итог("Сумма");
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр ОсновнойРегистрБухгалтерии
Движения.ОсновнойРегистрБухгалтерии.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОсновнойРегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ОсновнойПланСчетов.РасчетыСПокупателямиИПодрядчиками;
Движение.СчетКт = ПланыСчетов.ОсновнойПланСчетов.Товары;
Движение.Период = Дата;
Движение.Организация = Справочники.Организация.НайтиПоКоду("000000001");
Движение.Сумма = ТекСтрокаТовары.Сумма;
Движение.КоличествоКт = ТекСтрокаТовары.Количество;
Движение.Содержание = "Продажа товаров";
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Организация] = Покупатель;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склады] = Магазин;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Товары] = ТекСтрокаТовары.Номенклатура;
КонецЦикла;
КонецПроцедуры
//---------------------------------------------------------------------------------------
&НаКлиенте
Процедура ДатаПриИзменении(Элемент) //пересчитывает среднюю цену при изменении даты
Для Итератор = 1 По Объект.Товары.Количество() Цикл
СтрокаТЗ = Объект.Товары[Итератор-1];
СтрокаТЗ.Цена = МагазинПродуктов.ПолучитьСреднЦенуТоваров(Объект.Дата, Объект.Магазин, СтрокаТЗ.Номенклатура);
СтрокаТЗ.Сумма = СтрокаТЗ.Цена * СтрокаТЗ.Количество;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
Для Итератор = 1 По Объект.Товары.Количество() Цикл
СтрокаТЗ = Объект.Товары[Итератор-1];
СтрокаТЗ.Цена = МагазинПродуктов.ПолучитьСреднЦенуТоваров(Объект.Дата, Объект.Магазин, СтрокаТЗ.Номенклатура);