|   |   | 
| 
 | Удаления движений группы документов. | ☑ | ||
|---|---|---|---|---|
| 0
    
        aptomilov 05.02.19✎ 14:00 | 
        Я ребят озадачился такой проблемкой. 
 Все знают процедуру закрытия смены в УТ в зависимости от настройки кассы чеки либо архивируются либо удаляются непосредственно. И то и то медленно если чеков переваливает за пару тройку сотен. И подумал а что если удалять просто движения у документа но не у одного а сразу кучей и вот к чему я пришел НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.ПолучитьФормуСписка("формаСписка"); //НаборЗаписей=ФормаРегистра.ЭлементыФормы.РегистрНакопленияСписок.Данные; НаборЗаписей.Отбор.Регистратор.ВидСравнения = ВидСравнения.ВСписке; НаборЗаписей.Отбор.Регистратор.Значение = СписокЧеков; НаборЗаписей.Отбор.Регистратор.Использование = Истина; Поясню - нельзя отобрать по условию в списке из регистра так уж они сделали но зато можно отобрать в из формы. Но вот ВОПРОС как получить результат этого отбора и как потом его завалить из регистра. Подозреваю что скорость удаления будет быстрой. | |||
| 1
    
        OldCondom 05.02.19✎ 14:14 | 
        >> Все знают процедуру закрытия смены в УТ
 Я не знаю. НаборЗаписей = форма. Сильно. | |||
| 2
    
        aptomilov 05.02.19✎ 14:14 | 
        Или может кто знает другой способ похерить движения по регистру кучкой ?     | |||
| 3
    
        aptomilov 05.02.19✎ 14:15 | 
        (1) это полет мысли опыты я прост переменные не поменял     | |||
| 4
    
        OldCondom 05.02.19✎ 14:16 | 
        Прочитать и записать пустой набор для 300 регистраторов в цикле - это долго?     | |||
| 5
    
        aptomilov 05.02.19✎ 14:16 | 
        да это реально долг залипает минуты на  2-3     | |||
| 6
    
        aptomilov 05.02.19✎ 14:17 | 
        а когда  17 магазинов закрывает ровно в  18-00 
 сам знаш чо будет )) | |||
| 7
    
        hhhh 05.02.19✎ 14:22 | 
        (5) ну значит это в процедурах ПриЗаписи и ПередЗаписью ваши чудо-программеры нафигачили всякой всячины, поэтому и тормозит. В эту сторону копайте, будет летать за пару секунд.     | |||
| 8
    
        OldCondom 05.02.19✎ 14:28 | 
        +
 Если я не ошибаюсь, форма списка - это записи регистра, не путать с формой набора записей, которой можно манипулировать. | |||
| 9
    
        aptomilov 05.02.19✎ 14:32 | 
        ну а если абстрагироваться то как можно завалить записи из регистра кучей     | |||
| 10
    
        OldCondom 05.02.19✎ 14:34 | 
        (9) Давай абстрагироваться дальше. Как вообще можно удалить записи чего-либо кучей? Есть пример?     | |||
| 11
    
        RomanYS 05.02.19✎ 14:36 | 
        (9) нет. Средствами 1с только запись набора с отбором по регистратору     | |||
| 12
    
        aptomilov 05.02.19✎ 14:50 | 
        вот огорчил тоа 
 у меня была мысля что в списке можно завалить будет из формы | |||
| 13
    
        RomanYS 05.02.19✎ 14:59 | 
        (12) смотри (7)     | |||
| 14
    
        aptomilov 05.02.19✎ 15:09 | 
        ТЗ = Новый ТаблицаЗначений;
 ТЗ = Товары.Выгрузить(,); СписНом = Новый СписокЗначений; Для Каждого Стр Из Товары Цикл СписНом.Добавить(Стр.Номенклатура); КонецЦикла; Если Склад.ВидСклада = Перечисления.ВидыСкладов.Розничный Тогда ВидРегистра = "РегистрНакопления.ТоварыВРознице"; Иначе ВидРегистра = "РегистрНакопления.ТоварыНаСкладах"; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваров.Номенклатура КАК Номенклатура, | ОстаткиТоваров.СерияНоменклатуры, | ОстаткиТоваров.КоличествоОстаток, | ЕСТЬNULL(ОстаткиТоваров.СерияНоменклатуры.СрокГодности, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК СрокГодности, | ОстаткиТоваров.ХарактеристикаНоменклатуры |ИЗ | " + ВидРегистра + ".Остатки(&ДатаОст, ) КАК ОстаткиТоваров |ГДЕ | ОстаткиТоваров.Склад = &Склад | И ОстаткиТоваров.Качество = &Качество | И ОстаткиТоваров.Номенклатура В(&СписНом) | И ОстаткиТоваров.СерияНоменклатуры <> &ПустаяСерия | И ОстаткиТоваров.КоличествоОстаток > 0 | |УПОРЯДОЧИТЬ ПО | Номенклатура, | СрокГодности УБЫВ"; Запрос.УстановитьПараметр("ДатаОст", Дата); Запрос.УстановитьПараметр("Качество", Справочники.Качество.Новый); Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("СписНом", СписНом); Запрос.УстановитьПараметр("ПустаяСерия", Справочники.СерииНоменклатуры.ПустаяСсылка()); ТЗРез = Новый ТаблицаЗначений; ТЗРез = Запрос.Выполнить().Выгрузить(); Товары.Очистить(); Для Каждого СтрТов Из ТЗ Цикл Колво = СтрТов.Количество; КолвоСтрок = ТЗРез.Количество(); Для Сч = 1 По КолвоСтрок Цикл Строчка = ТЗРез.Получить(КолвоСтрок - Сч); Если НЕ Строчка.Номенклатура = СтрТов.Номенклатура Тогда Продолжить; КонецЕсли; Если НЕ СтрТов.СерияНоменклатуры = Справочники.СерииНоменклатуры.ПустаяСсылка() Тогда Если Не СтрТов.СерияНоменклатуры = Строчка.СерияНоменклатуры Тогда Продолжить; КонецЕсли; КонецЕсли; НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = СтрТов.Номенклатура; НоваяСтрока.ЕдиницаИзмерения = СтрТов.ЕдиницаИзмерения; НоваяСтрока.Коэффициент = СтрТов.Коэффициент; НоваяСтрока.Цена = СтрТов.Цена; НоваяСтрока.ПроцентСкидкиНаценки = СтрТов.ПроцентСкидкиНаценки; НоваяСтрока.ХарактеристикаНоменклатуры = Строчка.ХарактеристикаНоменклатуры; НоваяСтрока.СерияНоменклатуры = Строчка.СерияНоменклатуры; НоваяСтрока.Количество = ?(Строчка.КоличествоОстаток <= Колво, Строчка.КоличествоОстаток, Колво); НоваяСтрока.ПроцентАвтоматическихСкидок = СтрТов.ПроцентАвтоматическихСкидок; НоваяСтрока.УсловиеАвтоматическойСкидки = СтрТов.УсловиеАвтоматическойСкидки; НоваяСтрока.ЗначениеУсловияАвтоматическойСкидки = СтрТов.ЗначениеУсловияАвтоматическойСкидки; НоваяСтрока.Артикул = СтрТов.Артикул; НоваяСтрока.Штрихкод = СтрТов.ШтрихКод; Сумма = СтрТов.Цена * ?(Строчка.КоличествоОстаток <= Колво, Строчка.КоличествоОстаток, Колво) ; СуммаСкидки = 0; СуммаСкидки = Сумма * СтрТов.ПроцентАвтоматическихСкидок / 100; СуммаСкидки = СуммаСкидки + (Сумма * СтрТов.ПроцентСкидкиНаценки / 100); НоваяСтрока.Сумма = Сумма - СуммаСкидки; Колво = Колво - ?(Строчка.КоличествоОстаток <= Колво, Строчка.КоличествоОстаток, Колво); Остаток = Строчка.КоличествоОстаток - ?(Строчка.КоличествоОстаток <= Колво, Строчка.КоличествоОстаток, Колво); Если Остаток = 0 Тогда ТЗРез.Удалить(КолвоСтрок - Сч); Иначе Строчка.Установить(3, Остаток); КонецЕсли; Если Колво = 0 Тогда Прервать; КонецЕсли; КонецЦикла; Если Колво > 0 Тогда НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = СтрТов.Номенклатура; НоваяСтрока.ЕдиницаИзмерения = СтрТов.ЕдиницаИзмерения; НоваяСтрока.Коэффициент = СтрТов.Коэффициент; НоваяСтрока.Цена = СтрТов.Цена; НоваяСтрока.ПроцентСкидкиНаценки = СтрТов.ПроцентСкидкиНаценки; НоваяСтрока.Количество = Колво; НоваяСтрока.ПроцентАвтоматическихСкидок = СтрТов.ПроцентАвтоматическихСкидок; НоваяСтрока.УсловиеАвтоматическойСкидки = СтрТов.УсловиеАвтоматическойСкидки; НоваяСтрока.ЗначениеУсловияАвтоматическойСкидки = СтрТов.ЗначениеУсловияАвтоматическойСкидки; НоваяСтрока.Артикул = СтрТов.Артикул; НоваяСтрока.Штрихкод = СтрТов.ШтрихКод; Сумма = СтрТов.Цена * Колво; СуммаСкидки = 0; СуммаСкидки = Сумма * СтрТов.ПроцентАвтоматическихСкидок / 100; СуммаСкидки = СуммаСкидки + (Сумма * СтрТов.ПроцентСкидкиНаценки / 100); НоваяСтрока.Сумма = Сумма - СуммаСкидки; КонецЕсли; КонецЦикла; | |||
| 15
    
        aptomilov 05.02.19✎ 15:09 | 
        вот такой вот грешок     | |||
| 16
    
        aptomilov 05.02.19✎ 15:11 | 
        Перед записью     | |||
| 17
    
        RomanYS 05.02.19✎ 15:17 | 
        (16) перед записью чего? ты же регистры только записывать собирался     | |||
| 18
    
        OldCondom 05.02.19✎ 15:17 | 
        Здесь гениально почти все.     | |||
| 19
    
        FIXXXL 05.02.19✎ 15:50 | 
        (6) сделай узел, регай на нем ссылки к удалению, ночью запускай регламент по удалению зареганных ссылок     | |||
| 20
    
        aptomilov 05.02.19✎ 16:53 | 
        УдалитьОбъекты(МассивЧековККМ, Ложь);
 чеки валятся этой командой | |||
| 21
    
        aptomilov 05.02.19✎ 16:54 | 
        передзаписью объекта     | |||
| 22
    
        FIXXXL 05.02.19✎ 17:08 | 
        (21) ну так вместо удаления сделай регистрацию на узел
 а удаляй потом, регламентным заданием | |||
| 23
    
        aptomilov 05.02.19✎ 17:11 | 
        ЗапросПоЧекам.Текст ="
 |ВЫБРАТЬ | Док.Ссылка КАК Ссылка |ИЗ | Документ.ЧекККМ КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачДата И &КонДата | И Док.КассаККМ = &КассаККМ | И Док.Проведен | И Не Док.Архивный этот запрос не может выполниться конфликт блокировок непонятно тока нахера блокировать таблицу аж на чтение | |||
| 24
    
        Вафель 05.02.19✎ 17:12 | 
        у тебя ут 10.3?     | |||
| 25
    
        aptomilov 05.02.19✎ 17:14 | 
        да     | |||
| 26
    
        aptomilov 05.02.19✎ 17:14 | 
        (22) не все так просто 
 ибо если чеки на завалить или их движения то отчет о рознице не проведется | |||
| 27
    
        aptomilov 05.02.19✎ 17:16 | 
        таблица чеков ккм сильно занята все время     | |||
| 28
    
        unregistered 05.02.19✎ 17:21 | 
        (14) Какая жеэээээсть!...
 Оторвите руки вашему программисту и приделайте их ему к плечам. | |||
| 29
    
        FIXXXL 05.02.19✎ 17:23 | 
        (28) это типовая залепуха :)     | |||
| 30
    
        FIXXXL 05.02.19✎ 17:25 | 
        (29) сорри, не туда смотрел     | |||
| 31
    
        unregistered 05.02.19✎ 17:25 | 
        (18) Не хватает только парочки запросов внутри циклов.     | |||
| 32
    
        unregistered 05.02.19✎ 17:26 | 
        (30) Фуууууф.... Напугал! Я уж грешным делом подумал, что такое творчество уже прям "из коробки" идёт.     | |||
| 33
    
        FIXXXL 05.02.19✎ 17:31 | 
        (32) на (23) смотрел :)     | |||
| 34
    
        unregistered 05.02.19✎ 17:32 | 
        Короче, автор!
 Сделай замер производительности и посмотри на чём конкретно больше всего тупит. Учитывая (14), подозреваю, что запись в регистры - не самое узкое место в процедуре удаления чеков. И если я прав, то для начала надо избавиться от *авнокода типа (14). В качестве временного решения можно хотя бы сделать залепу, чтобы этот код из (14) не выполнялся в ходе регламентной процедуры удаления чеков. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |