8.х Как из общей суммы вычесть регламентированную?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Glikeria, 20 сен 2010.

  1. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте!Подскажите,пожалуйста,как можно решить следующую проблему.Я написала следующую процедуру,для того,чтобы в документе ЗарплатаКВыплате из Суммы вычиталась регламентированная сумма из регистра накопления:
    Код:
    Процедура НадписьВычитаниеРеглНажатие(Элемент)
    
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |   ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
    |   ВзаиморасчетыСРаботникамиОрганизаций.Физлицо КАК Физлицо
    |ИЗ
    |   РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
    |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплате.Зарплата КАК ЗарплатаКВыплатеЗарплата
    |      ПО ВзаиморасчетыСРаботникамиОрганизаций.Регистратор = ЗарплатаКВыплатеЗарплата.Ссылка";
    Результат=Запрос.Выгрузить();
    ВыборкаПоСотрудникам=Результат.Выбрать();
    Ответ=Вопрос("Вычесть регламетированную сумму из общей? ",РежимДиалогаВопрос.ДаНет);
    Если Ответ=КодВозвратаДиалога.Да Тогда
    
    Для Каждого Строка Из Зарплата Цикл
    Если  Строка.Физлицо=ВыборкаПоСотрудникам.Физлицо Тогда
    Строка.Сумма= Строка.Сумма-ВыборкаПоСотрудникам.СуммаВзаиморасчетов;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
    
    Но окзалось,что для регистра накопления ВзаиморасчетыСРаботникамиОрганизаций документ не является регистратором.Можно всё же как-нибудь сделать так,чтобы нужная мне сумма вычиталась?
  2. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    У Вас валюты регламентированного и упр учета совпадают. И еще делайте все одним запросом,прямо в нем вычитайте. Что бы потом не перебирать ЧТ сотрудников- это неправильно.

    А зачем вы по регистратору то соеденияте?
    Идея такая,
    1.таблица что из регистра РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций выбираем остатки по ФЛ которые находятся в ТЧ текущего догумента .
    2.в выборку так же поддтягиваете ТЧ этого документа это вторая табл. и соеденяя их делает сразу вычитание и все
  3. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Я переделала процедуру,но теперь проблема в следющем:я проверяла свою процедуру и получилось так,что если из запроса убрать все параметры,то она вычитает нужную сумму.если же оставить дату,то вместо того,чтобы вычитать долг предприятия на конец месяца,вычитает все выплаты.Почему так может происходить?


    роцедура НадписьВычитаниеРеглНажатие(Элемент)

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

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    НУ во-первых у вас параметр на физ лиц к чему устанавливается?

    должно быть

    РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&дата, Физлицо В (&ФЛ)) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки

    а у вас вросто параметр.

    РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&Дата, &МассивФизлицо)

    Второе. Дата. какая? текущая? начало дня или конец дня?

    и Третье. я уже говорил- это все просто пишеться в 1 запрос и выгружается в ТЧ. Выше писал что для этого надо. А так у Вас еще циклы появляются. и где проверка на ЕСТЬNULL в запросе?
  5. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Дата документа.Ну мне просто непонятно,почему без даты всё вычитается как надо,а с параметром Дата неправильно.Ведь по идее должны просто рассчитаться остатки на заданную дату,в моём случае это дата документа.
    А как прямо в запросе можно вычитать из суммы документа регламентированную сумму?
  6. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    То есть сам запрос можно сделать таким?

    ВЫБРАТЬ
    ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
    ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов
    ИЗ
    Документ.ЗарплатаКВыплате.Зарплата КАК ЗарплатаКВыплатеЗарплата
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки
    ПО (ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо = ЗарплатаКВыплатеЗарплата.Физлицо)
  7. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    Просто надо взять универсальный отчет и смотреть чтоу вас с остатками на дату и сравнивать что у вас в запросе получается.

    Запрос примерно такой

    Код:
    ВЫБРАТЬ
    ЗарплатаКВыплатеЗарплата.НомерСтроки,
    ЗарплатаКВыплатеЗарплата.Физлицо,
    ЗарплатаКВыплатеЗарплата.Сумма - ЕСТЬNULL(ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток, 0) КАК Сумма,
    ЗарплатаКВыплатеЗарплата.Авторасчет
    ИЗ
    Документ.ЗарплатаКВыплате.Зарплата КАК ЗарплатаКВыплатеЗарплата
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&дата, Физлицо В (&ФЛ)) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки
    ПО ЗарплатаКВыплатеЗарплата.Физлицо = ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо
    ГДЕ
    ЗарплатаКВыплатеЗарплата.Ссылка = &ТекущийДокумент
    
  8. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое!Но так,к сожалению,он тоже не то вычитает.Просто если смотреть по расчетному листку организации,получается,что он вычитает все платежи.

    Спасибо большое!Но так,к сожалению,он тоже не то вычитает.Просто если смотреть по расчетному листку организации,получается,что он вычитает все платежи.

    Точнее,если не задавать параметры виртуальной таблицы,то всё как надо считается,а если задавать,то неправильно
  9. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    Просто надо смотреть цифрам уже что да как. Может просто у Вас платежкки как то не так или что то еще . или с вашим документооборотом лучше бать данные из регистра ЗП за месяц организаций
  10. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Эх,как раз в зарплате за месяц указывается ненужная мне сумма
  11. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    НУ тогда это уже отладка пошла- надо смотреть на данных.
  12. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    А не подскажите,почему мозжет быть такое,что при отладке,когда я хочу посмотреть выборку из запроса,результат пустой?

    А не подскажите,почему мозжет быть такое,что при отладке,когда я хочу посмотреть выборку из запроса,результат пустой?Ведь в консоли запросов всё в порядке.
  13. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    вы выборку когда смотрите?

    Если вы смотрите сразу после

    Выбора=Результат.ВЫбрать() то ничего не будет, будет только когда курсор спозиционируете

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

    тогда что то будет. Но на мой взгляд для отладки перед выборкой выгрузить результат в ТЗ и смотреть там

    Тз=Результат.Выгрузить();
    Выбора=Результат.ВЫбрать();
  14. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    | ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
    | ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
    |ИЗ
    | РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
    // Запрос.УстановитьПараметр("Дата",Дата);
    ТЗ=Запрос.Выполнить().Выгрузить();
    Я поставила точку останова на ТЗ=Запрос.Выполнить().Выгрузить();
    Но выборка всё равно пустая
  15. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    Вы точку ставьте на следующей строке после этой а потом смотрите что в ТЗ. т.к вы сейчас находитесь на этой строке и она еще не выполнена.
  16. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Можно я задам Вам последний вопрос по поводу отладки?
    Вот допустим у меня такой запрос:
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    | ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
    | ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
    |ИЗ
    | РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
    // Запрос.УстановитьПараметр("Дата",Дата);
    //МассивФизлицо=Зарплата.ВыгрузитьКолонку("Физлицо");
    //Запрос.УстановитьПараметр("МассивФизлицо",МассивФизлицо);
    Результат=Запрос.Выполнить();
    ВыборкаПоСотрудникам=Результат.Выбрать();
    Ответ=Вопрос("Вычесть регламетированную сумму из общей? ",РежимДиалогаВопрос.ДаНет);
    Если Ответ=КодВозвратаДиалога.Да Тогда
    Пока ВыборкаПоСотрудникам.Следующий() Цикл
    Для Каждого Строка Из Зарплата Цикл
    Если Строка.Физлицо=ВыборкаПоСотрудникам.Физлицо Тогда
    Строка.Сумма= Строка.Сумма-ВыборкаПоСотрудникам.СуммаВзаиморасчетов;
    Если Строка.Сумма<0 Тогда
    Строка.Сумма=0;
    КонецЕсли;


    КонецЕсли;
    КонецЦикла;
    Где надо поставить точки останова?Просто я пробовала уже где только можно,всё равно ничего не получается.Я не понимаю,почему в результат ничего не выводится.
  17. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    Напишите так

    //Запрос.УстановитьПараметр("МассивФизлицо",МассивФизлицо);
    Результат=Запрос.Выполнить();
    ТЗ=Результат.Выгрузить();
    ВыборкаПоСотрудникам=Результат.Выбрать();

    и поставтье точку на строке ВыборкаПоСотрудникам=Результат.Выбрать(); а потом наведите на ТЗ и смотрите что в ней

    ИЛИ

    ставтье точку на строке Для Каждого Строка Из Зарплата Цикл
    и смотрите что у вас в переменной ВыборкаПоСотрудникам.
  18. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Огромное спасибо!То есть если у меня в результате не выбрано никаких сотрудников,то у меня неправильный запрос,так?
  19. TopicStarter Overlay
    Glikeria
    Offline

    Glikeria

    Регистрация:
    30 авг 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Например,когда я хочу посмотреть результаты выборки по сотрудникам,там написано ошибка чтения значения
  20. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    Не факт, может у вас остатков нет. Универсальным отчетом на текущую дату пробовали выкручивать? там в остатках суммы есть?

Поделиться этой страницей