Вопрос № 52697: Доброго времени суток, уважаемые эксперты.
Такая возникла проблема.
В кратце расскажу о конфигурации. Есть справочник "ТоварыНаСкладе" (Столбцы: ПолноеНаименование, ЗакупЦена, ПродЦена, Количество, Сумма и др.) и документ "Прих...Вопрос № 52724: 1. Взялся за изучение 1С Предприятия
В книге есть задание, в котором нужно было сделать таблицу значений, которая имеет следующие колонки: ИмяТовара, КоличествоТовара, Цена, Сумма.
Все значения занасется в таблицу из поля воода на форме, сумм...Вопрос № 52728: Здравствуйте!
Можно программно изменить "Основное представление" справочника? В зависимости от ситуации необходимо отображение выбранного элемента то в виде кода, то в виде наименования.
Спасибо....Вопрос № 52729: Здравствуйте!
Почтовая программа TheBat. Не могу читать информацию в окошкакх кода программы - каракули. Никакие настройки кодовых страниц не помогают. Как вфйти из этой ситуации?
Спасибо....Вопрос № 52745: Не могу разобраться, как рапотает процедура с ключевым словом "далее"
Как пишет книга: "Ключевое слово Далее означает, что это описания только заголовка процедуры, а тело процедуры будет описано далее, если вызов процедуры идет выш...Вопрос № 52751: Здравствуйте, УважаемыеЭксперты !!
Беда : в форме журнала есть закладки по одному реквизиту :
ЗакладкиОтбора("Заезд")
а мне еще надо показать документы только одного автора :
УстановитьОтбор("Автор","Иванов...Вопрос № 52765: Здравствуйте! 1С v7.7, комплексная конфигурация. При подборе партии (например в документе ПеремещениеТМЦ), выводится форма списка справочника "Партии", в которой выводятся все партии данного товара, и показывается остаток по данной партии (...Вопрос № 52769: Здравствуйте! 1С v7.7 Комплексная конфигурация. В ходе работы с программы появляются отрицательные
партии (этого не избежать такая специфика работы предприятия). Подскажите как можно закрыть эти отрицательные партии, есть партия с остатком -5 и парти...
Вопрос № 52.697
Доброго времени суток, уважаемые эксперты.
Такая возникла проблема.
В кратце расскажу о конфигурации. Есть справочник "ТоварыНаСкладе" (Столбцы: ПолноеНаименование, ЗакупЦена, ПродЦена, Количество, Сумма и др.) и документ "ПриходнаяНакладная"(С такими же столбцами).
Нужно сделать так, чтобы при заполнении документа (при нажатии кнопки #Записать или #Записать? Закрыть) "ПриходнаяНакладная" вся информация дополняла соответствующие колонки справочника "ТоварыНаСкладе".
Т.е. если товар есть - количество +n, если нет - новая строка.
Я бы сделал так, но это не прокатывает.
Я новичек в программировании 1С.
Приложение:
Отправлен: 20.08.2006, 21:51
Вопрос задал: CMD (статус: Посетитель)
Всего ответов: 6 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Краюшкин Игорь Валерьевич
Здравствуйте, CMD!
Строчку
Если Прих.НаитиПоРеквизиту(ПолноеНаименование, ПолноеНаименование)=1 тогда
надо писать
Если Прих.НаитиПоРеквизиту("ПолноеНаименование", СокрЛП(ПолноеНаименование), 1)=1 тогда
Пожалуйста, прочитайте сначала внимательно документацию по программированию в 1С (с разбором каждого примера). Похоже, Вы совсем не ориентируетесь в предмете. Если желаете, пришлите мне в личном письме Ваш электронный адрес, я вышлю Вам документацию.
P.S. ответ Краюшкина Игоря Валерьевича в принципе правильный, но у Вас столько других ошибок и несуразностей, что этот нюанс картины уже не меняет.
--------- Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 21.08.2006, 00:56
Отвечает: Шальков Павел Владимирович
Здравствуйте, CMD!
Вам нужно сделать цикл по строкам документа:
После строки Прих = Создать ... напишите:
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
...
и конечно закройте цикл в конце процедуры:
КонецЦикла;
А вообще я бы советовал использовать для хранения остатков товаров регистр, а ваше решение противоречит логике работы программы. Удачи!
Отвечает: Warior
Здравствуйте, CMD!
Должно быть гдето так:
Процедура ПриЗаписи()
Прих = СоздатьОбъект("Справочник.ТоварНаСкладе");
Если Прих.НаитиПоРеквизиту(ПолноеНаименование, ПолноеНаименование)=1 тогда
Справочник.ТоварНаСкладе.Количество="+n"
Иначе
Прих.НовыйЭлемент();
Прих.Наименование=Наименование;
Прих.ПолноеНаименование = ПолноеНаименование;
Прих.ЗакупЦена=ЗакупЦена;
Прих.Количество=Количество;
Прих.Сумма=Сумма;
Прих.ПродЦена=ПродЦена;
Прих.Записать();
КонецПроцедуры
Ответ отправил: Warior (статус: 2-ой класс)
Ответ отправлен: 21.08.2006, 10:53
Отвечает: Karanskiy Arkadiy
Здравствуйте, CMD!
Ну можно сделать "в лоб".
Спр = СоздатьОбъект("Справочник.ТоварНаСкладе");
Спр.ВыбратьЭлементы();
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если ТекущаяСтрока() = Спр.ТекущийЭлемент() Тогда // Точно не помню как пишется Текущая строка. Посмотри в учебнике
// Здесь присваеваешь количетсво
Спр.записать();
КонецЦикла;
// А здесь заполняешь новую строку
НоваяСтрока()
Спр.Наименование=Наименование;
Спр.ПолноеНаименование = ПолноеНаименование;
Спр.ЗакупЦена=ЗакупЦена;
Спр.Количество=Количество;
Спр.Сумма=Сумма;
Спр.ПродЦена=ПродЦена;
Спр.Записать();
КонецЦикла;
Удачи.
Ответ отправил: Karanskiy Arkadiy (статус: 3-ий класс)
Ответ отправлен: 21.08.2006, 18:59
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, CMD!
Ваш путь решения проблемы в принципе не верен!
Нецелесообразно в справочнике хранить количество, есть бухгалтерские счета, (а если конфигурация совсем убогая и счетов нет, то есть регистры) чтобы хранить количество и сумму.
Нецелесообразно в справочнике хранить приходную цену, приходная цена может меняться от прихода к приходу, и в справочнике цифры будут плясать. С другой стороны, если сумма и количество хранится в бухгалтерских счетах, то приходная цена это сумма/количество. С детализацией на любую дату, с отчетами об оборотах на любой период.
В справочнике можно лишь хранить приходную цену последнего проведенного документа.
Продажную цену в справочнике хранить тоже нельзя, так как возможна продажа со скидками, там можно лишь хранить рекоммендованную продажную цену.
Ну и теперь разбор синтаксических ошибок кода:
Справочник.ТоварНаСкладе.Количество="+n заменить на
Прих.Количество=Прих.Количество+н
Если Прих.НаитиПоРеквизиту(ПолноеНаименование, ПолноеНаименование)=1 тогда
Если есть 2 элемента справочника с одинаковым ПолноеНаименование, то выберется по закону подлости не тот, который нужен
И еще раз повторюсь: справочник это не тот объект данных, в котором можно хранить сводные данные о сумме и количестве. Это нужно хранить в бухгалтерских счетах или на худой конец в регистрах
1. Взялся за изучение 1С Предприятия
В книге есть задание, в котором нужно было сделать таблицу значений, которая имеет следующие колонки: ИмяТовара, КоличествоТовара, Цена, Сумма.
Все значения занасется в таблицу из поля воода на форме, сумма вычисляется - Цена*Количество
Далее в задании написано, что нужно свернуть строки в таблице, т.е. я вызываю процедуру нажатием кнопки "свернуть" и вызывается процедура Свернуть("ИмяТовара,Цена","Сумма");
строки свертываются, все это я сделал без всяких проблем.
Также в задании написано, что нужно сделать кнопку развернуть, которая вернет все на место, как было до вызова процедуры свернуть()"
Этого я сделать не смог!
Я бы смог сделать только так: Разложить товары по одной штуке, каждому одному товару, одну строчку, одну цену и т.д., т.е. получается, что я разложил количество товара, каждый в отдельную строку ...
2. Есть такая функция, которая сортирует строки таблици по колонкам.
Допустим я сортирую товар по цене, то функция будет выглядеть так:
Сортировать("Цена+"); или Сортировать("Цена+");
Но я не понимаю, как бодет работать такая процедура Сортировать("Цена+,Количество-1");
как при этом произойдет сортировка, объясните пожалуйста по подробнее ....
Отвечает: Шальков Павел Владимирович
Здравствуйте, Терсков Алексей Николаевич!
Во-первых, там опечатка - не "-1", а просто "-". Во-вторых, сортировка будет сначала по возрастанию цены, а потом среди одинаковых цен - по убыванию количества. Например есть ТЗ:
Цена Количество
20 15
30 10
20 45
...
В результате сортировки:
20 45
20 15
30 10
...
Все просто! Удачи!
Ответ отправил: Шальков Павел Владимирович (статус: 6-ой класс)
Ответ отправлен: 21.08.2006, 09:34 Оценка за ответ: 5 Комментарий оценки: Вы правы!
Отвечает: Vizli
Здравствуйте, Терсков Алексей Николаевич!
Ответ на вопрос 1
Можно сделать так: Перед тем, как свернуть таблицу, т.е. перед вызовом Свернуть сохраняем текущую таблицу в другой таблице (пусть Ваша таблица на форме называется ТЗНаФорме):
//*******************************
// в начале модуля объявляем ТЗ
Перем ТЗ;
//*******************************
...
// в процедуре нажатия кнопки "Свернуть"
...
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.Загрузить(ТЗНаФорме)
ТЗНаФорме.Свернуть("ИмяТовара,Цена","Сумма");
...
//*******************************
при нажатии на кнопку "Развернуть" восснатавливаем сохраненную таблицу:
// в процедуре нажатия кнопки "Развернуть"
...
ТЗНаФорме.Загрузить(ТЗ);
...
//*******************************
Ответ на вопрос 2
Сортировать("Цена+,Количество-1"); - это откуда такой пример?
Ответ отправил: Vizli (статус: 1-ый класс)
Ответ отправлен: 21.08.2006, 09:46 Оценка за ответ: 5 Комментарий оценки: Простите очепятка =) Сортировать("Цена+,Количество-"); До меня дошло, как это работает !!!! =) А работает следующим образом: Сначало строки таблицы сортитруются по цене, по возрастанию и в том случаее, если есть одинаковые товары с одной и той же ценой, то сортировка пойдет по количеству товаров, по убыванию ... Если я не прав, то
пишите в форум и поправте меня, если прав, то тоже напишите ....
Вопрос № 52.728
Здравствуйте!
Можно программно изменить "Основное представление" справочника? В зависимости от ситуации необходимо отображение выбранного элемента то в виде кода, то в виде наименования.
Спасибо.
Отвечает: Шальков Павел Владимирович
Здравствуйте, Тесленко Лариса Ивановна!
Нет нельзя, основное представление задается только на этапе конфигурирования.
Отвечает: Besker
Здравствуйте, Тесленко Лариса Ивановна!
Основное представление, нужно задавать заранее при создании справочника (переключатели на форме, группа основное представление). А программное управление осуществляется только методом ПредставлениеВида().
--------- Жизнь игра, а настоящая игра - МАНИЯ.
Ответ отправил: Besker (статус: Студент)
Ответ отправлен: 21.08.2006, 11:37
Отвечает: Краюшкин Игорь Валерьевич
Здравствуйте, Тесленко Лариса Ивановна!
Конечно!
ПорядокКодов() или ПорядокНаименований()
Есть еще вариант ПорядокРеквизита(<ИмяРеквизита>)
Отвечает: Ovr1970
Здравствуйте, Тесленко Лариса Ивановна!
1C изменять представление справочника не позволяет, но вы можете показывать не справочник, а список значений, который будет заполняться элементами справочника с тем представлением, которые Вы зададите сами.
(Напомню список.ДобавитьЗначение(спр.ТекущийЭлемент(),МоёПредставление(спр)), гда "МоёПредставление" функция, которая возвращает строку - представление значения для пользователя)
Ответ отправил: Ovr1970 (статус: Студент)
Ответ отправлен: 22.08.2006, 12:12
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Тесленко Лариса Ивановна!
Если Вам необходимо что либо отображать на экране, так отображайте его или в текстовой колонке, или в текстовом поле примерно так
?(НужноПредставлениеВВидеКода=1,Спр.Код,Спр.Наименование)
Здравствуйте!
Почтовая программа TheBat. Не могу читать информацию в окошкакх кода программы - каракули. Никакие настройки кодовых страниц не помогают. Как вфйти из этой ситуации?
Спасибо.
Отвечает: Manserg
Здравствуйте, Тесленко Лариса Ивановна!
The Bat никогда и не мог этого делать, именно для этого и существует web форма чтения/отправки ответов. Еще Ваш предыдущий вопрос № 52728 очень понравился...
Ответ отправил: Manserg (статус: 3-ий класс)
Ответ отправлен: 21.08.2006, 09:55
Вопрос № 52.745
Не могу разобраться, как рапотает процедура с ключевым словом "далее"
Как пишет книга: "Ключевое слово Далее означает, что это описания только заголовка процедуры, а тело процедуры будет описано далее, если вызов процедуры идет выше ее описания, то будет выдана ошибка"
Я пробовол ее испльзовать, но уже при проверке синтаксиса программного модуля выходили ошибки.
Можете ли привести пример ее использования?
Как я понимаю, то это ключивое слово должно указываться на той процедуре или функции, которая будет вызвана, выше ее описания, т.е. перед описанием самой процедуры или функции?
Отвечает: Elric
Здравствуйте, Терсков Алексей Николаевич!
В Приложении -- пример использования ключевого слова "Далее".
Приложение:
--------- Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 21.08.2006, 13:29 Оценка за ответ: 4 Комментарий оценки: Если сама функция внизу, то зачем тогда описовать ее заголовок, как написано в книеге, в верху? Ничего понять не могу, можно по подробнее?
Отвечает: Vizli
Здравствуйте, Терсков Алексей Николаевич!
В модуле последовательность процедур и функций имеет значение, т.е. если
процедура (функция) с именем "МояПроцедура1" вызывается из процедуры (функции) "МояПроцедура2", то она должна быть напиана в модуле до текста "МояПроцедура2", иначе будет ошибка:
//**********************
// так верно
...
Процедура МояПроцедура1()
КонецПроцедуры
...
Ключевое слово "Далее" позволяет избежать такого положения (в модулях часто бывает десятки тысяч строк) и описать процедуры (функции) в начале модуля и помещать их в любом месте модуля, не заботясь о порядке:
//**********************
...
МояПроцедура1() Далее
...
// так верно!
...
Процедура МояПроцедура2()
МояПроцедура1();
КонецПроцедуры
...
Ответ отправил: Vizli (статус: 1-ый класс)
Ответ отправлен: 21.08.2006, 14:04
Отвечает: Warior
Здравствуйте, Терсков Алексей Николаевич!
Что то типа
Процедура ПриВыбореЗакладки(Номер,Значение) Далее
....
....
Процедура ПриВыбореЗакладки(Номер,Значение) Далее
....
....
КонецПроцедуры
Ответ отправил: Warior (статус: 2-ой класс)
Ответ отправлен: 21.08.2006, 15:10
Отвечает: Краюшкин Игорь Валерьевич
Здравствуйте, Терсков Алексей Николаевич!
Процедура Показать() Далее
Процедура ПриОткрытии()
Если <Условие> Тогда
Показать();
КонецЕсли;
КонецПроцедуры
Отвечает: Шальков Павел Владимирович
Здравствуйте, Терсков Алексей Николаевич!
Слово "Далее" используется для предварительного описания процедуры или функции, если ее вызов будет происходить выше чем находится ее полное описание. Например:
Процедура А()
..Процедура Б();
КонецПроцедуры
Процедура Б()
...
КонецПроцедуры
Здесь будет ошибка, т.к. Б() вызывается до ее описания, чтобы это исправить в начале модуля нужно написать:
Процедура Б() Далее
...и дальше все остальное.
Отвечает: Ovr1970
Здравствуйте, Терсков Алексей Николаевич!
Ключевое слово "далее" необходимо для создания рекурсивных процедур.
Например есть ряд, где А1=0;a2=1; A2n+1=A2n+2;А2n=(A2n-1)*2
Тогда вычисление ряда можно запрограммировать как показано ниже
Но такой код будет выдавать при компиляции ошибку при любом порядке процедур, а с добавкой перед ним строки "Функция Анечет(n) Далее" будет работать.
Кроме того, для удобства восприятия кода, иногда лучше изменить порядок следования процедур. Чтобы компиляция проходила без ошибок можно использовать наше ключевое слово.
Приложение:
Ответ отправил: Ovr1970 (статус: Студент)
Ответ отправлен: 22.08.2006, 12:25
Вопрос № 52.751
Здравствуйте, УважаемыеЭксперты !!
Беда : в форме журнала есть закладки по одному реквизиту :
ЗакладкиОтбора("Заезд")
а мне еще надо показать документы только одного автора :
УстановитьОтбор("Автор","Иванов")
Без закладок по автору отбирает.
Вопрос : нельзя что ли никак по двум реквизитам одновременно установить отбор ?
и если нет, то как все-таки дать возможность пользователю видеть только свои документы в разрезе заездов
п.с. именно в журнале документов. я знаю, что можно сделать обработку и в ней показать всё что хочешь )
Отправлен: 21.08.2006, 15:30
Вопрос задала: SiniaRyba (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 8)
Отвечает: Грязнов Артем Александрович
Здравствуйте, SiniaRyba!
По двум реквизитам действительно нельзя. Если бы передо мной стояла такая задача, то я бы создал реквизит АвторЗаезд (который бы был составным из соответствующих значений реквизитов документа) и такую же графу отбора. В процедуре ПриЗаписи() документа написал:
АвторЗаезд = Строка(Автор)+Строка(Заезд);
И на форме журнала, при выборе двух реквизитов Автор и Заезд, устанавливал бы отбор по одному этому реквизиту.
Ответ отправил: Грязнов Артем Александрович (статус: 1-ый класс)
Ответ отправлен: 21.08.2006, 18:32 Оценка за ответ: 5
Вопрос № 52.765
Здравствуйте! 1С v7.7, комплексная конфигурация. При подборе партии (например в документе ПеремещениеТМЦ), выводится форма списка справочника "Партии", в которой выводятся все партии данного товара, и показывается остаток по данной партии (реквизит "Остаток" - строка), причем выводятся все партии, даже если остатка нет. Как сделать так, чтобы показывались только те партии у которых есть остаток. Все было бы просто если б реквизит "Остаток" был реквизитом справочника "Партии",
однако это не так, он вычисляется в форме списка справочника. Подскажите решения. Я новичок, так что по-проще))) Спасибо.
Отправлен: 21.08.2006, 17:04
Вопрос задал: Munster (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Elric
Здравствуйте, Munster!
У формы списка справочника есть метод
ИспользоватьСписокЭлементов(<СписокЗначений>)
При открытии формы списка справочника Партии делаете запрос, формируете список значений с партиями по которым есть остаток и применяете этот метод. В результате в форме списка будут только партии с ненулевым (или положительным, как выберите) остатком.
--------- Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 22.08.2006, 00:53 Оценка за ответ: 5 Комментарий оценки: Все, оказывается, так просто.
Вопрос № 52.769
Здравствуйте! 1С v7.7 Комплексная конфигурация. В ходе работы с программы появляются отрицательные партии (этого не избежать такая специфика работы предприятия). Подскажите как можно закрыть эти отрицательные партии, есть партия с остатком -5 и партия с остатком 5, нужно сделать так чтобы у обеих партий остаток был равен 0. Нашел пока только один способ: продать положительную партию, а потом сделать возврат на отрицательную партию, но данный метод не очень нравится бухгалтерии. Может можно как-нибудь по-другому.
Например, если создать документ который делает движение по регистрам, то что мне нужно будет предусмотреть. Жду Ваших рекомендаций. Спасибо!
Отправлен: 21.08.2006, 17:23
Вопрос задал: Munster (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Elric
Здравствуйте, Munster!
1. Как вариант, можно просто перепровести расходные накладные за прошедший период -- при включенном методе FIFO партии закроются сами автоматически.
2. Если все же нужно отдельно закрывать, то пишете документ, при проведении запрос по остаткам, и просто закрываете одну партию на другую. Как вариант можно предусмотреть выбор в табличной части документа какую партию меняем на какую, но это довольно хлопотно -- потом отследить чтобы пользователи не создали еще большей путаницы. Хотя, если специфика...
--------- Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 22.08.2006, 00:58
Отвечает: Ovr1970
Здравствуйте, Munster!
Интересная специфика у Вашего предприятия, жаль Вы ее не озвучили. Обычно при такой специфике переделывают программу. Например так, чтобы в расходных накладных списывалось только количество (без партий и себестоимости), а партии и себестоимость списывались другим документом, например "ЗакрытиеМесяца", причем уже без количество (т.к. оно уже списано расходами).
Если программу переписывать некогда, то ПРАВИЛЬНЫЕ остатки и списания можно получить только путем правильного ведения документов. Для этого придется перепровести все документы за месяц. Но ведь это можно сделать не вручную, а обработкой, не так ли?
Закрывать партии дополнительными документами не советую, т.к. отрицательные партии это еще не все. А неправльная себестоимость, а неправильный возврат, который может произойти позже, а будет непрвильным из-за того, что неправильной была продажа.
Ответ отправил: Ovr1970 (статус: Студент)
Ответ отправлен: 22.08.2006, 12:39
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Munster!
Сделать продажу положительной партии и заплатить налоги а потом сделать возврат - это круто. Правильно не нравится бухгалтерии.
Что нужно предусмотреть: если есть отрицательная партия -5 штук -30 рублей и положительная партия +5 штук +28 рублей, то при закрытии -2 рубля зависнет.
Если есть еще одна партия +2 штук +17 рублей, то можно эти -2 рубля послать на эту партию. Если же этой партии нет, то возникают проблемы.
Просто обнулить их НЕЛЬЗЯ, иначе в балансе не совпадет сумма активов и пассивов. Точно уточните в бухгалтерии, куда отправить эти 2 рубля - или на затраты, или на какое-то левое ТМЦ, которое втихаря от налоговой заведут в бухгалтерии для списания таких вот случаев.
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Студент)
Ответ отправлен: 22.08.2006, 13:38 Оценка за ответ: 4 Комментарий оценки: А если все это делать одним месяцем. Себестоимость партий одинаковая. Ведь при возврате делаются такие же проводки, только красным