Задача: необходимо добавить в табличную часть документа "Реализация товара" колонку "остаток на складе". Остаток должен быть виден при добавлении вручную товара в табличную часть документа из справочника, а также при поиске и добавлении товара по штрихкоду с помощью сканера. Конфигурация "Управление торговлей" на управляемых формах, интерфейс такси. Конструкция шаблона универсальная, подойдет для других документов и других конфигураций на управляемых формах.

Для реализации задачи нужно:

1. Добавить в документ реквизит "ОстакиНаСкладе" с типом строка, длина 10.
2. Добавить в документ новую функцию, которая будет извлекать из регистра текущий остаток товара для товаров.
3. Изменить код процедур, отвечающих за добавление товара из справочника и за добавление товара после поиска по штрихкоду.

НА УПРАВЛЯЕМЫХ ФОРМАХ

Шаблоны кода:

1. Функция выборки остатков. Размещаем в модуле формы документа.

Текст функции:

&НаСервере
Функция ПолучитьОстатокТовараИзРегистра(Номенклатура)

Запрос = Новый Запрос;
Запрос.Текст ="
| ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.КОтгрузкеОстаток, 0) КАК Остаток
| ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки( , Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки";

Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда
Возврат Выборка.Остаток;
Иначе
Возврат 0;
КонецЕсли;

КонецФункции

Скриншот функции:

2. Модификация процедуры ТоварыПриОкончанииРедактирования. В конце процедуры добавляем наш код:

Новый код в процедуре:

ТЧ = Объект.Товары;
Для Каждого Строка Из ТЧ Цикл
НаименованиеНоменклатуры = Строка.Номенклатура;
ОстатокВЦикле = ПолучитьОстатокТовараИзРегистра(НаименованиеНоменклатуры);
Строка.ОстакиНаСкладе = ОстатокВЦикле;
КонецЦикла;

Скриншот кода:

3. Модификация процедуры ПоискПоШтрихкодуЗавершение. В конце процедуры добавляем код:

Новый код в процедуре:

ТЧ = Объект.Товары;
Для Каждого Строка Из ТЧ Цикл
НаименованиеНоменклатуры = Строка.Номенклатура;
ОстатокВЦикле = ПолучитьОстатокТовараИзРегистра(НаименованиеНоменклатуры);
Сообщить("Товара" + (НаименованиеНоменклатуры) + " на остатке:" + (ОстатокВЦикле));
Строка.ОстакиНаСкладе = ОстатокВЦикле;
КонецЦикла;

Скриншот кода:

Результат выполнения кода на управляемых формах:

НА ОБЫЧНЫХ ФОРМАХ

Необходимо добавть на форму в табличную часть Товары документа Реалиация товаров и услуг новую колонку "ОстакиНаСкладе". Реквизит с таким именем добавлять не нужно. Данные динамические. Расчитываются при открытии документа. В модуле формы документа в процедуре ТоварыПриПолученииДанных нужно добаить код:

Шаблон кода:

Для Каждого ТекСтрока из ОформленияСтрок Цикл
Запрос = Новый Запрос;
Запрос.Параметры.Вставить("ДатаДокумента",Дата);
Запрос.Параметры.Вставить("Номенклатура",ТекСтрока.ДанныеСтроки.Номенклатура);
Запрос.Текст =

"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура";

Выборка = Запрос.Выполнить().Выбрать();
ТекСтрока.Ячейки.ОстакиНаСкладе.ОтображатьТекст = Истина;
ТекСтрока.Ячейки.ОстакиНаСкладе.Выравнивание = ГоризонтальноеПоложение.Право;

Если Выборка.Следующий() Тогда
ОстатокКоличество = ?(Выборка.КоличествоОстаток = Null,0,Выборка.КоличествоОстаток);
Если ОстатокКоличество < 0 ТОгда
ТекСтрока.Ячейки.ОстакиНаСкладе.ЦветТекста = WebЦвета.Красный;
КонецЕсли;
Иначе
ОстатокКоличество = 0;
ТекСтрока.Ячейки.ОстакиНаСкладе.ЦветТекста = WebЦвета.Белый;
КонецЕсли;
Если ОстатокКоличество - ТекСтрока.ДанныеСтроки.Количество < 0 Тогда
ТекСтрока.ЦветФона = WebЦвета.СветлоСерый;
Иначе
ТекСтрока.ЦветФона = WebЦвета.Белый;
КонецЕсли;
ТекСтрока.Ячейки.ОстакиНаСкладе.Текст = "" + ОстатокКоличество;
КонецЦикла;

Скриншот кода:

Результат выполнения кода в режиме 1С Предприятие на обычных формах:

 

Наши проекты | Купить 1С | Услуги по 1С | ПрограммированиеАренда сервера | FAQ 1C

Сопровождение, доработка, консультация, обучение, по программе 1С. Информационно-технический консалтинг, почасовая и сдельная оплата. Запуск новых проектов, реализация решений под ключ.

© 2021 1С ПРОЕКТЫ И РЕШЕНИЯ /1С СЕРВИС 24/7