Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 июн 2024, 15:40

1C 8.3 (управляемое). Как обновить шрифт в табличной части про проведении инвентаризации со сканером?

Автор gulnyr, 07 фев 2023, 22:47

0 Пользователей и 1 гость просматривают эту тему.

gulnyr

В табличной части значения количества товара меняются в режиме реального времени, а шрифт не меняется (должен стать жирным). А если количество менять вручную, то шрифт меняется.

Наглядный пример, как выглядит табличная часть:
Screenshot_36.png

Пробовал добавить такой код:

ПолучитьКэшДанныхПоПеремещению();
Обновить();

С помощью тестовой кнопки все работает отлично
(т.е. без этого кода шрифт не менялся, а после добавления этого кода шрифт стал жирным в режиме реального времени).

А вот сканер уже выдает ошибку, т.е. не находит номенклатуру (без этого куска кода все прекрасно работает).

Код процедуры ПолучитьКэшДанныхПоПеремещению():

// перезаполнение кеша по перемещению
Процедура ПолучитьКэшДанныхПоПеремещению(ПоСкладу=Неопределено, Знач РезервыПоЗаказНаряду=Неопределено, СтруктураОтбора = Неопределено, ИсходнаяТаблица = Неопределено) Экспорт

Если РезервыПоЗаказНаряду=Неопределено Тогда
РезервыПоЗаказНаряду=ЗакрыватьЗаказыТолькоПоДанномуЗаказНаряду;
КонецЕсли;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТекстОтбораЗаказПокупателя = "";
Если ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.ЗаказПокупателя") И ЗначениеЗаполнено(ДокументОснование) Тогда
ТекстОтбораЗаказПокупателя = " (Заказ=&ВыбЗаказПокупателя) ИЛИ ";
Запрос.УстановитьПараметр("ВыбЗаказПокупателя", ДокументОснование);
КонецЕсли;

ОтборПоСтроке = Ложь;
ТекстОтбора = "";
ВиртТекстОтбора = "";
СтруктураОтбораБезСклада = Новый Структура;
Если ТипЗнч(КешИнформацииЗН) = Тип("ТаблицаЗначений") И ТипЗнч(СтруктураОтбора) = Тип("Структура") Тогда

Для Каждого ТекЭлемент Из СтруктураОтбора Цикл
ИмяЭлемента = ТекЭлемент.Ключ;
ТекстОтбора = ТекстОтбора + ?(ТекстОтбора = "", "ГДЕ ", " И ") + "
| ЗаказНарядТовары."+ИмяЭлемента+" = &"+ИмяЭлемента;
Если НЕ ИмяЭлемента = "СкладКомпании" Тогда
ВиртТекстОтбора = ВиртТекстОтбора + " И
| "+ИмяЭлемента+" = &"+ИмяЭлемента;
СтруктураОтбораБезСклада.Вставить(ИмяЭлемента, ТекЭлемент.Значение);
КонецЕсли;
Запрос.УстановитьПараметр(ИмяЭлемента, ТекЭлемент.Значение);
ОтборПоСтроке = Истина;
КонецЦикла;

КонецЕсли;

// Таблица строк
ТекстЗапроса="
|ВЫБРАТЬ
| ЗаказНарядТовары.Номенклатура,
| ЗаказНарядТовары.ХарактеристикаНоменклатуры,
| ЗаказНарядТовары.СкладКомпании КАК СкладКомпании
|ПОМЕСТИТЬ ЗаказНарядТовары
|ИЗ
| &Товары КАК ЗаказНарядТовары
|" + ТекстОтбора +"
|;
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаказНарядТовары.Номенклатура КАК Номенклатура,
| ЗаказНарядТовары.СкладКомпании КАК СкладКомпании,
| ЗаказНарядТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
|ПОМЕСТИТЬ
| ТаблицаТоваров
|ИЗ
| ЗаказНарядТовары КАК ЗаказНарядТовары
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| СкладКомпании
|;
|
|ВЫБРАТЬ
| ПеремещениеТоваровВПроизводство.Ссылка КАК Регистратор
|ПОМЕСТИТЬ
| ПеремещенияТоваровВПроизводство
|ИЗ
| Документ.ПеремещениеТоваровВПроизводство КАК ПеремещениеТоваровВПроизводство
|ГДЕ
| ПеремещениеТоваровВПроизводство.ДокументОснование = &ЗаказНаряд
|;
|
|ВЫБРАТЬ
| ЗаказВнутренний.Ссылка КАК Регистратор
|ПОМЕСТИТЬ
| ТаблицаЗаказов
|ИЗ
| Документ.ЗаказВнутренний КАК ЗаказВнутренний
|ГДЕ
| ЗаказВнутренний.ДокументОснование = &ЗаказНаряд
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаказПокупателя.Ссылка
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя
|ГДЕ
| ЗаказПокупателя.ДокументОснование = &ЗаказНаряд
|;
|
|ВЫБРАТЬ
| ОбъединеннаяТаблица.Номенклатура КАК Номенклатура,
| ОбъединеннаяТаблица.СкладКомпании КАК СкладКомпании,
| ОбъединеннаяТаблица.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| СУММА(ОбъединеннаяТаблица.ПеремещеноСоСклада) КАК ПеремещеноСоСклада,
| СУММА(ОбъединеннаяТаблица.Зарезервировано) КАК Зарезервировано,
| СУММА(ОбъединеннаяТаблица.ОстатокНаСкладе)+СУММА(ОбъединеннаяТаблица.Зарезервировано) КАК КоличествоОстаток,
| СУММА(ОбъединеннаяТаблица.ОстатокНаСкладе) КАК ОстатокНаСкладе
|ИЗ(
| ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.СкладКомпании,
| ТаблицаТоваров.ХарактеристикаНоменклатуры,
| 0 КАК ПеремещеноСоСклада,
| 0 КАК Зарезервировано,
| 0 КАК ОстатокНаСкладе
| ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ОстаткиТоваровКомпании.Номенклатура,
| ОстаткиТоваровКомпании.СкладКомпании,
| ОстаткиТоваровКомпании.ХарактеристикаНоменклатуры,
| ОстаткиТоваровКомпании.Количество КАК ПеремещеноСоСклада,
| 0 КАК Зарезервировано,
| 0 КАК ОстатокНаСкладе
| ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании КАК ОстаткиТоваровКомпании
| ГДЕ
| ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.ПеремещениеТоваровВПроизводство И
| ОстаткиТоваровКомпании.Регистратор В (ВЫБРАТЬ Регистратор ИЗ ПеремещенияТоваровВПроизводство)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаказыПокупателейОстатки.Номенклатура,
| ЗаказыПокупателейОстатки.СкладКомпании,
| ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры,
| 0,
| ЕСТЬNULL(ЗаказыПокупателейОстатки.РезервОстаток, 0),
| 0
| ИЗ
| РегистрНакопления.ЗаказыПокупателей.Остатки(,
| "+?(РезервыПоЗаказНаряду, ТекстОтбораЗаказПокупателя+"Заказ В (ВЫБРАТЬ ТаблицаЗаказов.Регистратор ИЗ ТаблицаЗаказов КАК ТаблицаЗаказов)","
| ("+ТекстОтбораЗаказПокупателя+"(Заказ В (ВЫБРАТЬ ТаблицаЗаказов.Регистратор ИЗ ТаблицаЗаказов КАК ТаблицаЗаказов)) ИЛИ (Контрагент=&Контрагент И (СкладКомпании, Номенклатура, ХарактеристикаНоменклатуры) В
| (ВЫБРАТЬ СкладКомпании, Номенклатура, ХарактеристикаНоменклатуры ИЗ ТаблицаТоваров КАК ТаблицаТоваров)))")+"
| "+?(ПоСкладу=Неопределено,"","И (СкладКомпании=&ПоСкладу)")+") КАК ЗаказыПокупателейОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ОстаткиТоваровКомпанииОстатки.Номенклатура,
| ОстаткиТоваровКомпанииОстатки.СкладКомпании,
| ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры,
| 0,
| 0,
| ОстаткиТоваровКомпанииОстатки.КоличествоОстаток-ОстаткиТоваровКомпанииОстатки.РезервОстаток
| ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки(, (СкладКомпании, Номенклатура, ХарактеристикаНоменклатуры) В
| (ВЫБРАТЬ СкладКомпании, Номенклатура, ХарактеристикаНоменклатуры ИЗ ТаблицаТоваров КАК ТаблицаТоваров)) КАК ОстаткиТоваровКомпанииОстатки) КАК ОбъединеннаяТаблица
|СГРУППИРОВАТЬ ПО
| ОбъединеннаяТаблица.Номенклатура,
| ОбъединеннаяТаблица.СкладКомпании,
| ОбъединеннаяТаблица.ХарактеристикаНоменклатуры
|";

