Управление торговлей 10.3 Загрузить установку цен номенклатуры

Новая тема
Показывать по 10 20 40 сообщений
Мда..ну ошибся я в слове,нельзя так тупо то копировать=)
Да :), а я даже не читала, СПАСИБО
Будьте внимательны и подсматривайте в типовые решения!
Подскажите пжлста как сделать чтоб видна была характеристика номенклатуры в установке цен номеклатуры.
Добавить через конфигуратор в ТЧ поле характеристика,больше ни как.Лучше пригласить специалиста.
"Оно там есть но почему-то не отображается, не могу найти что надо исправить в модуле

////////////////////////////////////////////////////////­////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
// Хранит последнюю установленную дату документа - для проверки перехода документа в другой период.
Перем мТекущаяДатаДокумента;
Перем мФормаЗаполненияПлановыхЦен;
Перем мСтруктураПоложенийКолонок;
// Коллекция колонок табличного поля "Товары".
Перем мКолонкиТовары;
// Флаги показа колонок.
Перем ПоказыватьЦену Экспорт;
Перем ПоказыватьВалюту Экспорт;
Перем ПоказыватьЕдиницуИзмерения Экспорт;
Перем ПоказыватьСпособРасчета Экспорт;
Перем мПоказыватьКод;
Перем мПоказыватьАртикул;
// Хранит соответствие номеров колонок и типов цен.
Перем мСоответствиеТиповЦен Экспорт;
// Хранит дерево кнопок подменю заполнение ТЧ.
Перем мКнопкиЗаполненияТЧ;
Перем мТерминалы;
Перем ПараметрыНаценки;

////////////////////////////////////////////////////­////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
// Процедура устанавливает доступность элементов форм документа,
// в зависимости от настроек прав пользователя
Процедура УстановитьДоступностьЭлементовФормДокумента() Экспорт

Если Не ОбщегоНазначения.УстановитьДоступностьФормыПоПравуПользователя(ЭтаФорма, ЭтотОбъект) Тогда
 Возврат;
КонецЕсли;

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

КонецПроцедуры //УстановитьДоступностьЭлементовФормДокумента()

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

Результат = ФормаВыбораЦен.ОткрытьМодально();
Возврат Результат;
КонецФункции // ОткрытьФормуВыбораТипаЦен()
// Процедура создает и заполняет структуру, содержащую в себе варианты положения колонок в форме.
//
Процедура ПолучитьСтруктуруПоложенийКолонок()
ИмяСохраненныхЗначений = Метаданные().Имя
                         + "_" + ПоказыватьЦену
                         + "_" + ПоказыватьЕдиницуИзмерения;
мСтруктураПоложенийКолонок = Новый Структура;
мСтруктураПоложенийКолонок.Вставить("Цена"                , ПолучитьПоложениеКолонки(ИмяСохраненныхЗначений + "_0"));
мСтруктураПоложенийКолонок.Вставить("ЕдиницаИзмерения"    , ПолучитьПоложениеКолонки(ИмяСохраненныхЗначений + "_1"));
КонецПроцедуры // ПолучитьСтруктуруПоложенийКолонок()
// Процедура заполняет реквизит СписокЦен на форме из ТЧ "ТипыЦен".
//
Процедура ЗаполнитьСписокТиповЦен()
СписокТиповЦен.Очистить();
Для Каждого СтрокаТиповЦен Из ТипыЦен Цикл
 Если ЗначениеЗаполнено(СтрокаТиповЦен.ТипЦен) Тогда
  СписокТиповЦен.Добавить(СтрокаТиповЦен.ТипЦен);
 КонецЕсли;
КонецЦИкла;
КонецПроцедуры // ЗаполнитьСписокТиповЦен()
// Процедура сдвигает колонку на требуемое количество колонок в позицию ОчередногоНомераКолонки
// и увеличивает ОчередногоНомераКолонки на единицу.
//
// Параметры:
//  Колонка - сдвигаемая колонка.
//  ОчереднойНомерКолонки - положение, которое должна занять колонка после сдвига.
//
Процедура СдвинутьКолонку(Колонка, ОчереднойНомерКолонки)
КолонкиТаблицыЦен = ТаблицаЦен.Колонки;
ТекущийНомерКолонки = КолонкиТаблицыЦен.Индекс(Колонка);
Если ТекущийНомерКолонки <> ОчереднойНомерКолонки Тогда // сдвинем колонку
 КолонкиТаблицыЦен.Сдвинуть(ТекущийНомерКолонки, ОчереднойНомерКолонки - ТекущийНомерКолонки);
КонецЕсли;
ВсегоКолонок = КолонкиТаблицыЦен.Количество();
ОчереднойНомерКолонки = ОчереднойНомерКолонки + 1;
ОчереднойНомерКолонки = ?(ОчереднойНомерКолонки > ВсегоКолонок, ВсегоКолонок, ОчереднойНомерКолонки);
КонецПроцедуры // СдвинутьКолонку()
// Устанавливает в табличной части цен на форме недостающие параметры.
//
Процедура УстановитьНедостающиеПараметры()
мКолонкиТовары.Код.Видимость = мПоказыватьКод;
мКолонкиТовары.Артикул.Видимость = мПоказыватьАртикул;

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

// Установим необходимые параметры номенклатуры.
мКолонкиТовары.Номенклатура.ЭлементУправления.УстановитьДействие("ПриИзменении", Новый Действие("ТаблицаЦенНоменклатураПриИзменении"));
мКолонкиТовары.Номенклатура.ЭлементУправления.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы;
мКолонкиТовары.Номенклатура.АвтоОтметкаНезаполненного = Истина;
мКолонкиТовары.Номенклатура.ЭлементУправления.АвтоОтметкаНезаполненного = Истина;
мКолонкиТовары.Номенклатура.ЭлементУправления.АвтоВыборНезаполненного = Истина;
мКолонкиТовары.Номенклатура.ЭлементУправления.КнопкаОткрытия = Истина;
// Установим необходимые параметры характеристики номенклатуры.
мКолонкиТовары.ХарактеристикаНоменклатуры.ЭлементУправления.УстановитьДействие("ПриИзменении",         Новый Действие("ТаблицаЦенХарактеристикаНоменклатурыПриИзменении"));
мКолонкиТовары.ХарактеристикаНоменклатуры.ЭлементУправления.УстановитьДействие("НачалоВыбора",         Новый Действие("ТаблицаЦенХарактеристикаНоменклатурыНачалоВыбора"));
мКолонкиТовары.ХарактеристикаНоменклатуры.ЭлементУправления.УстановитьДействие("АвтоПодборТекста",     Новый Действие("ТаблицаЦенХарактеристикаНоменклатурыАвтоПодборТекста"));
мКолонкиТовары.ХарактеристикаНоменклатуры.ЭлементУправления.УстановитьДействие("ОкончаниеВводаТекста", Новый Действие("ТаблицаЦенХарактеристикаНоменклатурыОкончаниеВводаТекста"));
мКолонкиТовары.ХарактеристикаНоменклатуры.ЭлементУправления.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы;

КонецПроцедуры // УстановитьНедостающиеПараметры()
// Процедура устанавливает колонки табличной часи в требуемом порядке,
// добавляет недостающие колонки, убирает ненужные.
//
Процедура ОбновитьСоставКолонок()
// Надо расположить все нужные колонки в правильном порядке.
// Сначала должна идти колонка "Код".
КолонкиТаблицыЦен = ТаблицаЦен.Колонки;
ОчереднойНомерКолонки = 1;
ТекущаяКолонка = КолонкиТаблицыЦен.Найти("Код");
СдвинутьКолонку(ТекущаяКолонка, ОчереднойНомерКолонки);
ТекущаяКолонка = КолонкиТаблицыЦен.Найти("Артикул");
СдвинутьКолонку(ТекущаяКолонка, ОчереднойНомерКолонки);
ТекущаяКолонка = КолонкиТаблицыЦен.Найти("Номенклатура");
СдвинутьКолонку(ТекущаяКолонка, ОчереднойНомерКолонки);

ТекущаяКолонка = КолонкиТаблицыЦен.Найти("ХарактеристикаНоменклатуры");
СдвинутьКолонку(ТекущаяКолонка, ОчереднойНомерКолонки);
Для Каждого СтрокаТипаЦен Из ТипыЦен Цикл
 Если Не ЗначениеЗаполнено(СтрокаТипаЦен.ТипЦен) Тогда
  Продолжить;
 КонецЕсли;
 НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТипаЦен.ТипЦен];
Если НомерСоответствияТекущейКолонки = Неопределено Тогда
НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен.Количество();
мСоответствиеТиповЦен.Вставить(СтрокаТипаЦен.ТипЦен, мСоответствиеТиповЦен.Количество());
КонецЕсли;
// Цена.
ТекущаяКолонка = КолонкиТаблицыЦен.Найти("цена" + НомерСоответствияТекущейКолонки);
Если ТекущаяКолонка = Неопределено Тогда // надо вставить
КолонкиТаблицыЦен.Вставить(ОчереднойНомерКолонки, "цена" + НомерСоответствияТекущейКолонки, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2, Истина), СокрЛП(СтрокаТипаЦен.ТипЦен), 10);
ОчереднойНомерКолонки = ОчереднойНомерКолонки + 1;
Иначе
СдвинутьКолонку(ТекущаяКолонка, ОчереднойНомерКолонки);
КонецЕсли;
// Единица измерения.
ТекущаяКолонка = КолонкиТаблицыЦен.Найти("единица" + НомерСоответствияТекущейКолонки);
Если ТекущаяКолонка = Неопределено Тогда // надо вставить
КолонкиТаблицыЦен.Вставить(ОчереднойНомерКолонки, "единица"+НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"), "Основная единица измерения", 8);
ОчереднойНомерКолонки = ОчереднойНомерКолонки + 1;
Иначе
СдвинутьКолонку(ТекущаяКолонка, ОчереднойНомерКолонки);
КонецЕсли;
КонецЦикла;
// Все, что за пределами, надо удалить.
Для НомерУдаляемойКолонки = ОчереднойНомерКолонки По КолонкиТаблицыЦен.Количество() - 1 Цикл
КолонкиТаблицыЦен.Удалить(ОчереднойНомерКолонки);
КонецЦикла;
ЭлементыФормы.ТаблицаЦен.СоздатьКолонки();

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

ПерезаполнитьСтроку(СтрокаТабличнойЧасти);

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

//Активизирует колонку "Характеристика номенклатуры"
РаботаСДиалогами.АктивизироватьЯчейкуТабличногоПоля(ЭлементыФормы.ТаблицаЦен, СтрокаТабличнойЧасти, мКолонкиТовары.ХарактеристикаНоменклатуры);

ИначеЕсли НЕ мКолонкиТовары.Найти("цена0")=Неопределено Тогда

//Активизирует колонку "Цена"
РаботаСДиалогами.АктивизироватьЯчейкуТабличногоПоля(ЭлементыФормы.ТаблицаЦен, СтрокаТабличнойЧасти, мКолонкиТовары.Найти("цена0"));

КонецЕсли;

КонецПроцедуры // ПриИзмененииНоменклатуры()
// Производит заполнение и установку необходимых полей при изменении
// характеристики номенклатуры в табличной части.
//
// Параметры:
// СтрокаТабличнойЧасти - строка табличной части, которую необходимо заполнить.
//
Процедура ПриИзмененииХарактеристикиНоменклатуры(СтрокаТабличнойЧасти)
ПерезаполнитьСтроку(СтрокаТабличнойЧасти);
// Активизирует колонку "Цена"
Если НЕ мКолонкиТовары.Найти("цена0")=Неопределено Тогда

РаботаСДиалогами.АктивизироватьЯчейкуТабличногоПоля(ЭлементыФормы.ТаблицаЦен, СтрокаТабличнойЧасти, мКолонкиТовары.Найти("цена0"));

КонецЕсли;

КонецПроцедуры // ПриИзмененииХарактеристикиНоменклатуры()
// Производит заполнение и установку необходимых полей при добавлении новых типов цен.
//
// Параметры:
// СписокДобавленныхТиповЦен - список добавленных типов цен.
//
Процедура ЗаполнитьПоНовымТипамЦен(СписокДобавленныхТиповЦен)
Если СписокДобавленныхТиповЦен.Количество() = 0 Тогда // ничего делать не надо
Возврат;
КонецЕсли;
МассивХарактеристик = ТаблицаЦен.ВыгрузитьКолонку("ХарактеристикаНоменклатуры");
МассивХарактеристик.Добавить(Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаЦен", Дата);
Запрос.УстановитьПараметр("ТипыЦен", СписокДобавленныхТиповЦен);
Запрос.УстановитьПараметр("Номенклатура", ТаблицаЦен.ВыгрузитьКолонку("Номенклатура"));
Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", МассивХарактеристик);

Запрос.Текст =
"ВЫБРАТЬ
| ТипыЦенСправочник.Ссылка КАК ТипЦен,
| ХарактеристикиНоменклатуры.Номенклатура КАК Номенклатура,
| ХарактеристикиНоменклатуры.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| МАКСИМУМ(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)) КАК Цена,
| МАКСИМУМ(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения, ХарактеристикиНоменклатуры.Номенклатура.ЕдиницаХраненияОстатков)) КАК ЕдиницаИзмерения
|ИЗ
| Справочник.ТипыЦенНоменклатуры КАК ТипыЦенСправочник
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Характеристики.Ссылка КАК ХарактеристикаНоменклатуры,
| Характеристики.Владелец КАК Номенклатура
| ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК Характеристики
| ГДЕ
| Характеристики.Ссылка В(&ХарактеристикиНоменклатуры)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
| Номенклатура.Ссылка
| ИЗ
| Справочник.Номенклатура КАК Номенклатура) КАК ХарактеристикиНоменклатуры
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &ДатаЦен,
| ТипЦен В (&ТипыЦен)
| И Номенклатура В (&Номенклатура)
| И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)) КАК ЦеныНоменклатурыСрезПоследних
| ПО ТипыЦенСправочник.Ссылка = ЦеныНоменклатурыСрезПоследних.ТипЦен
| И (ЦеныНоменклатурыСрезПоследних.Номенклатура = ХарактеристикиНоменклатуры.Номенклатура)
| И (ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ХарактеристикиНоменклатуры.ХарактеристикаНоменклатуры)
|ГДЕ
| ТипыЦенСправочник.Ссылка В(&ТипыЦен)
| И ХарактеристикиНоменклатуры.Номенклатура В(&Номенклатура)
| И (НЕ ХарактеристикиНоменклатуры.Номенклатура.ЭтоГруппа)
| И ХарактеристикиНоменклатуры.ХарактеристикаНоменклатуры В(&ХарактеристикиНоменклатуры)
|
|СГРУППИРОВАТЬ ПО
| ТипыЦенСправочник.Ссылка,
| ХарактеристикиНоменклатуры.Номенклатура,
| ХарактеристикиНоменклатуры.ХарактеристикаНоменклатуры";
Выборка = Запрос.Выполнить().Выбрать();
КолонкиТаблицыЦен = ТаблицаЦен.Колонки;
СтруктураПоиска = Новый Структура;
Пока Выборка.СледующийПоЗначениюПоля("Номенклатура") Цикл
Пока Выборка.СледующийПоЗначениюПоля("ХарактеристикаНоменклатуры") Цикл
СтруктураПоиска.Вставить("Номенклатура", Выборка.Номенклатура);
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Выборка.ХарактеристикаНоменклатуры);
СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТаблицаЦен, СтруктураПоиска);
Если СтрокаТабличнойЧасти = Неопределено Тогда //не нашли такие цены
Продолжить;
КонецЕсли;
Пока Выборка.Следующий() Цикл
НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[Выборка.ТипЦен];
Если КолонкиТаблицыЦен.Найти("цена" + НомерСоответствияТекущейКолонки) <> Неопределено Тогда
СтрокаТабличнойЧасти["цена" + НомерСоответствияТекущейКолонки] = Выборка.Цена;
КонецЕсли;
Если КолонкиТаблицыЦен.Найти("единица" + НомерСоответствияТекущейКолонки) <> Неопределено Тогда
СтрокаТабличнойЧасти["единица" + НомерСоответствияТекущейКолонки] = Выборка.ЕдиницаИзмерения;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры // ЗаполнитьПоНовымТипамЦен()
// Производит заполнение таблицы цен на форме.
//
Процедура ЗаполнитьТаблицуЦенФормы() Экспорт
//Если ТипыЦен.Количество() = 0 Тогда // ничего делать не надо
// Возврат;
//КонецЕсли;
ТаблицаТоваров = Товары.Выгрузить();
ТаблицаТоваров.Сортировать("ИндексСтрокиТаблицыЦен, Номенклатура");
ТекущийИндексСтрокиТаблицыЦен = Неопределено;
НоваяСтрока = Неопределено;
Для Каждого СтрокаТаблицыТоваров Из Товары Цикл

Если ТекущийИндексСтрокиТаблицыЦен <> СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен
Или (НоваяСтрока.Номенклатура <> СтрокаТаблицыТоваров.Номенклатура
ИЛИ НоваяСтрока.ХарактеристикаНоменклатуры <> СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры) Тогда

НоваяСтрока = ТаблицаЦен.Добавить();
НоваяСтрока.Номенклатура = СтрокаТаблицыТоваров.Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры;
ТекущийИндексСтрокиТаблицыЦен = СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен;

КонецЕсли;
Если ТипыЦен.Количество() <> 0 Тогда

НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТаблицыТоваров.ТипЦен];
Если ТаблицаЦен.Колонки.Найти("цена" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
ТаблицаЦен.Колонки.Добавить("цена" + НомерСоответствияТекущейКолонки, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2, Истина), СокрЛП(СтрокаТаблицыТоваров.ТипЦен), 10);
КонецЕсли;
Если ТаблицаЦен.Колонки.Найти("единица" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
ТаблицаЦен.Колонки.Добавить("единица" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"), "единица", 8);
КонецЕсли;
НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена;
НоваяСтрока["единица" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.ЕдиницаИзмерения;

КонецЕсли;

КонецЦикла;
КонецПроцедуры // ЗаполнитьТаблицуЦенФормы()
// Производит заполнение документа переданными из формы подбора данными.
//
// Параметры:
// ЗначениеВыбора - структура, содержащая параметры подбора.
//
Процедура ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора)Экспорт
Перем Номенклатура, Характеристика, ЕдиницаИзмерения, Цена, ЗапрашиватьЦену;
КолонкиТаблицыЦен = ТаблицаЦен.Колонки;
Если ЗначениеВыбора.Команда = "ЗаполнениеТабличнойЧасти" Тогда
Выборка = ЗначениеВыбора.Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЦен <> Null
И Выборка.Номенклатура <> Null
И Не Выборка.ЭтоГруппа Тогда
ТипЦен = Выборка.ТипЦен;
ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
Если ТипыЦен.Найти(ТипЦен) = Неопределено Тогда
СтрокаТиповЦен = ТипыЦен.Добавить();
СтрокаТиповЦен.ТипЦен = ТипЦен;
// Обновим список типов цен.
ЗаполнитьСписокТиповЦен();
// Обновим состав колонок.
ОбновитьСоставКолонок();
ПолучитьСтруктуруПоложенийКолонок();
ВидимостьКолонок();
КонецЕсли;
Номенклатура = Выборка.Номенклатура;
ХарактеристикаНоменклатуры = ?(Выборка.ХарактеристикаНоменклатуры = Null, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(), Выборка.ХарактеристикаНоменклатуры);
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Номенклатура" , Номенклатура);
СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТаблицаЦен, СтруктураОтбора);
Если СтрокаТабличнойЧасти = Неопределено Тогда
СтрокаТабличнойЧасти = ТаблицаЦен.Добавить();
СтрокаТабличнойЧасти.Номенклатура = Номенклатура;
СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатуры;
КОнецЕсли;
НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[ТипЦен];
Если КолонкиТаблицыЦен.Найти("цена" + НомерСоответствияТекущейКолонки) <> Неопределено Тогда
СтрокаТабличнойЧасти["цена" + НомерСоответствияТекущейКолонки] = Выборка.Цена;
КонецЕсли;
Если Не ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда
//Если КолонкиТаблицыЦен.Найти("СпособРасчета" + НомерСоответствияТекущейКолонки) <> Неопределено Тогда
// СтрокаТабличнойЧасти["СпособРасчета" + НомерСоответствияТекущейКолонки] = ТипЦен.СпособРасчетаЦены;
//КонецЕсли;
Если КолонкиТаблицыЦен.Найти("единица" + НомерСоответствияТекущейКолонки) <> Неопределено Тогда
СтрокаТабличнойЧасти["единица" + НомерСоответствияТекущейКолонки] = Номенклатура.ЕдиницаХраненияОстатков;
КонецЕсли;
Иначе
//Если КолонкиТаблицыЦен.Найти("СпособРасчета" + НомерСоответствияТекущейКолонки) <> Неопределено Тогда
// СтрокаТабличнойЧасти["СпособРасчета" + НомерСоответствияТекущейКолонки] = Выборка.СпособРасчетаЦены;
//КонецЕсли;
Если КолонкиТаблицыЦен.Найти("единица" + НомерСоответствияТекущейКолонки) <> Неопределено Тогда
СтрокаТабличнойЧасти["единица" + НомерСоответствияТекущейКолонки] = ЕдиницаИзмерения;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;


ИначеЕсли ЗначениеВыбора.Команда = "ПодборВТабличнуюЧасть" Тогда


ЗначениеВыбора.Свойство("Номенклатура" , Номенклатура);
ЗначениеВыбора.Свойство("Характеристика" , Характеристика);
ЗначениеВыбора.Свойство("ЗапрашиватьЦену", ЗапрашиватьЦену);
ЗапрашиватьЦену = ?(ЗапрашиватьЦену = Неопределено, Ложь, ЗапрашиватьЦену);
// Ищем выбранную позицию в таблице подобранной номенклатуры.
// Если найдем - увеличим количество, не найдем - добавим новую строку.

СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Номенклатура" , Номенклатура);
СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры", ?(ТипЗнч(Характеристика)=Тип("СправочникСсылка.ХарактеристикиНоменклатуры"), Характеристика, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()));
СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТаблицаЦен, СтруктураОтбора);

Если СтрокаТабличнойЧасти = Неопределено Тогда // надо добавить

НоваяСтрока = ТаблицаЦен.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = Характеристика;
Если ЗапрашиватьЦену Тогда
ЗначениеВыбора.Свойство("ЕдиницаИзмерения", ЕдиницаИзмерения);
ЗначениеВыбора.Свойство("Цена" , Цена);
Для Каждого СтрокаТипаЦен Из ТипыЦен Цикл
НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТипаЦен.ТипЦен];
Если КолонкиТаблицыЦен.Найти("цена"+НомерСоответствияТекущейКолонки) <> Неопределено Тогда
НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = Цена;
КонецЕсли;
Если КолонкиТаблицыЦен.Найти("единица"+НомерСоответствияТекущейКолонки) <> Неопределено Тогда
НоваяСтрока["единица" + НомерСоответствияТекущейКолонки] = ЕдиницаИзмерения;
КонецЕсли;
КонецЦикла;
Иначе
ПриИзмененииНоменклатуры(НоваяСтрока, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ОбработкаПодбора()
// Заполняет список пунктов подменю "Изменить".
// Всем кнопкам назначается одно переданное действие.
//
// Параметры:
// ЭлементМеню - кнопка командной панели формы соответственного подменю.
// ОбъектОбработкиВыбора - действие, которое надо выполнить при выборе любого пункта подменю.
//
Процедура УстановитьПодменюВыбораИзмененияПоТипуЦен(ЭлементМеню, ОбъектОбработкиВыбора) Экспорт
Кнопки = ЭлементМеню.Кнопки;
Кнопки.Очистить();
Для Каждого СтрокаТипаЦен Из ТипыЦен Цикл
НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТипаЦен.ТипЦен];
Если НомерСоответствияТекущейКолонки = Неопределено Тогда
НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен.Количество();
мСоответствиеТиповЦен.Вставить(СтрокаТипаЦен.ТипЦен, НомерСоответствияТекущейКолонки);
КонецЕсли;
Кнопки.Добавить("Кнопка_" + НомерСоответствияТекущейКолонки, ТипКнопкиКоманднойПанели.Действие,
СтрокаТипаЦен.ТипЦен.Наименование, ОбъектОбработкиВыбора);
КонецЦикла;
КонецПроцедуры // УстановитьПодменюВыбораИзмененияПоТипуЦен()
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ УПРАВЛЕНИЯ ВНЕШНИМ ВИДОМ ФОРМЫ
// Процедура устанавливает видимость колонок в зависимости от параметров документа
// и делает недоступной единицу хранения остатков.
//
Процедура ВидимостьКолонок()
БылаНоваяКолонка = Ложь;
Для Каждого КолонкаТиповЦен Из мКолонкиТовары Цикл
ПризнакКолонки = Лев(КолонкаТиповЦен.Имя, 4);
Если Нрег(ПризнакКолонки) = "цена"
И НЕ КолонкаТиповЦен.Имя = "ЦенаВРозницеСтарая" Тогда
КолонкаТиповЦен.Видимость = ПоказыватьЦену;
КолонкаТиповЦен.Положение = мСтруктураПоложенийКолонок.Цена;
БылаНоваяКолонка = Истина;
ИначеЕсли НРег(ПризнакКолонки) = "един" Тогда
КолонкаТиповЦен.Видимость = ПоказыватьЕдиницуИзмерения;
КолонкаТиповЦен.Положение = ?(БылаНоваяКолонка, мСтруктураПоложенийКолонок.ЕдиницаИзмерения, ПоложениеКолонки.НоваяКолонка);
БылаНоваяКолонка = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ВидимостьКолонок()
// Процедура устанавливает доступность колонок.
//
Процедура ДоступностьКолонок()
Для Каждого СтрокаТипаЦен Из ТипыЦен Цикл
НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТипаЦен.ТипЦен];
ТекКолонка = мКолонкиТовары.Найти("цена" + НомерСоответствияТекущейКолонки);
КонецЦикла;
КонецПроцедуры // ДоступностьКолонок()
Процедура УстановитьВидимостьИнформационнойНадписиВведенныеПараметры()

Если ПараметрыНаценки = Неопределено Тогда

ЭлементыФормы.ПанельИнформацииОВведенныхПараметрах.Свертка = РежимСверткиЭлементаУправления.Верх;

ИначеЕсли ТипЗнч(ПараметрыНаценки) = Тип("Структура") Тогда

ЭлементыФормы.ПанельИнформацииОВведенныхПараметрах.Свертка = РежимСверткиЭлементаУправления.Нет;

ЗаголовокИнформационнойНадписи = """";

Если ПараметрыНаценки.Свойство("Наценка") Тогда

ЗаголовокИнформационнойНадписи = ЗаголовокИнформационнойНадписи + "Наценка: " + Формат(ПараметрыНаценки.Наценка,"ЧДЦ=2; ЧН=") + " %";

КонецЕсли;

Если ПараметрыНаценки.Свойство("ДопустимыйПроцентОтклонения") Тогда

Если СтрДлина(ЗаголовокИнформационнойНадписи) > 0 Тогда

ЗаголовокИнформационнойНадписи = ЗаголовокИнформационнойНадписи + "; ";

КонецЕсли;

ЗаголовокИнформационнойНадписи = ЗаголовокИнформационнойНадписи + "Допустимый процент отклонения: " + Формат(ПараметрыНаценки.ДопустимыйПроцентОтклонения,"ЧДЦ=1; ЧН=") + " %";

КонецЕсли;

Если ПараметрыНаценки.Свойство("Округление")
И ЗначениеЗаполнено(ПараметрыНаценки.Округление) Тогда

Если СтрДлина(ЗаголовокИнформационнойНадписи) > 0 Тогда

ЗаголовокИнформационнойНадписи = ЗаголовокИнформационнойНадписи + "; ";

КонецЕсли;

СоответствиеЗначений = Новый Соответствие;

СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр0_05, "До 5 копеек");
СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр0_1 , "До 10 копеек");
СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр0_5 , "До 50 копеек");
СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр1 , "До 1 рубля");
СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр5 , "До 5 рублей");
СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр10 , "До 10 рублей");
СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр50 , "До 50 рублей");
СоответствиеЗначений.Вставить(Перечисления.ПорядкиОкругления.Окр100 , "До 100 рублей");

ЗаголовокИнформационнойНадписи = ЗаголовокИнформационнойНадписи + "Округление: " + СоответствиеЗначений[ПараметрыНаценки.Округление];

КонецЕсли;

ЭлементыФормы.НадписьВведенныеПараметры.Заголовок = ЗаголовокИнформационнойНадписи;

КонецЕсли;
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
// Процедура - обработчик события "ПередОткрытием" формы
//
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Установка кнопок заполнение ТЧ
УстановитьКнопкиПодменюЗаполненияТЧ();
мПоказыватьКод = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьКод");
мПоказыватьАртикул = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьАртикул");
ПоказыватьЦену = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьЦену");
ПоказыватьЕдиницуИзмерения = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьЕдиницуИзмерения");

мПоказыватьКод = ?(мПоказыватьКод = Неопределено, Ложь, мПоказыватьКод);
мПоказыватьАртикул = ?(мПоказыватьАртикул = Неопределено, Ложь, мПоказыватьАртикул);
ПоказыватьЦену = ?(ПоказыватьЦену = Неопределено, Истина, ПоказыватьЦену);
ПоказыватьЕдиницуИзмерения = ?(ПоказыватьЕдиницуИзмерения = Неопределено, Истина, ПоказыватьЕдиницуИзмерения);

мСоответствиеТиповЦен = Новый Соответствие;
// Сформируем и заполним таблицу цен.
Для Каждого СтрокаТипаЦен Из ТипыЦен Цикл
НомерСоответствияТекущейКолонки = ТипыЦен.Индекс(СтрокаТипаЦен);
мСоответствиеТиповЦен.Вставить(СтрокаТипаЦен.ТипЦен, НомерСоответствияТекущейКолонки);
Если ТаблицаЦен.Колонки.Найти("цена" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
ТаблицаЦен.Колонки.Добавить("цена" + НомерСоответствияТекущейКолонки, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2, Истина), СокрЛП(СтрокаТипаЦен.ТипЦен), 10);
КонецЕсли;
Если ТаблицаЦен.Колонки.Найти("единица" + НомерСоответствияТекущейКоло
"почему бы сюда не выложить весть текст конфигурации? ;)"
Оно там есть но почему-то не отображается, не могу найти что надо исправить в модуле

[Прекратите выкладывать тексты конфигураций!]
Ну и зачем было кидать сюда ВЕСЬ текст модуля?ПРИГЛАСИТЕ СПЕЦИАЛИСТА,а то вы там наизменяете сейчас...
Не пробовали в самой программе в документе "Установка цен номенклатуры" на табличной части нажать правую кнопку мыши, выбрать Настройка списка и поставить галку на "Характеристика номенклатуры"?
Читают тему
(гостей: 1)

Быстрый переход