Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощь в работе с запросами
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Страницы: 1, 2
Vofka
Добрый день!

Есть регистр партии. Измерения: номенклатура (СправочникСсылка.Номенклатура), партия (ДокументСсылка), Склад (СправочникСсылка.Склады). Ресурсы: Количество. Цена.

//----------------------------------------

Есть документ ПриходнаяНакладная, который делает приход по регистру Партии. С помощью конструктора жвижений получиась такая процедура:




Процедура ОбработкаПроведения(Отказ, Режим)
Для Каждого ТекСтрокаПродажи Из Продажи Цикл
// регистр Партии Приход
Движение = Движения.Партии.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаПродажи.Номенклатура;
Движение.Партия = ЭтотОбъект.Ссылка;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПродажи.Количество;
Движение.Цена = ТекСтрокаПродажи.Цена;
КонецЦикла;
КонецПроцедуры



Но запросом это ж тоже можно сделать, причем сделать более эффективно? Как это сделать с помощью запроса (если можно полностью текст процедуры ОбработкаПроведения()) ?

//----------------------------------------

Есть документ РасходнаяНакладная.

Как при проведении этого документа сделать правильное списание по партиям (в режиме ФИФО) с учетом контроля остатков? Т.е. я представляю, что это должно быть примерно так: при проведении этого документа нужно выберать партии и смотреть остатки номенклатуры по партиям. Как это сделать в запросе? Если можно полность. текст процедуры ОбработкаПроведения()!

19000000.gif icon_cuss.gif 433.gif
zetovich
У Павла Чистова как раз в видео лекции такое есть.... ну почти такое.
Vofka
Попробую скачать.

ЗЫ. Я ну никак не могу въехать в программирование на 8 49000000.gif
Batchir
Цитата(Vofka @ 21.08.09, 12:12) необходимо зарегистрироваться для просмотра ссылки
Попробую скачать.
ЗЫ. Я ну никак не могу въехать в программирование на 8 49000000.gif

Ничего, это как за руль сесть. Сначала едишь, жмешь на все педали,  а тебе в ответ "К-О-З-Е-Л !!!", а спустя время сам не замечаешь когда нога автоматом на тормоз жмет и не произвольно вылетает "К-О-З-Е-Л !!!"
World1С
Ответ на ваш вопрос есть также в книжке М.Г. Радченко "Практическое пособие разработчика"
Vofka
Цитата
Ответ на ваш вопрос есть также в книжке М.Г. Радченко "Практическое пособие разработчика"


Начинал читать эту книгу уже несколько раз. Но доходя до главы 5, раздела 2 "Отчет рейтинг услуг"... я... начинаю теряться. Я не могу въехать как он сделан. Т.е. можно тупо следовать инструкциям в книге, но какой в этом смысл если я не понимаю для чего выполняем то или то действие. На этом я и останавливаюсь sad.gif

У меня сложилось такое впечатление, что я никогда не познаю 8-ку
World1С
Достаточно ошибочное мнение... Пример с запросом расписан довольно таки качественно (с. 307 ранее упомянутой книги ) с примерами текста запроса, а также пояснениями...
Vofka
Я до страницы 307 не дошел даже, мне ещё раньше не понятно
World1С
Спрашивайте, что самое не понятное, по возможности буду пояснять...
Vofka
Спасибо! Почитаю ещё сам, будут вопросы - буду спрашивать smile.gif

Создал для этого необходимо зарегистрироваться для просмотра ссылки smile.gif
MATEVI
АААА еще один smile.gif)) icon_beer17.gif
gryphus
И не один.Есть много таких. Просто мы потихоньку наблюдаем за вами и учимся.
MATEVI
Цитата(gryphus @ 22.08.09, 17:22) необходимо зарегистрироваться для просмотра ссылки
И не один.Есть много таких. Просто мы потихоньку наблюдаем за вами и учимся.

Та Вы меня не правильно поняли. Я пока сам учусь...
необходимо зарегистрироваться для просмотра ссылки
Batchir
Да все мы всегда чему-нибудь учимся, лично я сегодня певый раз подключал и настраивал весы с чекопечатью к УТ (автоматизируем небольшой маркет).
Vofka
Хелп!

Привожу конкретный пример.

Документ РасходнаяНакладная:
Шапка: Склад
Табл. часть: Номенклатура, Количество

Регистр Партии:
Измерения: Номенклатура, Склад
Ресурсы: Количество

Как запросом проверить достаточно ли остатков в регистре партии по товарам из документа?

Делаю:


ВЫБРАТЬ
РасходнаяНакладнаяРасход.Номенклатура,
СУММА(РасходнаяНакладнаяРасход.Количество) КАК Количество,
ПартииОстатки.Номенклатура КАК НоменклатураВРегистре,
ПартииОстатки.Склад,
СУММА(ПартииОстатки.КоличествоОстаток) КАК КоличествоОстаток
ИЗ
Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Партии.Остатки(&МоментВремени, ) КАК ПартииОстатки
ПО РасходнаяНакладнаяРасход.Номенклатура = ПартииОстатки.Номенклатура,
Документ.РасходнаяНакладная КАК РасходнаяНакладная
ГДЕ
РасходнаяНакладная.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
РасходнаяНакладнаяРасход.Номенклатура,
ПартииОстатки.Номенклатура,
ПартииОстатки.Склад


Не работает так как надо sad.gif
Fynjy
А как надо?
Vofka
Чтобы получилась такая таблица:

НоменклатураИзДокумента | КоличествоИЗДокумента | НоменклатураИзРегистра | СкладИзРегистра | КоличествоОстаток

т.е., например

Товар1 | 5 | Товар1 | Основной | 3
Товар2 | 3 | | |
Товар3 | 1 | Товар3 | Основной | 5

Слева Товар1, Товар2, Товар3 - это из табличной части документа. правее Товар1, Товар3 - это из регистра
Fynjy
Нужно соединять тогда остатки с РН, а не на оборот как у Вас
Vofka
Не понял 19000000.gif

Цитата


ИЗ
Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладная
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Партии.Остатки(&МоментВремени, ) КАК ПартииОстатки
ПО РасходнаяНакладная.Номенклатура = ПартииОстатки.Номенклатура


Насколько я понимаю, то эта конструкция должна вытягивать все позиции номенклатуры из документа, а она не вытягивает sad.gif
World1С
Нет, ЛЕВОЕ означает что будут присоединены поля из левой таблицы
Vofka
Т.е. получается, что в данном случае вытягиваются все данные из регистра, и присоединяются данные из документа? Тогда по идее так

Цитата


ИЗ
РегистрНакопления.Партии.Остатки(&МоментВремени, ) КАК ПартииОстатки
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
ПО РасходнаяНакладнаяРасход.Номенклатура = ПартииОстатки.Номенклатура


должно работать? А не работает sad.gif
World1С
Дата документа должна попадать или совпадать с датой документа.

Если есть, вот тема на диске ИТС "Особенности связи с виртуальной таблицей остатков" там подробно описана работа подобного типа запросов.
World1С
Простите, дата документа должна совпадать с &МоментомВремени
Vofka
Цитата
Дата документа должна попадать или совпадать с датой документа.


а?

Цитата
Если есть, вот тема на диске ИТС "Особенности связи с виртуальной таблицей остатков" там подробно описана работа подобного типа запросов.


Щас ИТСов под рукой нету. А за какой месяц надо?
World1С
Да все равно можно за май 2009
Batchir
Цитата(Vofka @ 27.08.09, 13:45) необходимо зарегистрироваться для просмотра ссылки
Щас ИТСов под рукой нету. А за какой месяц надо?

Vofka а поискать не пробовал? необходимо зарегистрироваться для просмотра ссылки wink.gif , конкретно  необходимо зарегистрироваться для просмотра ссылки
Vofka
Прочитал, всёравно не получается именно так, как я хочу sad.gif . Может я не правильно суть понимаю. С запросом извращался вчера весь день! Если у кого есть время - вот конфа: необходимо зарегистрироваться для просмотра ссылки Сделайте в ней запрос (в обработке проведения документа РН). open_file.gif
World1С
Выложи весь текст запроса...
Vofka
Тут вся инфа: какие документы были, какой запрос и результат, который он дает:



И мне не надо, чтоб в запросе была строчка СУММА(КоличествоОстаток)..., но если просто написать КоличествоОстаток - тогда нужна группировка по нему, а группировка по нему тоже не надо (как мне кажется)
Vofka
Вроде получилось:


Правильно ж? мне ж именно эти данные надо, чтобы проконтролировать наличие остатков при проведении РН?
Vofka
Финальный получился такой запрос (с учетом складов):



ВЫБРАТЬ
РасходнаяНакладнаяРасход.Номенклатура КАК НоменклатураВДокументе,
СУММА(РасходнаяНакладнаяРасход.Количество) КАК КоличествоВДокументе,
ЕСТЬNULL(ПартииОстатки.Номенклатура, "") КАК НоменклатураВРегистре,
ЕСТЬNULL(ПартииОстатки.Склад, "") КАК Склад,
ЕСТЬNULL(ПартииОстатки.КоличествоОстаток, 0) КАК Остаток
ИЗ
Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Партии.Остатки(&МоментВремени, &Склад = Склад) КАК ПартииОстатки
ПО РасходнаяНакладнаяРасход.Номенклатура = ПартииОстатки.Номенклатура
И РасходнаяНакладнаяРасход.Ссылка.Склад = ПартииОстатки.Склад

СГРУППИРОВАТЬ ПО
РасходнаяНакладнаяРасход.Номенклатура,
ПартииОстатки.Номенклатура,
ПартииОстатки.Склад,
ПартииОстатки.КоличествоОстаток


Правильно (условие "правильности" читать выше)?
MATEVI
Я сделал вот так. Не претендую на правильность. Но результат виден.
необходимо зарегистрироваться для просмотра ссылки
Vofka
MATEVI, а если, например, у тебя в РН будет 2 строчки с одинаковым товаром?

Например:

В РН:
Товар1 - 4
Товар1 - 5

В Регистре (остаток):
Товар1 - 6

У тебя спишется 10 и не выдаст ошибки, т.к. в РН нету группировки по товару. Или я не прав? И зачем строки:


ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
ПО РасходнаяНакладнаяТовары.Ссылка = РасходнаяНакладная.Ссылка
?

///////////////////////////////////////////

Теперь ещё вопрос по моему запросу smile.gif.



ВЫБРАТЬ
РасходнаяНакладнаяРасход.Номенклатура КАК НоменклатураВДокументе,
СУММА(РасходнаяНакладнаяРасход.Количество) КАК КоличествоВДокументе,
ПартииОстатки.Номенклатура КАК НоменклатураВРегистре,
ПартииОстатки.Склад КАК СкладТовара,
ЕСТЬNULL(ПартииОстатки.КоличествоОстаток, 0) КАК Остаток,
ЕСТЬNULL(ПартииОстатки.СуммаОстаток, 0) КАК Сумма
ИЗ
Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Партии.Остатки(&МоментВремени, &Склад = Склад) КАК ПартииОстатки
ПО РасходнаяНакладнаяРасход.Номенклатура = ПартииОстатки.Номенклатура
И РасходнаяНакладнаяРасход.Ссылка.Склад = ПартииОстатки.Склад

СГРУППИРОВАТЬ ПО
РасходнаяНакладнаяРасход.Номенклатура,
ПартииОстатки.Номенклатура,
ПартииОстатки.Склад,
ПартииОстатки.КоличествоОстаток,
ЕСТЬNULL(ПартииОстатки.СуммаОстаток, 0)


Вроде как получаю то что надо. Но мне не надо группировки
Цитата
ПартииОстатки.Номенклатура,
ПартииОстатки.Склад,
ПартииОстатки.КоличествоОстаток,
ЕСТЬNULL(ПартииОстатки.СуммаОстаток, 0)


Но если их убираю - вываливается ошибка (думаю текст ошибки приводить не стоит, т.к. многие с подобной сталкивались). Почему так происходит?
Alan68
MATEVI,
прошу прощения за не грамотность (совсем не програмер), можно ли Вашу обработку использовать в 7,7 Бух 275 ??? т.к. вижу что это все для 8. А модуль меня заинтересовал, возможностью внедрения в расходник.
Заранее СПС.
MATEVI
Цитата(Vofka @ 28.08.09, 14:03) необходимо зарегистрироваться для просмотра ссылки
MATEVI, а если, например, у тебя в РН будет 2 строчки с одинаковым товаром?

Согласен. Еще необходима проверка на то что документ не помечен на удаление.
Цитата(Vofka @ 28.08.09, 14:03) необходимо зарегистрироваться для просмотра ссылки
И зачем строки:


ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
ПО РасходнаяНакладнаяТовары.Ссылка = РасходнаяНакладная.Ссылка
?

Та это просто забыл убрать smile.gif
Цитата(Vofka @ 28.08.09, 14:03) необходимо зарегистрироваться для просмотра ссылки
Вроде как получаю то что надо. Но мне не надо группировки

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

А в суммируемое поле пробовал поставить?
MATEVI
Цитата(Alan68 @ 28.08.09, 14:30) необходимо зарегистрироваться для просмотра ссылки
MATEVI,
прошу прощения за не грамотность (совсем не програмер), можно ли Вашу обработку использовать в 7,7 Бух 275 ??? т.к. вижу что это все для 8. А модуль меня заинтересовал, возможностью внедрения в расходник.
Заранее СПС.

Та не за что. А чем не подходит стандартный контроль отрицательных остатков?
MATEVI
Не люблю не решенных задач. И "поскрипев" мозгами сделал через вложеный запрос. Не знаю может и не так как надо... Но теперь низя списать два товара на сумму больше чем есть.
необходимо зарегистрироваться для просмотра ссылки
Так же нельзя списать несуществующий товар.

Посмотрим что скажут "корифеи". Если вообще что то скажут smile.gif А мы с тобой курим дальше 44000000.gif
1С8 32000000.gif
Vofka
У меня взрывается "моск". Подскажите как сделать запрос (текст запроса) при списании для партионного учета по методу ФИФО 09000000.gif help.gif
World1С
Не думаю, что можно обойтись только запросом, придется проанализировать результат запроса... И вот в момент анализа можешь списывать партии товара по FIFO. Дома валялся простейший пример работы партионного учета, завтра утром выложу обработку...
Fynjy
Цитата(Vofka @ 31.08.09, 15:35) необходимо зарегистрироваться для просмотра ссылки
У меня взрывается "моск". Подскажите как сделать запрос (текст запроса) при списании для партионного учета по методу ФИФО 09000000.gif help.gif

Отсортируй по регистратору остатки ...
Fynjy
По поводу - "что скажут корифеи" - найденное решение дает знаний в 10 раз больше подсказанного ...
Как пример - попробуйте не гугля написать запрос, который реализует срез последних без виртуальной таблицы СрезПоследних ...
MATEVI
Цитата(Fynjy @ 31.08.09, 23:29) необходимо зарегистрироваться для просмотра ссылки
По поводу - "что скажут корифеи" - найденное решение дает знаний в 10 раз больше подсказанного ...
Как пример - попробуйте не гугля написать запрос, который реализует срез последних без виртуальной таблицы СрезПоследних ...

Боюсь не соглашусь я с Вами по этому поводу.
Представьте себе ситуацию когда Вы реализовываете какой нибудь модуль или подсистему. И при обучении пользователей нововведениям Вы им так же намекаете на то, что тут так, а тут эдак... А не говорите конкретно тут надо делать так, а тут так. Я думаю что это никому не понравится.
Работая с людьми, лично я, не могу себе позволить "намекать" на что то, или предлагать "погуглить". Вопросы мне задают самые разные и бывало так что по телефону минут 40 объясняешь как например переместить элемент из группы в группу. И что ты тут сделаешь если человек не понимает? Он возможно хороший менеджер или бухгалтер. Но не идет у него что то и все тут.
Я конечно как и любой другой человек могу ошибаться, где то возможно бежать впереди паровоза. НО! если я берусь кому то помочь за "спасибо" то вылаживаюсь не меньше чем если бы я за это брал деньги. А если не имею времени или не знаю то просто не берусь за это.
А по поводу "подсказанного" оно все равно остается в голове и тратишь гораздо меньше времени на то что бы вспомнить где и когда ты такое уже делал.
Кстатати один из плюсов 1С8 было заявленое расширение синтакс помощника и примеры реализованые прямо в нем, а не намеки 1С77. Да и 2 книжки по 7 и 3 по 8 постоянно лежат на столе. И я например лично не считаю зазорным заглядывать в них, или спрашивать на форумах об интересующих меня вопросах.
А по поводу Вашего предложения я обязательно возьмусь за реализацию данного вопроса, когда появится время.
ЗЫ Простите за оффтоп....
Vofka
Цитата
Отсортируй по регистратору остатки ...


Не получается. Возникают какие-то непонятные цифры.
Зы. сделаю щас снова запрос - выложу его со скрином.

Цитата
найденное решение дает знаний в 10 раз больше подсказанного ...


Всё вроде бы так, но есть одно но: найденное решение можно очень долго искать! И в итоге отказываешься от его поиска, заменяя на что-то другое или когда нашёл - то вопрос уже не актуален... А если помог человеку (написал, например ему нужный код), то кому надо - тот разберйт почему именно так написано, а если не разбертся сам - то спросит.

Всё вышесказанное ИМХО.
Vofka


Что не так? sad.gif
Vofka


Даже если так, откуда такие цифры?
ЗЫ. Приход можно посмотреть в посте выше
World1С
Выложи конфу пока есть время вместе посмотрим
Vofka
необходимо зарегистрироваться для просмотра ссылки
Vofka


И так уже пробовал. Откуда там КоличествоОстаток 20 и 10 вместо, соответственно, 8 и 4?
World1С
|ВЫБРАТЬ
|    ПартииОстатки.Номенклатура,
|    ПартииОстатки.Склад,
|    ПартииОстатки.КоличествоОстаток,
|    ПартииОстатки.СуммаОстаток
|ИЗ
|    РегистрНакопления.Партии.Остатки(&КонецПериода, ) КАК ПартииОстатки


Судя по конфигурации запрос к регистру можно написать вот так
Vofka
1) И я получаю те же данные, какие показаны на картинке выше, хотя по ПН данные другие (смотреть пост №44)
2) Мне надо вместе с остатками получать количество по текущему документу РН
3) Мне нужна партия (т.е. регистратор в регистре Партии)

wacko.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.