Запрос.Текст = ТекстЗапроса;
Если ИсходнаяТаблица = Неопределено Тогда
Запрос.УстановитьПараметр("Товары", Товары);
Иначе
Запрос.УстановитьПараметр("Товары", ИсходнаяТаблица);
КонецЕсли;
Запрос.УстановитьПараметр("ЗаказНаряд", Ссылка);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("ПоСкладу",   ПоСкладу);

Если ОтборПоСтроке Тогда
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Номенклатура",               Выборка.Номенклатура);
СтруктураПоиска.Вставить("СкладКомпании",              Выборка.СкладКомпании);
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Выборка.ХарактеристикаНоменклатуры);
НайденныеСтроки = КешИнформацииЗН.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество()>0 Тогда
СтрокаКеша = НайденныеСтроки[0];
Иначе
СтрокаКеша = КешИнформацииЗН.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаКеша, Выборка);
КонецЦикла;
Иначе
КешИнформацииЗН = Запрос.Выполнить().Выгрузить();
КонецЕсли;

Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
|ПОМЕСТИТЬ ТаблицаТоваровБезСкладов
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|ВЫБРАТЬ
| ОбъединенныйЗапрос.Номенклатура,
| ОбъединенныйЗапрос.ХарактеристикаНоменклатуры,
| СУММА(ОбъединенныйЗапрос.ВПроизводстве) КАК ВПроизводстве,
| СУММА(ОбъединенныйЗапрос.Заказано) КАК Заказано,
| СУММА(ОбъединенныйЗапрос.ЗаказаноПодЗН) КАК ЗаказаноПодЗН,
| СУММА(ОбъединенныйЗапрос.ЗарезервированоПодЗН) КАК ЗарезервированоПодЗН
|ИЗ
| (
| ВЫБРАТЬ
| ТоварыВПроизводствеОстатки.Номенклатура КАК Номенклатура,
| ТоварыВПроизводствеОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ТоварыВПроизводствеОстатки.КоличествоОстаток КАК ВПроизводстве,
| 0 КАК Заказано,
| 0 КАК ЗаказаноПодЗН,
| 0 КАК ЗарезервированоПодЗН
| ИЗ
| РегистрНакопления.ТоварыВПроизводстве.Остатки(, ЗаказНаряд = &ЗаказНаряд"+ВиртТекстОтбора+") КАК ТоварыВПроизводствеОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
| ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| 0,
| ЗаказыПокупателейОстатки.ЗаказаноОстаток-ЗаказыПокупателейОстатки.РезервОстаток,
| 0,
| 0
| ИЗ
| РегистрНакопления.ЗаказыПокупателей.Остатки(,
| "+?(РезервыПоЗаказНаряду, ТекстОтбораЗаказПокупателя+"Заказ В (ВЫБРАТЬ ТаблицаЗаказов.Регистратор ИЗ ТаблицаЗаказов КАК ТаблицаЗаказов)","
| ("+ТекстОтбораЗаказПокупателя+"(Заказ В (ВЫБРАТЬ ТаблицаЗаказов.Регистратор ИЗ ТаблицаЗаказов КАК ТаблицаЗаказов)) ИЛИ (Контрагент=&Контрагент И (Номенклатура, ХарактеристикаНоменклатуры) В
| (ВЫБРАТЬ Номенклатура, ХарактеристикаНоменклатуры ИЗ ТаблицаТоваровБезСкладов КАК ТаблицаТоваров)))")+") КАК ЗаказыПокупателейОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаказыПокупателейОстатки.Номенклатура,
| ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры,
| 0,
| 0,
| ЗаказыПокупателейОстатки.ЗаказаноОстаток-ЗаказыПокупателейОстатки.РезервОстаток,
| ЗаказыПокупателейОстатки.РезервОстаток
| ИЗ
| РегистрНакопления.ЗаказыПокупателей.Остатки(,
| "+ТекстОтбораЗаказПокупателя+"Заказ В (ВЫБРАТЬ ТаблицаЗаказов.Регистратор ИЗ ТаблицаЗаказов КАК ТаблицаЗаказов)) КАК ЗаказыПокупателейОстатки) КАК ОбъединенныйЗапрос
|СГРУППИРОВАТЬ ПО
| ОбъединенныйЗапрос.Номенклатура,
| ОбъединенныйЗапрос.ХарактеристикаНоменклатуры
| ";

Если ОтборПоСтроке Тогда
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Номенклатура",               Выборка.Номенклатура);
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Выборка.ХарактеристикаНоменклатуры);
НайденныеСтроки = КешИтоговойИнформацииЗН.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество()>0 Тогда
СтрокаКеша = НайденныеСтроки[0];
Иначе
СтрокаКеша = КешИтоговойИнформацииЗН.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаКеша, Выборка);
КонецЦикла;
Иначе
КешИтоговойИнформацииЗН = Запрос.Выполнить().Выгрузить();
КонецЕсли;

Если ОтборПоСтроке Тогда
ПересчитатьКеш(ПоСкладу, СтруктураОтбора, ИсходнаяТаблица);
Иначе
ПересчитатьКеш(ПоСкладу,, ИсходнаяТаблица);
КонецЕсли;

КонецПроцедуры //ПолучитьКэшДанныхПоПеремещению()


Строка кода, где конкретно выдавалась ошибка (ОбщиеМодули - дкДокументы):

      Если Источник = "Сканер" Тогда
ОбработкаОбъектШтрихКоды = Обработки.ШтрихКоды.Создать();
СтруктураНоменклатуры = ОбработкаОбъектШтрихКоды.НайтиСтруктуруПоШтрихКоду(Данные);
Если (НЕ обЗначениеНеЗаполнено(СтруктураНоменклатуры)) И (Метаданные.Документы.Содержит(ЭтаФорма.Метаданные()) ИЛИ ЭтаФорма.Метаданные() = Метаданные.Обработки.АРМКорзина) Тогда
Если ТипЗнч(СтруктураНоменклатуры.Объект) = Тип("СправочникСсылка.Номенклатура") Тогда
//В системе с данным штрихкодом зарегистрирована номенклатура
СписокТоваров = Неопределено;
//тут можно вставить поиск других ТЧ
Попытка
СписокТоваров  = ЭтаФорма.Товары;
ТоварыТабличноеПоле = ЭтаФорма.ЭлементыФормы.Товары;
ИмяТабличнойЧасти = "Товары";
Исключение
Попытка
СписокТоваров  = ЭтаФорма.Скидки;
ТоварыТабличноеПоле = ЭтаФорма.ЭлементыФормы.Скидки;
ИмяТабличнойЧасти = "Скидки";
Исключение
КонецПопытки;
КонецПопытки;

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

//поищем номенклатуру
СтрокаНоменклатура = Неопределено;

Если ИмяТабличнойЧасти <> "Скидки" Тогда

//теперь определим наличие колонок ТЧ
ЕстьЕдиницаИзмерения   = дкДокументЕстьРеквизитТабЧасти("ЕдиницаИзмерения", ВидДокумента, ИмяТабличнойЧасти);
ЕстьХарактеристикаНоменклатуры = дкДокументЕстьРеквизитТабЧасти("ХарактеристикаНоменклатуры", ВидДокумента, ИмяТабличнойЧасти);
ЕстьКоличество     = дкДокументЕстьРеквизитТабЧасти("Количество", ВидДокумента, ИмяТабличнойЧасти);

//установим флаг того что поиск не производился
ПоискПроизводился = Ложь;
МассивСтрок = Новый Массив();
Если СтруктураНоменклатуры.Свойство("ЕдиницаИзмерения") И ЕстьЕдиницаИзмерения Тогда
//МассивСтрок = СписокТоваров.НайтиСтроки(Новый Структура("Номенклатура,ЕдиницаИзмерения",
//СтруктураНоменклатуры.Объект,СтруктураНоменклатуры.ЕдиницаИзмерения));
МассивСтрок = СписокТоваров.НайтиСтроки(Новый Структура("Номенклатура",СтруктураНоменклатуры.Объект));
ПоискПроизводился = Истина;
ИначеЕсли СтруктураНоменклатуры.Свойство("ХарактеристикаНоменклатуры") И ЕстьХарактеристикаНоменклатуры Тогда
МассивСтрок = СписокТоваров.НайтиСтроки(Новый Структура("Номенклатура,ХарактеристикаНоменклатуры",СтруктураНоменклатуры.Объект,СтруктураНоменклатуры.ХарактеристикаНоменклатуры));
ПоискПроизводился = Истина;
КонецЕсли;
//если не искали тогда будем искать только по номенклатуре
Если НЕ ПоискПроизводился Тогда
МассивСтрок = СписокТоваров.НайтиСтроки(Новый Структура("Номенклатура",СтруктураНоменклатуры.Объект));
КонецЕсли;
Если МассивСтрок.Количество() > 0 Тогда
СтрокаНоменклатура = МассивСтрок[0];
КонецЕсли;
КолСтр = "Количество";
// попытаемся получить нестандартное имя реквизита который является количеством
Попытка
КолСтр = ЭтаФорма.ИмяРеквизитаКоличество;
Исключение
КонецПопытки;
Иначе
Если НЕ дкДокументЕстьРеквизитТабЧасти("Номенклатура", ВидДокумента, ИмяТабличнойЧасти) Тогда
Возврат Ложь;
КонецЕсли;
ЕстьЕдиницаИзмерения    = Ложь;
ЕстьХарактеристикаНоменклатуры = Ложь;
ЕстьКоличество      = Ложь;
КонецЕсли;

//если товар в ТЧ не найден то добавим строку
Если обЗначениеНеЗаполнено(СтрокаНоменклатура) Тогда
//добавим новую строчку в ТЧ
СтрокаНоменклатура = СписокТоваров.Добавить();
ТоварыТабличноеПоле.ТекущаяСтрока = СтрокаНоменклатура;
СтрокаНоменклатура.Номенклатура = СтруктураНоменклатуры.Объект;

ДопПараметры = Неопределено;
Если ВидДокумента = "Инвентаризация" Тогда
// У документа инвентаризация обработка заполнения табличной части
// зависит от реквизита формы "флЗаполнятьПоСебестоимости".
ДопПараметры = Новый Структура;
Попытка флЗаполнятьПоСебестоимости = ЭтаФорма.флЗаполнятьПоСебестоимости Исключение флЗаполнятьПоСебестоимости = Ложь КонецПопытки;
ДопПараметры.Вставить("флЗаполнятьПоСебестоимости", флЗаполнятьПоСебестоимости);
КонецЕсли;

// Пытаемся обработать реквизит "Номенклатура" табличной части документа.
Попытка
ЭтаФорма.ОбработкаРеквизита(ИмяТабличнойЧасти + ".Номенклатура", СтрокаНоменклатура,ЭтаФорма, ДопПараметры);
Исключение
КонецПопытки;

Попытка
НоменклатураНовойСтроки = СтрокаНоменклатура.Номенклатура;
Исключение
//Это если это был набор и мы удалили эту строку
дкВывестиЗаголовокСуммаДокумента(ЭтаФорма);
Возврат Истина;
КонецПопытки;
//а теперь если есть характеристика или единица измерения поставим и их
Если СтруктураНоменклатуры.Свойство("ЕдиницаИзмерения") И ЕстьЕдиницаИзмерения Тогда
СтрокаНоменклатура.ЕдиницаИзмерения = СтруктураНоменклатуры.ЕдиницаИзмерения;
Попытка
ЭтаФорма.ОбработкаРеквизита(ИмяТабличнойЧасти + ".ЕдиницаИзмерения",СтрокаНоменклатура,ЭтаФорма);
Исключение
КонецПопытки;
ИначеЕсли СтруктураНоменклатуры.Свойство("ХарактеристикаНоменклатуры") И ЕстьХарактеристикаНоменклатуры Тогда
СтрокаНоменклатура.ХарактеристикаНоменклатуры = СтруктураНоменклатуры.ХарактеристикаНоменклатуры;
// Пытаемся обработать реквизит "Номенклатура" табличной части документа.
Попытка
ЭтаФорма.ОбработкаРеквизита(ИмяТабличнойЧасти + ".ХарактеристикаНоменклатуры", СтрокаНоменклатура,ЭтаФорма, ДопПараметры);
Исключение
КонецПопытки;
КонецЕсли;

Если ЕстьКоличество Тогда

Если ЗапросКоличестваПриВводеТовараСоСканераШК Тогда
ФормаКоличества = ПолучитьОбщуюФорму("ВводПараметровПодбора");
ФормаКоличества.ИмяРеквизитаКоличества = КолСтр;
ФормаКоличества.ВладелецФормы = ЭтаФорма;
ФормаКоличества.ТекущаяСтрока = СтрокаНоменклатура;
ФормаКоличества.Номенклатура  = СтрокаНоменклатура.Номенклатура;
ФормаКоличества.ВидПодбора    = 3;

Если ЕстьЕдиницаИзмерения Тогда
ФормаКоличества.ЕдиницаИзмерения = СтрокаНоменклатура.ЕдиницаИзмерения;
ФормаКоличества.ЕдиницаИзмеренияСтарая = СтрокаНоменклатура.ЕдиницаИзмерения;
КонецЕсли;

Если ЕстьХарактеристикаНоменклатуры Тогда
ФормаКоличества.ХарактеристикаНоменклатуры = СтрокаНоменклатура.ХарактеристикаНоменклатуры;
КонецЕсли;

ФормаКоличества.СтруктураПараметровПодбора = Новый Структура("ИмяТабличногоПоляИсточника", ИмяТабличнойЧасти);

// "на шарца" попробуем установить количество
Если СтруктураНоменклатуры.Свойство("Вес") И СтруктураНоменклатуры.Вес<>Неопределено И СтруктураНоменклатуры.Вес > 0 Тогда
ФормаКоличества.Количество = СтруктураНоменклатуры.Вес;
Иначе
ФормаКоличества.Количество = 1;
КонецЕсли;

Если дкДокументЕстьРеквизитТабЧасти("Цена", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.Цена  = СтрокаНоменклатура.Цена;
ФормаКоличества.ЦенаСтарая = СтрокаНоменклатура.Цена;
ИначеЕсли дкДокументЕстьРеквизитТабЧасти("ЦенаРасход", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.Цена  = СтрокаНоменклатура.ЦенаРасход;
ФормаКоличества.ЦенаСтарая = СтрокаНоменклатура.ЦенаРасход;
КонецЕсли;

Если дкДокументЕстьРеквизитТабЧасти("Сумма", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.СуммаСтарая = СтрокаНоменклатура.Сумма;
ИначеЕсли дкДокументЕстьРеквизитТабЧасти("СуммаРасход", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.СуммаСтарая = СтрокаНоменклатура.СуммаРасход;
КонецЕсли;

ФормаКоличества.ОткрытьМодально();
Иначе
Если СтруктураНоменклатуры.Свойство("Вес") И СтруктураНоменклатуры.Вес<>Неопределено И СтруктураНоменклатуры.Вес > 0 Тогда
СтрокаНоменклатура[КолСтр] = СтруктураНоменклатуры.Вес;
Иначе
СтрокаНоменклатура[КолСтр] = 1;
КонецЕсли;
КонецЕсли;
Попытка ЭтаФорма.ОбработкаРеквизита(ИмяТабличнойЧасти + "." + КолСтр,СтрокаНоменклатура,ЭтаФорма); Исключение КонецПопытки;
КонецЕсли;
//если найден - перейдем
Иначе
ТоварыТабличноеПоле.ТекущаяСтрока = СтрокаНоменклатура;
Если ЕстьКоличество Тогда
Если ЗапросКоличестваПриВводеТовараСоСканераШК Тогда
ФормаКоличества = ПолучитьОбщуюФорму("ВводПараметровПодбора");
ФормаКоличества.ИмяРеквизитаКоличества = КолСтр;
ФормаКоличества.ВладелецФормы    = ЭтаФорма;
ФормаКоличества.ТекущаяСтрока    = СтрокаНоменклатура;
ФормаКоличества.Номенклатура            = СтрокаНоменклатура.Номенклатура;
ФормаКоличества.Количество    = СтрокаНоменклатура[КолСтр];
ФормаКоличества.КоличествоСтарое = СтрокаНоменклатура[КолСтр];
ФормаКоличества.ВидПодбора              = 3;

Если ЕстьЕдиницаИзмерения Тогда
ФормаКоличества.ЕдиницаИзмерения       = СтрокаНоменклатура.ЕдиницаИзмерения;
ФормаКоличества.ЕдиницаИзмеренияСтарая = СтрокаНоменклатура.ЕдиницаИзмерения;
КонецЕсли;

Если ЕстьХарактеристикаНоменклатуры Тогда
ФормаКоличества.ХарактеристикаНоменклатуры = СтрокаНоменклатура.ХарактеристикаНоменклатуры;
КонецЕсли;

ФормаКоличества.СтруктураПараметровПодбора = Новый Структура("ИмяТабличногоПоляИсточника", ИмяТабличнойЧасти);

Если дкДокументЕстьРеквизитТабЧасти("Цена", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.Цена       = СтрокаНоменклатура.Цена;
ФормаКоличества.ЦенаСтарая = СтрокаНоменклатура.Цена;
ИначеЕсли дкДокументЕстьРеквизитТабЧасти("ЦенаРасход", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.Цена       = СтрокаНоменклатура.ЦенаРасход;
ФормаКоличества.ЦенаСтарая = СтрокаНоменклатура.ЦенаРасход;
КонецЕсли;

Если дкДокументЕстьРеквизитТабЧасти("Сумма", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.СуммаСтарая = СтрокаНоменклатура.Сумма;
ИначеЕсли дкДокументЕстьРеквизитТабЧасти("СуммаРасход", ВидДокумента, ИмяТабличнойЧасти) Тогда
ФормаКоличества.СуммаСтарая = СтрокаНоменклатура.СуммаРасход;
КонецЕсли;

ФормаКоличества.ОткрытьМодально();
Иначе
Если СтруктураНоменклатуры.Свойство("Вес") И СтруктураНоменклатуры.Вес<>Неопределено И СтруктураНоменклатуры.Вес > 0 Тогда
СтрокаНоменклатура[КолСтр] = СтрокаНоменклатура[КолСтр] + СтруктураНоменклатуры.Вес;
Иначе
СтрокаНоменклатура[КолСтр] = СтрокаНоменклатура[КолСтр] + 1;
КонецЕсли;
КонецЕсли;
Попытка ЭтаФорма.ОбработкаРеквизита(ИмяТабличнойЧасти + "." + КолСтр,СтрокаНоменклатура,ЭтаФорма); Исключение КонецПопытки;
КонецЕсли;
КонецЕсли;
ЭтаФорма.Модифицированность = Истина;
дкВывестиЗаголовокСуммаДокумента(ЭтаФорма);
ИначеЕсли ТипЗнч(СтруктураНоменклатуры.Объект) = Тип("СправочникСсылка.Карточки") Тогда
//В системе с данным штрихкодом зарегистрирована карточка
Если ТипЗнч(СтруктураНоменклатуры.Объект.Объект) = Тип("СправочникСсылка.Контрагенты") Тогда
//Данная карточка есть дисконтная, т.к. зарегистрирована за контрагентом
Попытка
ЭтаФорма.Карточка = СтруктураНоменклатуры.Объект;
ЭтаФорма.ОбработкаРеквизита("Карточка",,ЭтаФорма);
Исключение
КонецПопытки;
//В этом случае подставляет владельца карточки в качестве контрагента в документ
Попытка
Если ЭтаФорма.Контрагент <> СтруктураНоменклатуры.Объект.Объект И НЕ обЗначениеНеЗаполнено(СтруктураНоменклатуры.Объект.Объект) Тогда
//В документе выбран другой контрагент - заменяем на владельца карточки
//Запомним старого контрагента
ВремКонтрагент = ЭтаФорма.Контрагент;
ЭтаФорма.Контрагент = СтруктураНоменклатуры.Объект.Объект;
Попытка
//Попытаемся инициировать событие по изменению контрагента
//Для этого процедура "КонтрагентПриИзменении" в форме должна быть объявлена как экспортная
ЭтаФорма.КонтрагентПриИзменении(ЭтаФорма.ЭлементыФормы.Контрагент);
Исключение
//Такой процедуры нет или она не экспортная
//В этом случае подмена контрагента на владельца карточки
//должна быть отменена
ЭтаФорма.Контрагент = ВремКонтрагент;
КонецПопытки;
КонецЕсли;
Исключение
КонецПопытки;
ИначеЕсли ТипЗнч(СтруктураНоменклатуры.Объект.Объект) = Тип("СправочникСсылка.Пользователи") Тогда
Попытка
ЭтаФорма.Менеджер = СтруктураНоменклатуры.Объект.Объект.Сотрудник;
Исключение
КонецПопытки;
КонецЕсли;
дкВывестиЗаголовокСуммаДокумента(ЭтаФорма);
Иначе
//Документ не умеет обрабатывать объекты других типов
Возврат Ложь;
КонецЕсли;
ИначеЕсли обЗначениеНеЗаполнено(СтруктураНоменклатуры) Тогда
Предупреждение("Штрихкод " + Данные + " не найден!",5);
Возврат Ложь;
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск