Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Старый баг в таблице значений ?

v7: Старый баг в таблице значений ?
Я
   AliAksA
 
12.06.18 - 09:45
Ещё раз всем привет.

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

Таблоид = СоздатьОбъект("ТаблицаЗначений");
Таблоид.НоваяКолонка("Значение", "Число", 5, 0);
...
Таблоид.Значение = 0;
Таблоид.Значение = 1;
Таблоид.Значение = 2;
Таблоид.Значение = 3;
...
Таблоид.Сортировать("-Значение");
...
На выходе: 0, 3, 2, 1.
 
 
   AliAksA
 
1 - 12.06.18 - 09:49
Нет, ну выход я конечно нашел, но некрасиво получается:

Таблоид = СоздатьОбъект("ТаблицаЗначений");
Таблоид.НоваяКолонка("Значение", "Число", 5, 0);
Таблоид.НоваяКолонка("Порядок", "Строка", 5);
...
Таблоид.Значение = Х;
Таблоид.Порядок = Формат(Таблоид.Значение, "Ч(0)5.0");
Таблоид.Сортировать("-Порядок");
   LienXo
 
2 - 12.06.18 - 09:51
А разве не Сортировать("Значение-")?
   AliAksA
 
3 - 12.06.18 - 09:55
(2) гыы, точно, огромное спасибо)
хотя плюсик спереди норм срабатывает ...
ТЕМА ЗАКРЫТА
   AliAksA
 
