Версия для печати темы (https://pro1c.org.ua/index.php?s=542916586b0080346232be8383b539e0&showtopic=35484)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Проверка регистра накопления перед записью

Автор: burza 23.02.17, 10:33

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

Автор: Flexy 23.02.17, 10:53

Посмотреть, как в типовых это сделано не предлагать? smile.gif

Автор: burza 23.02.17, 11:09

Flexy @ Сегодня, 10:53 * ,

Предложите только скажите где есть? я не встречал. Верней в типовой я не посмотрю ибо база самописная)

Как мне на это сделать проверку


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 8
 

Автор: Flexy 23.02.17, 11:22

ВЫБРАТЬ
    ОстаткиЧегото.СуммаОстаток
ИЗ
    РегистрНакопления.ОстаткиЧегото.Остатки(&ПериодРегистратора, ) КАК ОстаткиЧегото
...

Если СуммаОстатки ИзЗапроса > СуммаДокументаРегистратора Тогда
...

Автор: burza 23.02.17, 11:35

Flexy @ Сегодня, 11:22 * ,
Щас попробую)

Сделал вот так и ничего. где ошибся или везде)

 Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ

    |ОстаткиБюджетРасходовИПриходов.СуммаОстаток
    |ИЗ
    | РегистрНакопления.ОстаткиБюджетРасходовИПриходов.Остатки(&ПериодРегистратора, ) КАК ОстаткиБюджетРасходовИПриходов
    |Если
    |СуммаОстатки ИзЗапроса > СуммаДокументаРегистратора Тогда
| Отказ = Истина";

Автор: Flexy 23.02.17, 11:42

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
    |ОстаткиБюджетРасходовИПриходов.СуммаОстаток
    |ИЗ
    | РегистрНакопления.ОстаткиБюджетРасходовИПриходов.Остатки(&ПериодРегистратора, ) КАК ОстаткиБюджетРасходовИПриходов
    |;
Запрос.УстановитьПараметр("ПериодРегистратора", ДатаПроводимогоДокумента);
Результат = Запрос.Выполнить();
Если Результать.Пустой() Тогда
// проверять нечего. возврат
КонецЕсли;

Выборка = Результат.Выбрать();
Выборка.Следующий();

Если Выборка.СуммаОстаток < СуммаПроводимогоДокумента Тогда
//Отказ
КонецЕсли;

Автор: burza 23.02.17, 11:46

Flexy @ Сегодня, 11:42 * ,
Ошибки полезли


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 8
 

Автор: Flexy 23.02.17, 11:48

Неужели Вы тупо скопировали тот текст запроса, что я писал? 32541510.gif
Поставьте правильные (свои) имена переменных в алгоритм smile.gif

Автор: burza 23.02.17, 13:03

Flexy @ Сегодня, 11:48 * ,

Поправил но не могу понять что за параметр результат у меня на него ругаеться.

Автор: Flexy 23.02.17, 13:06

Ругается потому, что Результать и Результат - две разные переменне

Автор: burza 23.02.17, 13:13

Flexy @ Сегодня, 13:06 * ,


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

Если Выборка.СуммаОстаток < СуммаВБазовойВалюте Тогда
//Отказ
КонецЕсли;

Автор: Flexy 23.02.17, 13:23

Значить нет у Вас такого регистра 44000000.gif

Автор: burza 23.02.17, 13:24

Flexy @ Сегодня, 13:23 * ,
как нет вот он


Автор: Flexy 23.02.17, 13:27

БюджетРасходовИПриходов <> ОстаткиБюджетРасходовИПриходов

Автор: burza 23.02.17, 13:31

Flexy @ Сегодня, 13:27 * ,
НУжно вот так ?

 |БюджетРасходовИПриходов.СуммаОстаток
    |ИЗ
    | РегистрНакопления.БюджетРасходовИПриходов.Остатки(&ПериодРегистратора, ) КАК БюджетРасходовИПриходов
    |";


на код не ругаеться но сума проводиться все ровно больше чем в бюджете

Автор: Flexy 23.02.17, 13:32

Если Выборка.СуммаОстаток < СуммаВБазовойВалюте Тогда
Отказ = Истина;
КонецЕсли;

Автор: burza 23.02.17, 13:41

Flexy @ Сегодня, 13:32 * ,
Сделал так

Автор: Flexy 23.02.17, 13:44

Это хорошо или плохо?

Автор: burza 23.02.17, 13:47

Flexy @ Сегодня, 13:44 * ,
ну в бюджете у меня стоит расход по статье этой за месяц 6400. я не могу провести и 100. то есть не работает.


Автор: Flexy 23.02.17, 13:53

Потому што на дату проведения эта сумма = 0. Вы пытаетесь провести расход раньше чем было поступление.

Автор: burza 23.02.17, 14:16

Flexy @ Сегодня, 13:53 * ,
я пробывал уже дату менять вот 1 число

у меня в принципе должна быть не одна проводна в месяц имено на дату бюджета. Бюджет забиваться на месяц и надо чтобы рассходники смотрели на назначение и подразделение и месяц и нельзя было сделать по сумме больше чем в бюджете.

я исправил дату бюджета на 01,02 все работает я не могу провести одним платежом больше чем стоит в бюджете. но я провожу 6400 и потом могу хоть 100 раз проводить эту сумму

Автор: Flexy 23.02.17, 14:51

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

Автор: burza 23.02.17, 15:06

Flexy @ Сегодня, 14:51 * ,
Все заработало. Но мне нужно не только по дате смотреть а и по подразделению и назначению. у нас 3 подразделения и у каждого свой бюджет .Что в запросе нужно дописать?

Автор: Flexy 23.02.17, 15:50

Цитата(burza @ 23.02.17, 15:06) *
Что в запросе нужно дописать?

ГДЕ 
    Подразделение = &Подразделение И Назначение = &Назначение

Автор: burza 23.02.17, 16:03

Flexy @ Сегодня, 15:50 * ,
Поправил так. Или не надо было добавлять строки? но ошибку выдает
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ЗаявкаНаРасходование.МодульОбъекта(163)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(8, 34)}: Поле не найдено "Назначение"
Подразделение = &Подразделение И <<?>>Назначение = &Назначение

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

Если Выборка.СуммаОстаток < СуммаВБазовойВалюте Тогда
Отказ = Истина;
Сообщить("Сумма больше чем Бюджет")
КонецЕсли;

Автор: Flexy 23.02.17, 16:09

    |ВЫБРАТЬ 
    |БюджетРасходовИПриходов.СуммаОстаток
    |ИЗ
    | РегистрНакопления.БюджетРасходовИПриходов.Остатки(&ПериодРегистратора, Подразделение = &Подразделение И
    | Назначение = &Назначение ) КАК БюджетРасходовИПриходов

Автор: burza 23.02.17, 16:18

Flexy @ Сегодня, 16:09 * ,
Всервоно пишет Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ЗаявкаНаРасходование.МодульОбъекта(164)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(9, 34)}: Поле не найдено "Назначение"
Подразделение = &Подразделение И <<?>>Назначение = &Назначение

Автор: Flexy 23.02.17, 16:24

Опять не правильные имена переменных. Подставляйте свои.

Автор: burza 23.02.17, 17:00

Flexy @ Сегодня, 16:24 * ,
поправил. вроде работает но выдает вот такое. Что можна с датой сделать чтобы она не именно на число смотрела а на весь месяц в не зависимости какого числа сделали бюджет

Автор: Flexy 23.02.17, 17:05

Если Не Результат.Пустой() Тогда

Выборка = Результат.Выбрать();
Выборка.Следующий();

Если Выборка.СуммаОстаток < СуммаВБазовойВалюте Тогда
Отказ = Истина;
Сообщить("Сумма больше чем Бюджет")
КонецЕсли;

КонецЕсли;

Автор: burza 24.02.17, 9:31

Flexy @ Вчера, 17:05 * ,
Работает. Скажите что изменить чтобы при создании документа его дата была не такая же как в бюджете а в пределах месяца. то есть бюджет делается 1 числа а рассходники то уже потом. Сейчас работает только если рассходник на дата бюджета.

Автор: Flexy 24.02.17, 11:40

burza @ Сегодня, 9:31 * ,
Не понял вопрос. Если Установка Бюджета на 01.02, а Заявка на расход 02.02, что происходит при ее проведении?

Автор: burza 24.02.17, 11:48

Flexy @ Сегодня, 11:40 * ,

Дата заявки остается не изменой а вот ДатаБюджета должна смотреть на бюджет в периоде месяца. То есть если я делаю 2 бюджета 01.02 на 5000 и 01.03 на 5000 то сейчас заявку можно провести 2 раза за месяц на сумму 10000.

Автор: Flexy 24.02.17, 12:19

burza @ Сегодня, 11:48 * ,

 Запрос.УстановитьПараметр("ПериодРегистратора", ДатаБюджета);

Тут не дата бюджета должна быть. А дата документа расхода.

Автор: burza 24.02.17, 13:50

Flexy @ Сегодня, 12:19 * ,
Я правельно понял?
так тоже не работает

Запрос.УстановитьПараметр("ПериодРегистратора", Дата);
    Запрос.УстановитьПараметр("Подразделение", Подразделение);
   Запрос.УстановитьПараметр("Назначение", НазначениеПлатежа);


в документе Бюджет есть 2 даты дата документа и поле месяц, по нем надо информацию брать.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua