Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Печать прайса Номенклатуры  (Прочитано 19341 раз)
0 Пользователей и 1 Гость смотрят эту тему.
evairian
Гость
« : 15-09-2009 10:06 » 

Привет всем! Подскажите, пожалуйста. У меня есть отчет, на нем располагается поле выбора из справ. Номенклатура групп и товаров. При выборе некой группы на прайс должно выйти: Наименование выбранной группы товаров ,наимен6ование товаров, которые включены в эту группу, и минимальная цена, что берется из спр. Номенклатура. Помогите, пожалуйста, с кодом!
« Последнее редактирование: 29-11-2009 08:18 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 15-09-2009 13:26 » 

как бы это объяснить в двух словах, тем более если новичок.
1С не такая сложная штука, но требует чтения ЧУЖИХ (от производителя) исходников.
1. Найти похожий отчет
2. Понять структуру выборки
3. Написать самому.

Временную сложность решения задачи оценить сложно, но при правильном подходе - сложно первые 25 лет, потом привыкаешь Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
evairian
Гость
« Ответ #2 : 15-09-2009 14:13 » 

))))))))))))
Да, это, конечно, очень познавательно, но я не смогла разобраться самостоятельно, в похожих выборках столько не нужного мне))) Если можете, Sla, приведите "Эту очень не сложную штуку " на примере, если не трудно. Буду очень признательна!

Вы, наверняка, не раз сталкивались с этим
« Последнее редактирование: 16-09-2009 04:54 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 15-09-2009 14:26 » 

Вы,наверняка,не раз сталкивались с этим
ага, лет 10 назад. не... вру - 5. Надо ждать "освобождения" наших гуру.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
evairian
Гость
« Ответ #4 : 15-09-2009 14:30 » 

Что-то их долго нет )))))Но все равно спасибо,что отозвались
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 16-09-2009 06:16 » 

Offtopic:
evairian, А куда ты торопишься? Это ж форум, а не чат... Ну не было меня день - порой и неделями не бываю...

1. Какая платформа? (7.Х - 8.Х)
2. Где смотрела подобное?
3. Покажи кусок кода - что не получается?
Записан
evairian
Гость
« Ответ #6 : 17-09-2009 06:24 » 

Платформа 7.7. Подобное смотрела в отчете ОстаткиТМЦ, но там что-то не очень понятно. Подскажите, как применить функцию МинЦена? Мне необходимо вывести эту цену из справочника Номенклатура в созданный мною отчет. В отчете выводится номенклатура и минимальная цена. Буду очень признательна.)))))))))) Вот все,что у меня есть:

Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
   |Наименование = Справочник.Номенклатура.Наименование;
   |МинЦена = Справочник.Номенклатура.МинЦена;
   |Функция МинЦенаСумма = Сумма(МинЦена);
   |Группировка Номенклатура упорядочить по Номенклатура.Наименование;

   |"//}}ЗАПРОС
   ;
   
    Если ПустоеЗначение(ВыбНоменклатура) = 0 Тогда
      ТекстЗапроса = ТекстЗапроса + "Условие(Номенклатура = ВыбНоменклатура);";
   Иначе
       Ном = СоздатьОбъект("Справочник.Номенклатура");
        Ном.ВыбратьЭлементы();  
       Намен = СоздатьОбъект("СписокЗначений");
   Пока Ном.ПолучитьЭлемент() = 1 Цикл
          
       Намен.ДобавитьЗначение(Ном.ТекущийЭлемент().Наименование);
     
КонецЦикла;
КонецЕсли;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
      Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
      // Заполнение полей Номенклатура
      Таб.ВывестиСекцию("Номенклатура");
   КонецЦикла;
   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
КонецПроцедуры


Я новичок, только учусь...
« Последнее редактирование: 18-09-2009 06:02 от Sel » Записан
STALKER
Участник

ru
Offline Offline
Пол: Мужской
ыыыы


« Ответ #7 : 26-11-2009 06:27 » 

я конечно мало понял о чом тема, но всегда хотел спросить - кто знает конфигурацию "торговля и склад", знает как выглядит печать прайса. и там не впечатывается код товара. вот как сделать чтобы код печатался
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 26-11-2009 09:27 » 

evairian, упсь Жаль не заметил ответа... Если еще не разобралась - напиши.

STALKER, добавить в таблицу обработки ПечатьПрайсЛиста колонку с кодом или изменить колонку с наименованием чтобы в ней содержался код
Записан
STALKER
Участник

ru
Offline Offline
Пол: Мужской
ыыыы


« Ответ #9 : 26-11-2009 10:25 » 

так не получится. надо ж где то и в модуле код прописывать. как он будет печататься если функций не указать
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 26-11-2009 10:33 » 

получится: код это реквизит элемента справочника, так что написав в ячейке Запрос.Товар.Код (по аналогии с Запрос.Товар.ПолнНаименование) получишь код на печатной форме.
Записан
STALKER
Участник

ru
Offline Offline
Пол: Мужской
ыыыы


« Ответ #11 : 26-11-2009 10:57 » 

вот полный код модуля в обработке прайса:

Код:
Перем ТекСтрокаВТаблице; // текущая строка в таблице значений  МФ

// используются для стандартного механизма кнопок "Обновить" и "Настройка"
Перем ИсхТабл;
Перем Обновить;
Перем Расшифровка;

Перем ТипЦены;

//******************************************************************************
// ВыбратьПоФильтру()
//
// Параметры:
//  Нет
//
// Описание:
//  Открывает обработку отбора элементов по произвольному фильтру
//
Процедура ВыбратьПоФильтру()

Перем  ВидЗначенияПодбора;

ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид);

Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда
Возврат;
КонецЕсли;

СписокПараметров=СоздатьОбъект("СписокЗначений");
СписокПараметров.ДобавитьЗначение("",                "ИмяВызвавшейФормы");
СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип,     "Тип");
СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид");
СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты");
ТаблицаМФ.ФлВкл=2;
ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров);

КонецПроцедуры // ВыбратьПоФильтру

//******************************************************************************
// ПерерисовкаНазванийЗакладок
//
// Параметры:
// Нет
//
// Описание:
//  Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан
//
Функция ПерерисовкаНазванийЗакладок()     

Врем = Форма.Закладки.ПолучитьЗначение(2);
Форма.Закладки.УстановитьЗначение(2, Врем,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");

КонецФункции // ПерерисовкаНазванийЗакладок

//******************************************************************************
// СформироватьСписокПомеченных()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Список значений, состоящий из помеченных значений из списка значений ТипыЦен
//
// Описание:
//  Формирует список значений, состоящий только из помеченных значений из списка
//  значений ТипыЦен.
//
Функция СформироватьСписокПомеченных()

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

Возврат РезСписок;

КонецФункции // СформироватьСписокПомеченных()

//******************************************************************************
// ОбработкаСпискаТиповЦен(Пометки)
//
// Параметры:
//  ВклТипы - список значений, содержащий типы цен, которые нужно пометить.
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Зполняет из справочника ТипыЦен список значений ТипыЦен и устанавливает
//  пометки у тех типов, которые находятся в списке значений ВклТипы.
//
Процедура ОбработкаСпискаТиповЦен(ВклТипы)

// очистим список
ТипыЦен.УдалитьВсе();

// перезаполним список из справочника
СпрТипыЦен = СоздатьОбъект("Справочник.ТипыЦен");
СпрТипыЦен.ВыбратьЭлементы();
Пока СпрТипыЦен.ПолучитьЭлемент() = 1 Цикл
ТипыЦен.ДобавитьЗначение(СпрТипыЦен.ТекущийЭлемент());
КонецЦикла;

// проставим пометки
Для Счетчик = 1 По ВклТипы.РазмерСписка() Цикл
Поз = ТипыЦен.НайтиЗначение(ВклТипы.ПолучитьЗначение(Счетчик));
Если Поз > 0 Тогда
    ТипыЦен.Пометка(Поз, 1);
КонецЕсли;
КонецЦикла;

КонецПроцедуры // ОбработкаСпискаТиповЦен()

//******************************************************************************                                                   
// РасшифровкаОбновить(Обновить)
//
// Параметры:
//  Обновить = 1 - нажата кнопка "Обновить"
// 2 - нажата кнопка "Настройка"
//
// Возвращаемое значение:
// Расшифровка (список значений)
//
// Вызывается из формул элементов диалога:
//  из таблицы, кнопки "Обновить" и "Настройка"
//
// Описание: 
// функция для стандартного механизма кнопок ""Обновить" и "Настройка""
//  помещает значение параметра в список Расшифровка  и возвращает этот список
//
Функция РасшифровкаОбновить(Обновить) 

Расшифровка.Установить("Обновить", Обновить);
Возврат Расшифровка;           

КонецФункции //РасшифровкаОбновить()                                           

//******************************************************************************
// Процедура Сформировать(ЗакрытьДиалог=0)
//
// Параметры:
//   ЗакрытьДиалог - флаг того, что после формирования отчета надо закрыть диалог
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//   кнопки "Сформировать" и "ОК"
//
// Описание:
// Запускает печать прайс-листа.
//
Процедура Сформировать(ЗакрытьДиалог=0)

// хоть одна цена в списке цен должна быть выбрана
ЕстьПомеченые = 0;
Для СчетчикЦикла = 1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(СчетчикЦикла) = 1 Тогда
    ЕстьПомеченые = 1;
Прервать;
КонецЕсли;
КонецЦикла;

Если ЕстьПомеченые = 0 Тогда
    Предупреждение("Не выбрано ни одного типа цены", 60);
Возврат;
КонецЕсли;

Если (ТипЗначенияСтр(ИсхТабл) <> "Таблица") ИЛИ (Обновить = 0) Тогда
    ИсхТабл = СоздатьОбъект("Таблица");
Иначе
ИсхТабл.Очистить();
КонецЕсли;     
               
    ИсхТабл.ИсходнаяТаблица( "Таблица" );

Расшифровка = СоздатьОбъект("СписокЗначений");
Путь     = "";
ИмяФайла = "";
РасположениеФайла(Путь,ИмяФайла);
ФайлОтчета = Путь + ИмяФайла;
    Расшифровка.Установить("Отчет", ?(ПустоеЗначение(ФайлОтчета) = 1,"ПечатьПрайса", ФайлОтчета));

// Все настройки помещаем в список
Расшифровка.Установить("ДатаОтчета",      ДатаОтчета);
Расшифровка.Установить("ВыбТМЦ",          ВыбТМЦ);
    Расшифровка.Установить("ПоНаличию" ,      ПоНаличию);
Расшифровка.Установить("ВидРазделителя",  ВидРазделителя);
Расшифровка.Установить("ВыбРазделитель1", ВыбРазделитель1);
Расшифровка.Установить("ВыбРазделитель2", ВыбРазделитель2);
Расшифровка.Установить("ВыбРазделитель3", ВыбРазделитель3);
Расшифровка.Установить("Склад",           Склад);
Расшифровка.Установить("ВариантВключенияВпрайс", ВариантВключенияВпрайс);

Расшифровка.Установить("ТипыЦен",         СформироватьСписокПомеченных());

глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были

// Запомним МФ только если он задан
    Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
КонецЕсли;

// Заголовок отчета

ИсхТабл.ВывестиСекцию("Кнопки");
НачПовтСекц = ИсхТабл.ВысотаСекции("Кнопки");

ОсновнаяФирма = глЗначениеПоУмолчанию("ОсновнаяФирма");

НаименованиеФирмы = СокрЛП(ОсновнаяФирма.ЮрЛицо.ПолнНаименование);
ИсхТабл.ВывестиСекцию("Заголовок");
НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("Заголовок");

ДопЗаголовок = "";

Если ПустоеЗначение(ОсновнаяФирма.ЮрЛицо.ЮрАдрес) = 0 Тогда
    ДопЗаголовок = "Адрес: "+ СокрЛП(ОсновнаяФирма.ЮрЛицо.ЮрАдрес);
КонецЕсли;

Если ПустоеЗначение(ОсновнаяФирма.ЮрЛицо.Телефоны) = 0 Тогда
    ДопЗаголовок = ДопЗаголовок + РазделительСтрок + "Телефоны: "+ СокрЛП(ОсновнаяФирма.ЮрЛицо.Телефоны);
КонецЕсли;

Если ПустоеЗначение(ОсновнаяФирма.ЭлПочта) = 0 Тогда
    ДопЗаголовок = ДопЗаголовок + РазделительСтрок + "E-mail: " + СокрЛП(ОсновнаяФирма.ЭлПочта);
КонецЕсли;

Если ПустоеЗначение(ДопЗаголовок) = 0 Тогда
ИсхТабл.ВывестиСекцию("ДопЗаголовок");
НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("ДопЗаголовок");
КонецЕсли;

ИсхТабл.ВывестиСекцию("ДатаПрайса");
НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("ДатаПрайса");

ИсхТабл.ВывестиСекцию("ШапкаТаблицы|Название");
КонПовтСекции = НачПовтСекц + ИсхТабл.ВысотаСекции("ШапкаТаблицы");
ИсхТабл.ПовторятьПриПечатиСтроки(НачПовтСекц + 1, КонПовтСекции);

// Присоединим заголовку названия цен
Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ТекТипЦены = ТипыЦен.ПолучитьЗначение(Счетчик);
ШапкаЦены = СокрЛП(ТекТипЦены.Наименование);

Если ТекТипЦены.Рассчитывается = 0 Тогда
ОсновнойТип = ТекТипЦены;
Иначе
ОсновнойТип = ТекТипЦены.БазовыйТипЦен;
КонецЕсли;

Если ОсновнойТип.ЦенаВклНДС = ОсновнойТип.ЦенаВклНП Тогда
    Если ОсновнойТип.ЦенаВклНДС = 1 Тогда
        НалогиЦены = "(включая НДС и НП)"
Иначе
НалогиЦены = "(без учета НДС и НП)";
    КонецЕсли;
Иначе
Если ОсновнойТип.ЦенаВклНДС = 1 Тогда
    НалогиЦены = "(включая НДС," + РазделительСтрок;
Иначе
НалогиЦены = "(без учета НДС," + РазделительСтрок;
КонецЕсли;

Если ОсновнойТип.ЦенаВклНП = 1 Тогда
    НалогиЦены = НалогиЦены + " включая НП)";
Иначе
НалогиЦены = НалогиЦены + " без учета НП)";
КонецЕсли;

КонецЕсли;

ИсхТабл.ПрисоединитьСекцию("ШапкаТаблицы|Цена");
КонецЕсли;
КонецЦикла;

// текст запроса по выбранным ценам
ТекстЗапроса = "//{{ЗАПРОС(ОтборЦен)
|Период с ДатаОтчета по ДатаОтчета;
|Номенклатура = Справочник.Цены.Владелец;
|Тип = Справочник.Цены.ТипЦен;
|Цена = Справочник.Цены.Цена;
|Единица = Справочник.Цены.Единица;
|Валюта = Справочник.Цены.Валюта;
|Функция ЦенаСумма = Сумма(Цена);
|Группировка Номенклатура Упорядочить по Номенклатура.Наименование;
|Группировка Тип;
|"//}}ЗАПРОС
;

Если ПоНаличию = 1 Тогда

ТекстЗапросаОстатков = "
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|
|Функция КоличествоКонОст = КонОст(Количество);
|
|Группировка Номенклатура без групп;";

Если ВидРазделителя = 2 Тогда
Если ПустоеЗначение(ВыбРазделитель1) = 0 Тогда
// нужен фильтр по фирме
    ТекстЗапросаОстатков = "Фирма = Регистр.ОстаткиТМЦ.Фирма;" +
                       ТекстЗапросаОстатков +
   "Условие(Фирма = ВыбРазделитель1);";
КонецЕсли;
ИначеЕсли ВидРазделителя = 3 Тогда
Если ПустоеЗначение(ВыбРазделитель2) = 0 Тогда
// нужен фильтр по ЮрЛицу фирмы
    ТекстЗапросаОстатков = "ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо;" +
                       ТекстЗапросаОстатков +
   "Условие(ЮрЛицо = ВыбРазделитель2);";
КонецЕсли;
ИначеЕсли ВидРазделителя = 4 Тогда
Если ПустоеЗначение(ВыбРазделитель3) = 0 Тогда
// нужен фильтр по УпрАналитике фирмы
    ТекстЗапросаОстатков = "УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика;" +
                       ТекстЗапросаОстатков +
   "Условие(УпрАналитика = ВыбРазделитель3);";
КонецЕсли;
КонецЕсли;

Если ПустоеЗначение(Склад) = 0 Тогда
// нужен фильтр по складу
    ТекстЗапросаОстатков = "Скл = Регистр.ОстаткиТМЦ.Склад;" +
                       ТекстЗапросаОстатков +
   "Условие(Скл = Склад);";
КонецЕсли;

ЗапросПоОстаткам = СоздатьОбъект("Запрос");
Если ЗапросПоОстаткам.Выполнить(ТекстЗапросаОстатков) = 0 Тогда
Возврат;
КонецЕсли;

СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
Пока ЗапросПоОстаткам.Группировка(1) = 1 Цикл
Если ЗапросПоОстаткам.КоличествоКонОст > 0 Тогда
СписокНоменклатуры.ДобавитьЗначение(ЗапросПоОстаткам.Номенклатура);
КонецЕсли;
КонецЦикла;

// Добавим услуги и работы в список номенклатуры
ВидыУслуг = СоздатьОбъект("СписокЗначений");
ВидыУслуг.ДобавитьЗначение(Перечисление.ВидыНоменклатуры.Услуга);
ВидыУслуг.ДобавитьЗначение(Перечисление.ВидыНоменклатуры.Работа);

ТекстЗапросаУслуг = "
|Номенклатура = Справочник.Цены.Владелец;
|Группировка Номенклатура без групп;
|Условие (Номенклатура.ВидНоменклатуры в ВидыУслуг);";

ЗапросПоУслугам = СоздатьОбъект("Запрос");
Если ЗапросПоУслугам.Выполнить(ТекстЗапросаУслуг) = 0 Тогда
Возврат;
КонецЕсли;

Пока ЗапросПоУслугам.Группировка(1) = 1 Цикл
СписокНоменклатуры.ДобавитьЗначение(ЗапросПоУслугам.Номенклатура);
КонецЦикла;

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

ТекстЗапроса = ТекстЗапроса + "Условие(Номенклатура в СписокНоменклатуры);"

КонецЕсли;

// Добавим отбор по флагу включения в прайс
Если ВариантВключенияВпрайс > 1 Тогда 
Если ВариантВключенияВпрайс = 2 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие ( Номенклатура.НеВключатьВпрайс = 0);";
Иначе
ТекстЗапроса = ТекстЗапроса + "Условие ( Номенклатура.НеВключатьВпрайс = 1);";
КонецЕсли;
КонецЕсли;

НетОш = 1; // нет ошибок при наложении фильтров
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура", ВыбТМЦ, "ВыбТМЦ", ТекстЗапроса, , "СвойстваНоменклатуры");

Если НетОш = 0 Тогда
Возврат;
КонецЕсли;

Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

ТаблицаЦен = СоздатьОбъект("ТаблицаЗначений");
ТаблицаЦен.НоваяКолонка("Тип");
ТаблицаЦен.НоваяКолонка("Цена");
ТаблицаЦен.НоваяКолонка("Единица");
ТаблицаЦен.НоваяКолонка("Валюта");
ТаблицаЦен.НоваяКолонка("Код");
   
ТекущаяГруппа= ПолучитьПустоеЗначение("Справочник.Номенклатура");

Пока Запрос.Группировка("Номенклатура") = 1 Цикл
ТекЭлем = Запрос.Номенклатура;
Уровень = ТекЭлем.Уровень();
Если Уровень > 4 Тогда
Уровень = 4;
КонецЕсли;


Если ТекЭлем.ЭтоГруппа() = 0 Тогда

ТаблицаЦен.УдалитьСтроки();

Пока Запрос.Группировка("Тип") = 1 Цикл
Если Запрос.ЦенаСумма = 0 Тогда
Продолжить;
КонецЕсли;

ТаблицаЦен.НоваяСтрока();

ТаблицаЦен.Тип = Запрос.Тип;
ТаблицаЦен.Цена = Запрос.ЦенаСумма;
ТаблицаЦен.Единица = Запрос.Единица;
ТаблицаЦен.Валюта = Запрос.Валюта;
КонецЦикла;

Если ТаблицаЦен.КоличествоСтрок() = 0 Тогда
Продолжить;
КонецЕсли;

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

Наименование = ТекЭлем.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТекЭлем.Артикул), "");
ИсхТабл.ВывестиСекцию("Номенклатура|Название");

Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ТекТип = ТипыЦен.ПолучитьЗначение(Счетчик);

Если ТекТип.Рассчитывается = 1 Тогда
ИспТип = ТекТип.БазовыйТипЦен;
Иначе
ИспТип = ТекТип;
КонецЕсли;
// поищем тип в таблице
Поз = 0;
Если ТаблицаЦен.НайтиЗначение(ИспТип, Поз, "Тип") = 1 Тогда
ТаблицаЦен.ПолучитьСтрокуПоНомеру(Поз);

Цена    = ТаблицаЦен.Цена;
Единица = ТаблицаЦен.Единица;

Если ТекТип.Рассчитывается = 1 Тогда
// нужно пересчитать цену
Цена = глПересчет(Цена, ТаблицаЦен.Валюта, ДатаОтчета, ТекТип.Валюта, ДатаОтчета);
Цена = глОкруглить(Цена * (100 + ТекТип.Процент) / 100, ТекТип.ПорядокОкругления);
ПечЦена = глФРМ(Цена, ТекТип.Валюта);
Иначе
ПечЦена = глФРМ(Цена, ТаблицаЦен.Валюта);
КонецЕсли;

ПечЕдиница = Единица;
Иначе
ПечЦена = "";
КонецЕсли;

ИсхТабл.ПрисоединитьСекцию("Номенклатура|Цена");
КонецЕсли;
КонецЦикла;
Иначе  // ЭтоГруппа() = 1

