 |
| Работа с таблицей, загрузка из ТМЦ |
| igmig65 | Дата: Среда, 09.07.2008, 09:33 | Сообщение # 16 |
|
Генерал-майор
Группа: Проверенные
Сообщений: 372
Репутация: 25
Статус: Offline
| Вот вариант: Code Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Контрагент = Документ.ПриходнаяНакладная.Контрагент; |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ; |ЦенаБезНДС = Документ.ПриходнаяНакладная.ЦенаБезНДС; |Функция Цена = Среднее(ЦенаБезНДС); |Группировка ТМЦ; |Группировка День все ВошедшиеВЗапрос; |Условие(Контрагент = ВыбКонтрагент); |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Таб.ВывестиСекцию("Заголовок|Секция1"); Пока Запрос.Группировка(1) = 1 Цикл Пока Запрос.Группировка(2) = 1 Цикл Дт = Запрос.День; Таб.ПрисоединитьСекцию("Заголовок|Секция2"); КонецЦикла; Прервать; КонецЦикла; Запрос.ВНачалоВыборки(); Пока Запрос.Группировка(1) = 1 Цикл Таб.ВывестиСекцию("ТМЦ|Секция1"); Пока Запрос.Группировка(2) = 1 Цикл Таб.ПрисоединитьСекцию("ТМЦ|Секция2"); КонецЦикла; КонецЦикла; Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры Здесь выбконтрагент это реквизит формы, выбирать только элемент; В заголовке в ячейке где дни савиш формулу Дт, А в секции ТМЦ для вывода цен формула Запрос.Цена. Таблицу прицепил
|
| |
|
| |
| Roman_K | Дата: Среда, 09.07.2008, 14:29 | Сообщение # 17 |
|
Полковник
Группа: Пользователи
Сообщений: 156
Репутация: 5
Статус: Offline
| Valerka, было упоминание о конструкторе запроса... как его вызвать в 1С 7.7?
Пришелец из С/С++ ...ушелец в C#/ASP.Net
|
| |
|
| |
| ivisor | Дата: Среда, 09.07.2008, 15:42 | Сообщение # 18 |
 Генерал-полковник
Группа: Проверенные
Сообщений: 1049
Репутация: 98
Статус: Offline
| Quote (igmig65) Глюк конструктора, щелкаеш сначала по Все - недоступна, щелкаеш по строке с группировкой День - доступна Точно, так и есть. Ну и работает это на практике - проверял?Добавлено (09.07.2008, 15:34) --------------------------------------------- Roman_K, Когда у тя открыто что нибудь, что имеет эранную форму меню "Конструктор"-"Запрос". Я обычно делаю все в новой внешенй обработке (можно ее не записыать если не бужешь делать в ней отладку), а потом, после того как конструктор все сформирует, - правлю и копирую туда куда надо, а то он любит на форму реквизиты добавлять ... А ваще весч оч. удобная - освой не пожалеешь. Добавлено (09.07.2008, 15:42) --------------------------------------------- igmig65, Vava, Можно вместо Code |Условие(Контрагент = ВыбКонтрагент); Code |Условие(Контрагент В ВыбКонтрагент); А для ВыбКонтрагент разрешить выбор групп, тогда можно выполнять зпрос по группе контрагентов, а если ВыбКонтрагент будет пустой, то выдаст выведется по всем, а в оригинале ни по кому при пустом ВыбКонтрагент. Но это, конечно, если нужно.
Чтобы получить перечень доступных обновлений отошлите пустое письмо на адрес: 1c_download@bk.ru Впишите нужный пункт в тему письма для 1c_download@bk.ru и получите ссылку на закачку.
|
| |
|
| |
| Vava | Дата: Суббота, 12.07.2008, 21:32 | Сообщение # 19 |
 Подполковник
Группа: Пользователи
Сообщений: 134
Репутация: 0
Статус: Offline
| Спасибо всем за помощь! Code |Условие(Контрагент В ВыбКонтрагент); пригодилось тоже =) Два вопроса осталось. Можно ли в запросе определять не максимальную цену, а цену по последней закупке? И как все таки определить группу. Пробовал Code Если Запрс.ТМЦ.ЭтоГруппа()=1 Тогда ... Не работает так. Видимо в запрос не попадают папки. Как можно сделать, чтоб попадали? Запрос получился такой: Code "//{{ЗАПРОС(Сформировать) |Период с Дата1 по Дата2; |Обрабатывать НеПомеченныеНаУдаление; |НаименованиеФирмы = Документ.ПриходнаяНакладная.Контрагент; |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ; |СуммаСНДС = Документ.ПриходнаяНакладная.СуммаСНДС; |Кво = Документ.ПриходнаяНакладная.Кво; |Функция Цена = Максимум(СуммаСНДС/Кво); |Фирма = Документ.ПриходнаяНакладная.Контрагент; |Группировка ТМЦ все ВошедшиеВЗапрос; |Группировка НаименованиеФирмы все ВошедшиеВЗапрос; |Группировка День все ВошедшиеВЗапрос; |"//}}ЗАПРОС Спасибо
|
| |
|
| |
| Valerka | Дата: Воскресенье, 13.07.2008, 08:02 | Сообщение # 20 |
 Генерал-полковник
Группа: Модераторы
Сообщений: 976
Репутация: 138
Статус: Offline
| Quote (Vava) Не работает так. Видимо в запрос не попадают папки. Как можно сделать, чтоб попадали? Судя по тексту запроса, папки попадают. Попробуй Code Если Запрос.ЭтоГруппа() = 1 Тогда ТМЦ не надо писать, ты же обрабатываешь группировку.
Можно ответить на любой вопрос, если вопрос задан правильно. Если люди помогли - плюс нажать не забываем :)
|
| |
|
| |
| Vava | Дата: Среда, 16.07.2008, 17:50 | Сообщение # 21 |
 Подполковник
Группа: Пользователи
Сообщений: 134
Репутация: 0
Статус: Offline
| Code Пока Запрос.Группировка("ТМЦ") = 1 Цикл Если Запрос.ЭтоГруппа()=1 Тогда Таб.ВывестиСекцию("Группа"); КонецЕсли; .... КонецЦикла; Выдается ошибка при компиляции: Если Запрос.ЭтоГруппа()=1 Тогда {C:\PROGRAM FILES\1CV77\SAT\EXTFORMS\РЕЕСТР ТМЦ3.ERT(124)}: Недостаточное число параметров передано при вызове функции/процедуры объекта А если написать: Code Пока Запрос.Группировка("ТМЦ") = 1 Цикл Если Запрос.ЭтоГруппа("ТМЦ")=1 Тогда Таб.ВывестиСекцию("Группа"); КонецЕсли; .... КонецЦикла; условие не выполняется никогда (
|
| |
|
| |
| Valerka | Дата: Среда, 16.07.2008, 18:20 | Сообщение # 22 |
 Генерал-полковник
Группа: Модераторы
Сообщений: 976
Репутация: 138
Статус: Offline
| Code Если Запрос.ТМЦ.ЭтоГруппа(1)=1 Тогда //1-первая группировка Таб.ВывестиСекцию("Группа"); КонецЕсли; Хотя, по идее это тоже самое. Попробуй посмотреть отладчиком что передается в группировку, и почему нету групп. Видать потому, что выбирается из документов?
Можно ответить на любой вопрос, если вопрос задан правильно. Если люди помогли - плюс нажать не забываем :)
|
| |
|
| |
| ivisor | Дата: Среда, 16.07.2008, 22:44 | Сообщение # 23 |
 Генерал-полковник
Группа: Проверенные
Сообщений: 1049
Репутация: 98
Статус: Offline
| Пацаны - вы че??? Не будет тут групп никогда - патаму шо |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ; ИМХО Откуда взятсяа группам? Это ж к доку обращение а не к регистру? Думаю надо добавлять в запрос:Code ГрТМЦ = Документ.ПриходнаяНакладная.ТМЦ.Родитель; |Группировка ГрТМЦ ; |Условие(ГрТМЦ В ВыбГруппаТМЦ) Тока я нифига не понимаю - за каким Х такое надо? Ведь цена (ни средняя ни последняя) не имеет ни какого смысла для групп. Разве что нужно чтобы в таблице ТМЦ упорядочивались внутри групп - типа сначала по порядку идут ТМЦ группы "Колбасы", потом ТМЦ группы "Сыры", тада - да, такое подойдет. Если ж просто нужно ограничивать, выборку ТМЦ определенной группой, тогда нужно:Code |Условие(ТМЦ В ВыбТМЦ);
Чтобы получить перечень доступных обновлений отошлите пустое письмо на адрес: 1c_download@bk.ru Впишите нужный пункт в тему письма для 1c_download@bk.ru и получите ссылку на закачку.
|
| |
|
| |
| igmig65 | Дата: Четверг, 17.07.2008, 07:41 | Сообщение # 24 |
|
Генерал-майор
Группа: Проверенные
Сообщений: 372
Репутация: 25
Статус: Offline
| Я вопще писал запрос с группировкой: День все ВошедшиеВЗапрос; для того чтобі єту группировку віводить в вертикальных секциях. И тут она имеет смысл. А зачем это: |Группировка ТМЦ все ВошедшиеВЗапрос; |Группировка НаименованиеФирмы все ВошедшиеВЗапрос; |Группировка День все ВошедшиеВЗапрос; , Для горизонтальных группировок все ВошедшиеВЗапрос неимеет никакого смысла. Да и вообще эта фишка и нужна для того чтобы в вертикальные секции попадали нулевые выборки, иначе это лишнее. В том запросе что я написал только подогнать все по реквизитам и будет работать 100%, проверено, исправить только Условие(ТМЦ В ВыбТМЦ); И вообще: Quote (ivisor) Тока я нифига не понимаю - за каким Х такое надо? Ведь цена (ни средняя ни последняя) не имеет ни какого смысла для групп. ++++ А чтобы упорядочить по группам, то Упорядочить по ТМЦ.Родитель
|
| |
|
| |
| Valerka | Дата: Четверг, 17.07.2008, 08:39 | Сообщение # 25 |
 Генерал-полковник
Группа: Модераторы
Сообщений: 976
Репутация: 138
Статус: Offline
| Quote (ivisor) Пацаны - вы че??? И правда, а че мы?
Можно ответить на любой вопрос, если вопрос задан правильно. Если люди помогли - плюс нажать не забываем :)
|
| |
|
| |
| igmig65 | Дата: Четверг, 17.07.2008, 08:49 | Сообщение # 26 |
|
Генерал-майор
Группа: Проверенные
Сообщений: 372
Репутация: 25
Статус: Offline
| Да, кстати условие В в запросе, если стоит скюэль невсегда работает, все никак непроверю када именно, может даже всегда.
|
| |
|
| |
| ivisor | Дата: Четверг, 17.07.2008, 18:49 | Сообщение # 27 |
 Генерал-полковник
Группа: Проверенные
Сообщений: 1049
Репутация: 98
Статус: Offline
| igmig65, прикольно звучит условие не всегда работает ... может быть даже всегда  Добавлено (17.07.2008, 18:49) --------------------------------------------- Слушай - нарисуй в экселе и выложи скрином пример того, что ты хотел бы получить в итоге в форме отчета (и как это должно выглядеть) а мы те подскажем как этого добится, а то я что-то потерял ход мысли ...
Чтобы получить перечень доступных обновлений отошлите пустое письмо на адрес: 1c_download@bk.ru Впишите нужный пункт в тему письма для 1c_download@bk.ru и получите ссылку на закачку.
|
| |
|
| |
| Vava | Дата: Пятница, 18.07.2008, 09:08 | Сообщение # 28 |
 Подполковник
Группа: Пользователи
Сообщений: 134
Репутация: 0
Статус: Offline
| Quote Слушай - нарисуй в экселе и выложи скрином пример того, что ты хотел бы получить в итоге в форме отчета (и как это должно выглядеть) а мы те подскажем как этого добится, а то я что-то потерял ход мысли ... Я не понял как прикрепить сюда картинку. Что нужно. Есть предприятие. Предприятие работает с разными поставщиками. Нужно получить 2 таблицы. В первой таблице по выбранному контрагенту, за выбранный интервал времени выводится история закупок. Первый столбец - наименование товаров. Дальше идут столбцы с указанием цены и кол-ва единиц товара за сутки. Это работает. Но для наглядности нужно товары выделять в группы (например: продукты, стройматериалы, ГСМ.....) В номенклатуре товары разбиты по папочкам сответствующим. Т.Е. в таблице идет название группы Продукты, а потом перечисляются ее составляющие. Во второй таблице в первом столбце тоже товары. А в последующих столбцах идут поставщики с ценами на товар. Цену нужно брать из последней закупки по данному наименованию товара. Т.Е. 2 вопроса. Как определять группы и как находить цену на товар по последней какупке у конкретного контрагента?
Сообщение отредактировал Vava - Пятница, 18.07.2008, 09:11 |
| |
|
| |
| igmig65 | Дата: Пятница, 18.07.2008, 10:10 | Сообщение # 29 |
|
Генерал-майор
Группа: Проверенные
Сообщений: 372
Репутация: 25
Статус: Offline
| Quote (Vava) Но для наглядности нужно товары выделять в группы Добавь колонку с Запрос.ТМЦ.Родитель - будешь видеть родителя, итоги по группам неактуальны. Если нужно упорядочить по группам, то как я писал выше Упорядочить по ТМЦ.Родитель. Для второй таблицы я так понял даты неважны важны сами товары определенной группы? Тогда, если партионный учет, то все есть в партиях, и док и цена. Нужно работать с ним
|
| |
|
| |
| Vava | Дата: Воскресенье, 20.07.2008, 12:31 | Сообщение # 30 |
 Подполковник
Группа: Пользователи
Сообщений: 134
Репутация: 0
Статус: Offline
| igmig65, Спасибо! Упорядочить по ТМЦ.Родитель помогло. А как можно решить вопрос насчет последней цены, если не по партиям?Добавлено (20.07.2008, 12:31) ---------------------------------------------
Code ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с Дата1 по Дата2; |Обрабатывать НеПомеченныеНаУдаление; |НаименованиеФирмы = Документ.ПриходнаяНакладная.Контрагент; |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ; |СуммаСНДС = Документ.ПриходнаяНакладная.СуммаСНДС; |Кво = Документ.ПриходнаяНакладная.Кво; |НДС = Документ.ПриходнаяНакладная.ВидНДС; |Функция Цена = Максимум(СуммаСНДС/Кво); |Группировка ТМЦ Упорядочить По ТМЦ.Родитель; |Группировка НаименованиеФирмы все ВошедшиеВЗапрос; |"//}}ЗАПРОС ; Я вывожу строку, в которой указываю название фирмы и вид НДС таким образом: Секция ("Заголовок|Цена") имеет 2 ячейки: Запрос.НаименованиеФирмы Запрос.НДС Code Пока Запрос.Группировка(1) = 1 Цикл Пока Запрос.Группировка(2) = 1 Цикл Таб.ПрисоединитьСекцию("Заголовок|Цена"); КонецЦикла; Прервать; КонецЦикла; Но в зависимости от выбранного интервала НДС принимает одно и то же значение(или Без НДС или 20%) для всех фирм. Наименования фирм идут правильно. Такое впечатление, что используется первое значение НДС из выборки для всех фирм. Что я сделал неправильно? Спасибо
Сообщение отредактировал Vava - Пятница, 18.07.2008, 20:31 |
| |
|
|
|
 |
|