Имя: Пароль:
1C
1С v8
Помощь по Циклам
0 Tanis
 
26.08.13
15:20
Добрый день!
Подскажите, пожалуйста, как правильно поставить циклы, или как лучше сделать.
Есть таблица:

Дата дока            Кол-во дней
Продажа                    Х
продажа                    У
продажа                    Z
оплата

Нужно получить X, Y и Z. По схеме (дата продажи) - (дата оплаты)

Как возможно написать, чтоб сначала находилась дата оплаты, а потом с начала таблицы вычислялось кол-во дней.
1 Ненавижу 1С
 
гуру
26.08.13
15:22
2 Tanis
 
26.08.13
15:26
Спасибо! Попробую.
3 Tanis
 
26.08.13
15:58
Оказалось не совсем то.
Там по сумме. А мне по датам нужно.
И если правильно понял, то там с последнего начинает вычитать, а в моем случае с первого надо.
4 Hans
 
26.08.13
16:02
5 z01
 
26.08.13
16:03
(0)странная таблица
6 Ненавижу 1С
 
гуру
26.08.13
16:03
(3) а голову включить?
7 z01
 
26.08.13
16:04
(0)а вопрос в чём? как строки перебрать и проверить на значение "оплата "?
8 Tanis
 
26.08.13
16:10
Была продажа, потом еще...
Потом контрагент произвел оплату, надо посчитать через сколько дней он произвел эту оплату после отгрузки.

Значение дока с оплатой есть.

Все значения нахожу, вот только, как заставить после того когда будет найдена строка с датой оплаты, вернуться назад и вычесть эту дату из даты отгрузки. (точнее наоборот из большей меньшую)
9 Tanis
 
26.08.13
16:14
Там же в таблице написано. Что нужно именно дату перебрать.

(6) Уровень не тот.
10 Ненавижу 1С
 
гуру
26.08.13
16:15
то есть на суммы плевать?
если он отгрузился:

01.08 на 1000 руб.
03.08 на 2000 руб.
09.08 на 5000 руб.

а потом 14.08 заплатил 2000 руб.?
11 Tanis
 
26.08.13
16:22
Возможно будет и не плевать.
Вообще задача, посчитать неустойку.
12 Ненавижу 1С
 
гуру
26.08.13
17:10
(11) пока не будет понимания задачи - не будет и решения
13 Tanis
 
27.08.13
08:27
Доброе утро!
Возвращаюсь за помощью в решении.

(12) Задача такая, посчитать неустойку по договору.
Был отгружен товар, к дате документа прибавляется количество дней возможных для оплаты. Если оплата не поступает, то надо рассчитать неустойку.
Берется дата возможная для оплаты (дата дока + срок), из нее вычитается дата оплаты, получается кол-во дней просрочки. Затем от непогашенной суммы высчитываем дневную неустойку по % и умножаем на кол-во дней просрочки.

Сейчас заполняется таблица, всеми доками по договору, даты, суммы.
Но не получается из документов (продажа), которые стоят выше чем оплата отнять дату и сумму.
14 Ненавижу 1С
 
гуру
27.08.13
08:37
(13) если продаж было несколько, то оплата закрывает сначала самую ведь раннюю?
Если да, то это FIFO, см (1)
15 Бертыш
 
27.08.13
08:43
(13) Не получается в запросе или в цикле обхода выборки из результата запроса?
16 Tanis
 
27.08.13
08:54
(14) Какие параметры нужно заполнить? (в базе несколько организаций)

(15) Честно говоря не знаю. Запроса там как-такого нет. Доки берутся из РБ.Хозрасчетный. Далее все циклами и условиями.
Хотел написать циклами, что если находит строчку с оплатой, то чтоб возвращался и вычитал, потом дальше шел. Но либо не то считает, либо зацикливается.

Подумал, может сделать вторую таблицу, отдельно для оплаты.
17 Ненавижу 1С
 
гуру
27.08.13
08:56
(16) сделать всё за тебя? а бабло даешь?
неустойку они берут, коммерсанты хреновы, а денег на внедрение зажали
имхо, конечно
18 Tanis
 
27.08.13
09:01
(17) я же не беру неустойку. Вообще по сути обработка не поможет автоматизировать. Т.к у них разные условия для каждого контрагента и разный подход, по одному условию, вообще придется руками данный вносить, т.к. телепатии 1с еще не научилась.
По тому запросу ФИФО, я уже писал, что уровень у меня не тот. Все хочу на курсы записаться... Про оплату, не знаю... Пока сам хочу дойти до нужного. Правда, время уже поджимает, завал увеличивается.
19 Ненавижу 1С
 
гуру
27.08.13
09:09
(18) а вот все это нельзя у заказчика узнать и формализовать?
20 Tanis
 
27.08.13
09:17
Можно. Но там есть условие, дата получения документов покупателем. Это без ручного ввода никак не сделать.
21 Лодырь
 
27.08.13
09:22
(20) Заведи регистр получения документов, ну или там свойство забабахай. И нехай манагеры расставляют его. Заодно и отчетность улучшится.
22 Tanis
 
27.08.13
09:29
Можно. Так же можно и в доке пометку ставить, но это все руками. Вот о том и говорил, что полностью не автоматизируешь.
23 Tanis
 
28.08.13
11:34
(19) письмо на почту (которая в контактной инфе указана) отправил.
24 Tanis
 
29.08.13
08:06
Доброе утро!
Подскажите, пожалуйста, как правильно использовать метод ФИФО по расчетам с контрагентами, чтоб оплатой закрывались предшествующие реализации. Остаток долга по реализации и разница дат.
Что является параметром Оплата в данном запросе.
25 Гефест
 
29.08.13
08:15
какой параметр? в каком запросе?
26 Tanis
 
29.08.13
08:39
в сообщении (1) сбросили пример использования метода ФИФО, для получения нужного мне результата. Но в сферу своей неграмотности я не знаю как его нужно применить, и что поставить параметром &Оплата
27 Tanis
 
30.08.13
08:30
Доброе утро!
Помогите, пожалуйста, с запросом ФИФО.
28 Rie
 
30.08.13
08:56
(27) Для начала - что именно непонятно в запросе из (1)?
29 Rie
 
30.08.13
09:05
+(28) И ещё один интересный вопрос - а какая конфигурация?
Дело в том, что типовые конфигурации обычно сопоставляют оплаты - реализациям, в них также есть отчёты, которые показывают, какие реализации оплачены, а какие - нет.
И всё, что надо - это вытащить неоплаченные реализации и вычислить разницу между текущей датой и датой документа.
30 Tanis
 
30.08.13
09:11
(29) Конфигурация БП 8.2 2.0

На сайтах нашел, более подробное описание этого запроса. Но практически все они для УПП, используются через РН "Взаиморасчеты с контрагентами", в БП такого нет.

И не понятно, что указывать параметром &Оплата.

Изначально хотел изменить существующую обработку, добавив условие и цикл. Но судя по всему придется писать другую.
31 Rie
 
30.08.13
09:17
(30) Зато в БП 2.0 есть счет 62. В котором третьим субконто идёт "Документ расчёта с контрагентом". Прекрасная замена регистру "Взаиморасчеты с контрагентами"!
32 Rie
 
30.08.13
09:19
+(31) И работать с регистром бухгалтерии Хозрасчетный и извлекать данные об оплатах из него - будет правильнее, чем непосредственно с документами. (Кстати, в запросе из (1) ничего не говорится о том, проведен ли документ, и даже не проверяется, не помечен ли документ на удаление. А ведь это - важно).
33 Tanis
 
30.08.13
09:29
Сейчас используется запрос из РБ по 3 субконто.
Могу привести примеры кода. Или скинуть данную обработку для анализа.
34 hhhh
 
30.08.13
09:31
(33) ну выкладывай, проанализируем
35 Rie
 
30.08.13
09:31
(33) Это прекрасно, что сейчас используется.
Этот запрос выдаёт неоплаченные (не полностью оплаченные) документы? Ну и прекрасно! Осталось только найти разницу между текущей датой и датой документа и отсортировать по возрастанию/убыванию (смотря что нужно) этой разницы.
(Если я правильно понял задачу из (0)).
36 Tanis
 
30.08.13
09:37
Запрос на заполнение ТЧ:

Процедура ЗаполнитьПоДаннымБухгалтерскогоУчета() Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ХозрасчетныйОбороты.Период КАК Дата,
    |    ХозрасчетныйОбороты.Субконто1 КАК ДоговорКонтрагента,
    |    ХозрасчетныйОбороты.Регистратор КАК Документ,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОбороты.СуммаОборот > 0
    |            ТОГДА ХозрасчетныйОбороты.СуммаОборот
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК Кредит,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОбороты.СуммаОборот < 0
    |            ТОГДА ХозрасчетныйОбороты.СуммаОборот
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК Дебет,
    |    ХозрасчетныйОбороты.СуммаОборот КАК Долг,
    |    ЕСТЬNULL(ДанныеПервичныхДокументов.Номер, НЕОПРЕДЕЛЕНО) КАК НомерВходящегоДокумента,
    |    ЕСТЬNULL(ДанныеПервичныхДокументов.Дата, НЕОПРЕДЕЛЕНО) КАК ДатаВходящегоДокумента
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Счет = &Счет62_01, &ВидСубконтоДоговор, Субконто1 = &Договор, , ) КАК ХозрасчетныйОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПервичныхДокументов КАК ДанныеПервичныхДокументов
    |        ПО ХозрасчетныйОбороты.Регистратор = ДанныеПервичныхДокументов.Документ
    |            И (ДанныеПервичныхДокументов.Организация = &Организация)
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    &ДатаНачала,
    |    NULL,
    |    NULL,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОстатки.СуммаОстаток > 0
    |            ТОГДА ХозрасчетныйОстатки.СуммаОстаток
    |        ИНАЧЕ 0
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОстатки.СуммаОстаток < 0
    |            ТОГДА ХозрасчетныйОстатки.СуммаОстаток
    |        ИНАЧЕ 0
    |    КОНЕЦ,
    |    ХозрасчетныйОстатки.СуммаОстаток,
    |    NULL,
    |    NULL
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаНачала, Счет = &Счет62_01, &ВидСубконтоДоговор, Субконто1 = &Договор) КАК ХозрасчетныйОстатки
    |ГДЕ
    |    ХозрасчетныйОстатки.СуммаОстаток <> 0
    |
    |УПОРЯДОЧИТЬ ПО
    |    Дата";

    Запрос.УстановитьПараметр("ДатаНачала",         ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания",      КонецДня(ДатаОкончания));
    Запрос.УстановитьПараметр("Счет62_01",          ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
    Запрос.УстановитьПараметр("ВидСубконтоДоговор", ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
    Запрос.УстановитьПараметр("Договор",            ДоговорКонтрагента);
    Запрос.УстановитьПараметр("Организация",        Организация);
    
    Результат = Запрос.Выполнить();
    
    Если Результат.Пустой() Тогда
        Возврат
    КонецЕсли;
    
    Выборка = Результат.Выбрать();
    
    НаборДвижений = ПоДаннымОрганизации.Выгрузить();
    
    Пока Выборка.Следующий() Цикл
        НоваяСтрока = НаборДвижений.Добавить();
        НоваяСтрока.Дата               = Выборка.Дата;
        НоваяСтрока.Договор            = Выборка.ДоговорКонтрагента;
        НоваяСтрока.Документ           = Выборка.Документ;
        НоваяСтрока.Кредит             = Выборка.Кредит;
        НоваяСтрока.Дебет              = Выборка.Дебет;
        
        // Сформируем строку представления
        Представление = "";

        Если ТипЗнч(Выборка.Документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг")  Или ТипЗнч(Выборка.Документ) = Тип("ДокументСсылка.ОперацияБух") И Выборка.Кредит <> 0 Тогда
            Представление = "Продажа";
        ИначеЕсли ТипЗнч(Выборка.Документ) = Тип("ДокументСсылка.ПоступлениеНаРасчетныйСчет") Или ТипЗнч(Выборка.Документ) = Тип("ДокументСсылка.ОперацияБух") И (Выборка.Дебет <> 0) Тогда
            Представление = "Оплата";
        ИначеЕсли Не ЗначениеЗаполнено(Выборка.Документ) Тогда
            Представление = "Сальдо на " + Формат(ДатаНачала, "ДФ=dd.MM.yyyy");
        КонецЕсли;
        Если Выборка.НомерВходящегоДокумента = Неопределено тогда
            Если Представление = "Продажа" И ТипЗнч(Выборка.Документ) <> Тип("ДокументСсылка.ОперацияБух") Тогда
                Представление = Представление + " (" + ОбщегоНазначения.ПолучитьНомерНаПечать(Выборка.Документ) + " от " + Формат(Выборка.Дата, "ДФ=dd.MM.yyyy") + ")";
            Иначе
                Представление = Представление + " ("+Формат(Выборка.Дата, "ДФ=dd.MM.yyyy") + ")";
            КонецЕсли;
        ИначеЕсли (Выборка.НомерВходящегоДокумента = "" И Представление = "Оплата") Тогда
            Представление = Представление + " (" + Формат(Выборка.Дата, "ДФ=dd.MM.yyyy")+")";
        ИначеЕсли Найти(Представление, "Сальдо") > 0 Тогда
        Иначе
            Представление = Представление +" ("+ ?(НЕ ЗначениеЗаполнено(Выборка.НомерВходящегоДокумента),"_______", Выборка.НомерВходящегоДокумента) +" от "+
            ?(НЕ ЗначениеЗаполнено(Выборка.ДатаВходящегоДокумента), "'  .  .    '", Формат(Выборка.ДатаВходящегоДокумента, "ДФ=dd.MM.yyyy"))+")";
        КонецЕсли;
        НоваяСтрока.Представление      = Представление;
    КонецЦикла;
    ПоДаннымОрганизации.Загрузить(НаборДвижений);
    
КонецПроцедуры


Далее основной расчет идет в:

Функция ПечатьПени()
    
    НаборДвижений = ПоДаннымОрганизации.Выгрузить();
    
    МассивОкончаниеПериодаПросрочки = НаборДвижений.ВыгрузитьКолонку("Дата");
    Если МассивОкончаниеПериодаПросрочки.Количество()> 0 Тогда
        МассивОкончаниеПериодаПросрочки.Удалить(0);
        МассивОкончаниеПериодаПросрочки.Добавить(ДатаОкончания);
    КонецЕсли;
    
    НаборДвижений.Колонки.Добавить("ОкончаниеПериодаПросрочки", Новый ОписаниеТипов("Дата", Новый КвалификаторыДаты(ЧастиДаты.Дата)));
    НаборДвижений.ЗагрузитьКолонку(МассивОкончаниеПериодаПросрочки, "ОкончаниеПериодаПросрочки");
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РасчетПени_РасчетНеустойки";
    Макет  = ПолучитьМакет("РасчетНеустойки");

    ОбластьШапка        = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ОбластьСтрока       = Макет.ПолучитьОбласть("Строка");
    ОбластьИтого        = Макет.ПолучитьОбласть("Итого");
    ОбластьПодвал       = Макет.ПолучитьОбласть("Подвал");
    
    //СведенияОбОрганизации    = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, Дата); //Для документа
    СведенияОбОрганизации    = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, ДатаНачала);
    ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
    
    //СведенияОКонтрагенте     = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Контрагент, Дата);  //Для документа
    СведенияОКонтрагенте     = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Контрагент, ДатаНачала);
    ПредставлениеКонтрагента = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОКонтрагенте, "НаименованиеДляПечатныхФорм,");
    
    ОбластьШапка.Параметры.НазваниеОрганизации = ПредставлениеОрганизации;
    ОбластьШапка.Параметры.ДоговорКонтрагента  = ДоговорКонтрагента;
    ОбластьШапка.Параметры.Контрагент          = ПредставлениеКонтрагента;
    ОбластьШапка.Параметры.ПроцентПени         = "" + ПроцентПени + "%";
    ОбластьШапка.Параметры.ПериодОтчета        = "с " + Формат(ДатаНачала, "ДФ=dd.MM.yyyy") + " по " + Формат(ДатаОкончания, "ДФ=dd.MM.yyyy");
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьШапка);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    
    Долг          = 0;
    СуммаПениИтог = 0;
    ИтоговаяСумма = 0;
    
    Для Каждого Строка Из НаборДвижений Цикл
        Долг = Долг + Строка.Кредит + Строка.Дебет;
        
        РазностьДат = Строка.ОкончаниеПериодаПросрочки - Строка.Дата;
        ДнейЗадолжености = РазностьДат/86400;
        Если Долг > 0 Тогда
            СуммаЗадолжености = Окр(Долг * ПроцентПени / 100 * ДнейЗадолжености, 2);
        Иначе
            СуммаЗадолжености = 0;
        КонецЕсли;
        СуммаПениИтог = СуммаПениИтог + СуммаЗадолжености;
        
        ОбластьСтрока.Параметры.Дата                      = Строка.Дата;
        ОбластьСтрока.Параметры.Кредит                    = Строка.Кредит;
        ОбластьСтрока.Параметры.Дебет                     = - Строка.Дебет;
        ОбластьСтрока.Параметры.Долг                      = Долг;
        ОбластьСтрока.Параметры.НачалоПериодаПросрочки    = Строка.Дата;
        ОбластьСтрока.Параметры.ОкончаниеПериодаПросрочки = Строка.ОкончаниеПериодаПросрочки;
        ОбластьСтрока.Параметры.ПроцентПени               = "" + ПроцентПени + " в день";
        ОбластьСтрока.Параметры.КолвоДнейПросрочки        = ДнейЗадолжености;
        ОбластьСтрока.Параметры.СуммаПени                 = СуммаЗадолжености;
        ОбластьСтрока.Параметры.ПредставлениеДокумента    = Строка.Представление;
        
        ТабДок.Вывести(ОбластьСтрока);
    КонецЦикла;
    
    ОбластьИтого.Параметры.КредитИтог    = НаборДвижений.Итог("Кредит");
    ОбластьИтого.Параметры.ДебетИтог     = - НаборДвижений.Итог("Дебет");
    ОбластьИтого.Параметры.ДолгИтог      = Долг;
    ОбластьИтого.Параметры.СуммаПениИтог = СуммаПениИтог;
    
    ТабДок.Вывести(ОбластьИтого);
    
    ОбластьПодвал.Параметры.ДолгИтог = Долг;
    ОбластьПодвал.Параметры.СуммаПениИтог = СуммаПениИтог;
    ОбластьПодвал.Параметры.ИтогДолгПроценты = Долг + СуммаПениИтог;
    
    ТабДок.Вывести(ОбластьПодвал);
    
    Возврат ТабДок;

КонецФункции // ПечатьПени()


Также есть еще:

Функция РассчитатьДолг()
    
     НаборДвижений = ПоДаннымОрганизации.Выгрузить();
        
        МассивОкончаниеПериодаПросрочки = НаборДвижений.ВыгрузитьКолонку("Дата");
        Если МассивОкончаниеПериодаПросрочки.Количество()> 0 Тогда
            МассивОкончаниеПериодаПросрочки.Удалить(0);
            МассивОкончаниеПериодаПросрочки.Добавить(ДатаОкончания);
        КонецЕсли;
        
        НаборДвижений.Колонки.Добавить("ОкончаниеПериодаПросрочки", Новый ОписаниеТипов("Дата", Новый КвалификаторыДаты(ЧастиДаты.Дата)));
        НаборДвижений.ЗагрузитьКолонку(МассивОкончаниеПериодаПросрочки, "ОкончаниеПериодаПросрочки");
        
        Долг          = 0;
        СуммаПениИтог = 0;
        ИтоговаяСумма = 0;
        
        Для Каждого Строка Из НаборДвижений Цикл
            Долг = Долг + Строка.Кредит + Строка.Дебет;
            РазностьДат = Строка.ОкончаниеПериодаПросрочки - Строка.Дата;
            ДнейЗадолжености = РазностьДат/86400;
            Если Долг > 0 Тогда
                СуммаЗадолжености = Окр(Долг * ПроцентПени / 100 * ДнейЗадолжености, 2);
            Иначе
                СуммаЗадолжености = 0;
            КонецЕсли;
            СуммаПениИтог = СуммаПениИтог + СуммаЗадолжености;
            
        КонецЦикла;
        
        СтруктураДолга = Новый Структура;
        СтруктураДолга.Вставить("Долг", Долг);
        СтруктураДолга.Вставить("СуммаПениИтог", СуммаПениИтог);
        
        Возврат СтруктураДолга;

КонецФункции
37 Tanis
 
30.08.13
09:42
Это оригинальная версия, в свое дописал допустимое количество дней для оплаты, и % пеней исходя из ставки рефинансирования.

Сейчас дни просрочки рассчитываются как разница дат между следующими друг за другом документов.

А надо чтоб считалось разница между допустимой даты 1 доком реализации и датой оплаты, затем сумма реализации * на это количество дней * %пени, далее если полностью не погашена, то разница дней между 1-ой реализацией и 2-ой оплаты, но сумма уже за вычетом 1-ой оплаты.
38 Rie
 
30.08.13
09:43
(36) Не знаю, как там у вас просточка считается. Но в справочнике ДоговорыКонтрагентов есть СрокОплаты.
И если соединить первый запрос со справочником ДоговорыКонтрагентов - то можно просрочку вычислить прямо в запросе.
39 Tanis
 
30.08.13
09:48
(38) тогда дни правильно посчитаются, будут считать до полного погашения? а как с суммами поступит?
40 Rie
 
30.08.13
09:58
(39) Запрос из (1) показывает, как рассчитать неоплаченную часть суммы на каждый документ.
Не парься с параметром &Оплата - посмотри внимательно там на ВложенныйЗапрос.
41 Tanis
 
30.08.13
09:59
как не париться, если он ругается, просит указать параметр.
42 Rie
 
30.08.13
10:02
(41) Тебе же не надо тупо _копировать_ тот запрос. Надо _переписать_ свой запрос, вернее, добавить в свой запрос расчёт просрочки.
ВложенныйЗапрос в (1) как раз и рассчитывает "влияние предыдущих документов на сумму", если так можно выразиться.
43 Rie
 
30.08.13
10:03
+(42) Возьми ВложенныйЗапрос из (1), сунь его в консоль запросов - и посмотри, что он выдаёт (только отсортируй выдачу по датам).
44 Tanis
 
30.08.13
10:07
Пробовал его в консоли, спрашивает параметр суммы.
Попробую еще переделать, добавить параметров.
45 Wobland
 
30.08.13
10:09
предлагаю понять, как работает (1). потом - всё остальное
46 Tanis
 
30.08.13
10:11
Хорошо. Спасибо. Через час - 1,5 отпишусь, что вышло.
Т.е можно исправить эту обработку? И не надо добавлять вторую ТЧ?
Закон Брукера: Даже маленькая практика стоит большой теории.