Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 11:33

Запред проведения

Автор Smokez, 22 мая 2015, 17:40

0 Пользователей и 1 гость просматривают эту тему.

Smokez

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

Rasty

В параметрах учет есть галочка. А вот где находятся параметры учета зависит от конфигурации.
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Smokez

У меня своя конфигурация и как я понимаю нужно писать процедуру учета? или как

Rasty

ага, свой регистр накопления
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Smokez

Задам более развернутый вопрос.
есть документ "Приходная накладная" (добавление товара на склад, плюс в регистр)
регистр накопления "ОстаткиМатериалов" (Наименование, склад, Количество, Сумма)
И документ "Списание материалов" (списывает материалы, минус из регистра)
Что и где нужно написать в коде, чтобы если я ввел в документе "Списание Товаров" больше материала чем на складе (в регистре) он не давал провести документ.
Я новичек если можно развернутый ответ.


Rasty

Запрос, срез последних, с параметром номенклатура, сравниваешь остатки
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Smokez

а какой именно код, а то перерыл инет но безуспешно

Rasty

Конструктор запроса

Запросы 1С

Запросы 1С

Программирование 1С состоит не только из написания программы. 1С это слиток действий пользователя и данных с которыми он работает.

Данные хранятся в базе данных. Запросы 1С - это способ доставать данные из базы данных для того, чтобы показать пользователю в форме или чтобы обработать их.

Основополагающая часть отчета - это запрос 1С. В случае отчета СКД - это большая часть отчета.

1.zaprosy-1s.png

Сядьте. Вздохните. Успокойтесь. Сейчас я скажу Вам новость.

Чтобы программировать в 1С недостаточно знать язык программирования 1С. Нужно еще знать язык запросов 1С.

Язык запросов 1С - это совершенно отдельный язык, который позволяет указать какие данные нам нужно достать из базы данных.

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

Как используются Запросы 1С

Когда пользователь запускает 1С в режиме Предприятие - в запущенном клиенте нет ни грамма данных. Поэтому когда нужно открыть справочник - 1С запрашивает данные из базы данных, то есть делает запрос 1С.

Запросы 1С бывают:

  • Автоматические запросы 1С
    Формируются автоматически системой. Вы создали форму списка документов. Добавили колонку. Это значит, что при открытии этой формы в режиме Предприятие будет запрос и будут запрошены данные по этой колонке.
  • Полуавтоматические запросы 1С
    Есть множество методов (функций) в языке 1С, при обращении к которым происходит запрос к базе данных. Например .ПолучитьОбъект()
  • Ручные запросы 1С (написанные программистом специально как запрос)
    Вы можете написать запрос 1С самостоятельно в коде и выполнить его.

Создание и выполнение запросов 1С

Запрос 1С - это собственно текст запроса на языке запросов 1С.
Текст можно написать ручками. То есть взять и написать (если знаешь этот язык).

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

После того как готов текст запроса 1С - его нужно выполнить. Для этого есть объект в коде 1С Запрос(). Вот пример:


Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Услуга";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка);
КонецЦикла;

Как Вы видите в примере - после выполнения запроса 1С к нам приходит результат и мы должны его обработать. Результат - это одна или несколько строчек таблицы (в специальном виде).

Результат можно выгрузить в обычную таблицу:
Выборка = Запрос.Выполнить().Выгрузить(); //Результат - таблица значений

Или просто обойти по строчкам.
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
//Что-то делаем с результатами запроса
КонецЦикла;

Работа с запросами 1С

Основные принципы запросов 1С

Основные принципы построения запроса 1С -
ВЫБРАТЬ СписокПолей ИЗ НазваниеТаблицы ГДЕ Условия

Пример построения такого запроса 1С:


ВЫБРАТЬ
//список полей, которые надо выбрать
Ссылка,
Наименование,
Код
ИЗ
//наименование таблицы, откуда выбираем данные
//список таблиц - это список объектов в окне конфигуратора
Справочник.Номенклатура
ГДЕ
//указываем отбор
ВидТовара = &Услуга //отбор по внешнему значению
Или Услуга // «Услуга» реквизит типа Булево, отбор по значению Истина
УПОРЯДОЧИТЬ ПО
//Сортировка
Наименование

Список таблиц 1С

Названия таблиц Вы смотрите в окне конфигуратора. Только необходимо вместо «Справочники» писать «Справочник», например «Справочник.Номенклатура» или «Документ.РеализацияТоваровУслуг» или «РегистрНакопления.Продажи».

2.zaprosy-1s.png

Для регистров есть дополнительные таблицы (виртуальные), которые позволяют получить итоговые цифры.

РегистрСведений.ИмяРегистра.СрезПоследних(&Дата) - запрос 1С из регистра сведений, если он является периодическим, на определенную дату

РегистрНакопления.ИмяРегистра.Остатки(&Дата) - запрос 1С из регистра остатков на определенную дату

РегистрНакопления.ИмяРегистра.Обороты(&ДатаНачала, &ДатаОкончания) - запрос 1С из регистра оборотов за период с даты начала по дату окончания.

Дополнительные принципы

Когда мы запрашиваем список каких то данных - работают основные принципы. Но мы можем запросить также цифры и запрос может нам их посчитать (сложить например).

Например мы хотим посчитать с помощью запроса 1С количество документов в базе 1С:

ВЫБРАТЬ
//Количество(ИмяПоля) - считает количество
//Поле КАК ДругоеИмя - переименовывает поле
Количество(Ссылка) КАК КоличествоПроведенныхДокументов
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен

Этот запрос 1С вернет нам общее количество документов. Однако в каждом документе есть поле Организация. Допустим мы хотим посчитать с помощью запроса 1С количество документов по каждой организации.


ВЫБРАТЬ
//просто поле документа
Организация,
//считаем количество
Количество(Ссылка) КАК КоличествоПоОрганизациям
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен
СГРУППИРОВАТЬ ПО
//необходимо использовать, если в списке полей есть функция подсчета() и одновременно одно или несколько полей - тогда нужно группировать по этим полям
Организация

Этот запрос 1С вернет нам количество документов по каждой организации (также говорят «в разрезе организаций»).

3.zaprosy-1s.png

Посчитаем дополнительно с помощью запроса 1С сумму этих документов:

ВЫБРАТЬ
//просто поле документа
Организация,
//считаем количество
Количество(Ссылка) КАК КоличествоПоОрганизациям,
//считаем сумму
Сумма(СуммаДокумента) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен
СГРУППИРОВАТЬ ПО
//необходимо использовать, если в списке полей есть функция подсчета() и одновременно одно или несколько полей - тогда нужно группировать по этим полям
Организация

Этот запрос 1С вернет нам также сумму документов.

4.zaprosy-1s.png

Если мы хотим посчитать с помощью запроса 1С итоговые значения (строка с указанием сколько всего) - нужно дополнительно указать требования получить итоги.


ВЫБРАТЬ
//просто поле документа
Организация,
//считаем количество
Количество(Ссылка) КАК КоличествоПоОрганизациям,
//считаем сумму
Сумма(СуммаДокумента) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен
СГРУППИРОВАТЬ ПО
//необходимо использовать, если в списке полей есть функция подсчета() и одновременно одно или несколько полей - тогда нужно группировать по этим полям
Организация
ИТОГИ ПО Общие

5.zaprosy-1s.png

Язык запросов 1С обширен и сложен и мы не будем рассматривать в одном уроке все его возможности - читайте наши следующие уроки.

Кратко о дополнительных возможностях языка запросов 1С:

  • Соединение данных из нескольких таблиц
  • Вложенные запросы
  • Пакетный запрос
  • Создание собственных виртуальных таблиц
  • Запрос из таблицы значений
  • Использование встроенных функций получения значения и манипулирования значениями.

Конструктор запросов 1С

Чтобы не писать текст запроса руками - существует конструктор запросов 1С. Просто нажмите правой кнопкой мыши в любом месте модуля и выберите Конструктор запроса 1С.

6.konstruktor-zaprosa-1s.png

Выберите в конструкторе запросов 1С нужную таблицу слева и перетащите правее.

7.konstruktor-zaprosa-1s.png

Выберите в конструкторе запросов 1С из таблицы нужные поля и перетащите правее. Если Вы хотели бы не просто выбрать поле, а применить к нему какую либо функцию суммирования - после перетаскивания щелкните по полю два раза мышкой. На закладке Группировка после этого нужно будет выбрать (перетащить) для группировки нужные поля.

8.konstruktor-zaprosa-1s.png

На закладке Условия в конструкторе запросов 1С Вы можете выбрать нужные отборы таким же способом (перетащив поля, по которым Вы будете делать отбор). Не забудьте выбрать верное условие.

9.konstruktor-zaprosa-1s.png

На закладке Порядок - указывается сортировка. На закладке Итоги - суммирование итогов.

С помощью конструктора запросов 1С Вы можете изучить любой существующий запрос. Для этого нажмите правой кнопкой на текст существующего запроса и выберите также конструктор запросов 1С - и запрос будет открыт в конструкторе запросов 1С.


Проголосовать за этот пост:

loading.gif Загрузка...

Posted in Программирование 1С Tagged Запросы 1С

почитай
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

cska-fanat-kz

ищете примеры решения задач экзамена Специалист )
уже в 1.1 разбирается контроль остатка.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Цитата: Rasty от 23 мая 2015, 15:03
Запрос, срез последних, с параметром номенклатура, сравниваешь остатки

извините, уважаемый )
это гидэ ж там срез последних применяется?? ))
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск