во втором списке "Уникальные Детали-Операции" не верно отображается статус (нет соответствия Статус-операция). При изменении статуса, он (статус) в списке меняется на первой строке детали, а измененная операция помещается на последнюю строку детали - из-за этого несинхрон.
Я не очень понимаю, что имеете в виду. Строки этой таблицы для этой детали соответствуют, грубо говоря, ячейкам первой таблицы. Строки "Выполнено" - зеленым ячейкам, строка "В работе" - жёлтой. Никакого соответствия "Статус-операция" в таблицу "Уникальные Детали-операции" не закладывалось, а строки расположены по алфавитному порядку сцепки "Деталь-Операция" - для удобства работы функций типа ВПР.
[p.s.]Ах, понял! Да-да, была ошибка в формуле ВПР, нужно вот так:(что-то не работает тэг PS)[/p.s.]
во втором списке "Уникальные Детали-Операции" не верно отображается статус (нет соответствия Статус-операция). При изменении статуса, он (статус) в списке меняется на первой строке детали, а измененная операция помещается на последнюю строку детали - из-за этого несинхрон.
Я не очень понимаю, что имеете в виду. Строки этой таблицы для этой детали соответствуют, грубо говоря, ячейкам первой таблицы. Строки "Выполнено" - зеленым ячейкам, строка "В работе" - жёлтой. Никакого соответствия "Статус-операция" в таблицу "Уникальные Детали-операции" не закладывалось, а строки расположены по алфавитному порядку сцепки "Деталь-Операция" - для удобства работы функций типа ВПР.
[p.s.]Ах, понял! Да-да, была ошибка в формуле ВПР, нужно вот так:(что-то не работает тэг PS)[/p.s.]
Как их дальше различить, какая из них идёт на ФЧПУ, а какая на ФЧПУ2 ?
На примере листа https://docs.google.com/spreads....8373344 из первого файла. (TPYG.1789.00.05_Матрица): ФЧПУ стоит первой в очереди, ФЧПУ2 - далее по процессу. Т.е. каждая таблица с отдельной деталью представляет собой перечень последовательных процессов, которые должны выполняться поочередно. Я думал будет достаточно разделить их на ФЧПУ и ФЧПУ2, но нет. Создавать отдельные таблицы под ФЧПУ2 нерационально, так как необходима именно одна таблица на деталь (предусмотрено процессом работы с этими файлами). Я так понял другого легкого пути нет.
[p.s.]Прошу прощения. я разобрался, все в порядке. Не нужно, чтобы наименование детали для ФЧПУ и ФЧПУ2 отличались, просто нужно, что бы они фиксировались вдвоем в таблице. Сейчас они фиксируются вдвоем только тогда, когда ФЧПУ и ФЧПУ2 имеют статус "В работе. В остальных случаях (когда у ФЧПУ и ФЧПУ2 разные статусы) они вдвоем в таблице не фиксируются (а очень важно что бы фиксировались). Как это сделать - не знаю"[/p.s.]
Как их дальше различить, какая из них идёт на ФЧПУ, а какая на ФЧПУ2 ?
На примере листа https://docs.google.com/spreads....8373344 из первого файла. (TPYG.1789.00.05_Матрица): ФЧПУ стоит первой в очереди, ФЧПУ2 - далее по процессу. Т.е. каждая таблица с отдельной деталью представляет собой перечень последовательных процессов, которые должны выполняться поочередно. Я думал будет достаточно разделить их на ФЧПУ и ФЧПУ2, но нет. Создавать отдельные таблицы под ФЧПУ2 нерационально, так как необходима именно одна таблица на деталь (предусмотрено процессом работы с этими файлами). Я так понял другого легкого пути нет.
[p.s.]Прошу прощения. я разобрался, все в порядке. Не нужно, чтобы наименование детали для ФЧПУ и ФЧПУ2 отличались, просто нужно, что бы они фиксировались вдвоем в таблице. Сейчас они фиксируются вдвоем только тогда, когда ФЧПУ и ФЧПУ2 имеют статус "В работе. В остальных случаях (когда у ФЧПУ и ФЧПУ2 разные статусы) они вдвоем в таблице не фиксируются (а очень важно что бы фиксировались). Как это сделать - не знаю"[/p.s.]gutsoff200991
Сообщение отредактировал Serge_007 - Вторник, 31.01.2023, 15:03
Gustav, Процесс который вы создали - именно то, что нам нужно. Спасибо большое. Удалять этот шедевр и в голову не приходило. Однако все это было задумано с одной целью - автоматизировать процесс. Тот факт, что нужно руками перетащить деталь из очереди на станок и был так задуман. Но... если начальник смены не успеет вовремя перетащить деталь из очереди на станок (до того, как ее статус будет "Выполнено"), деталь и вовсе пропадет из очереди и из листа со станком. И я так понял, кроме как полностью переписать полюбившийся нам процесс (а переписывать мы не будем) этих случайных пропаж не исправить?
Gustav, Процесс который вы создали - именно то, что нам нужно. Спасибо большое. Удалять этот шедевр и в голову не приходило. Однако все это было задумано с одной целью - автоматизировать процесс. Тот факт, что нужно руками перетащить деталь из очереди на станок и был так задуман. Но... если начальник смены не успеет вовремя перетащить деталь из очереди на станок (до того, как ее статус будет "Выполнено"), деталь и вовсе пропадет из очереди и из листа со станком. И я так понял, кроме как полностью переписать полюбившийся нам процесс (а переписывать мы не будем) этих случайных пропаж не исправить?gutsoff200991
Сообщение отредактировал Serge_007 - Вторник, 31.01.2023, 15:01
Не нужно, чтобы наименование детали для ФЧПУ и ФЧПУ2 отличались, просто нужно, что бы они фиксировались вдвоем в таблице. Сейчас они фиксируются вдвоем только тогда, когда ФЧПУ и ФЧПУ2 имеют статус "В работе. В остальных случаях (когда у ФЧПУ и ФЧПУ2 разные статусы) они вдвоем в таблице не фиксируются (а очень важно что бы фиксировались)
[/vba]в нее попадают детали операций ФЧПУ и ФЧПУ2. При этом одна и та же деталь одновременно может иметь только одну операцию в статусе "В работе". И это означает, что удвоение названия детали в списке очереди в столбце M не будет: сначала деталь появится в очереди для операции ФЧПУ, потом покинет очередь и перейдёт в рабочую зону станка - там "обработается" и приобретет статус "Выполнено". После этого статус "В работе" установится для операции ФЧПУ2 этой детали и она снова ДОЛЖНА БУДЕТ появиться в очереди, причем, опять в единственном числе.
ДОЛЖНА БУДЕТ, но не появится, потому что будут мешать вот эти условия формулы:[vba]
[/vba]которые означают, что при наличии детали хотя бы в одной из колонок "номер и обозначение детали", в очереди она появиться не сможет.
Как же выйти из ситуации? Напрашивается некоторое усложнение условий выше, а именно, не только проверка наличия детали в колонке "номер и обозначение детали", но и присутствие некоторой непустой информации в других колонках ("время начала", "время окончания" и др.). ВОПРОС: На заполнение какой бы колонки при этом ориентироваться? Т.е. какая из колонок будет заполнена всегда во время выполнения или после выполнения? Когда мы добавим это условие, деталь снова сможет появляться в очереди (уже для выполнения операции ФЧПУ2) даже при наличии детали в рабочей зоне станка (среди уже обработанных операцией ФЧПУ).
Не нужно, чтобы наименование детали для ФЧПУ и ФЧПУ2 отличались, просто нужно, что бы они фиксировались вдвоем в таблице. Сейчас они фиксируются вдвоем только тогда, когда ФЧПУ и ФЧПУ2 имеют статус "В работе. В остальных случаях (когда у ФЧПУ и ФЧПУ2 разные статусы) они вдвоем в таблице не фиксируются (а очень важно что бы фиксировались)
[/vba]в нее попадают детали операций ФЧПУ и ФЧПУ2. При этом одна и та же деталь одновременно может иметь только одну операцию в статусе "В работе". И это означает, что удвоение названия детали в списке очереди в столбце M не будет: сначала деталь появится в очереди для операции ФЧПУ, потом покинет очередь и перейдёт в рабочую зону станка - там "обработается" и приобретет статус "Выполнено". После этого статус "В работе" установится для операции ФЧПУ2 этой детали и она снова ДОЛЖНА БУДЕТ появиться в очереди, причем, опять в единственном числе.
ДОЛЖНА БУДЕТ, но не появится, потому что будут мешать вот эти условия формулы:[vba]
[/vba]которые означают, что при наличии детали хотя бы в одной из колонок "номер и обозначение детали", в очереди она появиться не сможет.
Как же выйти из ситуации? Напрашивается некоторое усложнение условий выше, а именно, не только проверка наличия детали в колонке "номер и обозначение детали", но и присутствие некоторой непустой информации в других колонках ("время начала", "время окончания" и др.). ВОПРОС: На заполнение какой бы колонки при этом ориентироваться? Т.е. какая из колонок будет заполнена всегда во время выполнения или после выполнения? Когда мы добавим это условие, деталь снова сможет появляться в очереди (уже для выполнения операции ФЧПУ2) даже при наличии детали в рабочей зоне станка (среди уже обработанных операцией ФЧПУ).Gustav
если начальник смены не успеет вовремя перетащить деталь из очереди на станок (до того, как ее статус будет "Выполнено"), деталь и вовсе пропадет из очереди и из листа со станком
Можно завести специальный рабочий лист, на котором будет формула-запрос, отлавливающая такие "пропажи". Соответственно, оператору таблицы останется периодически заглядывать на этот лист и мониторить ситуацию. Можно даже придумать скрипт, отправляющий, например, письма-напоминания ответственным сотрудникам (скрипт может запускаться автоматически, благодаря срабатыванию настроенного триггера, скажем, раз в сутки или раз в неделю или по иному расписанию).
ВОПРОС: Каков критерий подобной "пропажи"? Операция детали имеет статус "Выполнено", но отсутствует в колонке "номер и обозначение детали" в архиве рабочей зоны станка, выполняющего данную операцию - так? И в архиве, похоже, всё же надо указать какой операцией была обработана деталь. Может быть, в колонке "комментарии" писать "ФЧПУ" или "ФЧПУ2"?
И, кстати, давно напрашивается справочник соответствия операций - станкам (рабочим листам). Потому что станок, например, в формуле своей очереди знает, какие операции из общего списка он выбирает. А вот для того, чтобы понять, на каком листе-станке будет обработана произвольная уникальная строка "деталь-операция" сейчас нужно как-то (видимо, скриптом) перебрать все имеющиеся листы-станки. Поэтому нужен инструмент, помогающий решить эту задачу, более коротким путем.
если начальник смены не успеет вовремя перетащить деталь из очереди на станок (до того, как ее статус будет "Выполнено"), деталь и вовсе пропадет из очереди и из листа со станком
Можно завести специальный рабочий лист, на котором будет формула-запрос, отлавливающая такие "пропажи". Соответственно, оператору таблицы останется периодически заглядывать на этот лист и мониторить ситуацию. Можно даже придумать скрипт, отправляющий, например, письма-напоминания ответственным сотрудникам (скрипт может запускаться автоматически, благодаря срабатыванию настроенного триггера, скажем, раз в сутки или раз в неделю или по иному расписанию).
ВОПРОС: Каков критерий подобной "пропажи"? Операция детали имеет статус "Выполнено", но отсутствует в колонке "номер и обозначение детали" в архиве рабочей зоны станка, выполняющего данную операцию - так? И в архиве, похоже, всё же надо указать какой операцией была обработана деталь. Может быть, в колонке "комментарии" писать "ФЧПУ" или "ФЧПУ2"?
И, кстати, давно напрашивается справочник соответствия операций - станкам (рабочим листам). Потому что станок, например, в формуле своей очереди знает, какие операции из общего списка он выбирает. А вот для того, чтобы понять, на каком листе-станке будет обработана произвольная уникальная строка "деталь-операция" сейчас нужно как-то (видимо, скриптом) перебрать все имеющиеся листы-станки. Поэтому нужен инструмент, помогающий решить эту задачу, более коротким путем.Gustav
ВОПРОС: На заполнение какой бы колонки при этом ориентироваться?
Здравствуйте, Густав. Еще раз благодарю за содействие. Думаю это должна быть колонка "Время начала обработки" в рабочей зоне станка (т.к. она). Эта надстройка в формуле будет сильно усложнять формулу и время на ее обработку?
ВОПРОС: На заполнение какой бы колонки при этом ориентироваться?
Здравствуйте, Густав. Еще раз благодарю за содействие. Думаю это должна быть колонка "Время начала обработки" в рабочей зоне станка (т.к. она). Эта надстройка в формуле будет сильно усложнять формулу и время на ее обработку?gutsoff200991
Можно завести специальный рабочий лист, на котором будет формула-запрос, отлавливающая такие "пропажи"
Можно завести один рабочий лист для отлавливания "пропажи" на все листы всех станков? Или для каждого станка возможен только свой отдельный рабочий лист? Вообще этот список с "пропажами" очень выручил бы.
ВОПРОС: Каков критерий подобной "пропажи"? Операция детали имеет статус "Выполнено", но отсутствует в колонке "номер и обозначение детали" в архиве рабочей зоны станка, выполняющего данную операцию - так?
И, кстати, давно напрашивается справочник соответствия операций - станкам (рабочим листам)
Я же правильно понимаю, что сейчас это соответствие происходит за счет функции в колонке "Очередь деталей на станки"? А вы предлагаете его усовершенствовать до скрипта?
Можно завести специальный рабочий лист, на котором будет формула-запрос, отлавливающая такие "пропажи"
Можно завести один рабочий лист для отлавливания "пропажи" на все листы всех станков? Или для каждого станка возможен только свой отдельный рабочий лист? Вообще этот список с "пропажами" очень выручил бы.
ВОПРОС: Каков критерий подобной "пропажи"? Операция детали имеет статус "Выполнено", но отсутствует в колонке "номер и обозначение детали" в архиве рабочей зоны станка, выполняющего данную операцию - так?
И, кстати, давно напрашивается справочник соответствия операций - станкам (рабочим листам)
Я же правильно понимаю, что сейчас это соответствие происходит за счет функции в колонке "Очередь деталей на станки"? А вы предлагаете его усовершенствовать до скрипта?gutsoff200991
Как же выйти из ситуации? Напрашивается некоторое усложнение условий выше, а именно, не только проверка наличия детали в колонке "номер и обозначение детали", но и присутствие некоторой непустой информации в других колонках ("время начала", "время окончания" и др.). ВОПРОС: На заполнение какой бы колонки при этом ориентироваться? Т.е. какая из колонок будет заполнена всегда во время выполнения или после выполнения? Когда мы добавим это условие, деталь снова сможет появляться в очереди (уже для выполнения операции ФЧПУ2) даже при наличии детали в рабочей зоне станка (среди уже обработанных операцией ФЧПУ).
Эта надстройка в формуле будет сильно усложнять формулу и время на ее обработку?
Возвращаемся в тему. Попытка движения в этом направлении, а именно, попытка "однозначной" идентификации детали без совместного указания конкретной операции, привела к монстроидной формуле с использованием самых современных достижений в области формулостроения. С помощью функции LAMBDA для прежней формулы очереди (см. сообщение № 46) была создана следующая замена: [vba]
[/vba] В общем, даже как разработчик я в ней слегка потерялся, не говоря уже о том, чтобы рекомендовать ее другим для повседневного использования и даже изменения с целью распространения на другие виды станков и операций.
МОРАЛЬ: Не надо тешить себя иллюзиями и пытаться обмануть вековые устои теории реляционных баз данных. Если некая сущность в задаче идентифицируется комбинацией двух полей, то надо и использовать два поля, не пытаясь опираться только на одно поля, а для другого строя различные эвристики (типа более ранняя строка в списке или еще чего-нибудь в этом духе). Попытался - формула стала зубодробительным монстром. Далее покажу, как вышел из ситуации и вполне неплохо.
Как же выйти из ситуации? Напрашивается некоторое усложнение условий выше, а именно, не только проверка наличия детали в колонке "номер и обозначение детали", но и присутствие некоторой непустой информации в других колонках ("время начала", "время окончания" и др.). ВОПРОС: На заполнение какой бы колонки при этом ориентироваться? Т.е. какая из колонок будет заполнена всегда во время выполнения или после выполнения? Когда мы добавим это условие, деталь снова сможет появляться в очереди (уже для выполнения операции ФЧПУ2) даже при наличии детали в рабочей зоне станка (среди уже обработанных операцией ФЧПУ).
Эта надстройка в формуле будет сильно усложнять формулу и время на ее обработку?
Возвращаемся в тему. Попытка движения в этом направлении, а именно, попытка "однозначной" идентификации детали без совместного указания конкретной операции, привела к монстроидной формуле с использованием самых современных достижений в области формулостроения. С помощью функции LAMBDA для прежней формулы очереди (см. сообщение № 46) была создана следующая замена: [vba]
[/vba] В общем, даже как разработчик я в ней слегка потерялся, не говоря уже о том, чтобы рекомендовать ее другим для повседневного использования и даже изменения с целью распространения на другие виды станков и операций.
МОРАЛЬ: Не надо тешить себя иллюзиями и пытаться обмануть вековые устои теории реляционных баз данных. Если некая сущность в задаче идентифицируется комбинацией двух полей, то надо и использовать два поля, не пытаясь опираться только на одно поля, а для другого строя различные эвристики (типа более ранняя строка в списке или еще чего-нибудь в этом духе). Попытался - формула стала зубодробительным монстром. Далее покажу, как вышел из ситуации и вполне неплохо.Gustav
Далее покажу, как вышел из ситуации и вполне неплохо.
Идея элементарна. В список актуальных статусов (уникальных сочетаний деталей и операций) добавляем составное поле "Деталь с Операцией" и дальше именно его используем в очередях и рабочих зонах станков. В качестве разделителя наименования детали и операции используем четыре символа: пробел, два тире, пробел. Думается, что случайное использование подобной строки по отдельности в наименованиях детали или наименованиях операций, способное привести к проблемам обратного декодирования составной строки, крайне маловероятно и практически невозможно. Плюс к этому пользователь процесса уже об этом знает и постарается исключить коллизии со своей стороны.
Итак, новые значения "Деталь с Операцией" занимают колонку J листа "Списки" (за счет изменений, внесенных в формулу для ячейки H3): [vba]
[/vba] Формула очереди в ячейке M2 листа "Фрезерные с ЧПУ (ФЧПУ)" переписывается в следующем виде - всего лишь меняются ссылки 'Списки'!F3:F на 'Списки'!J3:J: [vba]
[/vba] Если далее потребуется (где-то зачем-то) выполнять обратное выделение названия детали или операции из составной строки, то мы всегда сможем это сделать с помошью простейших функций.
Далее покажу, как вышел из ситуации и вполне неплохо.
Идея элементарна. В список актуальных статусов (уникальных сочетаний деталей и операций) добавляем составное поле "Деталь с Операцией" и дальше именно его используем в очередях и рабочих зонах станков. В качестве разделителя наименования детали и операции используем четыре символа: пробел, два тире, пробел. Думается, что случайное использование подобной строки по отдельности в наименованиях детали или наименованиях операций, способное привести к проблемам обратного декодирования составной строки, крайне маловероятно и практически невозможно. Плюс к этому пользователь процесса уже об этом знает и постарается исключить коллизии со своей стороны.
Итак, новые значения "Деталь с Операцией" занимают колонку J листа "Списки" (за счет изменений, внесенных в формулу для ячейки H3): [vba]
[/vba] Формула очереди в ячейке M2 листа "Фрезерные с ЧПУ (ФЧПУ)" переписывается в следующем виде - всего лишь меняются ссылки 'Списки'!F3:F на 'Списки'!J3:J: [vba]
[/vba] Если далее потребуется (где-то зачем-то) выполнять обратное выделение названия детали или операции из составной строки, то мы всегда сможем это сделать с помошью простейших функций.Gustav
В общем, даже как разработчик я в ней слегка потерялся, не говоря уже о том, чтобы рекомендовать ее другим для повседневного использования и даже изменения с целью распространения на другие виды станков и операций.
Посмотрев на это был восхищен и испуган, благодарю за наглядный пример.
В общем, даже как разработчик я в ней слегка потерялся, не говоря уже о том, чтобы рекомендовать ее другим для повседневного использования и даже изменения с целью распространения на другие виды станков и операций.
Посмотрев на это был восхищен и испуган, благодарю за наглядный пример.gutsoff200991
Спасибо, работает. Сейчас пытаюсь настроить условное форматирование для данного варианта. Могли бы вы пожалуйста подсказать, как создать отдельный список, для определения "пропаж", о которых мы говорили ранее? и настройку фиксации времени в рабочей зоне станка.
Спасибо, работает. Сейчас пытаюсь настроить условное форматирование для данного варианта. Могли бы вы пожалуйста подсказать, как создать отдельный список, для определения "пропаж", о которых мы говорили ранее? и настройку фиксации времени в рабочей зоне станка.
Сейчас пытаюсь настроить условное форматирование для данного варианта
В моём файле (ссылка в сообщении 31) условное форматирование для листа ФЧПУ настроено уже для этого варианта. Просто скопируйте и по аналогии распространите на другие станки. Формулы для УФ, кстати, стали проще, поскольку теперь надо ссылаться только на одно поле, а не на динамическую сцепку двух.
Сейчас пытаюсь настроить условное форматирование для данного варианта
В моём файле (ссылка в сообщении 31) условное форматирование для листа ФЧПУ настроено уже для этого варианта. Просто скопируйте и по аналогии распространите на другие станки. Формулы для УФ, кстати, стали проще, поскольку теперь надо ссылаться только на одно поле, а не на динамическую сцепку двух.Gustav
как создать отдельный список, для определения "пропаж"
создаем новый чистый рабочий лист и переименовываем его в "Пропажи" (по моей ссылке уже есть). Оформляем заголовочную часть - делаем отдельные блоки-списки на каждый станок (см. прилагаемую картинку).
В каждый блок помещаем вычисляющую "пропажи" формулу массива в одну ячейку (первая ячейка под заголовком "Наименование детали"): для листа (станка) "Фрезерные с ЧПУ (ФЧПУ)" - формула для ячейки A4: [vba]
Код
=FILTER('Списки'!F:G; XMATCH('Списки'!G:G; {"ФЧПУ";"ФЧПУ2"}); XMATCH('Списки'!H:H;{"Выполнено"}); ISNA(XMATCH('Списки'!J:J;{ 'Фрезерные с ЧПУ (ФЧПУ)'!B:B; 'Фрезерные с ЧПУ (ФЧПУ)'!H:H })))
[/vba] для листа (станка) "Фрезерные (ФУ)" - формула для ячейки D4: [vba]
В этих двух формулах хорошо просматриваются элементы, которые должны быть изменены по аналогии для других листов станков: * массив выполняемых операций: [vba]
Код
{"ФЧПУ";"ФЧПУ2"}
[/vba]* массив учитываемых статусов (в данном случае один, но при дальнейшей бизнес-необходимости может быть легко расширен): [vba]
Код
{"Выполнено"}
[/vba]* массив столбцов "номер и обозначение детали" из "рабочих зон" листов станков: [vba]
Код
{'Фрезерные с ЧПУ (ФЧПУ)'!B:B; 'Фрезерные с ЧПУ (ФЧПУ)'!H:H}
[/vba]
Если в технологических процессах всё нормально, детали своевременно обрабатываются, то списки на листе "Пропажи" будут содержать значение ошибки #N/A (тот редкий случай, когда ошибке будут рады). Когда же в том или ином списке списке появится "нормальная" деталь с операцией - это как раз будет сигналом об "ошибке" в тех.процессе.
как создать отдельный список, для определения "пропаж"
создаем новый чистый рабочий лист и переименовываем его в "Пропажи" (по моей ссылке уже есть). Оформляем заголовочную часть - делаем отдельные блоки-списки на каждый станок (см. прилагаемую картинку).
В каждый блок помещаем вычисляющую "пропажи" формулу массива в одну ячейку (первая ячейка под заголовком "Наименование детали"): для листа (станка) "Фрезерные с ЧПУ (ФЧПУ)" - формула для ячейки A4: [vba]
Код
=FILTER('Списки'!F:G; XMATCH('Списки'!G:G; {"ФЧПУ";"ФЧПУ2"}); XMATCH('Списки'!H:H;{"Выполнено"}); ISNA(XMATCH('Списки'!J:J;{ 'Фрезерные с ЧПУ (ФЧПУ)'!B:B; 'Фрезерные с ЧПУ (ФЧПУ)'!H:H })))
[/vba] для листа (станка) "Фрезерные (ФУ)" - формула для ячейки D4: [vba]
В этих двух формулах хорошо просматриваются элементы, которые должны быть изменены по аналогии для других листов станков: * массив выполняемых операций: [vba]
Код
{"ФЧПУ";"ФЧПУ2"}
[/vba]* массив учитываемых статусов (в данном случае один, но при дальнейшей бизнес-необходимости может быть легко расширен): [vba]
Код
{"Выполнено"}
[/vba]* массив столбцов "номер и обозначение детали" из "рабочих зон" листов станков: [vba]
Код
{'Фрезерные с ЧПУ (ФЧПУ)'!B:B; 'Фрезерные с ЧПУ (ФЧПУ)'!H:H}
[/vba]
Если в технологических процессах всё нормально, детали своевременно обрабатываются, то списки на листе "Пропажи" будут содержать значение ошибки #N/A (тот редкий случай, когда ошибке будут рады). Когда же в том или ином списке списке появится "нормальная" деталь с операцией - это как раз будет сигналом об "ошибке" в тех.процессе.Gustav
и настройку фиксации времени в рабочей зоне станка.
Добавил фрагмент кода в процедуру onEdit, отвечающий за прописывание тайм-штампа (дата+время) в колонку "время начала обработки" после ввода значения (вручную или копированием) в ячейку колонки "номер и обозначение детали" на листе станка.
Теперь вся процедура onEdit выглядит так (уже изменена в моей копии по ссылке в сообщении №31): [vba]
Код
function onEdit(e) { var rng = e.range;
// "команда сдёргивания" - нажатие клавиши Delete на ячейке приводит к выполнению if (e.oldValue != undefined) { // важно, ибо у пустой ячейки e.oldValue еще не "активировано" var origValue = e.oldValue; if (origValue.toUpperCase() == "номер и обозначение детали".toUpperCase()) { // восстановление содержимого ячейки rng.setValue("номер и обозначение детали"); // выполнение команды - сдвиг заполненных ячеек вниз // с образованием пустого места для "размещения" новой детали rng.offset(1, -1, 1, 6).insertCells(SpreadsheetApp.Dimension.ROWS); return; // в данном случае больше ничего не надо делать } }
// прописывание тайм-штампа в колонку "время начала обработки" var valToFindHeader = rng.getSheet().getRange(1, rng.getColumn(), rng.getRow()).getValues(); var mapVal = valToFindHeader.map(v => v[0].toString().toLowerCase()); if (~mapVal.indexOf("номер и обозначение детали")) { if (!rng.isBlank() && rng.offset(0, 2).isBlank()) { rng.offset(0, 2).setValue( new Date() ); } } }
и настройку фиксации времени в рабочей зоне станка.
Добавил фрагмент кода в процедуру onEdit, отвечающий за прописывание тайм-штампа (дата+время) в колонку "время начала обработки" после ввода значения (вручную или копированием) в ячейку колонки "номер и обозначение детали" на листе станка.
Теперь вся процедура onEdit выглядит так (уже изменена в моей копии по ссылке в сообщении №31): [vba]
Код
function onEdit(e) { var rng = e.range;
// "команда сдёргивания" - нажатие клавиши Delete на ячейке приводит к выполнению if (e.oldValue != undefined) { // важно, ибо у пустой ячейки e.oldValue еще не "активировано" var origValue = e.oldValue; if (origValue.toUpperCase() == "номер и обозначение детали".toUpperCase()) { // восстановление содержимого ячейки rng.setValue("номер и обозначение детали"); // выполнение команды - сдвиг заполненных ячеек вниз // с образованием пустого места для "размещения" новой детали rng.offset(1, -1, 1, 6).insertCells(SpreadsheetApp.Dimension.ROWS); return; // в данном случае больше ничего не надо делать } }
// прописывание тайм-штампа в колонку "время начала обработки" var valToFindHeader = rng.getSheet().getRange(1, rng.getColumn(), rng.getRow()).getValues(); var mapVal = valToFindHeader.map(v => v[0].toString().toLowerCase()); if (~mapVal.indexOf("номер и обозначение детали")) { if (!rng.isBlank() && rng.offset(0, 2).isBlank()) { rng.offset(0, 2).setValue( new Date() ); } } }
А возможно ли, что бы Таймштамп в рабочей зоне станка (столбец "время начала обработки") отображал дату и время не фактического перемещения наименования в эту самую рабочую зону станка из общей очереди, а дату и время относительно статусу "в работе" с листа "Списки"
Доброе утро. Благодарю.
А возможно ли, что бы Таймштамп в рабочей зоне станка (столбец "время начала обработки") отображал дату и время не фактического перемещения наименования в эту самую рабочую зону станка из общей очереди, а дату и время относительно статусу "в работе" с листа "Списки"gutsoff200991
Сообщение отредактировал gutsoff200991 - Понедельник, 20.02.2023, 10:11
что бы Таймштамп в рабочей зоне станка (столбец "время начала обработки") отображал дату и время ... относительно статусу "в работе"
Ок, сделано - вставкой формулы в колонку "время начала обработки" и последующим превращением результата в значение без формулы. Сделал также одновременное заполнение и второй колонки "время окончания обработки" - формулой. Сразу после создания формула отображает пустую строку, но, как только статус операции станет "Выполнено", в ячейке отобразится время установки этого статуса. Фрагмент процедуры onEdit после комментария "прописывание тайм-штампа" приобретает следующий вид (по моей ссылки уже заменено):
[vba]
Код
// прописывание тайм-штампа в колонку "время начала обработки" var valToFindHeader = rng.getSheet().getRange(1, rng.getColumn(), rng.getRow()).getValues(); var mapVal = valToFindHeader.map(v => v[0].toString().toLowerCase()); if (~mapVal.indexOf("номер и обозначение детали")) { if (!rng.isBlank() && rng.offset(0, 2).isBlank()) { // время начала обработки (после вставки будет сохранено как значение) rng.offset(0, 2).setFormula('=INDEX(SORT(FILTER(\'Списки\'!D3:D;\'Списки\'!C3:C="В работе";\'Списки\'!E3:E=' +rng.getA1Notation()+');1;FALSE);1)'); // время окончания обработки (после вставки останется формулой) rng.offset(0, 3).setFormula('=IFERROR(' +'INDEX(SORT(FILTER(\'Списки\'!D3:D;\'Списки\'!C3:C="Выполнено";\'Списки\'!E3:E=' +rng.getA1Notation()+');1;FALSE);1);"")'); SpreadsheetApp.flush(); // время начала обработки превращаем из формулы в значение rng.offset(0, 2).copyTo(rng.offset(0, 2), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); rng.offset(0, 2, 1, 2).setNumberFormat('dd.MM.yyyy HH:mm:ss'); } }
что бы Таймштамп в рабочей зоне станка (столбец "время начала обработки") отображал дату и время ... относительно статусу "в работе"
Ок, сделано - вставкой формулы в колонку "время начала обработки" и последующим превращением результата в значение без формулы. Сделал также одновременное заполнение и второй колонки "время окончания обработки" - формулой. Сразу после создания формула отображает пустую строку, но, как только статус операции станет "Выполнено", в ячейке отобразится время установки этого статуса. Фрагмент процедуры onEdit после комментария "прописывание тайм-штампа" приобретает следующий вид (по моей ссылки уже заменено):
[vba]
Код
// прописывание тайм-штампа в колонку "время начала обработки" var valToFindHeader = rng.getSheet().getRange(1, rng.getColumn(), rng.getRow()).getValues(); var mapVal = valToFindHeader.map(v => v[0].toString().toLowerCase()); if (~mapVal.indexOf("номер и обозначение детали")) { if (!rng.isBlank() && rng.offset(0, 2).isBlank()) { // время начала обработки (после вставки будет сохранено как значение) rng.offset(0, 2).setFormula('=INDEX(SORT(FILTER(\'Списки\'!D3:D;\'Списки\'!C3:C="В работе";\'Списки\'!E3:E=' +rng.getA1Notation()+');1;FALSE);1)'); // время окончания обработки (после вставки останется формулой) rng.offset(0, 3).setFormula('=IFERROR(' +'INDEX(SORT(FILTER(\'Списки\'!D3:D;\'Списки\'!C3:C="Выполнено";\'Списки\'!E3:E=' +rng.getA1Notation()+');1;FALSE);1);"")'); SpreadsheetApp.flush(); // время начала обработки превращаем из формулы в значение rng.offset(0, 2).copyTo(rng.offset(0, 2), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); rng.offset(0, 2, 1, 2).setNumberFormat('dd.MM.yyyy HH:mm:ss'); } }