|
Удаления движений группы документов. | ☑ | ||
---|---|---|---|---|
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) не выполнялся в ходе регламентной процедуры удаления чеков. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |