Вопрос № 74181: 7.7
У меня 2 вопроса:
1. Необходимо перенести в документ сотрудников со справочника с таким условием:
Если (Сотрудник.ЭтоГруппа()=0)и(Сотрудник.ПринадлежитГруппе("А")=1) тогда
без этого условия переносит все нормально а с н...Вопрос № 74237: Прошу подсказать, а при возможности указать ПО, как на выходной форме распечатать на лазерном принтере HP1020 штрихкод (EAN-13, EAN-128)...Вопрос № 74263: Здравствуйте! Подскажите пожалуйста каковы правила при работе с переключателем. Элемент который первый в группе и создавать надо первым или нет? Не переключается на второй элемент....Вопрос № 74265: Уважаемые Эксперты Помогите пожалуйста разобраться.
Документ при повторном открытии после нажатия Кнопки ОК не пере проводиться а просто записывается, добавляются новые(повторяющиеся) Проводки т.е. старые проводки не убираться.
Хотя в Модул...
Вопрос № 74.181
7.7
У меня 2 вопроса:
1. Необходимо перенести в документ сотрудников со справочника с таким условием:
Если (Сотрудник.ЭтоГруппа()=0)и(Сотрудник.ПринадлежитГруппе("А")=1) тогда
без этого условия переносит все нормально а с ним название группы не переносит но и сотрудников с группы А тоже. Если поставить (Сотрудник.ПринадлежитГруппе("А")=0) то переносит всех и из других групп тоже. Я так понял что я неправильно описую группу возможно надо по коду или еще как-то.
2. Почему если организовать цикл с пребором строк документа и в нем написать УдалитьСтроку(); то удаляет через 1 строку и половина остается при повторном нажатии удаляются тоже через 1 из оставшихся. Но если поставить условие которому сответствует токо одна строа то все нормально (на 2 или 3 я непробывал) а если болше половины строк то через одну и наплевать на условие. Эту проблему я решил через таблицу значений перенеся все строки туда потом УдалитьСтроки(); и перенося обратно строки которые соответствуют
условию. Но хотелось бы узнать в чем проблема?
Отправлен: 05.02.2007, 10:44
Вопрос задал: Centaur (статус: 1-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Starhan
Здравствуйте, Centaur!
Ответ на второй вопрос
Удалять надо с конца,
потому как при удалении с начала
после удаления первой строки меняются индексы всех строк т.е следующая строка с номером 3 (которую нужно допустим удалить) уже идет с номером 2
--------- хмм...
Ответ отправил: Starhan (статус: 4-ый класс)
Ответ отправлен: 05.02.2007, 10:50
Отвечает: Tek
Здравствуйте, Centaur!
Если в ПринадлежитГруппе("А")=1: А - это и есть название группы, то читайте Синтаксис-помошник:
<Группа> - выражение со значением группы справочника.
ВЫРАЖЕНИЕ - не наименование а переменная, хранящая ссылку на элемент-группу справочника.
То есть:
Перем гр;
спр.НайтиПоНаименованию("А");
гр = спр.ТекущийЭлемент();
и вот теперь можно писать так:
ПринадлежитГруппе(гр)=1
А вашем случае это условие никогда не выполняется, а в случае сравнения с 0 наоборот - всегда выполняется.
(странно кстати что вообще ошибки не было)
По второму вопросу уже ответили - просто уточнение:
Когда вы делаете выборку - этот объект(выборка) это линейный список элементов.
То есть если вы во время прохода по нему удаляете текущий элемент, то указатель ("курсор") переходит на следующий за ним и соответсвенно на следующей итерации цикла при выполнении метода ПолучитьЭлемент() курсов переходит еще раз на следующий, пропуская тот который шел сразу за удаленным.
Таким образом выходы следующие:
- тот что предложили,
- после каждого удаления снова применять ВыбратьЭлементы() - это сильно замедлит работу
- либо примерно как сделали вы - сначала выбирать в ТЗ, а потом каждый элемент попадающий под условие удаления - находить в справочнике и удалять - тоже долго, но лучше предыдущего.
Впрочем нужно оценивать временные затраты в каждом конкретном случае.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 9-ый класс)
Ответ отправлен: 05.02.2007, 11:08
Отвечает: Palkin
Здравствуйте, Centaur!
1. В методе ПринадлежитГруппе(<Группа>) атрибут Группа должен иметь тип значения "Справочник", т.е. снала нужно определить необходимую группу одним из стандартных методов (НайтиПоКоду(), НайтиПоНаименованию() и т.п.), а потом уже подставлять найденное значение в метод ПринадлежитГруппе(). Например:
Сотрудник.НайтиПоНаименованию("А");
Группа = Сотрудник.ТекущийЭлемент();
Сотрудник.ВыбратьЭлементы();
Пока Сотрудник.ПолучитьЭлемент() = 1 Цикл
Если (Сотрудник.ЭтоГруппа()=0) И (Сотрудник.ПринадлежитГруппе(Группа)=1) Тогда
.........
2. Добавлю. Можно попробовать так:
ВыбратьСтроки();
Стр = 1;
Пока ПолучитьСтроку() = 1 Цикл
Если <Ваше условие> = Ложь Тогда
ПолучитьСтрокуПоНомеру(Стр);
УдалитьСтроку();
Иначе
Стр = Стр + 1;
КонецЕсли;
КонецЦикла;
Ответ отправил: Palkin (статус: 3-ий класс)
Ответ отправлен: 05.02.2007, 11:14
Отвечает: BigHard
Здравствуйте, Centaur!
1. По моему, группы "А" у вас нет а есть переменная А, следовательно (Сотрудник.ЭтоГруппа()=0)и(Сотрудник.ПринадлежитГруппе(А)=1)
2. Вначале удаляется строка №1. Строка удалена, следовательно появляется другая строка №1, а цикл то пошел дальше, вот и все, делайте выводы...
--------- Чем отличается чайник от программиста: У чайника в одном килобайте 1000 байт, а у программиста в одном километре 1024 метра
Ответ отправил: BigHard (статус: 2-ой класс)
Ответ отправлен: 05.02.2007, 12:26 Оценка за ответ: 5 Комментарий оценки: Спасибо уже подсказали
Вопрос № 74.237
Прошу подсказать, а при возможности указать ПО, как на выходной форме распечатать на лазерном принтере HP1020 штрихкод (EAN-13, EAN-128)
Отправлен: 05.02.2007, 14:58
Вопрос задал: Викентий (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Tek
Здравствуйте, Викентий!
Внешняя компонента barcode.ert, знаю была на proclub'e
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 9-ый класс)
Ответ отправлен: 05.02.2007, 15:05
Отвечает: Palkin
Здравствуйте, Викентий!
Есть ещё просто шрифт такой eang000.ttf. Не знаю, подойдет ли. Раньше поставлялся со всеми конфигурациями
Ответ отправил: Palkin (статус: 3-ий класс)
Ответ отправлен: 05.02.2007, 15:42
Отвечает: Strawberry
Здравствуйте, Викентий!
В типовой торговле есть файлик - BARCODE.OCX
он позволяет работать со штрих кодами
там же (в типовой торговле) есть печатная форма этикетка (в общих таблицах)
процедура печати находится в форме справочника ТМЦ см. приложение
Приложение:
--------- Мальчик-извращенец прочел деду Морозу с табуретки всего Пастернака!
Ответ отправил: Strawberry (статус: 3-ий класс)
Ответ отправлен: 05.02.2007, 17:03
Отвечает: Ahab
Здравствуйте, Викентий!
Ко всему могу только добавить что можно использоать спец. шрифт и алгоритм формирования штрих-кода - легко ищется гуглей и то и другое... можно даже не писать самому а поискать готовые.
Если надо могу скинуть свою обработку генерации и печати шк - она небольшая, разобраться просто.
Ответ отправил: Ahab (статус: 3-ий класс)
Ответ отправлен: 06.02.2007, 08:03
Вопрос № 74.263
Здравствуйте! Подскажите пожалуйста каковы правила при работе с переключателем. Элемент который первый в группе и создавать надо первым или нет? Не переключается на второй элемент.
Отправлен: 05.02.2007, 18:23
Вопрос задала: Darina (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: ПЛОХИХ А. Дмитрий
Здравствуйте, Darina!
Все очень просто!
Все дело в том, что в Диалоге формы - Настройка порядка обхода первый элемент переключателя, который к тому же с идентификатором, должен стоять выше (быть первым из всех переключателей).
Соответственно, в каком порядке будут стоять остальные переключатели от первого - в таком и будут возвращать значения в идентификатор первого переключателя...
Ответ отправил: ПЛОХИХ А. Дмитрий (статус: 6-ой класс)
Ответ отправлен: 05.02.2007, 18:39 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Владимир Лазурко
Здравствуйте, Darina!
Для переключателей, относящихся к одной категории, существует понятие "группа", а элемент, который располагается в форме первым, должен иметь установленное свойство "Первый в группе". С этого элемента и начинается обход. Если в форме расположены несколько групп переключателей, то для каждой группы должен существовать элемент со свойством "Первый в группе". Если при установке порядка обхода выбран "Первый в группе" элемент, то все последующие переключатели относятся к этому
элементу (т.е. группе) до элемента другого типа или следующего элемента со свойством "Первый в группе".
У Вас, я понимаю, Предприятие 8. Если требуется обработать смену значения переключателя, то необходимо в свойстве "При измении" указать процедуру-обработчик события. Несмотря на то, что обработчик события можно указать для любого элемента группы, при измении сотояния всегда будет вызываться обработчик события, назначенный "первому" элементу управления. Для элемента с установленным свойством Первый, в свойстве "Данные" можно указать данные, которые используются для хранения значения.
В этом случае тип переключателя определяеься типом этих данных. Подробнее смотрите в Вашем Руководстве "Конфигурирование и администрирование" на с.366 и "Описании встроенного языка" 2 том, стр 894. Успехов!
Ответ отправил: Владимир Лазурко (статус: 7-ой класс)
Ответ отправлен: 05.02.2007, 19:26 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Darina!
Для 1С 7.7.
Действия-Автоматический порядок обхода птичку убрать.
Настроить порядок обхода так, чтобы элементы переключателей шли ПОДРЯД (например, десятый, одиннадцатый, двенадцатый ...), между ними не должны вклиниваться другие элементы. Первый элемент должен иметь ПервыйВГруппе и иметь идентификатор.
Так как настраивать порядок обхода в больших формах весьма трудоемко (по опыту известно), то в большинстве конфигураций (если переключатель нужен на две-три-четыре позиции) делают псевдопереключатели из флажков, а в закладке Дополнительно-Формула пишут процедуру, которая сбрасывает остальные флажки при выборе данного флажка.
Процедура ПриВыбореФлаг2()
Если Флаг2=1 Тогда
Флаг1=0;
Флаг3=0;
Флаг4=0;
ЗначенПерекл=2;
Иначе
Флаг1=1;
Флаг3=0;
Флаг4=0;
ЗначенПерекл=1;
КонецЕсли;
ПриВыбореПереключателя()
КонецПроцедуры
Я рекоммендую Вам использовать флажки, так как использовать переключатели (вручную долго мучиться с порядком обхода) это зря потраченное время.
К тому же флажки очень хорошо сохраняются в документах как число длина 1.
А еще есть рекоммендация использовать списки значений в виде выпадающего списка. Тоже реализуется выбор только одного варианта. Программируется гораздо легче переключателей. Если заинтересует - пишите
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Студент)
Ответ отправлен: 05.02.2007, 19:54 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Strawberry
Здравствуйте, Darina!
Порядок создания неважен
важен порядок обхода - первый в обходе - первый в группе
остальные за ним, причем между ними недолжно быть других элементов формы
порядок обхода элементов формы - действия - настройка порядка обхода
--------- Мальчик-извращенец прочел деду Морозу с табуретки всего Пастернака!
Ответ отправил: Strawberry (статус: 3-ий класс)
Ответ отправлен: 05.02.2007, 20:51 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Яна
Здравствуйте, Darina!
Есть такой элемент управления: Рамка Группы. Переключатели желательно разметить внутри нее. Тогда они будут нормально работать (переключаться). Свойство ПервыйВГруппе можно изменить позже, и порядок переключателей тоже можно изменить. ПервыйВГруппе определяет имя переменной, в которой будут данные, также в свойствах именно этого переключателя можно указать тип значения.
Ответ отправила: Яна (статус: 3-ий класс)
Ответ отправлен: 05.02.2007, 21:54 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Вопрос № 74.265
Уважаемые Эксперты Помогите пожалуйста разобраться.
Документ при повторном открытии после нажатия Кнопки ОК не пере проводиться а просто записывается, добавляются новые(повторяющиеся) Проводки т.е. старые проводки не убираться.
Хотя в Модуле формы док. В процедуре при открытии указывается при записи препроводить.
Процедура ПриОткрытии()
ПриЗаписиПерепроводить(1);
Отправлен: 05.02.2007, 18:26
Вопрос задала: Надежда (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: ПЛОХИХ А. Дмитрий
Здравствуйте, Надежда!
Проверьте в свойства документа, стоят ли галочки:
Автоматическое удаление движения
Ответ отправил: ПЛОХИХ А. Дмитрий (статус: 6-ой класс)
Ответ отправлен: 05.02.2007, 18:47
Отвечает: BigHard
Здравствуйте, Надежда!
Скорее всего, в документе не стоит галочка Удалятьпроводкиавтоматически
--------- Чем отличается чайник от программиста: У чайника в одном килобайте 1000 байт, а у программиста в одном километре 1024 метра
Ответ отправил: BigHard (статус: 2-ой класс)
Ответ отправлен: 06.02.2007, 06:09 Оценка за ответ: 5 Комментарий оценки: Большое Спосибо. Как я сразу не заметила?