4 - 12.06.18 - 10:07
Опять открываю тему:
(2) спасает, если это не последнее поле сортировки - если после него отсортировать по другому полю такая же хрень (((
   AliAksA
 
5 - 12.06.18 - 10:11
+(4) т.е.:

Таблоид = СоздатьОбъект("ТаблицаЗначений");
Таблоид.НоваяКолонка("Значение", "Число", 5, 0);
Таблоид.НоваяКолонка("Строчка", "Строка", 2);
...
Таблоид.Значение = 0; Таблоид.Строка = "сс";
Таблоид.Значение = 1; Таблоид.Строка = "бб";
Таблоид.Значение = 2; Таблоид.Строка = "яя";
Таблоид.Значение = 3; Таблоид.Строка = "рр";
...
Таблоид.Сортировать("Значение-, Строка+"); 
...
На выходе: 0, 3, 2, 1.
   hhhh
 
6 - 12.06.18 - 10:14
(4) сортируй по 2м полям. через запятую
   AliAksA
 
7 - 12.06.18 - 10:18
(6) отсортировал - пример в (5) - можешь проверить лично, баг именно и возникает, когда есть последующая сортировка
   Кац
 
8 - 12.06.18 - 10:29
Попробуй значение сделать тип строка
   AliAksA
 
9 - 12.06.18 - 10:31
(8) для числовых значений? догадайся с трех раз что будет ...
в (1) я описал, как вышел из ситуации - может ты это имел ввиду?
   hhhh
 
10 - 12.06.18 - 10:45
(9) пример вручную сюда писал?

Таблоид.НоваяКолонка("Строчка

Таблоид.Сортировать("Значение-, Строка+"); 

куда "Строчка" девалась?

давай нормальный пример.
 
 Рекламное место пустует
   HawkEye
 
11 - 12.06.18 - 10:48
(9) если уж с нулем проблемы, то не проще-ли делать Порядок = Х + 1?
   1Сергей
 
12 - 12.06.18 - 10:51
Чет, не припомню я таких багов в клюшках
   AliAksA
 
13 - 12.06.18 - 10:51
(10) в обработке тестил, менял - замени на строчка
(11) как вариант, но сделал попроще - напрямую перевел число в в строчное форматированное значение с лидирующими нулями - тогда поле порядка не нужно
(12) а попробуй потести :)
   1Сергей
 
14 - 12.06.18 - 10:53
(13) поверю на слово. Нет клюшек под рукой
   AliAksA
 
15 - 12.06.18 - 10:54
(15) Обработкой - вывод через сообщение
   AliAksA
 
16 - 12.06.18 - 11:09
Не баг, а проблема с таблицей по-ходу, нижеприведенное работает норм (заменил имя таблицы значений):

Процедура Сформировать()
    
    ОчиститьОкноСообщений();
    
    Табличка = СоздатьОбъект("ТаблицаЗначений");
    Табличка.НоваяКолонка("Значение", "Число", 5, 0);
    Табличка.НоваяКолонка("Строчка", "Строка", 2);
    
    Табличка.НоваяСтрока(); Табличка.Значение = 0; Табличка.Строчка = "нн";
    Табличка.НоваяСтрока(); Табличка.Значение = 1; Табличка.Строчка = "бб";
    Табличка.НоваяСтрока(); Табличка.Значение = 2; Табличка.Строчка = "бб";
    Табличка.НоваяСтрока(); Табличка.Значение = 2; Табличка.Строчка = "яя";
    Табличка.НоваяСтрока(); Табличка.Значение = 3; Табличка.Строчка = "яя";
    Табличка.НоваяСтрока(); Табличка.Значение = 3; Табличка.Строчка = "рр";
    
    Табличка.Сортировать("-Значение, +Строчка");
    Табличка.ВыбратьСтроки();
    Пока Табличка.ПолучитьСтроку() = 1 Цикл
        Сообщить("" + Табличка.НомерСтроки + " = " + Табличка.Значение + " (" + Табличка.Строчка + ")");
    КонецЦикла;

КонецПроцедуры

В ОКНЕ СООБЩЕНИЙ:

1 = 3 (рр)
2 = 3 (яя)
3 = 2 (бб)
4 = 2 (яя)
5 = 1 (бб)
6 = 0 (нн)

Уфффф, вообще крыша едет ...
   AliAksA
 
17 - 12.06.18 - 11:57
Ниже приведен оригинал на котором споймал баг.
На форме отчета реквизит НаДату типа "Дата" и флажки ПоСчету602, ПоСчету603, ПоСчету604, ПоСчету76.
Внутри:


Перем Таблоид, Печатник;
Перем СумФормат, КолФормат;

//************************************************************************************************************

Процедура ПриОткрытии()
    
    НаДату = ТекущаяДата();
    СумФормат = "Ч-18.2.'";
    КолФормат = "Ч-5.0";
    
    Если ПоСчету602 + ПоСчету603 + ПоСчету604 + ПоСчету76 = 0 Тогда
        ПоСчету602 = 1; ПоСчету603 = 1; ПоСчету604 = 1; ПоСчету76  = 1;
    КонецЕсли;
    
    Таблоид = СоздатьОбъект("ТаблицаЗначений");
    Таблоид.НоваяКолонка("Статус",    "Строка");
    Таблоид.НоваяКолонка("Счет",    "Счет");
    Таблоид.НоваяКолонка("Валюта",    "Справочник.Валюты");
    Таблоид.НоваяКолонка("Агент",    "Справочник.Контрагенты");
    Таблоид.НоваяКолонка("Докум",    "Документ");
    Таблоид.НоваяКолонка("Позиция");
    Таблоид.НоваяКолонка("Сумма",    "Число", 18, 2);
    Таблоид.НоваяКолонка("Срок",    "Дата");
    Таблоид.НоваяКолонка("Проср",    "Число", 5, 0);
    //Таблоид.НоваяКолонка("Проср",    "Строка", 5);

    
КонецПроцедуры// ПриОткрытии()

//************************************************************************************************************
Процедура ВыборкаДанных()
    
    Если ПоСчету602 + ПоСчету603 + ПоСчету604 + ПоСчету76 = 0 Тогда
        ПоСчету602 = 1; ПоСчету603 = 1; ПоСчету604 = 1; ПоСчету76  = 1;
    КонецЕсли;
    
    СписСчетов = СоздатьОбъект("СписокЗначений");
    Если ПоСчету602 = 1 Тогда СписСчетов.ДобавитьЗначение(СчетПоКоду("60.2")); КонецЕсли;
    Если ПоСчету603 = 1 Тогда СписСчетов.ДобавитьЗначение(СчетПоКоду("60.3")); КонецЕсли;
    Если ПоСчету604 = 1 Тогда СписСчетов.ДобавитьЗначение(СчетПоКоду("60.4")); КонецЕсли;
    Если ПоСчету76  = 1 Тогда СписСчетов.ДобавитьЗначение(СчетПоКоду("76"));   КонецЕсли;
    
    БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Контрагенты);
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Накл);
    БухИтоги.ВыполнитьЗапрос(НаДату, , СписСчетов, , , 1, , "СВ");
    
    БухИтоги.ВыбратьСчета();
    Пока БухИтоги.ПолучитьСчет() = 1 Цикл
        БухИтоги.ВыбратьВалюты();
        Пока БухИтоги.ПолучитьВалюту() = 1 Цикл
            
            БухИтоги.ВыбратьСубконто(1);
            Пока БухИтоги.ПолучитьСубконто(1) = 1 Цикл
                БухИтоги.ВыбратьСубконто(2);
                Пока БухИтоги.ПолучитьСубконто(2) = 1 Цикл
                    
                    ВидДока = СокрЛП(БухИтоги.Субконто(2).Вид());
                    Если Найти(ВидДока, "Выписка") > 0 Тогда
                        СрокОплаты = БухИтоги.Субконто(2).ДатаДок;
                    Иначе
                        СрокОплаты = глСрокОплаты(БухИтоги.Субконто(2));
                    КонецЕсли;
                    
                    Если СрокОплаты = Дата(0) Тогда Продолжить; КонецЕсли;
                    ВалютаОплаты = ?(БухИтоги.СНК("В")=0, Константа.ОсновнаяВалюта, БухИтоги.Валюта);
                    Если ПустоеЗначение(ВалютаОплаты) = 1 Тогда Продолжить;    КонецЕсли;
                    СуммаОплаты = ?(БухИтоги.СНК("В")=0, БухИтоги.СНК("С"), БухИтоги.СНК("В"));
                    Если СуммаОплаты = 0 Тогда Продолжить; КонецЕсли;
                    
                    Таблоид.НоваяСтрока();
                    Таблоид.Статус    = "Докум";
                    Таблоид.Счет    = БухИтоги.Счет;
                    Таблоид.Валюта    = ВалютаОплаты;
                    Таблоид.Агент    = БухИтоги.Субконто(1);
                    Таблоид.Докум    = БухИтоги.Субконто(2);
                    Таблоид.Позиция    = глПозицияДока(Таблоид.Докум);
                    Таблоид.Сумма    = СуммаОплаты;
                    Таблоид.Срок    = СрокОплаты;
                    Таблоид.Проср    = Макс(НаДату-СрокОплаты, 0);
                    //Таблоид.Проср    = Формат(Макс(НаДату-СрокОплаты, 0), "Ч(0)5.0");

                    
                КонецЦикла;
            КонецЦикла;
            
        КонецЦикла;
    КонецЦикла;
    
КонецПроцедуры// ВыборкаДанных()

//************************************************************************************************************
Процедура ОбработкаДанных()
    
    Итоговая = СоздатьОбъект("ТаблицаЗначений");
    Таблоид.Выгрузить(Итоговая);
        
    Итоговая.Свернуть("Счет, Валюта, Агент", "Сумма");
    Итоговая.ВыбратьСтроки();
    Пока Итоговая.ПолучитьСтроку() = 1 Цикл
        Таблоид.НоваяСтрока();
        Таблоид.Статус    = "Агент";
        Таблоид.Счет    = Итоговая.Счет;
        Таблоид.Валюта    = Итоговая.Валюта;
        Таблоид.Агент    = Итоговая.Агент;
        Таблоид.Сумма    = Итоговая.Сумма;
    КонецЦикла;
    
    Итоговая.Свернуть("Счет, Валюта", "Сумма");
    Итоговая.ВыбратьСтроки();
    Пока Итоговая.ПолучитьСтроку() = 1 Цикл
        Таблоид.НоваяСтрока();
        Таблоид.Статус    = "Валюта";
        Таблоид.Счет    = Итоговая.Счет;
        Таблоид.Валюта    = Итоговая.Валюта;
        Таблоид.Сумма    = Итоговая.Сумма;
    КонецЦикла;
    
    Итоговая2 = СоздатьОбъект("ТаблицаЗначений");
    Итоговая.Выгрузить(Итоговая2);
    
    Итоговая.Свернуть("Счет", "Сумма");
    Итоговая.ВыбратьСтроки();
    Пока Итоговая.ПолучитьСтроку() = 1 Цикл
        Таблоид.НоваяСтрока();
        Таблоид.Статус    = "Счет";
        Таблоид.Счет    = Итоговая.Счет;
    КонецЦикла;
        
    Таблоид.Сортировать("+Счет, +Валюта, +Агент, -Проср, +Позиция");
    Таблоид.НоваяСтрока();
    Таблоид.Статус        = "Итоги";
        
    Итоговая2.Свернуть("Валюта", "Сумма");
    Итоговая2.ВыбратьСтроки();
    Пока Итоговая2.ПолучитьСтроку() = 1 Цикл
        Таблоид.НоваяСтрока();
        Таблоид.Статус    = "ИтВал";
        Таблоид.Валюта    = Итоговая2.Валюта;
        Таблоид.Сумма    = Итоговая2.Сумма;
    КонецЦикла;
    
КонецПроцедуры// ОбработкаДанных()

//************************************************************************************************************
Процедура ПечатьОтчета(перОбновить=0)
    
    Если перОбновить = 0 Тогда
        Печатник = СоздатьОбъект("Таблица");
    Иначе
        Печатник.Очистить();
    КонецЕсли;
    Печатник.ИсходнаяТаблица("Основная");
    _Заглавие = "Кредитоская задолженность на " + Формат(НаДату, "Дддммгггг") + " г.";
    Расшифровка = "Обновить";
    Печатник.ВывестиСекцию("Шапка");
    
    Таблоид.ВыбратьСтроки();
    Пока Таблоид.ПолучитьСтроку() = 1 Цикл
        
        _Счет        = "По бух.счету «" + СокрЛП(Таблоид.Счет) + "»";
        _Валюта        = СокрЛП(Таблоид.Валюта.ПолнНаименование)
                    + " (" + СокрЛП(Таблоид.Валюта.НаименованиеДляБанка)
                    + "), код " + СокрЛП(Таблоид.Валюта.Код);
        _Контрагент = СокрЛП(Таблоид.Агент.Наименование);
        _Документ    = глПредставДока(Таблоид.Докум);
        _Сумма        = Формат(Таблоид.Сумма, СумФормат);
        _Срок        = Формат(Таблоид.Срок, "Дддммгггг");
        _ПрД        = Формат(Число(Таблоид.Проср), КолФормат);
        
        Если Таблоид.Статус = "Валюта" Тогда
            Расшифровка = Таблоид.Валюта;
        ИначеЕсли Таблоид.Статус = "Агент" Тогда
            Расшифровка = Таблоид.Агент;
        ИначеЕсли Таблоид.Статус = "Докум" Тогда
            Расшифровка = Таблоид.Докум;
        КонецЕсли;
        
        Печатник.ВывестиСекцию(Таблоид.Статус);
    КонецЦикла;
    
    _Колонтитул = _Заглавие;
    Печатник.ПовторятьПриПечатиСтроки(5, 5);
    Печатник.ПараметрыСтраницы(1, , , 15, 7, 7, 7, 7, 7, 1);
    Печатник.КоличествоЭкземпляров(1);
    Печатник.ТолькоПросмотр(1);
    Печатник.Показать(_Колонтитул);
    
КонецПроцедуры// ПечатьОтчета()

//************************************************************************************************************
Процедура Сформировать(перОбновить=0)
    
    ОчиститьОкноСообщений();
    Таблоид.УдалитьСтроки();
    
    ВыборкаДанных();
    Если Таблоид.КоличествоСтрок() = 0 Тогда
        Предупреждение("Данные по заданным условиям не обнаружены !");
        СтатусВозврата(0); Возврат;
    КонецЕсли;
    
    ОбработкаДанных();    
    ПечатьОтчета(перОбновить);
    
КонецПроцедуры// Сформировать()

//************************************************************************************************************
Процедура ОбработкаЯчейкиТаблицы(перЗначение, перФлаг)
    
    Если перЗначение = "Обновить" Тогда
        Сформировать(1);
    ИначеЕсли ТипЗначенияСтр(перЗначение) = "Документ" Тогда
        ОткрытьФорму(перЗначение);
    ИначеЕсли ТипЗначенияСтр(перЗначение) = "Справочник" Тогда
        ОткрытьФорму(перЗначение);
    КонецЕсли;

КонецПроцедуры// ОбработкаЯчейкиТаблицы(перЗначение, перФлаг)

//************************************************************************************************************

в глобальнике:

//************************************************************************************************************

Функция глПозицияДока(перКонтекст) Экспорт
    Перем Часов, Минут, Секунд;
    
    Если перКонтекст.Выбран() = 1 Тогда
        Возврат перКонтекст.ПолучитьПозицию();
    Иначе
        ТекущееВремя(Часов, Минут, Секунд);
        Возврат СформироватьПозициюДокумента(перКонтекст.ДатаДок, Часов, Минут, Секунд);
    КонецЕсли;
    
КонецФункции// глПозицияДока(перКонтекст)

//************************************************************************************************************
   AliAksA
 
18 - 12.06.18 - 12:01
+(17) переменные СумФормат и КолФормат задать можно ручками - форматы вывода циферей.
Рабочий вариант заремован в двух местах.
Не могу понять почему выходит такая байда, сори ...
   hhhh
 
19 - 12.06.18 - 12:28
(18) сортируй просто числа. Не надо СумФормат и КолФормат - это дебилизм. После формата - это у тебя уже строки получаются, причем разной ширины. Сразу плучается "100" < "99"
   AliAksA
 
20 - 12.06.18 - 12:32
(19) форматы используются только при выводе на печать - значения обрабатываются непосредственно перед передачей данных в секции таблицы
   NSSerg
 
21 - 12.06.18 - 12:38
(17) У тебя в примере есть сортировки перед "Проср", уверен что они одинаковы? И в примере "-" перед названием колонки в сортировать.
Ты можешь честно привести пример на котором глючит?
У тебя в ветке нет ни одного рабочего примера подтверждающего (4)
   AliAksA
 
22 - 12.06.18 - 12:42
(21) тестирующая обработка в (16) - работает норм, в (17) - рабочий отчет, на котором споймал баг, а перед этим я с середины теста копипастил
   AliAksA
 
23 - 12.06.18 - 12:42
(21) сортировка в (17) - оригинал
   Попытка1С
 
24 - 12.06.18 - 12:45
(23) А что тебя не устраивает в (16)?

у тебя сортировка в обратном порядке по колонке Значение.

выводиться

1 = 3 (рр)
2 = 3 (яя)
3 = 2 (бб)
4 = 2 (яя)
5 = 1 (бб)
6 = 0 (нн)

первая цифра это номер сточки
   AliAksA
 
25 - 12.06.18 - 12:47
(24) да (16) устраивает - это тест, а мне нужно чтобы (17) взлетел - вот он "косячит"
   NSSerg
 
26 - 12.06.18 - 12:48
(22) В примере в (17) "-" перед "проср", а не после.
И перед сортировкой по "Проср" есть еще сортировки.
(23) В (4) Ты описываешь глюк с минусом после названия колонки. А примере у тебя минус перед.
Ты издеваешься? Ты можешь выложить глючный пример демонстрирующий глюк (4)?

Таблоид.Сортировать("+Счет, +Валюта, +Агент, -Проср, +Позиция");
в духе (4) должно выглядеть
Таблоид.Сортировать("Проср-, Позиция+");
Ну и после сортировки у тебя строки добавляются.
   NSSerg
 
27 - 12.06.18 - 12:49
(25) Ты хочешь чтоб тебе помогли, но не хочешь выложить код который глючит, и который ты сам описал в (4). Как же тебе помочь?
   Попытка1С
 
28 - 12.06.18 - 12:50
Никаких глюков в ТЗ при сортировки нет, об этом было бы давно известно.
   NSSerg
 
29 - 12.06.18 - 12:52
(28) Глюк при сортировке в ТЗ есть, и это давно известно.
Только совершенно не такой.
   AliAksA
 
30 - 12.06.18 - 12:53
(28) (29) щас дам результаты теста кода в (17)
   Попытка1С
 
31 - 12.06.18 - 12:53
(29) если ты про метод КоличествоСтрок() то я в курсе. но к (0) да это не относиться.
   NSSerg
 
32 - 12.06.18 - 12:55
(30) Зачем нужны результаты кода в (17)?
(31) Он сам не понимает что делает. На форуме пишет одно, в коде другое. Сам себя путает, и тех кто пытается помочь тоже.
   AliAksA
 
33 - 12.06.18 - 13:03
(31) (32) все спасибо, нашел - проблема не в таблоиде, а в секциях вывода (Печатник)
в процедуре печати вставил код:
Если Таблоид.Статус = "Докум" Тогда
            Сообщить("" + Таблоид.Счет + " - " + Таблоид.Валюта.Код + " - " + СокрЛП(Таблоид.Агент.ИНН)
            + " = " + Таблоид.Проср + " | " + Таблоид.Позиция);
        КонецЕсли;

он показал все норм, а вот на печатной форме - хрень:

TRADELINE EUROPE L.P.             13'235.00                                
белорусский рубль (BYN), код 933            826'259.62                                
(Д) ОАО " Хозтовары" Гомель                345.84                                
Поступление материалов № 2033665 от 31.05.2018 г.                345.84    30.07.2018    -                        
Поступление материалов № 3235913 от 06.02.2018 г.                  0.60    26.02.2018      106                        
Поступление материалов № 3235967 от 27.02.2018 г.                  2.02    19.03.2018       85                        
БелЦХТ, ЧТУП, г. Могилев                  2.62                                
Поступление материалов № 4796896 от 26.04.2018 г.                 40.00    26.04.2018       47                        
ГЛХУ "Пинский лесхоз", г. Пинск                 40.00
 
 
   AliAksA
 
34 - 12.06.18 - 13:04
+(33) спецом скопипастил кусок выходной таблицы - первый раз такое вижу (((
   AliAksA
 
35 - 12.06.18 - 13:05
+(33) вот ещё для примера: см. ООО "БЕЛКРАТХИМ":

Поступление материалов № 2558561 от 31.05.2018 г.                 27.48    31.05.2018       12                    
Поступление материалов № 3366013 от 06.06.2018 г.                 27.48    06.06.2018        6                    
ООО "Аквафортез"                137.40                            
Поступление материалов № 4926073 от 25.05.2018 г.              1'366.20    25.05.2018       18                    
Поступление материалов № 4926082 от 31.05.2018 г.              1'611.60    31.05.2018       12                    
Поступление материалов № 4926056 от 16.05.2018 г.                369.32    05.06.2018        7                    
ООО "БЕЛКРАТХИМ"              5'457.02                            
Поступление материалов № 4926072 от 25.05.2018 г.                847.20    14.06.2018    -                    
Поступление материалов № 4926083 от 31.05.2018 г.              1'262.70    20.06.2018    -                    
Поступление материалов № 3816664 от 26.05.2018 г.              4'549.53    26.05.2018       17                    
Поступление материалов № 3816831 от 04.06.2018 г.              3'265.49    04.06.2018        8                    
ООО "Белхимсеть"              7'815.02                            
Поступление материалов № 0741152 от 11.10.2017 г.                140.33    11.10.2017      244                    
ООО "ВодаХит"                140.33                            
Поступление материалов № 0789994 от 27.04.2018 г.             21'041.18    17.05.2018       26                    
Поступление материалов № 0789992 от 21.04.2018 г.             21'490.18    21.05.2018       22                    
Поступление материалов № 1453351 от 11.05.2018 г.             10'615.92    10.06.2018        2                    
ООО "МалиГрупп"             53'147.28
   AliAksA
 
36 - 12.06.18 - 13:07
а вот окно сообщений показывает что сортировка в норме:

60.2 - 933 - 200041474 = 45 | #20180329 345580000    489855  
60.2 - 933 - 200041474 = 16 | #20180427 605380000    492941  
60.2 - 933 - 200041474 = 0 | #20180601 461000000    496225  
60.2 - 933 - 190990345 = 258 | #20170927 404150000    473079  
60.2 - 933 - 190990345 = 175 | #20171219 767390000    480444  
60.2 - 933 - 300208810 = 19 | #20180524 595110000    495531  
60.2 - 933 - 300208810 = 0 | #20180606 390200000    496634  
60.2 - 933 - 100947766 = 223 | #20171101 566130000    475328  
60.2 - 933 - 191285066 = 206 | #20171019 603560000    473991  
60.2 - 933 - 191285066 = 206 | #20171019 603660000    473993  
60.2 - 933 - 290987477 = 45 | #20180428 788230000    493165  
60.2 - 933 - 290987477 = 45 | #20180428 788330000    493166  
60.2 - 933 - 290987477 = 12 | #20180531 508440000    496124
   Попытка1С
 
37 - 12.06.18 - 13:08
моксель сам ничего не сортирует, как выводишь так и будет.
   AliAksA
 
38 - 12.06.18 - 13:10
(37) и тем неменее - если подскажешь как и чем - сфоткаю экран
   NSSerg
 
39 - 12.06.18 - 13:11
Ни малейшей связи между (35) и (36) не вижу.
Почему ты считаешь что там хрень?
   NSSerg
 
40 - 12.06.18 - 13:11
(38) Ты считаешь что в (35) что-то не так. Что конкретно тебя в (35) не устраивает?
   AliAksA
 
41 - 12.06.18 - 13:14
(39) (40) - в (33) и (35) - копипаст с таблицы вывода на печать - там прочерки (=0) лидируют!!!
а в (36) результат вставки в процедуру печати:

Таблоид.ВыбратьСтроки();
    Пока Таблоид.ПолучитьСтроку() = 1 Цикл
        
        Если Таблоид.Статус = "Докум" Тогда
            Сообщить("" + Таблоид.Счет + " - " + Таблоид.Валюта.Код + " - " + СокрЛП(Таблоид.Агент.ИНН)
            + " = " + Таблоид.Проср + " | " + Таблоид.Позиция);
        КонецЕсли;
        
        _Счет        = "По бух.счету «" + СокрЛП(Таблоид.Счет) + "»";
        _Валюта        = СокрЛП(Таблоид.Валюта.ПолнНаименование)
                    + " (" + СокрЛП(Таблоид.Валюта.НаименованиеДляБанка)
                    + "), код " + СокрЛП(Таблоид.Валюта.Код);
        _Контрагент = СокрЛП(Таблоид.Агент.Наименование);
        _Документ    = глПредставДока(Таблоид.Докум);
        _Сумма        = Формат(Таблоид.Сумма, СумФормат);
        _Срок        = Формат(Таблоид.Срок, "Дддммгггг");
        _ПрД        = Формат(Число(Таблоид.Проср), КолФормат);
        
        Если Таблоид.Статус = "Валюта" Тогда
            Расшифровка = Таблоид.Валюта;
        ИначеЕсли Таблоид.Статус = "Агент" Тогда
            Расшифровка = Таблоид.Агент;
        ИначеЕсли Таблоид.Статус = "Докум" Тогда
            Расшифровка = Таблоид.Докум;
        КонецЕсли;
        
        Печатник.ВывестиСекцию(Таблоид.Статус);
    КонецЦикла;
   AliAksA
 
42 - 12.06.18 - 13:15
+(41) вывод в окно сообщений идет параллельно:
Пока Таблоид.ПолучитьСтроку() = 1 Цикл
        
        Если Таблоид.Статус = "Докум" Тогда
            Сообщить("" + Таблоид.Счет + " - " + Таблоид.Валюта.Код + " - " + СокрЛП(Таблоид.Агент.ИНН)
            + " = " + Таблоид.Проср + " | " + Таблоид.Позиция);
        КонецЕсли;

результат - разный
   MWWRuza
 
43 - 12.06.18 - 13:17
(38)Ни чем. Стандартные средства Windows. Кнопка PrtScrn, открываете пайнт, вставить из буфера, вырезать нужный кусок, создать файл, вставить вырезанное, сохранить как JPG.
Это если действительно ничего нет. А так, куча программ и сервисов существует для скриншотов...
   AliAksA
 
44 - 12.06.18 - 13:22
Ещё раз после того как укоротил код:

Таблоид.ВыбратьСтроки();
    Пока Таблоид.ПолучитьСтроку() = 1 Цикл
        
        Если Таблоид.Статус = "Докум" Тогда
            Сообщить("" + Таблоид.Счет + " - " + Таблоид.Валюта.Код
            + " - " + СокрЛП(Таблоид.Агент.ИНН)    + " = " + Таблоид.Проср);
        КонецЕсли;
        
        _Счет        = "По бух.счету «" + СокрЛП(Таблоид.Счет) + "»";
        _Валюта        = СокрЛП(Таблоид.Валюта.ПолнНаименование)
                    + " (" + СокрЛП(Таблоид.Валюта.НаименованиеДляБанка)
                    + "), код " + СокрЛП(Таблоид.Валюта.Код);
        _Контрагент = СокрЛП(Таблоид.Агент.Наименование);
        _Документ    = глПредставДока(Таблоид.Докум);
        _Сумма        = Формат(Таблоид.Сумма, СумФормат);
        _Срок        = Формат(Таблоид.Срок, "Дддммгггг");
        _ПрД        = Формат(Число(Таблоид.Проср), КолФормат);

в окне сообщений:

60.4 - 933 - 200297153 = 47
60.4 - 933 - 200297153 = 16
60.4 - 933 - 200297153 = 15
60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 0
60.4 - 933 - 200548726 = 132
60.4 - 933 - 200062076 = 85
60.4 - 933 - 200062076 = 57
60.4 - 933 - 200062076 = 25
60.4 - 933 - 200062076 = 0
60.4 - 933 - 191021390 = 829
60.4 - 933 - 191021390 = 802
60.4 - 933 - 191021390 = 802
60.4 - 933 - 190510854 = 371

как видим - все норм - нули по одному ИНН - на последней позиции

а на печатной форме - хрень!!! (см. ниже)

Услуги сторонних организаций № 352-6 от 31.05.2018 г.                 16.51    31.05.2018       12                
Услуги сторонних организаций № 342-6 от 31.05.2018 г.                271.62    31.05.2018       12                
ЖКХ г. Пинска              1'181.92                        
Услуги сторонних организаций № 297-27 от 28.05.2018 г.                256.50    27.06.2018    -                
Банковская выписка № 000141 от 31.01.2018 г.              3'788.33    31.01.2018      132                
ЗАО " Амкодор-Пинск"              3'788.33                        
Услуги сторонних организаций № 48 от 22.02.2018 г.                269.89    19.03.2018       85                
Услуги сторонних организаций № 140 от 22.03.2018 г.                296.96    16.04.2018       57                
Услуги сторонних организаций № 238 от 23.04.2018 г.                296.96    18.05.2018       25                
ЗАО "Траст-Запад"              1'140.77                        
Услуги сторонних организаций № 334 от 21.05.2018 г.                276.96    15.06.2018    -                
Услуги сторонних организаций № 35 от 05.03.2016 г.                 90.00    05.03.2016      829                
Услуги сторонних организаций № 51 от 01.04.2016 г.                792.00    01.04.2016      802                
Услуги сторонних организаций № 44 от 01.04.2016 г.                550.00    01.04.2016      802                
ЗАО "Центр промышленной оценки"              1'432.00                        
Банковская выписка № 000518 от 06.06.2017 г.                 44.00    06.06.2017      371                
ЗАО Гудвилл Инвест                 44.00                        
Услуги сторонних организаций № 02/18 от 16.01.2018 г.                262.00    23.01.2018      140
   Вася Теркин
 
45 - 12.06.18 - 13:22
(0) Отличный вброс. Пятница, это ты?
   Вася Теркин
 
46 - 12.06.18 - 13:23
Больше кода!!! Или ада?
   NSSerg
 
47 - 12.06.18 - 13:28
в (44) во втором блоке последняя строчка 140 дней.
В первом блоке нет такого значения.
   NSSerg
 
48 - 12.06.18 - 13:29
В первом блоке 16 строк. Во втором 13.
(44) Ты издеваешься?
   ptiz
 
49 - 12.06.18 - 13:31
Вот что бывает, когда убедил себя в том, чего нет.
 
 Рекламное место пустует
   AliAksA
 
50 - 12.06.18 - 13:32
(47) ага заметил, дописал тест - сортировка по агенту нарушена ((( как её вылечить?
вот копипаст окна сообщений - тут наглядно видно как последняя запись по контрагенту к следующему попадает:

60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 12
ЖКХ г. Пинска - 200297153
60.4 - 933 - 200297153 = 0
60.4 - 933 - 200548726 = 132
ЗАО " Амкодор-Пинск" - 200548726
60.4 - 933 - 200062076 = 85
60.4 - 933 - 200062076 = 57
60.4 - 933 - 200062076 = 25
ЗАО "Траст-Запад" - 200062076
60.4 - 933 - 200062076 = 0
60.4 - 933 - 191021390 = 829
60.4 - 933 - 191021390 = 802
60.4 - 933 - 191021390 = 802
ЗАО "Центр промышленной оценки" - 191021390
60.4 - 933 - 190510854 = 371
ЗАО Гудвилл Инвест - 190510854
   NSSerg
 
51 - 12.06.18 - 13:32
+(48)+(47)
В печатной форме 13 строк с документами, в окне сообщений 16.
В печатной форме последняя строчка 140 дней. В овне сообщений нет такого значения.
(44) Проблема не в сортировке.
(50) Это не объясняет (47) и (48)
   AliAksA
 
52 - 12.06.18 - 13:34
(51) смотри (50) - там наглядно видно как нарушена сортировка - общая запись по контрагенту внутрь попадает
   AliAksA
 
53 - 12.06.18 - 13:34
+(52) ориентируйся по ИНН
   catena
 
54 - 12.06.18 - 13:35
(52)А где код на вывод "общая запись по контрагенту"?
   AliAksA
 
55 - 12.06.18 - 13:37
(51) все понял - в строке заглавной контрагента тоже нулевое значение у Проср)
(54) в процедуре печати:

//************************************************************************************************************

Процедура ПечатьОтчета(перОбновить=0)
    
    Если перОбновить = 0 Тогда
        Печатник = СоздатьОбъект("Таблица");
    Иначе
        Печатник.Очистить();
    КонецЕсли;
    Печатник.ИсходнаяТаблица("Основная");
    _Заглавие = "Кредитоская задолженность на " + Формат(НаДату, "Дддммгггг") + " г.";
    Расшифровка = "Обновить";
    Печатник.ВывестиСекцию("Шапка");
    
    Таблоид.ВыбратьСтроки();
    Пока Таблоид.ПолучитьСтроку() = 1 Цикл
        
        Если Таблоид.Статус = "Докум" Тогда
            Сообщить("" + Таблоид.Счет + " - " + Таблоид.Валюта.Код
            + " - " + СокрЛП(Таблоид.Агент.ИНН)    + " = " + Таблоид.Проср);
        ИначеЕсли Таблоид.Статус = "Агент" Тогда
            Сообщить("" + Таблоид.Агент + " - " + СокрЛП(Таблоид.Агент.ИНН));
        КонецЕсли;
        
        _Счет        = "По бух.счету «" + СокрЛП(Таблоид.Счет) + "»";
        _Валюта        = СокрЛП(Таблоид.Валюта.ПолнНаименование)
                    + " (" + СокрЛП(Таблоид.Валюта.НаименованиеДляБанка)
                    + "), код " + СокрЛП(Таблоид.Валюта.Код);
        _Контрагент = СокрЛП(Таблоид.Агент.Наименование);
        _Документ    = глПредставДока(Таблоид.Докум);
        _Сумма        = Формат(Таблоид.Сумма, СумФормат);
        _Срок        = Формат(Таблоид.Срок, "Дддммгггг");
        _ПрД        = Формат(Число(Таблоид.Проср), КолФормат);
   AliAksA
 
56 - 12.06.18 - 13:38
Щас буду репу чесать, как сделать доп.сортировку
   NSSerg
 
57 - 12.06.18 - 13:38
(52) А что ты хотел? Статус присваиваешь до сортировки, потом сортируешь. Строчка с статусом уходит в середину записей по агенту.
(52) Еще раз спросить?
Объясни (47) и (48)
Зачем ты вводишь в заблуждение?
Откуда у тебя взялось в печатной форме значение дней просрочки которого нет в окне сообщений?
Почему разное количество строк?
   AliAksA
 
58 - 12.06.18 - 13:41
(57) ВСЕ - ВЗЛЕТЕЛО !!!

надо было так:
Таблоид.Сортировать("+Счет, +Валюта, +Агент, +Статус, -Проср, +Позиция");

результат из окна сообщений:
ЖКХ г. Пинска - 200297153
60.4 - 933 - 200297153 = 47
60.4 - 933 - 200297153 = 16
60.4 - 933 - 200297153 = 15
60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 12
60.4 - 933 - 200297153 = 0
ЗАО " Амкодор-Пинск" - 200548726
60.4 - 933 - 200548726 = 132
ЗАО "Траст-Запад" - 200062076
60.4 - 933 - 200062076 = 85
60.4 - 933 - 200062076 = 57
60.4 - 933 - 200062076 = 25
60.4 - 933 - 200062076 = 0

ВСЕМ ОГРОМНОЕ СПАСИБО !!!
   NSSerg
 
59 - 12.06.18 - 13:41
И в (0) и в (5) - написано то, чего не было в твоих тестах.
в (44) тоже написано не то что выдал твой тест. Зачем ты это делаешь?
   Злопчинский
 
60 - 12.06.18 - 13:43
Может зае-банить пользователя за неадекватность?
   AliAksA
 
61 - 12.06.18 - 13:43
(59) я сам не знал откуда ноги растут - как мог - так и описал (
отдельное спасибо
   AliAksA
 
62 - 12.06.18 - 13:44
(59) в (44) - реальный копипаст из окна вывода, просто скопировал немного разные куски - отчет слишком большой - задолбался бы искать одинаковые куски - вот и разница
   NSSerg
 
63 - 12.06.18 - 13:50
(62) понятно.
   AliAksA
 
64 - 12.06.18 - 13:52
(63) сори, просто раньше не требовалось сортировки по просрочке - все работало норм, а тут добавил - быстро надо было - ну чуть крыша и не поехала поэтому и написал с вопросом "Баг ли это ?"
   Злопчинский
 
65 - 12.06.18 - 14:18
Это что, я раз два часа охреневал, не мог понять почему предопределенная ПриОткрытии(), не отрабатывает.. уже собирался на 8-ку перейти... Потом - перед тем как на форум писать - мы ж должны пил не морочить тупой херней - прозрел...

Функция ПриОткрытии()
//траляля

КонецФункции

..она и не отрабатывает..
ржал минут 15 над собой
   AliAksA
 
66 - 12.06.18 - 14:22
(65) да всяко бывает - я точку с запятой в запросе после строки не поставил - целый день искал почему запрос не отрабатывает)))
   NSSerg
 
67 - 12.06.18 - 14:26
(65) Буквально на днях провозился кучу времени.
в глДействия(Конт, СписокДействий)
По действию во внешнюю обработку передавался конт.Текущийдокумент()
Добавил действие которое работает с контекстом, а не с записанным документом. Копированием двух строк.
В обработке обрабатывается ТЧ, и загружается обратно в документ.
Поменял конт.Текущийдокумент() на конт. А оно не работает. Ни в какую.
Что оказалось - действий много, и они очень похожи 

Если Действие = "Отчет о движениях документа" Тогда
            глСформироватьДвиженияДокумента(Конт); 
        иначеесли Действие="Прослушать разговор" тогда
            ОткрытьФорму("Отчет",конт,КаталогИБ() + "\ExtForms\Прослушать разговор.ert");
        иначеесли Действие="История изменений" тогда
            ОткрытьФорму("Обработка.ПоказатьИсториюИзменений",Конт);

И далее в таком духе куча строк. Час убил. Оказалось не в той строке конт.Текущийдокумент() поменял на конт.
   Злопчинский
 
68 - 12.06.18 - 14:30
Действие="Прослушать разговор"
..
это хорошо, что ты дальше раскладку по глДействия не привел... Судя по всему у тебя там есть

Действие="Направить лампу в лицо"

и прочие проистекающие...
   Злопчинский
 
69 - 12.06.18 - 14:31
(67) я думал, ты уже на 8-ку давно перешел...
   NSSerg
 
70 - 12.06.18 - 14:32
(69) У меня много баз. И те и те.
   Злопчинский
 
71 - 12.06.18 - 14:33
(70) Программист-бетонщик?
   NSSerg
 
72 - 12.06.18 - 14:36
(68) ИМХО надо или на справочник переделать, либо на *.efd.
У нас привязка разговора оператора к документам сделана. Из заявки можно прослушать разговор оператора принявшего заявку по телефону. Запись видео тоже была с привязкой к документу взвешивания, но не прижилось.
(71) Не вижу ни малейшей разницы на чем писать.
   МихаилМ
 
73 - 12.06.18 - 15:45
в 1с77 нужно сортировать со звездочкой по внутреннему представлению.
   NSSerg
 
74 - 12.06.18 - 15:51
(73) ИМХО лучше уж Тогда Агент+,Агент*
Чтоб по алфавиту, а среди дублей по внутреннему представлению
   Злопчинский
 
75 - 12.06.18 - 16:01
(73) (74) угу, я раз так нарвался, по недомыслию... Сортировал по договорам, а там везде "Основной договор"...
   Попытка1С
 
76 - 12.06.18 - 16:10
(65) А в чем тут трабла..?
   Попытка1С
 
77 - 12.06.18 - 16:10
Нет тела функции или чего?
   NSSerg
 
78 - 12.06.18 - 16:11
(77) Процедура
   Попытка1С
 
79 - 12.06.18 - 16:12
бгг)
   Попытка1С
 
80 - 12.06.18 - 16:13
У меня было по другому, не мог понять почему не отрабатывает
Процедура ПриОкрытии()

//труляля


КонецПроцедуры


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует