Имя: Пароль:
1C
1C 7.7
v7. Как реализовать диалог распределения заказов между складами
0 Джордж1
 
21.12.23
11:25
Задача - сделать распределение заказов между складами с возможностью ручной корректировки
Варианты

1. Таблица в режиме ввода данных - чего то вообще этот вариант не советуют
2. ТЗ на форме - работать не шибко удобно, поедут колонки
3. Сделать документ заказ - и там уже колонки под каждый склад. Благо складов всего 5 и больше не планируется
1 АгентБезопасной Нацио
 
21.12.23
11:35
третий вариант - самый дурной.
если не устраивают 1 и 2 - сделай на табличном поле. Заодно сможешь Drag'n'drop использовать (делал нечто подобное для распределения платежей).
2 Джордж1
 
21.12.23
11:36
(1) 7-ка у меня, а не 8-ка!!!
3 АгентБезопасной Нацио
 
21.12.23
11:37
(2) у всех приличных людей в 7.7 есть табличное поле...
4 Джордж1
 
21.12.23
11:38
Драг энд дроп не нужен

Нужно ручная правка в отдельных местах - когда не с 2-х складов по 1шт тащить, а с одного 2шт.
5 Lazy Stranger
 
21.12.23
11:38
Если нет необходимости в универсальности решения и изменение количества складов маловероятно, я бы, скорее всего, выбрал вариант 3.
6 Джордж1
 
21.12.23
11:39
(3)Что вашем понимании табличное поле в 7-ке
7 Джордж1
 
21.12.23
11:40
(21)последний склад (магазин на самом деле) добавился в 2012 году.
Больше просто некуда
8 Андрей_Андреич
 
naïve
21.12.23
11:41
(5) Только про запас под 10 складов ))
9 ikea
 
21.12.23
11:41
(0) Можно сделать обработку с количеством закладок = количеству складов. И распределяйте себе на здоровье.
10 Fedor-1971
 
21.12.23
11:41
(0) А сам то к какому варианту склоняешься?
вар.1 первоначальный вывод данных не проблема, а вот с обработкой результата ввода будут сложности (придётся соотносить номера колонок и склады)

вар.2 самый адекватный - наиболее универсален и не зависит от количества складов, при программном создании колонок можно указать их ширину и всех делов-то

вар.3 в постановке максимально привязан к текущему моменту, но при добавлении в строку поля Склад становится максимально универсальным (т.е. делим изначальную строку на несколько с указанием склада и сколько на него положить ТМЦ)

Есть ещё один вариант реализации: модернизировать исходный документ Заказ - добавляем ему статус строки, например, так:
- Заказано (строка которая выводится в печатную форму заказа для поставщика)
- Распределено (это строки с указанием ТМЦ, количества и склада используются для отнесения кусочка на конкретный склад)
11 Kigo_Kigo
 
21.12.23
11:43
Или я нехера не понял или что мешает перенести склад в табличную часть?
При проведении, двигать регистры по складам из ТЧ?
12 Джордж1
 
21.12.23
11:44
(10)
"А сам то к какому варианту склоняешься?" - к 3-му

"модернизировать исходный документ Заказ" - а вот нет такого документа, был счет, потом к нему прикрутили создание перемещений...

"но при добавлении в строку поля Склад становится максимально универсальным (т.е. делим изначальную строку на несколько с указанием склада и сколько на него положить ТМЦ)"

ДА можно, только в таком варианте диалог ввода неудобный
Видится все же шахматка
13 Джордж1
 
21.12.23
11:45
(11)
"Или я нехера не понял или что мешает перенести склад в табличную часть?"

Проблема в диалоге ввода. как с несколькими строками работать то толком
14 Fedor-1971
 
21.12.23
11:46
(11) как я понял, нужно сохранить целиком исходный заказ и каким-то образом построить распределение на разные склады
15 АгентБезопасной Нацио
 
21.12.23
11:46
(6) https://www.1cpp.ru/docum/html/TableField.html
Ну или ПоставщикДанных.ИндексированнаяТаблица
(5) весьма часто как только делаемс условием "склады не добавятся" ("не убавятся") - они обязательно добавляются или убавляются... Хотя может это у меня пунктик - пытаться решить любую задачу "в общем виде", но он срабатывает почти постоянно...
16 Джордж1
 
21.12.23
11:47
(14)сейчас заказ это счет, потом на основание счета реализация делается.

Задача заказа - собрать заказ (сделать перемещения) на основной склад.
17 Андрей_Андреич
 
naïve
21.12.23
11:48
Ну или Йокселем
18 Kigo_Kigo
 
21.12.23
11:48
можно склады сделать колонками в которые проставлять количество
19 Джордж1
 
21.12.23
11:49
(15)Я 1cpp не помню когда и работал то последний раз. В этой конфигурации не буду что-то внешнее задействовать

Эта конфигурации уже 17 лет - все равно костыль на костыле уже
20 Джордж1
 
21.12.23
11:49
(18)Вот я к этому и пришел
21 ikea
 
21.12.23
11:49
(13) В (1) же написали. Делаешь обработку. Верхняя половина экрана - это ТЗ с заказами. Нижняя половина - это табличное поле с количеством закладок = количеству складов. И потом просто берешь из верхнего списка заказов тащишь в нужную закладку с необходимым складом в нижнюю часть экрана. Так понятно?.
22 trad
 
21.12.23
11:50
(6) это из ВК 1с++
Довольно мощный инструмент. Там и прямой ввод в ячейки есть и оформление прокачано.
Но придется много кода писать
23 Джордж1
 
21.12.23
11:51
(21)это же неудобно жуть

Есть алгоритм распределения между складами, но его результат надо ручками в некоторых случаях подкорректировать

Какие тянешь мышкой нафиг, может еще пальцем перетаскивать
24 Джордж1
 
21.12.23
11:52
(22)да уж понял, не того уровня тут задача
25 АгентБезопасной Нацио
 
21.12.23
11:53
(22) если ПоставщикДанных - то значительно меньше. Но там, емнип, с драгндропом сложновато...
26 Fedor-1971
 
21.12.23
11:55
(12) т.е., по сути, нужен интерфейс раздачи счёта по магазинам?
Тогда вариант 2 (обработка с программно созданной таблицей значений)
Только это получится "Одноразовая акция" перераспределение нужно? т.е. раздали, потом передумали (для этого нужно реализовать связь Счета и Перемещения)
27 Джордж1
 
21.12.23
11:57
(26)
"Только это получится "Одноразовая акция" перераспределение нужно? т.е. раздали, потом передумали (для этого нужно реализовать связь Счета и Перемещения)" - этого не требуется

Распределение и сейчас одноразовое

в ТЗ на форме смущает - кривое отображение самой ТЗ
28 Fedor-1971
 
21.12.23
11:57
(19) Для программного создания и заполнения ТЗ достаточно стандартных средств
29 Fedor-1971
 
21.12.23
11:58
(27) Если она одна на форме, то гнутиков не должно быть
По сути вар.1 и вар.2 примерно равнозначны по сложности
30 Джордж1
 
21.12.23
12:01
(28)а вот не помню - можно там в одной строке ячейки одна под другой располагать?
31 Fedor-1971
 
21.12.23
12:21
(30) Стандартными средствами, вроде как, нет, только можно определять порядок следования колонок на форме
32 zavsom
 
21.12.23
13:53
что мешает пять табличных полей в документ засунуть? рассказать как это на 77 делается?
33 uno-group
 
21.12.23
13:56
Табличная часть документа и интерфейс не обязательно связывать между собой физически это все делается программно. Таблица в режиме ввода данных.
Товар, Склад1, Склад2,Склад.. Итого. Цена Сумма
Физически в документе Товар, Склад, Кво, Цена, Сумма.
При открытии документа заполняешь Таблицу. При закрытии из таблицы заполняешь табличную часть.
Можно через ТЗ сделать но заполнять хуже.
34 Fedor-1971
 
21.12.23
14:02
(32) Есть вопросы при отображении нескольких ТЗ на форме (без 1С++ не обойдёшься для красивой формы)

(33) Таблица в режиме ввода шикарно заполняется начальными данными, гемор появляется при попытке записать изменения, чисто на мой взгляд, с ТЗ работать несколько проще (вар.1 и вар.2 у ТС по вопросам реализации примерно одинаковы)
35 uno-group
 
21.12.23
14:02
(26) Тут появляются риски появления просрочки. Много товара на складе где больше всего движения, а на другом висит 1 штучка и срок на нее капает. Сотню товара продали за все время, а она так провалялась и испортилась.
36 zavsom
 
21.12.23
14:06
Процедура ВводНового(Копирование,Документ)

    глДокументПриСоздании(Контекст);
    ЧерезФорму=0;
    
    Если Копирование = 1 Тогда
        ЗаполнитьТабличныеЧасти( Документ );
    КонецЕсли;
    
КонецПроцедуры // ВводНового

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

вот пример с одной дополнительной табличной частью , Используем документ тчУчетПроцентов , в котором в шапке единственный реквизит ДокументОснование, а в табличной части наша вторая табличная часть
37 uno-group
 
21.12.23
14:11
(34) А какой там гемор идешь по строкам и по столбцам.
При смене строки таб.область(Текстрока,1); ТекТовар=Обл.Значение;таб.область(Текстрока,квоСкладов+2);
ТекЦена=Обл.Значение;
Для Н=1 по КвоСкладов Цикл
таб.область(Текстрока,Н+1);
ТекКво=Обл.Значение;
Если ТекКво>0 Тогда
НоваяСтрока()
Товар=Тектовар;....
В текущем документе добавляешь 2 процедуры ЗаполнитьТаблицу();ПрочитатьИзТаблицы();
И дописываш ПриВыбореЯчейкиТаблицы().
Остальная логика документа не трогается ктоме того что склад с шапки в табличную часть переехал. В зависимости от пользователя или еще чего то можно показывать разный интерфейс.
38 zavsom
 
21.12.23
14:15
(37) во во :

//------------------------------------------------------------------------------------------------------
Процедура ДействияДобавить()    
    
        
        Действия.НоваяСтрока();
        ТекСтрока = Действия.КоличествоСтрок();
    
        Действия.УстановитьЗначение( ТекСтрока, "ДатаПлатежаТЧ", ДатаПлатежа );
        Действия.УстановитьЗначение( ТекСтрока, "СуммаПлатежаТЧ", СуммаПлатежа );
        ПриИзмененииРеквизита();
    
КонецПроцедуры

//-------------------------------------------------------------------------
Процедура УдалитьСтроку( т )
    ТекСтрока = т.ТекущаяСтрока();
    Если ТекСтрока <> 0 Тогда
        т.УдалитьСтроку( ТекСтрока );
        ПриИзмененииРеквизита();
    КонецЕсли;  
КонецПроцедуры
//-------------------------------------------------------------------------
//    Очистить
Процедура УдалитьСтроки( т )
    т.УдалитьСтроки();
    ПриИзмененииРеквизита();
КонецПроцедуры
39 uno-group
 
21.12.23
14:28
+ таблицы в режиме ввода данных можно Остатки товара на каждом складе построчно отображать
другим шрифтом, выравниванием и т.п. считывая данные через 1 строку или столбец.
40 Джордж1
 
21.12.23
15:11
(32)Задача как раз наоборот стоит - не выбирать остатки из магазина под 0.
41 Джордж1
 
21.12.23
15:14
(21)вот погуглил - даже тут на форуме в старых темах от этого отговаривают. Я так понимаю Таблица в режиме ввода данных - там все ручками и отрисоыывать в таблице и пересчитывать тоже

(32)у меня нет задачи - Несколько табличных полей в документе

(34)Данные таблицы не нужно сохранять и куда-то передавать. Прямо из обработки сформируются Перемещения и все
42 uno-group
 
21.12.23
15:25
(41) Можно как печатную форму нарисовать и потом заполнять нужные поля через обл.значение=1;
А рамки цвета и прочее возьмутся из нарисованного шаблона. Можно программно все отрисовыват практически управляемые формы 8.
43 Джордж1
 
21.12.23
15:30
(42)Вроде как Таблица в режиме ввода данных должна лучше для этого подходить.

И ведь наверное делал такое когда-нибудь, но вспомнить не могу
44 Fedor-1971
 
21.12.23
15:44
(43) Больше на вкус
с Таблицей - можно удобно отрисовать и покрасить
с ТаблицейЗначений - проще реализовать контроль ввода в рамках работы с одной строкой
45 Джордж1
 
21.12.23
15:54
Вообщем пока решили несколько изменить алгоритм распределения - выбирать до 50% остатка магазина
+ отчетик как что распределилось
а дальше уже ручная правка перемещений
46 Djelf
 
21.12.23
16:02
(22) Я бы это описал немного по другому: в ТП кода больше, но из-за всяких выкрутасов с ТЗ на форме (а при таких хотелок как хочет (0)), кода по факту в ТП будет значительно меньше и он будет и понятнее и быстрее.
P.S. ТЗ уже давно не использую, лет 10 как... ТП проще, когда освоишь.
47 Djelf
 
21.12.23
16:12
А вот размещение - вертикально, горизонтально или перпендикулярно тут ответа нет, это зависит от объема информации, в развозках у меня разделено по вертикали.
Фиксирую развозку снизу дабл кликом или табом и Enter, дальше или enter или таскание сверху, где заявки.
Можно и горизонтально, но имхо, помещается меньше информации.
Перпендикулярно не знаю как сделать, но наверное это тоже возможно...
48 Гена
 
21.12.23
16:13
Я бы как всегда разбил монстру на две части. Добавил бы шестой виртуальный склад Заказ и с ним бы работал. Отдельно док "Распределение заказов по складам", в котором по мере надобности уже обнулял бы это шестой склад по реальным с возможностью ручной правки.
49 Джордж1
 
21.12.23
16:24
(48)Не понял каким тут боком шестой склад - они есть но какое отношение они имеют к вопросу

Гена, чем у вас ЕНС дело кончилось? Все сошлось?
50 Гена
 
21.12.23
16:28
(49) К тому, чтобы продажники не раскидывали бы каждый свой заказ на конкретные склады, да ещё и вручную. Чтобы они на автомате шарашили свои заказы, только всплывало бы предупреждение, если хотели бы проставить количество, большее, чем на всех реальных складах.

Дык... ЕНС давно прёт копейка в копейку с данными ИФНС ещё с лета )
51 АгентБезопасной Нацио
 
21.12.23
16:47
(34) не обязательно иметь 5 ТЗ на форме - можно просто перезаполнять табчасть соответствующими данными.
Привязки ТЗ соотвествующим классом тоже делается легко и красиво.
52 AAA
 
21.12.23
18:09
1cpp -> ТабличноеПоле -> прямой ввод в ячейку
54 AAA
 
21.12.23
18:10
Можно для каждой ячейки сделать стрелочки +/-
55 Джордж1
 
21.12.23
18:18
(49)Дак продажники и не раскидывают ничего на склады.
Система заказов (не моя зона ответственности) как-то учитывает фактические остатки, но не идеально.
И система сейчас предупреждает если не удается собрать заказ.
Что бы она оптимально собралась с разных складов


"Дык... ЕНС давно прёт копейка в копейку с данными ИФНС ещё с лета )" - у меня по юрлицам тоже копейка в копейку все сошлось. с ИП несколько сложнее
56 Garykom
 
21.12.23
18:25
1. Таблица в режиме ввода данных - дает объединенные ячейки - самый гибкий вариант
57 Джордж1
 
21.12.23
18:54
(56)объединенные ячейки. И? Чем это удобно?
58 Garykom
 
21.12.23
19:16
(57) Наглядно
Можно слева колонка Номенклатура, справа две колонки Склад и Количество
И по номенклатуре одна ячейка, которая соответствует нужному числу ячеек склад/количество
59 Джордж1
 
21.12.23
19:53
(58)я все же вижу это как одна колонка на склад

А вот для склада уже можно 2 строки, а может и 3 даже:

Остаток
Заказ со склада
Остаток после заказа

В объединении смысла и нет особого - достаточно просто рамку не рисовать.

Почему в архивах форума я нашел только отрицательное мнение по поводу Таблица в режиме ввода данных. Предлагают ТЗ использовать

Пока остановился на варианте в (45), без интерактивной правки заказов до создания перемещений
60 Волшебник
 
21.12.23
19:54
v7 ещё жива?
61 Джордж1
 
21.12.23
19:58
(60)Еще как.

А вы у КиБ не заходите что ли?
62 Волшебник
 
21.12.23
19:59
(61) КиБ - что это?
63 Джордж1
 
21.12.23
20:29
(62)
Красное&Белое
64 Злопчинский
 
21.12.23
22:37
Йоксель.
.
Делал раскидку заказов по машинам доставки. Добавление рейсов на одну машину, перемещение заказов между рейсами, отмена рейса итд. - все тупо жмаканием в нужные места мышкой (без режима ввода данных, табличный документ йокселя).
.
если делать по уму: определить алгоритм "оптимального" распределения заказа клиента по складам. В терминах ТиС формируется неподтвержденная заявка, по "кнопке" раскидывается по складам "оптимально" в виде "заявка на склад"
.
все что будут "дорабатывать" руками - все будет (_._) - проходил уже, относительно недавно у одного их клиентов подобная задача.
.
Послеготовности - стали вопросы - а почему неправильно? ответ: правильно! в соответсвии с "Оптимальным" алгоритмом. - А ну вот же неправильно! - Почему? здесь вот так... - а нифига подобного, вы не учли вот это условию и вот это условие - по ним распредление получается такое какое получается.. А, ну да, да...
65 Волшебник
 
21.12.23
22:41
(63) Нет, не захожу.
66 Злопчинский
 
21.12.23
23:38
(65) А я захожу ;-) Там ставят сопутствующие товары (я их беру) обычного ассортимента и цена бывает ощутимо ниже чем в продуктовых магазинах, видимо в расчете что по пути захватят и основной ассортимент ;-)
67 Джордж1
 
22.12.23
08:50
(65)В сети на 13000 магазинов на кассах стоит фронт на 1С v7
68 Злопчинский
 
22.12.23
23:19
(67) ага, когда увидел - немного удивился...
69 MWWRuza
 
23.12.23
00:39
(68) Ага, я тоже. Но факт.
Тут только напрашивается анекдот:
"Вам шашечки, или ехать?"

Назовите хоть одну задачу, которую нельзя на 7.7 решить? Только не надуманную, "из области фантастики", а реальную, которая необходима в торговой точке или сети торговых точек, на текущий момент, по текущему законодательству(ФФД-1.2, ЕГАИС, маркировка, и т.п.)?
70 Garykom
 
23.12.23
03:12
(69) Все что перечислил для типовых конф 1С 7.7 из коробки нет, в отличие от типовых конф на 8-ке
И даже HTTPСоединения нет (а оно постоянно требуется), только разные костыли
71 АгентБезопасной Нацио
 
23.12.23
06:56
(70) в типовые из коробки это не добавляют умышленно и целенаправленно. И тем не менее, всё это реализовано в "нетиповых". И зачастую - реализовано лучше и удобнее, чем в типовых восьмерочных.
72 Джордж1
 
23.12.23
08:11
(69)несколько табличных частей в документах
отборы по нескольким реквизитам
73 АгентБезопасной Нацио
 
23.12.23
08:26
(72)
1. решается аж тремя путями
1.1 Единая табчасть, и заполнение из нее видимой при переключении (емнип, это читал как раз у WildHare еще примерно в 2003)
1.2 служебный документ на каждую табчасть
1.3 справочник как дополнительная табчасть

2. 1с++, и любые отборы в твоем распоряжении.
74 Джордж1
 
23.12.23
08:57
(72)костыли же. там еще и куча других проблем повылазит - типа определения модифицированности документа

hare_kb.chm - как то так файлик назывался?

еще можно и составной реквизит с отбором вспомнить
75 АгентБезопасной Нацио
 
23.12.23
09:05
(74) да, некоторые сложности будут - ибо "не из коробки" - но  все они решаемые. У Садовникова, емнип, для этого вообще был сделан свой класс - т.е. один раз сделал, и пользуйся...

имхо, единственное преимущество снеговика - СКД (да и то, кто-то начинал делать аналог, но дальше беты дело не ушло - ибо был уже примерно 2010-й).
76 Джордж1
 
23.12.23
09:11
(75)как минимум был универсальный (бухгалтерский?) отчет - еще с начала 200х
77 DirectorGora
 
23.12.23
09:14
(0) Могу подсказать как это сделать в Pascalе
78 АгентБезопасной Нацио
 
23.12.23
09:28
(76) если я правильно помню, то универсальный отчет - это было нечто вроде вчерашнего "Гени[т]ального импорта из экселя" - монстрик, принципиально работающий, но весьма неудобный (да и имеющий очень мало общего с СКД, скорее близок к "универсальному отчету" из УПП/КА)
79 Джордж1
 
23.12.23
09:41
(78)ну тогда это вполне прорыв был.

На ИТС лежал, и никто про него не знал
80 АгентБезопасной Нацио
 
23.12.23
09:52
(79) на ИТС было только и исключительно УГ
81 Злопчинский
 
23.12.23
13:16
В большущем количестве случаев хватает "Универсальный отчет по ТЗ" - с группировоками, шахматкой, для себя еще докрутил:
https://infostart.ru/1c/tools/14794/

вот более продвинутая версия
https://infostart.ru/1c/tools/121675/
82 АгентБезопасной Нацио
 
23.12.23
14:17
(81) ну, у меня всё это заменялось квериконсолью - там и нормальный запрос, и совершенно любой вывод. но кодить немного надо.
83 Злопчинский
 
23.12.23
15:02
(82) ну, квекриконсоль клиенту не поставишь ;-)
84 АгентБезопасной Нацио
 
23.12.23
16:48
(83) почему нет? по сути, это готовое решение было - главное, чтоб эксель стоял с OWC. Была даже отдельная утилита, чтоб кубы напрямую смотреть
85 Злопчинский
 
23.12.23
16:49
В моем мире таких пользователей нет...
86 andrewalexk
 
26.12.23
12:31
(77) :) хорошо хоть не в basice, и откуда эти некропрограммеры берутся
87 Андрей_Андреич
 
naïve
26.12.23
12:37
(86) В ветке по 7.7 обозвать некропрограммером это в аанлы
88 andrewalexk
 
26.12.23
12:42
(87) :) 7.7 в 1998 вышла, мы тогда переходили в с 7.5, а pascal в СССР массового пошел в школы в середине 1980-х
89 Андрей_Андреич
 
naïve
26.12.23
12:48
(88) Ну да - цератопс диплодока динозавром обозвал
90 andrewalexk
 
26.12.23
12:49
:)
скорее некое дистанционирование от принципа бинарной логики
91 АгентБезопасной Нацио
 
26.12.23
13:09
(85) есть. Только они не знали о наличии таких возможностей, а ты не знаешь о наличии таких пользователей...
92 Злопчинский
 
26.12.23
14:36
понятно что они есть, я по "своим" пользователям сужу. Какая, нафиг, консоль? там пользователи максимум на операторов тянут...
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой