7.7 Сравнение значений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем A|_E><Ey, 19 ноя 2015.

  1. TopicStarter Overlay
    A|_E><Ey
    Offline

    A|_E><Ey Опытный в 1С

    Регистрация:
    13 дек 2012
    Сообщения:
    356
    Симпатии:
    2
    Баллы:
    29
    Доброго времени суток, подскажите пожалуйста, кто сталкивался.

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

    Код:
    Сотрудник = СоздатьОбъект("Справочник.Сотрудники");
    СпрСотр = Сотрудник.НайтиПоКоду("00276");
    
        СуммаПоТабелю = 0;
        СуммРКПоТабелю = 0;
       
        ТабДок = СоздатьОбъект("ТаблицаЗначений");
        Табель = СоздатьОбъект("Документ.Табель");
        ПоискПоТабелю = Табель.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода2);
        Табель.ВыгрузитьТабличнуюЧасть(ТабДок);
        Для Инд = 1 По ТабДок.КоличествоСтрок() Цикл
            ТабДок.ПолучитьСтрокуПоНомеру(Инд);
            СотрудникСравнение = СоздатьОбъект("Справочник.Сотрудники");
            СотрудникСравнение.НайтиПоКоду(ТабДок.Сотрудник.Код);
            Если СотрудникСравнение = Сотрудник Тогда
                СуммаПоТабелю = ТабДок.Сумма;
                СуммРКПоТабелю = ТабДок.СуммаРК;
            КонецЕсли;
        КонецЦикла;
    -Banghead--Banghead--Banghead-
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    СотрудникСравнение.ТекущийЭтемент()
  3. TopicStarter Overlay
    A|_E><Ey
    Offline

    A|_E><Ey Опытный в 1С

    Регистрация:
    13 дек 2012
    Сообщения:
    356
    Симпатии:
    2
    Баллы:
    29
    Все равно проскакивает с вариантом ТекущийЭлемент()
  4. TopicStarter Overlay
    A|_E><Ey
    Offline

    A|_E><Ey Опытный в 1С

    Регистрация:
    13 дек 2012
    Сообщения:
    356
    Симпатии:
    2
    Баллы:
    29
    Получилось, вариант такой
    Код:
        Если СотрудникСравнение.Наименование = Сотрудник.Наименование Тогда
                СуммаПоТабелю = ТабДок.Сумма;
                СуммРКПоТабелю = ТабДок.СуммаРК;
            КонецЕсли;
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    сотрудник это реквизит формы?
  6. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    строка кода
    СотрудникСравнение = СоздатьОбъект("Справочник.Сотрудники");

    в цикле - это моветон

    не вижу получитьдокумент(),

    это не будет работать
  7. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    подобные конструкции
    Код:
    СотрудникСравнение = СоздатьОбъект("Справочник.Сотрудники");
    ВСЕГДА за пределами циклов надо делать
    --- Объединение сообщений, 19 ноя 2015 ---
    у него это первой строкой в исходном коде первого поста
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    хм.. не заметил...

    тогда
    Код:
    СотрудникСравнение.ТекущийЭтемент()=Сотрудник.ТекущийЭлемент()
    Насчет СоздатьОбъект Вы абсолютно правы... Азбука
  9. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    403
    Симпатии:
    71
    Баллы:
    54
    Здравствуйте.
    Разве не достаточно сравнить коды элементов справочника? Ведь это один и тот же справочник Сотрудники.

    Код:
    Сотрудник = СоздатьОбъект("Справочник.Сотрудники");
    СпрСотр = Сотрудник.НайтиПоКоду("00276");
    
        СуммаПоТабелю = 0;
        СуммРКПоТабелю = 0;
      
        ТабДок = СоздатьОбъект("ТаблицаЗначений");
        Табель = СоздатьОбъект("Документ.Табель");
        ПоискПоТабелю = Табель.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода2);
        Табель.ВыгрузитьТабличнуюЧасть(ТабДок);
        Для Инд = 1 По ТабДок.КоличествоСтрок() Цикл
            ТабДок.ПолучитьСтрокуПоНомеру(Инд);
            Если ТабДок.Сотрудник.Код = СпрСотр.Код Тогда
                СуммаПоТабелю = ТабДок.Сумма;
                СуммРКПоТабелю = ТабДок.СуммаРК;
            КонецЕсли;
        КонецЦикла;
    Если же коды в пределах подчинения, то сравнивать элементы нет смысла - это будут разные элементы. Через Наименование будет единственным выходом.
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    автор похоже тренируется
  11. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    403
    Симпатии:
    71
    Баллы:
    54
    У меня осталась ошибка, которая проявлялась и раньше с другими вариантами.
    Вот эта команда
    Код:
    СпрСотр = Сотрудник.НайтиПоКоду("00276");
    вернет единицу, а не элемент справочника.
    Нужно было так
    Код:
    Если Сотрудник.НайтиПоКоду("00276") = 1 Тогда
    СпрСотр = Сотрудник.ТекущийЭлемент();
    КонецЕсли;
  12. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    это в принципе как по идее должно быть со всеми проверками

    а часто проскакивает так
    Код:
    СпрСотр = Сотрудник.НайтиПоКоду("00276");
    "чего-то там" = Сотрудник.ТекущийЭлемент();
    
  13. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    403
    Симпатии:
    71
    Баллы:
    54
    Некрасиво и запутаться можно. Зачем присваивать переменной значение, если оно потом не используется? Если уж хочется покороче, то можно же сделать так:
    Код:
    СпрСотр=?(Сотрудник.НайтиПокоду("00276")=1,Сотрудник.ТекущийЭлемент(),0);
  14. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    1) множественные присвоения, особенно в цикле
    2) (и очень весомое) позволяет избавиться от проблемы когда идёт обращение через 2 и более точек
    Последнее редактирование: 23 ноя 2015

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