Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1С Программирование и поддержка (1C)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Перем ТекСтрокаВТаблице; // текущая строка в таблице значений  МФ
 
// используются для стандартного механизма кнопок "Обновить" и "Настройка"
Перем ИсхТабл;        
Перем Обновить;
Перем Расшифровка;  
 
Перем ТипЦены;
 
//******************************************************************************
// ВыбратьПоФильтру()
//
// Параметры:
//  Нет
//
// Описание:
//  Открывает обработку отбора элементов по произвольному фильтру
//
Процедура ВыбратьПоФильтру()
    
    Перем  ВидЗначенияПодбора;
    
    ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид);
    
    Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда
        Возврат;
    КонецЕсли;
    
    СписокПараметров=СоздатьОбъект("СписокЗначений");
    СписокПараметров.ДобавитьЗначение("",                "ИмяВызвавшейФормы");
    СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип,     "Тип");
    СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид");
    СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты");
    ТаблицаМФ.ФлВкл=2;
    ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров);
    
КонецПроцедуры    // ВыбратьПоФильтру
 
//******************************************************************************
// ПерерисовкаНазванийЗакладок
//
// Параметры:
//     Нет
//
// Описание:
//  Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан
//
Функция ПерерисовкаНазванийЗакладок()      
    
    Врем = Форма.Закладки.ПолучитьЗначение(2);
    Форма.Закладки.УстановитьЗначение(2, Врем,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");
    
КонецФункции // ПерерисовкаНазванийЗакладок    
 
//******************************************************************************
// СформироватьСписокПомеченных()
//
// Параметры:  
//  Нет
//
// Возвращаемое значение:
//  Список значений, состоящий из помеченных значений из списка значений ТипыЦен
//
// Описание:
//  Формирует список значений, состоящий только из помеченных значений из списка
//  значений ТипыЦен.
//
Функция СформироватьСписокПомеченных()
    
    РезСписок = СоздатьОбъект("СписокЗначений");
    Для Счетчик = 1 По ТипыЦен.РазмерСписка() Цикл
        Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
            РезСписок.ДобавитьЗначение(ТипыЦен.ПолучитьЗначение(Счетчик));
        КонецЕсли;
    КонецЦикла;
    
    Возврат РезСписок;
    
КонецФункции // СформироватьСписокПомеченных()
 
//******************************************************************************
// ОбработкаСпискаТиповЦен(Пометки)
//
// Параметры:  
//  ВклТипы - список значений, содержащий типы цен, которые нужно пометить.
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Зполняет из справочника ТипыЦен список значений ТипыЦен и устанавливает
//  пометки у тех типов, которые находятся в списке значений ВклТипы.
//
Процедура ОбработкаСпискаТиповЦен(ВклТипы)
    
    // очистим список
    ТипыЦен.УдалитьВсе();
    
    // перезаполним список из справочника
    СпрТипыЦен = СоздатьОбъект("Справочник.ТипыЦен");
    СпрТипыЦен.ВыбратьЭлементы();
    Пока СпрТипыЦен.ПолучитьЭлемент() = 1 Цикл
        ТипыЦен.ДобавитьЗначение(СпрТипыЦен.ТекущийЭлемент());
    КонецЦикла;
    
    // проставим пометки
    Для Счетчик = 1 По ВклТипы.РазмерСписка() Цикл
        Поз = ТипыЦен.НайтиЗначение(ВклТипы.ПолучитьЗначение(Счетчик));
        Если Поз > 0 Тогда
            ТипыЦен.Пометка(Поз, 1);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры // ОбработкаСпискаТиповЦен()
 
//******************************************************************************                                                    
// РасшифровкаОбновить(Обновить)
//
// Параметры:
//  Обновить =     1 - нажата кнопка "Обновить"
//                2 - нажата кнопка "Настройка"    
//
// Возвращаемое значение:  
//    Расшифровка (список значений)
//
// Вызывается из формул элементов диалога:
//  из таблицы, кнопки "Обновить" и "Настройка"
//
// Описание:  
//    функция для стандартного механизма кнопок ""Обновить" и "Настройка""
//  помещает значение параметра в список Расшифровка  и возвращает этот список
//
Функция РасшифровкаОбновить(Обновить)  
    
    Расшифровка.Установить("Обновить", Обновить);
    Возврат Расшифровка;            
    
КонецФункции //РасшифровкаОбновить()  
 
//чиа 13062017
Процедура ВыбратьФайл()
    
    Каталог = "";
     
    Если ФС.ВыбратьФайл(0,ВыбранныйФайл,Каталог, "Выберите Файл", "Excel (*.xls)|*.xls", "xls") = 1 Тогда
        ВыбранныйФайл = Каталог + ВыбранныйФайл; //"\\Sr-hyperv-kz2\обмен на неделю\Гриценко\cost.xls"
    КонецЕсли;        
    
КонецПроцедуры   //ВыбратьФайл загрузка
// чиа 13062017 оконч
 
//******************************************************************************
// Процедура Сформировать(ЗакрытьДиалог=0)
//
// Параметры:
//   ЗакрытьДиалог - флаг того, что после формирования отчета надо закрыть диалог    
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//   кнопки "Сформировать" и "ОК"
//
// Описание:
//    Запускает печать прайс-листа.
//
Процедура Сформировать(ЗакрытьДиалог=0)
    
    сообщить("Начало выгрузки: " + ТекущееВремя()); //чиа 31052017
    
    // хоть одна цена в списке цен должна быть выбрана
    ЕстьПомеченые    = 0;
    Для СчетчикЦикла = 1 По ТипыЦен.РазмерСписка() Цикл
        Если ТипыЦен.Пометка(СчетчикЦикла) = 1 Тогда
            ЕстьПомеченые    = 1;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если ЕстьПомеченые = 0 Тогда
        Предупреждение("Не выбрано ни одного типа цены", 60);
        Возврат;
    КонецЕсли;
    
    Если (ТипЗначенияСтр(ИсхТабл) <> "Таблица") ИЛИ (Обновить = 0) Тогда
           ИсхТабл = СоздатьОбъект("Таблица");
    Иначе
         ИсхТабл.Очистить();
    КонецЕсли;      
                    
       ИсхТабл.ИсходнаяТаблица( "Таблица" );
    
    Расшифровка = СоздатьОбъект("СписокЗначений");
    Путь     = "";
    ИмяФайла = "";
    РасположениеФайла(Путь,ИмяФайла);
    ФайлОтчета = Путь + ИмяФайла;
    Расшифровка.Установить("Отчет", ?(ПустоеЗначение(ФайлОтчета) = 1,"ПечатьПрайса", ФайлОтчета));
    
    // Все настройки помещаем в список
    Расшифровка.Установить("ДатаОтчета",      ДатаОтчета);
    Расшифровка.Установить("ВыбТМЦ",          ВыбТМЦ);
    Расшифровка.Установить("ПоНаличию" ,      ПоНаличию);
    Расшифровка.Установить("ВидРазделителя",  ВидРазделителя);
    Расшифровка.Установить("ВыбРазделитель1", ВыбРазделитель1);
    Расшифровка.Установить("ВыбРазделитель2", ВыбРазделитель2);
    Расшифровка.Установить("ВыбРазделитель3", ВыбРазделитель3);
    Расшифровка.Установить("Склад",           Склад);
    Расшифровка.Установить("ВариантВключенияВпрайс", ВариантВключенияВпрайс);
    
    Расшифровка.Установить("ТипыЦен",         СформироватьСписокПомеченных());
    
    глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
    
    // Запомним МФ только если он задан
    Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
        Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);  
    КонецЕсли;
 
    // Заголовок отчета  
    
    //30032017 чиа для сайта не надо заголовки *****
    
    ////ИсхТабл.ВывестиСекцию("Кнопки");
    НачПовтСекц = ИсхТабл.ВысотаСекции("Кнопки");
    ////
    ////ОсновнаяФирма        = глЗначениеПоУмолчанию("ОсновнаяФирма");
    ////
    ////НаименованиеФирмы    = СокрЛП(ОсновнаяФирма.ЮрЛицо.ПолнНаименование);
    ////ИсхТабл.ВывестиСекцию("Заголовок");
    ////НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("Заголовок");
    ////
    ////ДопЗаголовок = "";
    ////
    ////Если ПустоеЗначение(ОсновнаяФирма.ЮрЛицо.ЮрАдрес) = 0 Тогда
    ////    ДопЗаголовок    = "Адрес: "+ СокрЛП(ОсновнаяФирма.ЮрЛицо.ЮрАдрес);
    ////КонецЕсли;
    ////
    ////Если ПустоеЗначение(ОсновнаяФирма.ЮрЛицо.Телефоны) = 0 Тогда
    ////    ДопЗаголовок    = ДопЗаголовок + РазделительСтрок + "Телефоны: "+ СокрЛП(ОсновнаяФирма.ЮрЛицо.Телефоны);
    ////КонецЕсли;
    ////
    ////Если ПустоеЗначение(ОсновнаяФирма.ЭлПочта) = 0 Тогда
    ////    ДопЗаголовок    = ДопЗаголовок + РазделительСтрок + "E-mail: " + СокрЛП(ОсновнаяФирма.ЭлПочта);
    ////КонецЕсли;
    ////
    ////Если ПустоеЗначение(ДопЗаголовок) = 0 Тогда
    ////    ИсхТабл.ВывестиСекцию("ДопЗаголовок");
    ////    НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("ДопЗаголовок");
    ////КонецЕсли;
    ////
    ////ИсхТабл.ВывестиСекцию("ДатаПрайса");
    ////НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("ДатаПрайса");  
    
    //30032017 чиа для сайта не надо заголовки *****
    
    ИсхТабл.ВывестиСекцию("ШапкаТаблицы|Название");
    КонПовтСекции = НачПовтСекц + ИсхТабл.ВысотаСекции("ШапкаТаблицы");
    ИсхТабл.ПовторятьПриПечатиСтроки(НачПовтСекц + 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 Тогда
                            ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|Цена");
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЕсли;
            
 
            //*КЕИ@Джемини, 071009 16:22
            //            Наименование = ТекЭлем.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТекЭлем.Артикул), "");
            Наименование = ТекЭлем.ПолнНаименование;
            ///КЕИ@Джемини, 071009 16:22
 
            ПечКод = ТекЭлем.код;
            ПечАртикул = ТекЭлем.Артикул;
            ПечАртикулИЭК = ТекЭлем.АртикулИЭК;
            ИсхТабл.ВывестиСекцию("Номенклатура|Название");
            
            Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
                Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
                    ТекТип = ТипыЦен.ПолучитьЗначение(Счетчик);
                    
                    Если ТекТип.Рассчитывается = 1 Тогда
                        ИспТип = ТекТип.БазовыйТипЦен;
                    Иначе
                        ИспТип = ТекТип;
                    КонецЕсли;
                    // поищем тип в таблице
                    Поз = 0;
                    Если ТаблицаЦен.НайтиЗначение(ИспТип, Поз, "Тип") = 1 Тогда
                        ТаблицаЦен.ПолучитьСтрокуПоНомеру(Поз);
                        
                        Цена    = ТаблицаЦен.Цена;
                        Единица = ТаблицаЦен.Единица;
                        
                        Если ТекТип.Рассчитывается = 1 Тогда
                            // нужно пересчитать цену
                            Цена    = глПересчет(Цена, ТаблицаЦен.Валюта, ДатаОтчета, ТекТип.Валюта, ДатаОтчета);
                            Цена    = глОкруглить(Цена * (100 + ТекТип.Процент) / 100, ТекТип.ПорядокОкругления);
 
                            //*КЕИ@Джемини, 071009 16:29
                            //                            ПечЦена    = глФРМ(Цена, ТекТип.Валюта);
                            ПечЦена    = Цена;
                            ///КЕИ@Джемини, 071009 16:29
 
                        Иначе
 
                            //*КЕИ@Джемини, 071009 16:30
                            //                            ПечЦена    = глФРМ(Цена, ТаблицаЦен.Валюта);
                            ПечЦена    = Цена;
                            ///КЕИ@Джемини, 071009 16:30
 
                        КонецЕсли;
                        
                        ПечЕдиница = Единица;
                    Иначе
                        ПечЦена = "";
                        ПечЕдиница = ""; //+Zhule, 19-10-2015
                    КонецЕсли;
                    
                    ИсхТабл.ПрисоединитьСекцию("Номенклатура|Цена");
                КонецЕсли;
            КонецЦикла;
        Иначе  // ЭтоГруппа() = 1
            
            // Запоминаем текущую группу
            ТекущаяГруппа = ТекЭлем;
            
            Наименование = ТекЭлем.Наименование;
            ИсхТабл.ВывестиСекцию("Группа" + Уровень + "|Название");
            
            Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
                Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
                    ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|Цена");
                КонецЕсли;
            КонецЦикла;
            ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|ПравГраница");
            
        КонецЕсли; // ТекЭлем.ЭтоГруппа() = 0  
        
    КонецЦикла;
    
    // подвал отчета
    ИсхТабл.ВывестиСекцию("Подвал|Название");
    Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
        Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
            ИсхТабл.ПрисоединитьСекцию("Подвал|Цена");
        КонецЕсли;
    КонецЦикла;
    
    // покажем таблицу
    ИсхТабл.ОбластьПечати(3);
    ИсхТабл.Опции(0,0,0,0,"ПечатьПрайса", "ПечатьПрайса");
    ИсхТабл.ТолькоПросмотр(1);
    ИсхТабл.Показать("Печать прайс-листа","");
    
    // 30052017 чиа запишем таблицу в ексель *****  нач
    Парам = СоздатьОбъект("СписокЗначений");
    Парам.ДобавитьЗначение(ВыбранныйФайл, "ПутьКФайлу");   //"\\Sr-hyperv-kz2\обмен на неделю\Гриценко\cost.xls", "ПутьКФайлу");
    ОткрытьФорму ("Отчет",Парам,КаталогИБ () + "ExtForms/Быстрое сохранение mxl в xls.ert");
    // 30052017 чиа запишем таблицу в ексель *****  оконч
    
    Если (Обновить = 2) или (ЗакрытьДиалог=1) Тогда
        СтрокаДействийФормы = "#Закрыть";
    КонецЕсли;
    
    сообщить("Окончание выгрузки: " + ТекущееВремя()); //чиа 31052017  
 
    //----чиа 23062017 выгружаю на сайт нач  
    Если ПризнакФайлСразуНаСайт = 1 Тогда
            
        спПараметров = СоздатьОбъект("СписокЗначений");
        спПараметров.ДобавитьЗначение(АдресСервераФТП,"АдресСервера");
        спПараметров.ДобавитьЗначение(ЛогинФТП,"Логин");
        спПараметров.ДобавитьЗначение(ПарольФТП,"Пароль");
        спПараметров.ДобавитьЗначение(КаталогЛокальный,"КаталогЛокальный");//в этот каталог будут скопированы все файлы по маске или из него ...
        спПараметров.ДобавитьЗначение(2,"Направление");
        спПараметров.ДобавитьЗначение("*.xls","МаскаФайлов");
        //сообщить("каталог обработки   " + КаталогИб()+"ExtForms\FTP.ert");
        Если фс.СуществуетФайл(КаталогИб()+"ExtForms\FTP.ert")=1 Тогда  
            
            ОткрытьФорму("Отчет",спПараметров,КаталогИб()+"ExtForms\FTP.ert");    
        КонецЕсли;
    КонецЕсли;  
    
     //----чиа 23062017 выгружаю на сайт оконч
    
 
КонецПроцедуры // Сформировать()
 
//******************************************************************************
// Сдвиг(Направление)
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//        
// Вызывается из формул диалога:
//  по кнопкам со стрелочками "вверх" или "Вниз"
//
// Описание:
// Сдвигает текущую строку списка цен в заданном направлении.  
//
Процедура Сдвиг(Направление)
    ТекСтрока = ТипыЦен.ТекущаяСтрока();
    
    Если ТекСтрока > 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);
        КонецЕсли;
    
    Иначе      
        Форма.ИспользоватьСлой(Форма.Закладки.ПолучитьЗначение(ТекСтрока));
    КонецЕсли;
    
КонецПроцедуры // УправлениеДиалогом()
 
//******************************************************************************
// Предопределенная процедура
//
Процедура ВводНового()
    
    УправлениеДиалогом();
    ПерерисовкаНазванийЗакладок();
    ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");
    
    // восстановим из настройки пометки у типов цен
    ОбработкаСпискаТиповЦен(СформироватьСписокПомеченных());
    
КонецПроцедуры // ВводНового()
 
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии(ФлагЧтенияНастройки)
    Перем СписокПомеченных;
 
     //чиа 28062017  
    Если (ИмяПользователя() = "РоботНаСайт") Тогда
            ПризнакФайлСразуНаСайт = 0; //21072017
     Иначе
            ПризнакФайлСразуНаСайт = 0;
    КонецЕсли;
    
    БазаНанопро = 0;  //Если база нанопро ,то другой склад и другое имя выгружаемого файла
    Фирмаа = СоздатьОбъект("Справочник.Фирмы");
    Если Фирмаа.НайтиПоКоду("00002") = 1 Тогда
        Если СтрЧислоВхождений(НРег(Фирмаа.ТекущийЭлемент().Наименование), "нано") <> 0 Тогда
            БазаНанопро = 1;    
        КонецЕсли;
    ИначеЕсли Фирмаа.НайтиПоКоду("00004") = 1  Тогда
        Если СтрЧислоВхождений(НРег(Фирмаа.ТекущийЭлемент().Наименование), "джемини") <> 0 Тогда
            БазаНанопро = 0;    
        КонецЕсли;
    Иначе
        Сообщить("Внимание, обработка работает только с базой Нанопро или Джемини!!!");
        СтатусВозврата(0);
        Возврат;        
    КонецЕсли;
    //чиа 28062017
 
    
    Если глФлагРасшифровки = 1 Тогда  
        Обновить = глОбновить;
        
        // Восстанавливаем настройки из списка
        ДатаОтчета                = глРасшифровка.Получить("ДатаОтчета");
        ВыбТМЦ                    = глРасшифровка.Получить("ВыбТМЦ");
        ПоНаличию                = глРасшифровка.Получить("ПоНаличию");
        ВидРазделителя            = глРасшифровка.Получить("ВидРазделителя");
        ВыбРазделитель1            = глРасшифровка.Получить("ВыбРазделитель1");
        ВыбРазделитель2            = глРасшифровка.Получить("ВыбРазделитель2");
        ВыбРазделитель3            = глРасшифровка.Получить("ВыбРазделитель3");
        Склад                   = глРасшифровка.Получить("Склад");
        ВариантВключенияВпрайс    = глРасшифровка.Получить("ВариантВключенияВпрайс");
        
        ВремТипыЦен             = глРасшифровка.Получить("ТипыЦен");
        ОбработкаСпискаТиповЦен(ВремТипыЦен);
 
        
        Если ТипЗначенияСтр(глРасшифровка.Получить("ТаблицаМФ"))="ТаблицаЗначений" Тогда
            ТаблицаМФ.Загрузить(глРасшифровка.Получить("ТаблицаМФ"));
        КонецЕсли;
         
        Если Обновить <> 0 Тогда
            ИсхТабл = глТаблица;
        КонецЕсли;            
        
        Если Обновить <> 2 Тогда
            Сформировать();
            СтатусВозврата(0);
            Возврат;        
        КонецЕсли;
    Иначе
        Обновить = 0;
                            
        ВремТипыЦен = СоздатьОбъект("СписокЗначений");  
        Если ФлагЧтенияНастройки = 1 Тогда
            // формируем список, содержащий типы цен с пометками
            ВремТипыЦен = СформироватьСписокПомеченных();
        КонецЕсли;
        
        Если ПустоеЗначение(ДатаОтчета) = 1 Тогда
            ДатаОтчета = РабочаяДата();
        КонецЕсли;
        
        Если ПустоеЗначение(ВариантВключенияВпрайс) = 1 Тогда
            ВариантВключенияВпрайс = 1;
        КонецЕсли;
        
    КонецЕсли;
    
    // установка видимости колонок ТЗ множественного фильтра
    ТаблицаМФ.ВидимостьКолонки("Тип",0);
    ТаблицаМФ.ВидимостьКолонки("Вид",0);
    ТаблицаМФ.ВидимостьКолонки("СписокЭлементов",0);          
    ТаблицаМФ.ВидимостьКолонки("ТипМФ",0);
    ТаблицаМФ.ВидимостьКолонки("ИмяПеременной",0);
    ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");
    
    УправлениеДиалогом();
    
    //28062017 чиа  
    Если БазаНанопро = 1 Тогда
    
        Складд = СоздатьОбъект("Справочник.Склады");
        Если Складд.НайтиПоКоду("00001") = 1 Тогда
            ВыбСклад = Складд.ТекущийЭлемент();
        КонецЕсли;
        ИмяФайлаОстатки = "cost.xls";  
    Иначе
        //надо склад 3 и 4  имя ostatki_ge.xls
        Складд = СоздатьОбъект("Справочник.Склады");
        Если Складд.НайтиПоКоду("00003") = 1 Тогда
            ВыбСклад = Складд.ТекущийЭлемент();
        КонецЕсли;
        
        ИмяФайлаОстатки = "cost_ge.xls";  
    КонецЕсли;
    //чиа нов - создаю, и проверяю на наличие - врем.папку для выгрузки на сайт нанопро "D:\TEMP\site\"  18072017 нач
    Если ФС.СуществуетФайл( "D:\TEMP" ) = 0 Тогда
        ФС.СоздатьКаталог( "D:\TEMP" );
    КонецЕсли;    
    Если ФС.СуществуетФайл("D:\TEMP\site\") = 0 Тогда
            ФС.СоздатьКаталог("D:\TEMP\site\");            
    КонецЕсли;
    //чиа нов - создаю, и проверяю на наличие - врем.папку для выгрузки на сайт нанопро "D:\TEMP\site\"  18072017 оконч
    ВыбранныйФайл   = "D:\TEMP\site\" + ИмяФайлаОстатки; //ostatki.xls";  //13062017 чиа
    АдресСервераФТП = "ftp.oll.nichost.ru";
    ЛогинФТП        = "oll_naskladeprice";
    ПарольФТП       = "pXagkS7_";
    
    КаталогЛокальный = "D:\TEMP\site\";
 
    МаскаФайлов = "*.xls";
    //28062017 чиа  
 
    //03072017 чиа  по умолчанию на сайт розничные
    ТипыЦен.Пометка(1, 1);
    //03072017 чиа
    
    ПерерисовкаНазванийЗакладок();
    
    ////ВыбранныйФайл = "\\Sr-hyperv-kz2\обмен на неделю\Гриценко\cost.xls";  //13062017 чиа
    //чиа 03072017  
    Если (ИмяПользователя() = "РоботНаСайт") Тогда
        Сформировать();  
    КонецЕсли;
    //чиа 03072017  
    
    
КонецПроцедуры // ПриОткрытии()
 
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки)
    
    УправлениеДиалогом();
    ПерерисовкаНазванийЗакладок();
    
КонецПроцедуры // ПриВыбореЗнакладки()
 
//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(Значение)  
    
    Если (СписокЭлементовМФ.НайтиЗначение(Значение)=0) Тогда
        Представление=""+Значение;
        Если ТипЗначенияСтр(Значение)="Справочник" Тогда
            Если СокрЛП(Метаданные.Справочник(Значение.Вид()).Владелец) <> "Метаданные" Тогда
                Представление=Представление+" ("+Значение.Владелец+")";
            КонецЕсли;
        КонецЕсли;    
        СписокЭлементовМФ.ДобавитьЗначение(Значение,Представление);
        ТаблицаМФ.ФлВкл=2;
    КонецЕсли;
    
КонецПроцедуры  // ОбработкаПодбора
 
//******************************************************************************
 
// добавим закладки
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Общий,Основной,Кнопки","Основная");
Форма.Закладки.ДобавитьЗначение("Общий,МФ,Кнопки","Множественный фильтр");
Форма.Закладки.ТекущаяСтрока(1);
 
// инициализация переменных множественного фильтра
ТипМФ.УдалитьВсе();
ТипМФ.ДобавитьЗначение("одно из");
ТипМФ.ДобавитьЗначение("все кроме");
 
ТаблицаМФ.УдалитьСтроки();
Пока ТаблицаМФ.КоличествоКолонок()>0 Цикл
    ТаблицаМФ.УдалитьКолонку(1);
КонецЦикла;  
 
ТаблицаМФ.НоваяКолонка("Тип");
ТаблицаМФ.НоваяКолонка("Вид");
ТаблицаМФ.НоваяКолонка("ИмяПеременной");
ТаблицаМФ.НоваяКолонка("СписокЭлементов"); // список элементов, по которым производим фильтрацию
ТаблицаМФ.НоваяКолонка("ТипМФ"); // текущая строка списка ТипМФ
ТаблицаМФ.НоваяКолонка("ФлВкл","Число",1,,"Вкл",5,,); // фильтр включен ("1" или "0")
ТаблицаМФ.НоваяКолонка("Представление",,,,"Вид фильтра:");
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");
                                                                                 
//                  тип          вид           переменная  название
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Номенклатура", "Номенклатура",  "По номенклатуре");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","ЗначенияСвойств", "Номенклатура",  "По свойствам номенклатуры");
 
ТекСтрокаВТаблице="";

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 04:40 28-08-2017
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1С Программирование и поддержка (1C)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru