Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Вопрос по конфигурированию № 1          
ignsv Подменю пользователя
сообщение 11.12.12, 9:10
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

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




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

Сообщение отредактировал ignsv - 11.12.12, 9:33

Спасибо сказали: TipsyKID, Vofka,

Vofka Подменю пользователя
сообщение 11.12.12, 9:20
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

А откуда информацию для печатной формы брать?

ignsv Подменю пользователя
сообщение 12.12.12, 16:15
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

Мой вариант решения (естественно неоптимальный):

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


2. Сама функция печати
//УТСпециалист +
Функция ПечатьУТСпециалист()
    Попытка
        Проверка = Дата(Год(Дата),2,29);
        КолДнейВГоду = 366;
    Исключение
        КолДнейВГоду = 365;
    КонецПопытки;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЗакупкиОбороты.Номенклатура.Родитель КАК Группа,
    |    ЗакупкиОбороты.Номенклатура КАК Номенклатура,
    |    ЗакупкиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |    СУММА(ЗакупкиОбороты.КоличествоОборот) КАК КоличествоОборот,
    |    ЗакупкиОбороты.ДокументЗакупки КАК ДокументЗакупки
    |ИЗ
    |    РегистрНакопления.Закупки.Обороты(
    |            &Д1,
    |            &Д2,
    |            ,
    |            Номенклатура В (&спНоменклатура)
    |                И ХарактеристикаНоменклатуры В (&спХарактеристика)) КАК ЗакупкиОбороты
    |
    |СГРУППИРОВАТЬ ПО
    |    ЗакупкиОбороты.Номенклатура,
    |    ЗакупкиОбороты.ХарактеристикаНоменклатуры,
    |    ЗакупкиОбороты.Номенклатура.Родитель,
    |    ЗакупкиОбороты.ДокументЗакупки
    |ИТОГИ
    |    СУММА(КоличествоОборот),
    |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДокументЗакупки)
    |ПО
    |    Группа,
    |    Номенклатура,
    |    ХарактеристикаНоменклатуры";
    
    ДатаКон =  Дата - (24*60*60);
    ДатаНач = ДатаКон - (КолДнейВГоду*24*60*60);
    Запрос.УстановитьПараметр("Д1", ДатаНач);    
    Запрос.УстановитьПараметр("Д2", ДатаКон);
    Запрос.УстановитьПараметр("спНоменклатура", Товары.ВыгрузитьКолонку("Номенклатура"));
    Запрос.УстановитьПараметр("спХарактеристика",Товары.ВыгрузитьКолонку("ХарактеристикаНоменклатуры"));
    Результат = Запрос.Выполнить();
    ВыборкаНоменклатураРодитель = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "УТСпециалист";
    Макет       = ПолучитьМакет("УТСпециалист");
    ОбластьНадШапка = Макет.ПолучитьОбласть("НадШапкой");
    ТабДокумент.Вывести(ОбластьНадШапка);
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ТабДокумент.Вывести(ОбластьШапка);
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрокаРазделитель = Макет.ПолучитьОбласть("СтрокаРазделитель");
    КодЯзыкаПечать = Локализация.ПолучитьЯзыкФормированияПечатныхФорм(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "РежимФормированияПечатныхФорм"));
    Макет.КодЯзыкаМакета = КодЯзыкаПечать;
    Пока ВыборкаНоменклатураРодитель.Следующий() Цикл
        // Вставить обработку выборки ВыборкаНоменклатураРодитель
         ГруппаВыведена = ЛОЖЬ;
        ВыборкаНоменклатура = ВыборкаНоменклатураРодитель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

    Возврат ТабДокумент;

КонецФункции // ПечатьПоступлениеТоваров()
//УТ_Специалист -


3.
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
//УТ Специалист
        .....
    ИначеЕсли ИмяМакета = "УТ_Специалист" Тогда
        ТабДокумент = ПечатьУТСпециалист();
    КонецЕсли;


4
ПланыВидовХарактеристик ПраваПользователей
Добавить предопределенный: ПечатьУТ_Специалист – тип булево



Vofka Подменю пользователя
сообщение 12.12.12, 16:18
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Т.е. вы эти параметры получали путем парсинга наименования характеристики?

svinuk Подменю пользователя
сообщение 23.12.12, 18:14
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 29
Спасибо сказали: 9 раз
Рейтинг: 0

ignsv , что смущает на первый взгляд:
1. много кода. Лишнего. Ненужного. Проще в запросе все забабахать. В идеале один запрос и в одном цикле вывод в макет. С запросом получится строк 150 кода
2. По поводу парсинга наименования это не правильно. Характеристики предназначены чтоб ими пользовались. Нужно было в ПВХ СвойстваОбъектов добавить предопределенные элементы ГОСТ и Марка. Потом в Характеристике заполнить эти значения ив печатной форме соединять характеристику с её свойствами(регистром сведений ЗначенияСвойствОбъектов)
3. Печатная форма должна быть внешней. Это довольно таки грубая ошибка. Правим типовую там гдк этого можно нужно избежать
4. Код типа "24*60*60" тоже нельзя писать. Нужно с модуле объявиться переменную. например СУТКИ....и внизу модуля её инициализировать. Сутки = 24 * 60 * 60
5. Не тот регистр взяли. В задаче написано о отгрузках, т.е продажах. Надо было брать регистр ПРОДАЖИ
6. По поводу птички в настройках пользователя. Тоже все не правильно. В процедуре ПЕЧАТЬ достаточно вписать следущий код:

Если НЕ УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), 
                                                                                             "РазрешитьПечатьМоейМегачеткойПечатнойФормы") Тогда
       Возврат Неопределено;
КонецЕсли;

В ТЗ же не писалось что не нужно показывать печатную форму. Просто ограничим доступ к ней и все. Видеть будут все, а печатать смогут только те у кого птичка.

Вродь все.

П.С: на экзамене у Вас бы незачет был. Гарантирую. Сам недавно сдавал и попался как раз этот билет. При менее серьезных ошибках, чем у Вас получил трояк, но сдал. smile.gif



Signature
Не доверяйте лошади с фиолетовыми бровями

Спасибо сказали: ignsv, Lazy, TipsyKID,

ignsv Подменю пользователя
сообщение 24.12.12, 10:33
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

Да, согласен с Вами. Как всегда все делалось на "горячую руку". Характеристики - тут сам знал что не правильно так делать )). Нужно будет еще раз все переделать по Вашим замечаниям.

Vofka Подменю пользователя
сообщение 24.12.12, 10:39
Сообщение #7

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

А зачем ГОСТ и Марку привязывать к характеристике? Почему к элементу справочника номенклатура не привязать?

svinuk Подменю пользователя
сообщение 24.12.12, 14:07
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 29
Спасибо сказали: 9 раз
Рейтинг: 0

Vofka , потому, что марка и ГОСТ являются характеристиками номенклатуры. Не корректно привязывать их к номенклатуре по одной простой причине - номенклатура "Лист 35мм" может быть нескольких марок и ГОСТов. И тогда в приходных документах не получится отобразить приход одной и той же номенклатуры но с разными характеристиками. Придется добавлять элемент в справочник номенклатура и задавать ему новые характеристики, что более трудозатратнее и неправильно.


Signature
Не доверяйте лошади с фиолетовыми бровями

Спасибо сказали: Vofka,

TipsyKID Подменю пользователя
сообщение 17.06.13, 9:33
Сообщение #9

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Попался этот билет - сдал.

Но поставили один минус, причем жирный : ГОСТ и МАРКА это НЕ свойства характеристики номенклатуры. Следует привязывать к номенклатуре как свойство объекта. ( в условии задачи не сказано что предприятие ведет учет по характеристикам т.е. Vofka был прав). А так все что говорил svinuk верно.

Сообщение отредактировал TipsyKID - 17.06.13, 9:34


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.24, 0:14
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!