Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проверка регистра накопления перед записью
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
burza
Как сделать проверку регистра накопления чтобы при расходнике он смотрел сколько он может списать если там уже есть статья и сумма к примеру.
Flexy
Посмотреть, как в типовых это сделано не предлагать? smile.gif
burza
Flexy @ Сегодня, 10:53 необходимо зарегистрироваться для просмотра ссылки ,

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

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


 ! 

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

Если СуммаОстатки ИзЗапроса > СуммаДокументаРегистратора Тогда
...
burza
Flexy @ Сегодня, 11:22 необходимо зарегистрироваться для просмотра ссылки ,
Щас попробую)

Сделал вот так и ничего. где ошибся или везде)
 Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ

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

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

Если Выборка.СуммаОстаток < СуммаПроводимогоДокумента Тогда
//Отказ
КонецЕсли;
burza
Flexy @ Сегодня, 11:42 необходимо зарегистрироваться для просмотра ссылки ,
Ошибки полезли


 ! 

необходимо зарегистрироваться для просмотра ссылки: 8
 
Flexy
Неужели Вы тупо скопировали тот текст запроса, что я писал? 32541510.gif
Поставьте правильные (свои) имена переменных в алгоритм smile.gif
burza
Flexy @ Сегодня, 11:48 необходимо зарегистрироваться для просмотра ссылки ,

Поправил но не могу понять что за параметр результат у меня на него ругаеться.
Flexy
Ругается потому, что Результать и Результат - две разные переменне
burza
Flexy @ Сегодня, 13:06 необходимо зарегистрироваться для просмотра ссылки ,


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

Если Выборка.СуммаОстаток < СуммаВБазовойВалюте Тогда
//Отказ
КонецЕсли;
Flexy
Значить нет у Вас такого регистра 44000000.gif
burza
Flexy @ Сегодня, 13:23 необходимо зарегистрироваться для просмотра ссылки ,
как нет вот он

Flexy
БюджетРасходовИПриходов <> ОстаткиБюджетРасходовИПриходов
burza
Flexy @ Сегодня, 13:27 необходимо зарегистрироваться для просмотра ссылки ,
НУжно вот так ?
 |БюджетРасходовИПриходов.СуммаОстаток
    |ИЗ
    | РегистрНакопления.БюджетРасходовИПриходов.Остатки(&ПериодРегистратора, ) КАК БюджетРасходовИПриходов
    |";


на код не ругаеться но сума проводиться все ровно больше чем в бюджете
Flexy
Если Выборка.СуммаОстаток < СуммаВБазовойВалюте Тогда
Отказ = Истина;
КонецЕсли;
burza
Flexy @ Сегодня, 13:32 необходимо зарегистрироваться для просмотра ссылки ,
Сделал так
Flexy
Это хорошо или плохо?
burza
Flexy @ Сегодня, 13:44 необходимо зарегистрироваться для просмотра ссылки ,
ну в бюджете у меня стоит расход по статье этой за месяц 6400. я не могу провести и 100. то есть не работает.

Flexy
Потому што на дату проведения эта сумма = 0. Вы пытаетесь провести расход раньше чем было поступление.
burza
Flexy @ Сегодня, 13:53 необходимо зарегистрироваться для просмотра ссылки ,
я пробывал уже дату менять вот 1 число

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

я исправил дату бюджета на 01,02 все работает я не могу провести одним платежом больше чем стоит в бюджете. но я провожу 6400 и потом могу хоть 100 раз проводить эту сумму
Flexy
В Вашей самописной конфигурации хоть в каком нибудь документе есть контроль превышения остатков?
Что бы 100 раз перепроводить документ, который контролирует остаток нужно перед проведением удалять его движения из регистра.
burza
Flexy @ Сегодня, 14:51 необходимо зарегистрироваться для просмотра ссылки ,
Все заработало. Но мне нужно не только по дате смотреть а и по подразделению и назначению. у нас 3 подразделения и у каждого свой бюджет .Что в запросе нужно дописать?
Flexy
Цитата(burza @ 23.02.17, 15:06) необходимо зарегистрироваться для просмотра ссылки
Что в запросе нужно дописать?

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

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

Если Выборка.СуммаОстаток < СуммаВБазовойВалюте Тогда
Отказ = Истина;
Сообщить("Сумма больше чем Бюджет")
КонецЕсли;
Flexy
    |ВЫБРАТЬ 
    |БюджетРасходовИПриходов.СуммаОстаток
    |ИЗ
    | РегистрНакопления.БюджетРасходовИПриходов.Остатки(&ПериодРегистратора, Подразделение = &Подразделение И
    | Назначение = &Назначение ) КАК БюджетРасходовИПриходов
burza
Flexy @ Сегодня, 16:09 необходимо зарегистрироваться для просмотра ссылки ,
Всервоно пишет Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ЗаявкаНаРасходование.МодульОбъекта(164)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(9, 34)}: Поле не найдено "Назначение"
Подразделение = &Подразделение И <<?>>Назначение = &Назначение
Flexy
Опять не правильные имена переменных. Подставляйте свои.
burza
Flexy @ Сегодня, 16:24 необходимо зарегистрироваться для просмотра ссылки ,
поправил. вроде работает но выдает вот такое. Что можна с датой сделать чтобы она не именно на число смотрела а на весь месяц в не зависимости какого числа сделали бюджет
Flexy
Если Не Результат.Пустой() Тогда

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

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

КонецЕсли;
burza
Flexy @ Вчера, 17:05 необходимо зарегистрироваться для просмотра ссылки ,
Работает. Скажите что изменить чтобы при создании документа его дата была не такая же как в бюджете а в пределах месяца. то есть бюджет делается 1 числа а рассходники то уже потом. Сейчас работает только если рассходник на дата бюджета.
Flexy
burza @ Сегодня, 9:31 необходимо зарегистрироваться для просмотра ссылки ,
Не понял вопрос. Если Установка Бюджета на 01.02, а Заявка на расход 02.02, что происходит при ее проведении?
burza
Flexy @ Сегодня, 11:40 необходимо зарегистрироваться для просмотра ссылки ,

Дата заявки остается не изменой а вот ДатаБюджета должна смотреть на бюджет в периоде месяца. То есть если я делаю 2 бюджета 01.02 на 5000 и 01.03 на 5000 то сейчас заявку можно провести 2 раза за месяц на сумму 10000.
Flexy
burza @ Сегодня, 11:48 необходимо зарегистрироваться для просмотра ссылки ,
 Запрос.УстановитьПараметр("ПериодРегистратора", ДатаБюджета);

Тут не дата бюджета должна быть. А дата документа расхода.
burza
Flexy @ Сегодня, 12:19 необходимо зарегистрироваться для просмотра ссылки ,
Я правельно понял?
так тоже не работает
Запрос.УстановитьПараметр("ПериодРегистратора", Дата);
    Запрос.УстановитьПараметр("Подразделение", Подразделение);
   Запрос.УстановитьПараметр("Назначение", НазначениеПлатежа);


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