// Запоминаем текущую группу
ТекущаяГруппа = ТекЭлем;

Наименование = ТекЭлем.Наименование;
ИсхТабл.ВывестиСекцию("Группа" + Уровень + "|Название");

Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|Цена");
КонецЕсли;
КонецЦикла;
ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|ПравГраница");

КонецЕсли; // ТекЭлем.ЭтоГруппа() = 0

КонецЦикла;

// подвал отчета
ИсхТабл.ВывестиСекцию("Подвал|Название");
Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ИсхТабл.ПрисоединитьСекцию("Подвал|Цена");
КонецЕсли;
КонецЦикла;

// покажем таблицу
ИсхТабл.ОбластьПечати(3);
ИсхТабл.Опции(0,0,0,0,"ПечатьПрайса", "ПечатьПрайса");
ИсхТабл.ТолькоПросмотр(1);
ИсхТабл.Показать("Печать прайс-листа","");

Если (Обновить = 2) или (ЗакрытьДиалог=1) Тогда
СтрокаДействийФормы = "#Закрыть";
КонецЕсли;

КонецПроцедуры // Сформировать()

//******************************************************************************
// Сдвиг(Направление)
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//       
// Вызывается из формул диалога:
//  по кнопкам со стрелочками "вверх" или "Вниз"
//
// Описание:
// Сдвигает текущую строку списка цен в заданном направлении.
//
Процедура Сдвиг(Направление)
ТекСтрока = ТипыЦен.ТекущаяСтрока();

Если ТекСтрока > 0 Тогда
ТипыЦен.СдвинутьЗначение(Направление, ТекСтрока);
КонецЕсли;

КонецПроцедуры // Сдвиг()

//******************************************************************************
// УправлениеДиалогом()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул диалога:
//  Флаг "ПоНаличию", переключатель "ВидРазделителя"
//
// Описание:
//  Управление видимостью и доступностью элементов форм
//
Процедура УправлениеДиалогом()

ТекСтрока = Форма.Закладки.ТекущаяСтрока();
Если ТекСтрока = 1 Тогда
Если ПустоеЗначение(ВидРазделителя) = 1 Тогда
ВидРазделителя =1;
КонецЕсли;
Форма.ИспользоватьСлой(Форма.Закладки.ПолучитьЗначение(ТекСтрока) +
      ?(ВидРазделителя > 1, ",Разделитель"+СокрЛП(ВидРазделителя - 1),""));
Если ПоНаличию = 0 Тогда
// все связанное с фирмами недоступно
Форма.ВидРазделителя. Доступность(0);
Форма.ВыбРазделитель1.Доступность(0);
Форма.ВидРазделителя1.Доступность(0);
Форма.кнХРазделитель1.Доступность(0);
Форма.ВыбРазделитель2.Доступность(0);
Форма.ВидРазделителя2.Доступность(0);
Форма.кнХРазделитель2.Доступность(0);
Форма.ВыбРазделитель3.Доступность(0);
Форма.ВидРазделителя3.Доступность(0);
Форма.кнХРазделитель3.Доступность(0);

Форма.Склад.Доступность(0);
Форма.ТекстСклад.Доступность(0);
Форма.кнХСклад.Доступность(0);
Иначе
Форма.ВидРазделителя. Доступность(1);
Форма.ВыбРазделитель1.Доступность(1);
Форма.ВидРазделителя1.Доступность(1);
Форма.кнХРазделитель1.Доступность(1);
Форма.ВыбРазделитель2.Доступность(1);
Форма.ВидРазделителя2.Доступность(1);
Форма.кнХРазделитель2.Доступность(1);
Форма.ВыбРазделитель3.Доступность(1);
Форма.ВидРазделителя3.Доступность(1);
Форма.кнХРазделитель3.Доступность(1);

Форма.Склад.Доступность(1);
Форма.ТекстСклад.Доступность(1);
Форма.кнХСклад.Доступность(1);
КонецЕсли;

Иначе     
Форма.ИспользоватьСлой(Форма.Закладки.ПолучитьЗначение(ТекСтрока));
КонецЕсли;

КонецПроцедуры // УправлениеДиалогом()

//******************************************************************************
// Предопределенная процедура
//
Процедура ВводНового()

    УправлениеДиалогом();
ПерерисовкаНазванийЗакладок();
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");

// восстановим из настройки пометки у типов цен
ОбработкаСпискаТиповЦен(СформироватьСписокПомеченных());

КонецПроцедуры // ВводНового()

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии(ФлагЧтенияНастройки)
Перем СписокПомеченных;

Если глФлагРасшифровки = 1 Тогда
Обновить = глОбновить;

// Восстанавливаем настройки из списка
ДатаОтчета = глРасшифровка.Получить("ДатаОтчета");
ВыбТМЦ = глРасшифровка.Получить("ВыбТМЦ");
ПоНаличию = глРасшифровка.Получить("ПоНаличию");
ВидРазделителя = глРасшифровка.Получить("ВидРазделителя");
ВыбРазделитель1 = глРасшифровка.Получить("ВыбРазделитель1");
ВыбРазделитель2 = глРасшифровка.Получить("ВыбРазделитель2");
ВыбРазделитель3 = глРасшифровка.Получить("ВыбРазделитель3");
Склад                   = глРасшифровка.Получить("Склад");
ВариантВключенияВпрайс = глРасшифровка.Получить("ВариантВключенияВпрайс");

ВремТипыЦен = глРасшифровка.Получить("ТипыЦен");
ОбработкаСпискаТиповЦен(ВремТипыЦен);

Если ТипЗначенияСтр(глРасшифровка.Получить("ТаблицаМФ"))="ТаблицаЗначений" Тогда
ТаблицаМФ.Загрузить(глРасшифровка.Получить("ТаблицаМФ"));
КонецЕсли;
       
Если Обновить <> 0 Тогда
ИсхТабл = глТаблица;
КонецЕсли;           

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

Если ПустоеЗначение(ДатаОтчета) = 1 Тогда
ДатаОтчета = РабочаяДата();
КонецЕсли;

Если ПустоеЗначение(ВариантВключенияВпрайс) = 1 Тогда
ВариантВключенияВпрайс = 1;
КонецЕсли;

КонецЕсли;

// установка видимости колонок ТЗ множественного фильтра
ТаблицаМФ.ВидимостьКолонки("Тип",0);
ТаблицаМФ.ВидимостьКолонки("Вид",0);
ТаблицаМФ.ВидимостьКолонки("СписокЭлементов",0);         
ТаблицаМФ.ВидимостьКолонки("ТипМФ",0);
ТаблицаМФ.ВидимостьКолонки("ИмяПеременной",0);
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");

УправлениеДиалогом();
ПерерисовкаНазванийЗакладок();


КонецПроцедуры // ПриОткрытии()

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки)

УправлениеДиалогом();
ПерерисовкаНазванийЗакладок();

КонецПроцедуры // ПриВыбореЗнакладки()

//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(Значение) 

Если (СписокЭлементовМФ.НайтиЗначение(Значение)=0) Тогда
Представление=""+Значение;
Если ТипЗначенияСтр(Значение)="Справочник" Тогда
Если СокрЛП(Метаданные.Справочник(Значение.Вид()).Владелец) <> "Метаданные" Тогда
Представление=Представление+" ("+Значение.Владелец+")";
КонецЕсли;
КонецЕсли;
СписокЭлементовМФ.ДобавитьЗначение(Значение,Представление);
ТаблицаМФ.ФлВкл=2;
КонецЕсли;

КонецПроцедуры  // ОбработкаПодбора

//******************************************************************************

// добавим закладки
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Общий,Основной,Кнопки","Основная");
Форма.Закладки.ДобавитьЗначение("Общий,МФ,Кнопки","Множественный фильтр");
Форма.Закладки.ТекущаяСтрока(1);

// инициализация переменных множественного фильтра
ТипМФ.УдалитьВсе();
ТипМФ.ДобавитьЗначение("одно из");
ТипМФ.ДобавитьЗначение("все кроме");

ТаблицаМФ.УдалитьСтроки();
Пока ТаблицаМФ.КоличествоКолонок()>0 Цикл
    ТаблицаМФ.УдалитьКолонку(1);
КонецЦикла; 

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

ТекСтрокаВТаблице="";
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 26-11-2009 11:00 » 

Попробуй:
Запрос.Номенклатура.Код
Записан
STALKER
Участник

ru
Offline Offline
Пол: Мужской
ыыыы


« Ответ #13 : 26-11-2009 11:11 » new

спасибо огромноеееееее!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! всё нормально Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines