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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: [1С 7.7] азы программирования(создание элементарного отчета)  (Прочитано 88392 раз)
0 Пользователей и 1 Гость смотрят эту тему.
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« : 29-09-2010 04:39 » 

Я только начинаю обучаться программированию в 1с. Но так и не смог найти самый простешеи отчет, всегда попадались с наворотами, откуда новичку трудно выявить алгоритм построения. А хотелось бы начать с травиального и постепенно переходить на более сложные конструкци.

Помогите создать небольшой  отчетик: по нажатию кнопки "сформировать" выводилась таблица с ФИО сотрудников + нужно, чтобы можно было сделать выборку по полу.

И, если не трудно, то еще объясните конструкцию модуля(т.е какое действие что делает)...Я немного алгоритм понимать начал, но еще раз закрепить не помешает...

« Последнее редактирование: 29-09-2010 05:02 от Алексей1153++ » Записан
Kivals
Команда клуба

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

WWW
« Ответ #1 : 29-09-2010 04:58 » 

В плане структуры программы 1С 7.7 построена несколько не логично. Вот несколько вспомнившихся фактов:
  • реквизиты, добавленные на форму, доступны в модуле просто по идентификатору. При этом если в модуле есть еще и переменная с таким именем - ошибки это не вызовет, но работа будет трудно предсказуема
  • обработка событий формы происходит процедурами с задаными названиями (предопределенными процедурами), в то время как события реквизитов формы (только одно, какое именно - зависит от типа) прописываются в свойствах реквизита.
  • методы объектов разных типов, выполняющих одно и то же действие, называются по-разному
В этом плане 8.Х построена намного лучше.

Внимание вопрос: о какой платформе ты говоришь?
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #2 : 29-09-2010 05:01 » 

7.7
Записан
Kivals
Команда клуба

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

WWW
« Ответ #3 : 29-09-2010 05:42 » 

Пойдем по порядку:
Удалось создать отчет?
Удалось разместить реквизит для выбора пола на форме?
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #4 : 29-09-2010 05:49 » 

до риквизита особо дело не дошло...я никак не создам модуль...не разобрался еще точно что за чем идет...когда в ход идет создание секций...

Добавлено через 8 минут и 32 секунды:
Прецедура Сформировать()

сотр = СоздатьОбъект("Справочник.Сотрудники");

Таб = СоздатьОбъект(ТаблицаЗначений);

Таб.НоаваяКолонка("ФИО");
Таб.НоваяКолонка("Должность");
Таб.НоваяКолонка("Подразделение");
Таб.НоваяКолонка("Код");

//--------------------
Таб.Код=сотр.Код;
Таб.Фио=сотр.Наименование;
Таб.Подразделение=сотр.Подразделение.Получить();
Таб.Должность=сотр.Должность.Получть();




дальше я пока запнулся
« Последнее редактирование: 29-09-2010 05:58 от hiller » Записан
kiser
Участник

by
Offline Offline

« Ответ #5 : 29-09-2010 07:02 » 

Прецедура Сформировать()
сотр = СоздатьОбъект("Справочник.Сотрудники");
Таб = СоздатьОбъект(ТаблицаЗначений);
Таб.НоаваяКолонка("ФИО");
Таб.НоваяКолонка("Должность");
Таб.НоваяКолонка("Подразделение");
Таб.НоваяКолонка("Код");
//--------------------
Таб.Код=сотр.Код;
Таб.Фио=сотр.Наименование;
Таб.Подразделение=сотр.Подразделение.Получить();
Таб.Должность=сотр.Должность.Получть();
дальше я пока запнулся
вроде так ты ничего не выбрал
чтоб почитать всех сотрудников из справочника нужно так:

Код:
Прецедура Сформировать()
Таб = СоздатьОбъект("ТаблицаЗначений");
//не забываем указывать тип и размерность
Таб.НоаваяКолонка("ФИО,"Строка",50,0);
Таб.НоваяКолонка("Должность","Строка",15,0);
Таб.НоваяКолонка("Подразделение","Спрвочник.Подразделение");
Таб.НоваяКолонка("Код","Число",5,0);

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

//Теперь добавление в таблицу значений
Таб.НоваяСтрока(); //не забываем про это
        Таб.Код=сотр.Код;
        Таб.Фио=сотр.Наименование;
        //далее периодические реквизиты получаем по дате,
        //где ДатаДок – можно указать на форме отчета или создать переменную.
        Таб.Подразделение=сотр.Подразделение.Получить(ДатаДок);
        Таб.Должность=сотр.Должность.Получить(ДатаДок);
КонецЦикла;

КонецПроцедуры;
« Последнее редактирование: 29-09-2010 07:05 от kiser » Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #6 : 29-09-2010 07:29 » 

с этим, вроде, разобрался, а как теперь правильно передать значение из этой ТаблицыЗначений в таблицу отчета, которая будет открываться после нажатия кнопки "Сформировать"?

Добавлено через 6 минут и 46 секунд:
нужно ли как-то объявлять имя и поля этой таблицы и когда объявлять секции?
« Последнее редактирование: 29-09-2010 07:36 от hiller » Записан
kiser
Участник

by
Offline Offline

« Ответ #7 : 29-09-2010 07:54 » 

да нужно, но тут лучше смотреть на примерах в готовых отчетах или документах.
В таблицах глянь как они оформляются и выделяются секции, а в модуле смотри как формируется таблица
в коде ищи
Код:
Таб=СоздатьОбъект("Таблица");
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #8 : 29-09-2010 09:42 » 


выводит ошибку почему-то:

Таб.НоваяКолонка("ФИО", "Строка", 50,1);
{Отчет.новый4.Форма.Модуль(6)}: после агрегатного объекта не обнаружено(НоваяКолонка)
Записан
Kivals
Команда клуба

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

WWW
« Ответ #9 : 29-09-2010 09:48 » 

В твоем случае должно быть
Код:
Таб = СоздатьОбъект("ТаблицаЗначений");
вместо
Код:
Таб = СоздатьОбъект(ТаблицаЗначений);

Попробуй сделать отчет с использованием запроса, а сам запрос - с помощью конструктора запроса (Меню: Конструкторы - Запрос...). Он тебе нарисует и запрос, и обход по нему, и вывод на экран - а после почитаешь текст и задашь вопросы.
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #10 : 30-09-2010 09:57 » 

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

я отчет делал через запрос....предполагаю, что код будет выглядеть примерно так:

Если ВыбПол = 1   Тогда
ТекстЗапроса = ТекстЗапроса + РазделительСтрок + "Условие ( )" ;
КонецЕсли;

Добавлено через 44 секунды:
что в скобках долно быть?
« Последнее редактирование: 30-09-2010 09:58 от hiller » Записан
Kivals
Команда клуба

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

WWW
« Ответ #11 : 30-09-2010 13:32 » 

Во-первых в кавычках должна быть ";" после скобок,
во-вторых с радиокнопками лучше разбирайся позже (они достаточно плохо реализованы в 7.7)
ну и лучше выбор пола задай тем же типом, что у тебя реквизит в справочнике (скорее всего - перечисление)
Тогда (если ты реквизит назовешь ВыбПол) то код будет такой:
Код:
Если ВыбПол.Выбран()=1 Тогда
    ТекстЗапроса = ТекстЗапроса + " Условие(Пол=ВыбПол);"; // РазделительСтрок на выполнение не влияет
КонецЕсли;

И вообще - опубликуй свой запрос (легче будет пояснять на живом коде)
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #12 : 01-10-2010 07:27 » 

Код:
Процедура Сотрудники()

Перем Запрос, ТекстЗапроса, Таб;

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

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

Таб.ТолькоПросмотр(1);
Таб.Показать("Сотрудники", "");
 

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

 КонецПроцедуры

Добавлено через 3 минуты и 54 секунды:
теперь думаю как можно в конце таблицы вывести поле ИТОГО с колличеством найденых сотрудников и создать флажок, чтобы если флажок=1 выводились все сотрудники(штатные, физлица, уволенные), а если флажок=0, то выводились только штатные

как это реализовать в том случае, если создается ТаблицаЗначений, я нашел....а вот как это сделать обойдясь одними запросами? такое вообще можно реализовать?

Добавлено через 2 дня, 23 часа, 39 минут и 28 секунд:
с ИТОГО тоже разобрался, осталось с флажком уволенных
« Последнее редактирование: 04-10-2010 09:53 от hiller » Записан
Kivals
Команда клуба

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

WWW
« Ответ #13 : 04-10-2010 14:44 » 

hiller, А какой признак уволенности сотрудника? Установлена Дата увольнения или что-то другое?
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #14 : 05-10-2010 05:16 » 

hiller, А какой признак уволенности сотрудника? Установлена Дата увольнения или что-то другое?

в справочнике "Сотрудники" есть колонка "Состояние" (забивается  в сотрудники/места работы) ...там и прописывается какой он: штатный, физлицо, внешний или уволенный

пишется так:
Штатный сотрудник с 00.00.2000
или
Сотрудник уволен 00.00.2000

Добавлено через 26 минут и 26 секунд:
хотя зачем такие сложности?, как сделать чтобы он  просто выводил всех штатных сотрудников по умолчанию, без каких либо флажковых кнопок?
я так понимаю, что это как-то связано с "Справочник.Сотрдудники.СостояниеФизЛица"

Добавлено через 1 час, 23 минуты и 42 секунды:
и вот еще: если из языка компьютера на наш родной язык перевести:

ПустоеЗначение(сотр.СостояниеФизЛица.Получить(ДатаА))<>1

что получится?
« Последнее редактирование: 05-10-2010 07:09 от hiller » Записан
Kivals
Команда клуба

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

WWW
« Ответ #15 : 05-10-2010 08:17 » 

и вот еще: если из языка компьютера на наш родной язык перевести:

ПустоеЗначение(сотр.СостояниеФизЛица.Получить(ДатаА))<>1

что получится?
"Заполнено состояние на дату ДатаА"

С периодическими реквизитами в запросах сложности Жаль
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #16 : 05-10-2010 12:01 » 

я смотрю, можно списки нужныхколонок можно оформить с помощью элемента диалга "Список"

хочу попробывать создать два списка: в одном множество колонок, а в другом те, которые я выберу из первого...

первое на чем встрял: Как заполнить первый список интерисующими меня параметрами?
Записан
Kivals
Команда клуба

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

WWW
« Ответ #17 : 05-10-2010 13:39 » 

Смотри в синтакс-помощнике методы работы со значениями типа СписокЗначений.
Заполнять в предопределенной процедуре ПриОткрытии() - см. там же
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #18 : 06-10-2010 09:44 » 

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

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

WWW
« Ответ #19 : 06-10-2010 09:59 » 

hiller, тяжело тебе без синтакс-помощника придется...
С portable версиями не работал - а что значит "нет"? Синтакс-помощник - это набор файлов *.als в каталогах программы / базы.
Можешь где-то установить обычную версию и скопировать оттуда эти файлы в каталог базы, на которой ты тренируешься. Дальше вызывается по Ctrl+F1
Записан
hiller
Интересующийся

ru
Offline Offline
Пол: Мужской
жить тоже опасно, говорят это смертельно


« Ответ #20 : 07-10-2010 05:19 » 

а ЖКК не тоже самое будет?, такую я нашел

Добавлено через 3 часа, 40 минут и 31 секунду:
а как реализовать такое:
 нажав на кнопку"Цеха" открывается справочник цеха(лежит он тут: Справочники.ИК_Цеха)?

Добавлено через 20 часов, 16 минут и 24 секунды:
все, спасибо, не надо, сделал

Добавлено через 1 час, 6 минут и 13 секунд:
новай проблема:хочу, чтобы выбранные элементы из справочника попадали в список "Цеха"...пытаюсь через ОбработкаПодбора,но, пока, ничего не выходит...как это сделать правильно?

Добавлено через 14 минут и 5 секунд:
все сделал...вошебный форум(мучаешься-мучаешься, заходишь в тупик - отписываешься сдесь и все сразу получается)Ага

Добавлено через 3 дня, 3 часа, 1 минуту и 40 секунд:
еще такой вопрос:

хочу, чтобы при нажатии первой кнопки открывался список с цехами(справочник.ИК_Цеха), из которого я добавляю нужные цеха в первый список(с идентификатором "подбор")
при нажатии второй кнопки должен открываться список с профессиями(справочник.Должности), из которого я добавляю нужные долности в другой список(с идентификатором "долности")

у меня пока только получается, что какой бы из двух справочников я не открыл, все выбранные из него поля добавляются в первый список, либо во все два одновременно. В чем моя ошибка?


Код:
Процедура Подбор(); 

ОткрытьПодбор("Справочник.ИК_Цеха", "ИК_Цеха");
КонецПроцедуры     
//**************************************************
Процедура Подбор2();


ОткрытьПодбор("Справочник.Должности", "Должности");
КонецПроцедуры           

//**************************************************
Процедура ОбработкаПодбора(Элемент,КонтФормы)
   
Если ПустоеЗначение(Элемент)=0 Тогда
Если Элемент.ЭтоГруппа()=0 Тогда
Если ИК_Цеха.НайтиЗначение(Элемент)=0 Тогда
ИК_Цеха.ДобавитьЗначение(Элемент,""+Элемент+?(Элемент.Наименование = Элемент,""," "));
Иначе
Предупреждение("Цех уже выбран в списке!",10);
КонецЕсли;                                           
КонецЕсли;
КонецЕсли;

//Если ПустоеЗначение(Элемент)=0 Тогда
// Если Элемент.ЭтоГруппа()=0 Тогда
// Если Должности.НайтиЗначение(Элемент)=0 Тогда
// Должности.ДобавитьЗначение(Элемент,""+Элемент+?(Элемент.Наименование = Элемент,""," "));
// Иначе
// Предупреждение("Профессия уже выбрана в списке!",10);
// КонецЕсли;                                           
// КонецЕсли;
// КонецЕсли;  // таким образом  добавляется в оба списка//
         
КонецПроцедуры // ОбработкаПодбора

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

    Процедура ОбработкаПодбора2(ЭЛ,Конт)


Если ПустоеЗначение(ЭЛ)=0 Тогда
Если ЭЛ.ЭтоГруппа()=0 Тогда
Если Должности.НайтиЗначение(ЭЛ)=0 Тогда
Должности.ДобавитьЗначение(ЭЛ.Наименование,"ЭЛ" );
Иначе
Предупреждение("Профессия уже выбрана в списке!",10);
КонецЕсли;                                           
КонецЕсли;
КонецЕсли;
         
КонецПроцедуры   //а так только в первый
 
« Последнее редактирование: 11-10-2010 09:38 от hiller » Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #21 : 06-05-2011 10:36 » 

Приветы форумчанам. Последую наблюдениям предшествинника отпишусь а форуме .... авось и я разберусь )

В программировании 1с новичек, но имею сильное желание вкурить этот язык.
ТЗ следующего рода: необходимо написать отчет,  в котором бы была возможность выбирать перемещения товара из оптовой точки в розничную. Таки
 есть нужда отследить чего мы, кому и в каких колличествах отправляем )
 Решил учиЦо сразу на ТЗ но чуть чуть его упростить, попытался сделать выборку по дате, Склад, СкладКуда (Делал через конструктор) вот что получилось, точнее НЕ получилось.
МБ просветлённые   гуру подскажут, в чем я не прав ? Улыбаюсь Заранее признателен ) 1с 7.7 скуль 2к на w2k3
(click to show)
Код:
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Перемещение = Документ.Перемещение.ТекущийДокумент;
|Склад = Документ.Перемещение.Склад;
|СкладКуда = Документ.Перемещение.СкладКуда;
|Группировка Перемещение упорядочить по Перемещение.Склад, Перемещение.СкладКуда, Перемещение.НомерДок, Перемещение.Фирма, Перемещение.Выгружен, Перемещение.Товар, Перемещение.Цена, Перемещение.Сумма;
|Условие(Склад = ВыбСклад);
|Условие(СкладКуда = ВыбСкладКуда);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

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

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

WWW
« Ответ #22 : 06-05-2011 14:09 » 

KolyaVasya, на первый взляд все Ок -  что не так?
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #23 : 07-05-2011 09:04 » 

Привет, форум и правда волшебный .... все запахало разобрался....
Стопанулся на том что не умею работать со СписокЗначений.
Как написать код чтобы в список значений по нажатию кнопки добавить открывался список товаров, из которого бы можно было добавить товар из Справочники.Номенклатура
Можно описать народ ?  Помогите новичку   Внимание! Говорит и показывает...
Наваял следующее:

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

Но в список добавляются единицы "1"

Записан
RXL
Технический
Администратор

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

WWW
« Ответ #24 : 07-05-2011 09:54 » 

KolyaVasya, не все так считают. Кто сам выполняет работу и только прочит помощи разобраться - тому хорошо, кто хочет халявы - уходит разочарованным.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
KolyaVasya
Участник

ru
Offline Offline

« Ответ #25 : 07-05-2011 10:33 » 

KolyaVasya, не все так считают. Кто сам выполняет работу и только прочит помощи разобраться - тому хорошо, кто хочет халявы - уходит разочарованным.
Так с кнопкой и списком значений то не подскажешь ? Улыбаюсь
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #26 : 07-05-2011 17:21 » 

Не - 1С не моя стезя. Могу только сказать, что 1С и не-1С - примерно одно и тоже, но одно на русском, а другое на английском. Короче, документацию надо смотреть: объекты, их свойства и методы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Модератор

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

WWW
« Ответ #27 : 09-05-2011 20:25 » 

KolyaVasya,


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

Но в список добавляются единицы "1"


Ты можешь объяснить, что здесь написано...
Я читаю, и не понимаю

Список = СоздатьОбъект("СписокЗначений"); Создал Список
Товар = ОткрытьФорму("Справочник.Номенклатура.Наименование",,);
Это из формы я получил (назовем так ссылку на товар и его свойства)
ВыбТовар.ДобавитьЗначение(Товар);
Стоп... стоп.... Что мы здесь делаем. Куда добавляем?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kivals
Команда клуба

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

WWW
« Ответ #28 : 10-05-2011 05:12 » 

KolyaVasya, ага, ты точно перемудрил...
Похоже у тебя ВыбТовар - это список на форме? тогда "Список = СоздатьОбъект("СписокЗначений");" - не нужно.
А "1" добавляется потому, что ОткрытьФорму() "Возвращает: 1 - если действие выполнено, 0 - иначе."
В твоем случае можно использовать либо
Код:
ВвестиЗначение()
либо
Код:
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.Выбрать();
Можно, конечно, и через ОткрытьФорму(), но тогда нужно использовать предопределенную процедуру ОбработкаПодбора()
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #29 : 11-05-2011 05:14 » 

ребят спсб коЭшн )) но форум и правда волшбный, и я давно разобралСо с кнопками сам )
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #30 : 11-05-2011 05:16 » 

код с кнопками выглядит вот так у меня
Код:
Процедура КнДобавить ();
ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",ВыбТовар,1);
КонецПроцедуры
Процедура ОбработкаПодбора(Элемент,ФормаДляПодбора)
ВыбТовар.ДобавитьЗначение (Элемент);
Сообщить (Элемент);
ТекРаз =ВыбТовар.РазмерСписка ();
Сообщить(ТекРаз);
КонецПроцедуры   
// Кнопка Удалить
 Процедура КнУдалить();
        ТекСтр=ВыбТовар.ТекущаяСтрока();     
Если (ТекСтр < 1) Тогда Сообщить ("Сначала выберете значение !!!");
Возврат ;
КонецЕсли;
Сообщить (ТекСтр);
ВыбТовар.УдалитьЗначение(ТекСтр,1);
КонецПроцедуры
//Очистить
   Процедура КнОчистить();
        ТекСтр=ВыбТовар.ТекущаяСтрока();
Сообщить (ТекСтр);
ВыбТовар.УдалитьВсе();
КонецПроцедуры

Просто начал только изучать язык вот иудрю ))
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #31 : 11-05-2011 05:54 » 

Тут ребят новая  нужда возникла....
Этот скрипт работает..., НО ! криво...
1) в общем суть в том что если я в СпискеЗначений  не выбираю значение то отчет формируется по всему периоду и из доков берет только последнею позицию товара....(((((  что не есть гуд.
2) Хотелось бы видеть суммирование по кол-ву и по сумме в таблице. т. е. если товар встречается несколько раз за период хотелось бы чтобы он суммировался по кол-ву и сумме
смотрю в сторону Свернуть("Товар","Количество","Сумма"); но не усею с ней работать... куда вставить в как применить???

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




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

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





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

   Таб.Свернуть ("2","4,5");
{\\CRANKSERVER\DEKALKO\DB\EXTFORMS\222.ERT(70)}: Поле агрегатного объекта не обнаружено (Свернуть)

Непойму что со свернуть не так ? в таблице тоже не ясно как оформить ? НИД ХЕЛП. В секции "перемещение" есть вставки типа "Запрос.ЗначениеУпорядочивания(1,2)" логично было бы предположиить что для значений свернуть () тоже надо какие то индефикаторы, но какие фиг знает погуглил не нашол (( помогите плз
пробовал и так и эдак.... И вертикальные секции создавал, и с кавычками эксперементировал и без короче крутил вертел, выдает ошибку.
   Таб.Свернуть ("2","4,5");
{\\CRANKSERVER\DEKALKO\DB\EXTFORMS\222.ERT(70)}: Поле агрегатного объекта не обнаружено (Свернуть)
« Последнее редактирование: 11-05-2011 12:19 от KolyaVasya » Записан
Kivals
Команда клуба

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

WWW
« Ответ #32 : 11-05-2011 12:12 » 

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

Добавлено через 3 минуты и 47 секунд:
1) в общем суть в том что если я в СпискеЗначений  не выбираю значение то отчет формируется по всему периоду и из доков берет только последнею позицию товара....(((((  что не есть гуд.
По поводу периода - это фича, а не баг Улыбаюсь Просто проверяй перед запросом: Если ПустоеЗначение(ВыбНачПериода)=1 Тогда...
По поводу одного товара: добавь группировку по товару.
Код:
...
|Группировка Перемещение упорядочить по Перемещение.Склад, Перемещение.СкладКуда, Перемещение.НомерДок, Перемещение.Товар, Перемещение.Цена, Перемещение.Сумма, Перемещение.Количество, Перемещение.ДатаДок, Перемещение.Единица;
|Группировка Товар;
...


Добавлено через 3 минуты и 5 секунд:
Да - и сворачивание можно тоже сделать в запросе. Сморти пример:
Код:
	"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Перемещение = Документ.Перемещение.ТекущийДокумент;
|ТМЦ = Документ.Перемещение.ТМЦ;
|Кво = Документ.Перемещение.Кво;
|Функция КвоСумма = Сумма(Кво);
|Группировка Перемещение;
|Группировка ТМЦ;
|"//}}ЗАПРОС
« Последнее редактирование: 11-05-2011 12:19 от Kivals » Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #33 : 11-05-2011 12:36 » 

1)блин спсб )))) Я понял куда рыть целый день потратил на то что перепутал "Таблицу" с "ТаблицейЗначений"
2)С фичей тоже спсб ) даже где то видел подобную проверку ) 
3) НО вот с ТЗ и "перемещения" в макете не понял совсем чего там подправить ? можно поконкретнее ? Например в ячейке где указан товар - у меня в ней вписано <Запрос.ЗначениеУпорядочивания(1,4)> по скольку изначально строил при помощи конструктора дажефиг знает что на что менять. Видно что данные брались  из цикла "Запрос", теперь мы меняем на "ТЗ" соотвественно и запись в ячейке должна выглядеть типа
<ТЗ.ЗначениеУпорядочивания(1,4)> Не понял Правильно понял ?  )
Записан
Kivals
Команда клуба

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

WWW
« Ответ #34 : 11-05-2011 12:45 » 

Должно быть ТЗ.<ИдентификаторПоля>
Идентификаторы полей - это значения группировок и названия функций запроса (могут быть еще и поля - см. справку по методу Выгрузить() запроса), т.е. в твоем случае это будут Перемещение и Товар:
ТЗ.Перемещение
ТЗ.Товар

Если для моего примера - то там будут
ТЗ.Перемещение
ТЗ.ТМЦ
ТЗ.КвоСумма
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #35 : 12-05-2011 08:35 » 

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

     Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Перемещение
Таб.ВывестиСекцию("Перемещение");
КонецЦикла;

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

// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры

как-то так в общем, трабл в том что не выводит в таблицу поля количество и сумма, пишет что
Поле агрегатного объекта не обнаружено (Количество)
Поле агрегатного объекта не обнаружено (Сумма)
В секции "Итогов" в ячейки вбил индефикаторы "ТЗ.Товар","ТЗ.Количество","ТЗ.Сумма"

Немножко по другому сформировал запрос, думал эти поля появятся если явно в запросе указать... ан нет Жаль
запрос выглядеть стал вот так

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


По  "|Группировка Товар;" есть момент небольшой, если список значений пустой  то формируется по периоду, лопатит документы, и находит 3 вида товара одинаковых по названию и по коду (Сигареты лайт, обычные ....)  операторши чтобы не морочиться с и не раздувать номенклатуру пишут по одним кодом. Так вот эти три "перемещения" внутри документа группируются как один товар, НО количество и сумма не сумируюся у сигарет
Пока что идеи кончились что делать и как быть )

Попробовал делать "свернуть" прям в запросе, получается и правда .... ) но суммирует   все подряд и не понятно с чем ))))) хотя если в списке значений только 1 вид товара то все делается просто превосходно )


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

попытка свернуть  в запросе. Не совсем понятно как избавиться от первой строки ? я так понял это строка за весь отчет ? НО тогда почему она вверху ?
Цитата
HПер-14411       37   10   шт.   370   05.01.2011   Склад транзитный (поставщики)   +пр-т Ленина 5 (вино)
Итого:               640          18225         
HПер-14411   Святой Георгий 20,50   17.5   10   шт.   175   05.01.2011   Склад транзитный (поставщики)   +пр-т Ленина 5 (вино)
Итого:   Святой Георгий 20,50              10      175         
HПер-14411   ЛД виолет Superslims 25-50   22.5   10   шт.   225   05.01.2011   Склад транзитный (поставщики)   +пр-т Ленина 5 (вино)
Итого:   ЛД виолет Superslims 25-50              10      225         
HПер-14411   Мальборо 52-00   52   10   шт.   520   05.01.2011   Склад транзитный (поставщики)   +пр-т Ленина 5 (вино)
Итого:   Мальборо 52-00              10      520         
HПер-14411   ЛД Селект Сильвер 24-00   24   10   шт.   240   05.01.2011   Склад транзитный (поставщики)   +пр-т Ленина 5 (вино)

По непонятной причине куда то девается в первой строке "Товар" и в поле колво плюсуется количество всего отчета тоже самое и с суммой, а хотелось бы видет по каждому товару в отдельности ) Подскажите как сделать плз )
« Последнее редактирование: 12-05-2011 09:10 от KolyaVasya » Записан
Kivals
Команда клуба

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

WWW
« Ответ #36 : 12-05-2011 12:28 » 

Первая строка - это итоги по складу, потому там и нету товара
Попробуй добавить в начало запроса "без итогов":
Код:
	|Период с ВыбНачПериода по ВыбКонПериода;
|Без итогов;
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #37 : 16-05-2011 04:49 » 

Первая строка - это итоги по складу, потому там и нету товара
Попробуй добавить в начало запроса "без итогов":
Код:
	|Период с ВыбНачПериода по ВыбКонПериода;
|Без итогов;
В таблице склады записываются в конце строки (обрати внимание на копипаст) а вот куда товар подевался вопрос (((((((((
Записан
Kivals
Команда клуба

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

WWW
« Ответ #38 : 16-05-2011 06:12 » 

Может где-то и ошибка в учете - не заполнена номенклатура в документе
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #39 : 16-05-2011 11:53 » 

Должно быть ТЗ.<ИдентификаторПоля>
Идентификаторы полей - это значения группировок и названия функций запроса (могут быть еще и поля - см. справку по методу Выгрузить() запроса), т.е. в твоем случае это будут Перемещение и Товар:
ТЗ.Перемещение
ТЗ.Товар

Если для моего примера - то там будут
ТЗ.Перемещение
ТЗ.ТМЦ
ТЗ.КвоСумма



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




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

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

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



// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры



































































Добавлено через 32 секунды:
еще одно вложение

* таблица.JPG (188.3 Кб - загружено 903 раз.)
* СКРИН.JPG (231.21 Кб - загружено 968 раз.)
« Последнее редактирование: 16-05-2011 11:53 от KolyaVasya » Записан
Kivals
Команда клуба

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

WWW
« Ответ #40 : 16-05-2011 12:59 » 

Попробуй так (Измененные строки отмечены ">"):
Код:
	ТекстЗапроса = 
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Перемещение = Документ.Перемещение.ТекущийДокумент;
|Склад = Документ.Перемещение.Склад;
|СкладКуда = Документ.Перемещение.СкладКуда;
|Товар = Документ.Перемещение.Товар;
|Единица = Документ.Перемещение.Единица;
> |_Количество = Документ.Перемещение.Количество;
> |_Сумма = Документ.Перемещение.Сумма;
|Группировка Перемещение упорядочить по Перемещение.Товар, Перемещение.Сумма, Перемещение.Количество, Перемещение.Единица; 
|Группировка Товар;
> |Функция Количество = Сумма(_Количество);
> |Функция Сумма = Сумма(_Сумма);
|Условие(Склад = ВыбСклад);
|Условие(СкладКуда = ВыбСкладКуда);
|Условие(Товар в ВыбТовар);
|"//}}ЗАПРОС
;
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #41 : 17-05-2011 06:26 » 

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

* отчет.JPG (163.66 Кб - загружено 943 раз.)
Записан
Kivals
Команда клуба

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

WWW
« Ответ #42 : 17-05-2011 08:23 » 

...строка с непонятными суммами по колонкам ...
Скорее всего это общий итог. Или "Без Итогов;" в запросе,  или еще раз внимательно параметры Выгрузить (там есть про итоги)
... изменить фон и цвет у строки которая указывает группу товара ? ...
Создать еще одну секцию (например, "Группа") и настроить ее как нужно, потом:
Код:
	ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Таб.ВывестиСекцию(?(ТЗ.Товар.ЭтоГруппа()=1,"Группа","Пер"));
КонецЦикла;
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #43 : 17-05-2011 08:32 » 

Код:
так и сделал, только к группировке товар добавил еще без групп чтобы у них всю пачку выдавало в отчете... )


[code]"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без Итогов;
|Перемещение = Документ.Перемещение.ТекущийДокумент;
|Склад = Документ.Перемещение.Склад;
|СкладКуда = Документ.Перемещение.СкладКуда;
|Товар = Документ.Перемещение.Товар;
|Единица = Документ.Перемещение.Единица;
|Количество = Документ.Перемещение.Количество;
|Сумма = Документ.Перемещение.Сумма;
|Группировка Перемещение упорядочить по Перемещение.Товар, Перемещение.Сумма, Перемещение.Количество, Перемещение.Единица; 
|Группировка Товар Без Групп;
|Условие(Склад = ВыбСклад);
|Условие(СкладКуда = ВыбСкладКуда);
|Условие(Товар в ВыбТовар);
|"//}}ЗАПРОС
;
Появилась необходимость добавлять в список значений из номенклатуры группы товаров, как с этим быть не подскажешь ?


Код:
Процедура КнДобавить ();
ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",ВыбТовар,1);
КонецПроцедуры
Процедура ОбработкаПодбора(Элемент,ФормаДляПодбора)
ВыбТовар.ДобавитьЗначение (Элемент);
Сообщить (Элемент);
ТекРаз =ВыбТовар.РазмерСписка ();
Сообщить(ТекРаз);
КонецПроцедуры    
// Кнопка Удалить
 Процедура КнУдалить();
        ТекСтр=ВыбТовар.ТекущаяСтрока();      
Если (ТекСтр < 1) Тогда Сообщить ("Сначала выберете значение !!!");
Возврат ;
КонецЕсли;
// Сообщить (ТекСтр);
ВыбТовар.УдалитьЗначение(ТекСтр,1);
КонецПроцедуры
//Очистить
  Процедура КнОчистить();
        ТекСтр=ВыбТовар.ТекущаяСтрока();
// Сообщить (ТекСтр);
ВыбТовар.УдалитьВсе();
КонецПроцедуры
[/code]
« Последнее редактирование: 17-05-2011 08:35 от KolyaVasya » Записан
Kivals
Команда клуба

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

WWW
« Ответ #44 : 17-05-2011 08:39 » 

Появилась необходимость добавлять в список значений из номенклатуры группы товаров, как с этим быть не подскажешь ?
Ну тогда убери Без групп и Без итогов и просто игнорируй строки с пустыми товарами (это будут итоги по другим группировкам):
Код:
	Пока ТЗ.ПолучитьСтроку()=1 Цикл
Если ПустоеЗначение(ТЗ.Товар)=1 Тогда Продолжить; КонецЕсли;
Таб.ВывестиСекцию(?(ТЗ.Товар.ЭтоГруппа()=1,"Группа","Пер"));
КонецЦикла;
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #45 : 17-05-2011 08:43 » 

Я не про это немного )
Я имел ввиду что даже в список значений не добавляется группа )
Записан
Kivals
Команда клуба

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

WWW
« Ответ #46 : 17-05-2011 12:22 » 

ааа... не вчитался
Тогда вот:
Код:
Процедура КнДобавить ();
Конт = ВыбТовар;
ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",ВыбТовар,1);
Конт.ВыборГруппы(1);
КонецПроцедуры
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #47 : 18-05-2011 08:05 » 

Цитата
Конт.ВыборГруппы(1);
{\\CRANKSERVER\DEKALKO\DB\EXTFORMS\222.ERT(7)}: Поле агрегатного объекта не обнаружено (ВыборГруппы)
Код:
Процедура КнДобавить (); 
Конт = ВыбТовар;
ОткрытьПодбор("Номенклатура","ФормаДляПодбора",ВыбТовар,1);
Конт.ВыборГруппы(1);
попробовал просто ВыбТовар.ВыборГруппы (1); тот же результат )

в интернетах вот что то типа этого советуют
Код:
Процедура ПриОткрытии() 
    Номенклатура.ВыборГруппы(1);
    ...
КонецПроцедуры

Так у меня и процедуры такой нет....  как это реализовать немного не понятно )
Код:
// Отчет перемещения товаров между складами, если товар не выбран отчет формируется за весь указанный период
// между указаными складами.

Процедура КнДобавить ();
Конт = ВыбТовар;
ОткрытьПодбор("Номенклатура","ФормаДляПодбора",ВыбТовар,1);
Конт.ВыборГруппы(1);
КонецПроцедуры
Процедура ОбработкаПодбора(Элемент,ФормаДляПодбора)

ВыбТовар.ДобавитьЗначение (Элемент);

Сообщить (Элемент);
ТекРаз =ВыбТовар.РазмерСписка ();
Сообщить(ТекРаз);
КонецПроцедуры   
// Кнопка Удалить
 Процедура КнУдалить();
        ТекСтр=ВыбТовар.ТекущаяСтрока();     
Если (ТекСтр < 1) Тогда Сообщить ("Сначала выберете значение !!!");
Возврат ;
КонецЕсли;
ВыбТовар.УдалитьЗначение(ТекСтр,1);
КонецПроцедуры
//Очистить
   Процедура КнОчистить();
        ТекСтр=ВыбТовар.ТекущаяСтрока();
ВыбТовар.УдалитьВсе();
КонецПроцедуры


Записан
Kivals
Команда клуба

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

WWW
« Ответ #48 : 18-05-2011 09:00 » 

Вот это неверно:
Код:
Конт = ВыбТовар;
ОткрытьПодбор("Номенклатура","ФормаДляПодбора",ВыбТовар,1);
Попробуй:
Код:
Конт = "";
ОткрытьПодбор("Номенклатура","ФормаДляПодбора",Конт,1);
Сообщить(ТипЗначенияСтр(Конт));
Конт.ВыборГруппы(1);
Результат вывода - сюда

Добавлено через 5 минут и 6 секунд:
в интернетах вот что то типа этого советуют
Код:
Процедура ПриОткрытии() 
    Номенклатура.ВыборГруппы(1);
    ...
КонецПроцедуры

Так у меня и процедуры такой нет....  как это реализовать немного не понятно )

Это тебе просто нужно скопировать в Модуль "ФормаДляПодбора" по названию процедуры 1С ее выполнит при открытии формы
« Последнее редактирование: 18-05-2011 09:06 от Kivals » Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #49 : 18-05-2011 11:04 » 

Благополучно дописали отчет )
Огромное спасиБО ! ) кажется что то понял .... чего то отложилось ... ) спсб )
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines