![]() |
VanHelsing, а до записи не вариант еще строку добавить?
Насколько я понял после запили объект становится ссылкой. |
Cartman, нет, не вариант. надо что бы можно было зайти в этот документ (например после разрыва связи) и добавить запись с товаром :молись:
1. а что когда объект становится ссылкой в него ничего добавить/удалить нельзя? 2. может есть другой вариант как сохранять документ (ведь в самой 1с я могу зайти потом в документ найдя его в журнале и добавлять/удалять записи)? зы: речь идет об 1с 8.1 |
Подожди, тебе надо чтобы эта процедура закончила свою работу, документ можно было открыть, посмотреть/отредактировать, а потом снова запускать эту процедуру?
Если так - тебе надо найти свой документ. Я бы сделал в форме поле с выбором документа, типа если пустое - создаешь новый, если заполнено - пишешь в него. Объект получаешь типа так: заказПокупателя = НаименованиеПоля.ПолучитьОбъект(); |
не очень понял. я сам веб-дизайном занимаюсь, потому у меня проблема с 1с (только изучать начал). мне надо найти документ, например по номеру. как номер получить я потом голову забивать буду. потом открыть его, добавить строку и снова сохранить. пошел пока читать что делает ПолучитьОбъект()...:claps:
|
Ну вот так например
Док = Неопределено; Док = Документы.ТутТвойТипДокумента.Выбрать(ДатаНач,ДатаКон); Пока Док.Следующий() Цикл Если Док.Номер = "0000001" Тогда //номер твой ествественно Док.ПолучитьОбъект(); //Тут операции с Док типа добавления строки и т.д. КонецЕсли; Прервать; //Ну типа чтоб цикл дальше не крутился КонецЦикла; А, можно проще, че-то я гоню... Док = Документы.ТутТвойТипДокумента; Док.НайтиПоНомеру("00000001"); Док.ПолучитьОбъект(); |
метод объекта не обнаружен получить объект :(
а добавлять строку я смогу так же типа новаяСтрока=заказПокупателя.товары.добавить(); // ? видимо делаю че не так: заказПокупателя=документы.заказПокупателя; заказПокупателя.НайтиПоНомеру("00000046"); заказПокупателя.ПолучитьОбъект(); новаяСтрока = заказПокупателя.товары.добавить(); новаяСтрока.номенклатура=справочники.номенклатура.найтиПоКоду("15070") ; единица=справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт."); новаяСтрока.ЕдиницаИзмерения=единица; новаяСтрока.цена=12.20; новаяСтрока.количество=70; новаяСтрока.сумма=12.20*70; не работает. ругается на ПолучитьОбъект(); так ругается, что слишком много фактических параметров: заказПокупателя=документы.заказПокупателя.найтиПоНомеру(00000046); заказПокупателя.получитьОбъект(00000046); новаяСтрока = заказПокупателя.товары.добавить(); новаяСтрока.номенклатура=справочники.номенклатура.найтиПоКоду("15070") ; единица=справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт."); новаяСтрока.ЕдиницаИзмерения=единица; новаяСтрока.цена=12.20; новаяСтрока.количество=70; новаяСтрока.сумма=12.20*70; так ругается, что элемент не выбран: заказПокупателя=документы.заказПокупателя.найтиПоНомеру(00000046); заказПокупателя.получитьОбъект(); новаяСтрока = заказПокупателя.товары.добавить(); новаяСтрока.номенклатура=справочники.номенклатура.найтиПоКоду("15070") ; единица=справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт."); новаяСтрока.ЕдиницаИзмерения=единица; новаяСтрока.цена=12.20; новаяСтрока.количество=70; новаяСтрока.сумма=12.20*70; а так: Док = Документы.заказПокупателя; Док.НайтиПоНомеру("00000046"); Док.ПолучитьОбъект(); {Форма.ФормаДокумента(67)}: Метод объекта не обнаружен (ПолучитьОбъект) Док.ПолучитьОбъект(); сорри, за тупость :( |
Кто-нибудь знает, как можно в типовой 1С Бухгалтерии 8.0 отразить в авансовом отчете факт приобретения билетов + сдачи этих билетов назад в кассу?
Проблема в том, что на закладке "Прочее" в документе "Авансовый отчет" нельзя ввести отрицательные суммы... |
Цитата:
|
Цитата:
|
VanHelsing, Может и не надо объект получать, может оно уже является объектом.
Метод точно нужен в случае с выборкой, а при найти может и не нужен. |
2 VanHelsing
Если еще актуально, то вот нужный тебе код: Код:
Док = Документы.ЗаказПокупателя.НайтиПоНомеру("00001"); |
Flegg, очень актуально. на твой код сказала:
{Форма.ФормаДокумента(67)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран! оДок = Док.ПолучитьОбъект(); по причине: Элемент не выбран! Cartman, при найти он не работает с ним. нет объекта комментарий, товары и т.п. я уже запарился инет рыть :( при найти: Док = Документы.ЗаказПокупателя.НайтиПоНомеру("00000046"); новаяСтрока = Док.Товары.Добавить(); новаяСтрока.номенклатура=справочники.номенклатура.найтиПоКоду("15070") ; единица=справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт."); новаяСтрока.ЕдиницаИзмерения=единица; новаяСтрока.цена=12.20; новаяСтрока.количество=70; новаяСтрока.сумма=12.20*70; Док.Записать(РежимЗаписиДокумента.Проведение); {Форма.ФормаДокумента(73)}: Метод объекта не обнаружен (Записать) Док.Записать(РежимЗаписиДокумента.Проведение); |
VanHelsing, делай выборкой, так работает у меня по крайней мере...
|
Cartman, вот так:
Док = Неопределено; Док = Документы.заказПокупателя.Выбрать("20070709","20070709"); Пока Док.Следующий() Цикл Если Док.Номер = "00000046" Тогда //номер твой ествественно Док.ПолучитьОбъект(); //Тут операции с Док типа добавления строки и т.д. новаяСтрока = док.товары.добавить(); новаяСтрока.номенклатура=справочники.номенклатура.найтиПоКоду("15070") ; единица=справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт."); новаяСтрока.ЕдиницаИзмерения=единица; новаяСтрока.цена=12.20; новаяСтрока.количество=70; новаяСтрока.сумма=12.20*70; КонецЕсли; Прервать; //Ну типа чтоб цикл дальше не крутился КонецЦикла; не ругается что не выбран элемент. но и строка в док-те не появляется. а док.записать() не канает, говорит, что нет такого "записать" :молись: |
Цитата:
|
2 VanHelsing
Ошибся малость. Ошибка возникает в том случае, если не находит докумнет с нужным номером. Код:
Док = Документы.ЗаказПокупателя.НайтиПоНомеру("00001"); |
Flegg, не ругнулась на сей раз:
Док = Документы.ЗаказПокупателя.НайтиПоНомеру("00000046"); Если Док <> Неопределено И НЕ Док.Пустая() Тогда оДок = Док.ПолучитьОбъект(); новаяСтрока = оДок.Товары.Добавить(); // ... новаяСтрока.номенклатура=справочники.номенклатура.найтиПоКоду("15070") ; единица=справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт."); новаяСтрока.ЕдиницаИзмерения=единица; новаяСтрока.цена=12.20; новаяСтрока.количество=70; новаяСтрока.сумма=12.20*70; оДок.Записать(РежимЗаписиДокумента.Проведение); КонецЕсли; но и ничего не добавила. а номер документа 100% 00000046 попробовал так: Док = Документы.ЗаказПокупателя.НайтиПоНомеру("00000046"); Если Док <> Неопределено И НЕ Док.Пустая() Тогда оДок = Док.ПолучитьОбъект(); сообщить (оДок.комментарий); КонецЕсли; она ничего не сообщила. т.е. выходит, как бы у меня нет такого дока. хз :( |
2 VanHelsing
У метода НайтиПоНомеру есть второй параметр "Дата". Параметр используется для документов с периодической нумерацией. Так что строка должна выглядеть примерно так: Док = Документы.ЗаказПокупателя.НайтиПоНомеру("00000046",'20070101'); |
Flegg, вот это реально заработало. сенкс. был бы новосибирск в соседнем районе, угостил бы гинесом. а так тока в репутацию :beer:
1. может как-то можно когда док-т создаешь, получить его номер (дата ясно как получить), тогда бы не пришлось листать журнал документов для посиска. нашел только как задать номер :claps: 2. если кто подскажет как получить список товаров из документа (заказПокупателя) буду признателен. |
2 VanHelsing
1. Если нужно получить номер документа до его записи, то используй метод УстановитьНовыйНомер(<Префикс>), ну а дальше Док.Номер 2. Массив ссылок на номеклатуру из табличной части можно получить через Док.Товары.ВыгрузитьКолонку("Номенклатура"); |
Flegg, с массивом разобрался. пасиб. в репутацию больше не дают тебе записать пока :(
а вот с номером пока туплю. вообще надо, конечно, какую-то доступную книгу. нифига не догоняю объектности и структуры 1с... ппц :молись: {Форма.ФормаДокумента(31)}: Значение не является значением объектного типа (УстановитьНовыйНомер) заказПокупателя.УстановитьНовыйНомер(); сделал так: заказПокупателя=документы.заказПокупателя.создатьДокумент(); заказПокупателя.УстановитьНовыйНомер(); сообщить(заказПокупателя.номер); // это мне для отладки инфа вроде как создает, но номер почему-то дает ему 00000016, хотя последний номер в журнале 00000056. а 00000016 уже существует. сходя из какой логики он ему дает номер не ясно. ладно, на крайняк можно получить список доков из журнала и присвоить номер +1. а, и еще можно дату указать периода доков. и еще вопрос. мне присоветовали книгу Митичкина, есть ли что-то проще или в ней все так-же как ты описываешь, ясно и доступно для новичка? |
Цитата:
|
2VanHelsing
1. По поводу ошибки. Метод УстановитьНовыйНомер существует для типа ДокументОбъект. У тебя, скорее всего, переменная заказПокупателя имела тип ДокументСсылка. 2.По поводу получения левого номера. У документа ЗаказПокупателя нумерация документов периодичная. Поэтому перед получением нового номера тебе нужно сначала задать документу дату. 3. По поводу книг. Проще Митичкина нет ничего. Но книга, често говоря, очень слабая: описаны основные объекты без углубления в детали их работы. Радченко - книга получше, есть неплохие для новичка практические примеры, но в некоторых примерах есть косяки. А вообще по 1С 8.0 есть только одна достойная книга: "Профессиональная разработка в системе 1С:Предприятие 8". Правда для новичков она будет несколько сложновата. |
Цитата:
Запускаем эску в режиме конфигуратора, Открываем окно конфигурации, Тыкаем в корень дерева объектов конфы правой кнопкой мыши, выбираем "Свойства", смотрим, что написано на закладке "Общие" и "Автор". |
Flegg, если проще Митичкина нет, почитаю для начала его. потом че-нить поумнее возьму. сенкс.
по номеру еще не пробовал, с получением товаров кавыряюсь. список номенклатуры выдает. супер. сенкс. а вот попробовал так же получить цену. фих. видимо после того, как товар добавлен с указанной ценой, он уже в формате отличном от числового? получить его как: товар=Док.Товары.ВыгрузитьКолонку("Номенклатура"); цена=док.товары.выгрузитьКолонку("цена"); наибольший=товар.количество(); i=0; пока i<наибольший цикл сообщить(товар[i]+":"+цена[i]); i=i+1; конецЦикла; так не выходит в общем :claps: |
2VanHelsing
гм... зачем такой код странный писать? можно ж проще Для Каждого стр Из Док.Товары Цикл Сообщить("" + стр.Номенклатура + ": " + стр.Цена); КонецЦикла; |
Цитата:
- Идентификатор: 77 - Синоним: пусто - Комментарий: пусто "Автор" пусто :confused: |
Прошу помочь в борьбе с крякозябрами в 1С 7.7.
Установлена Windows xp prof sp2 RUS с украинскими стандартами представления денежных единиц и т.п. Проблема в том, что в режиме 1С:Предприятия подсказки (hints), написанные на русском языке, при наведении на реквизиты формы отображаются крякозябрами. В режиме Конфигуратора таких глюков не обнаружено. Как можно решить эту проблему? |
Цитата:
|
Цитата:
Как уже говорил, в предыдущем варианте 1С такое решали, но я не знаю куда смотреть :( .... |
Цитата:
|
Скажите, что можно сделать, если Тестирование и Исправление выдаёт многочисленные ошибки по справочнику Контрагентов
"внутренний ID неуникален. Исправить вручную" Тестирование и исправление запустил, потому что перестали удаляться объекты, помеченные на удаление. То есть когда нажимаешь "Контроль" то объекты, выбранные галочками в списке, просто "пропадают" - то есть список становится пустым. Как исправлять вручную? Как можно это исправление облегчить или автоматизировать?:rolleyes: |
Цитата:
|
Цитата:
Исправление можно будет сделать только руками, причем процес этот будет очень долгим и сложным. Внутренние коды используются в документах и подчиненных справочниках, поэтому надо ненакосячить изменив эти коды... |
Цитата:
Ранее там стоял Русский язык в этом качестве. |
Здравствуйте, нужна помощь по загрузке/выгрузке 1с в автоматическом режиме.
Что имеем: одна основная база и пять периферийных, две из них имееют прямой доступ по локалке, одна по модему, и две по FTP. Все базы 7.7 конфигурация торговля+склад 10.8. Что нужно: чтобы в определенное время периферийные базы выгружались в основную, сразу после загрузки, происходит выгрузка в периферийные. Т.е. простой обмен данными "туда-сюда". Сразу оговорюсь, в этом деле я профан, и собственно своих идей у меня нет. Также нужен скрипт для автоматической проверки на наличие пользователей в 1с, и при наличии онных, чтобы убивал их (пользователи все работают через терминальный сервер). Какие будут предложения? Заранее всем спасибо |
GexogeN, по поводу проверки нафик она нужна, если все равно потом гасить сессии? Гаси их сразу. Как - спроси в теме про сервер терминалов.
Что-то я не слышал про торговлю 10,8 на 7,7... 10-ку реализовывали уже на 8.0, но если уверен что 7.7 - то выход - написать пакетные файлы типа: start.bat "C:\Program Files\1Cv77\BIN\1cv7.exe" config /d"D:\ПутьКБазе\" /NПользователь /PПароль /@"C:\ПутьКПакетномуФайлу\obmen.prm" obmen.prm [General] Quit=1 AutoExchange=1 [AutoExchange] SharedMode=1 //если обязательно в неразделенном режиме - ставишь 0 ReadFrom=* //Откуда получать WriteTo=* //Куда отсылать У меня было настроено в связке nnCron + The Bat. Крон инициировал рассылку из центральной базы 2 раза в день, на переферийных бат как только получал файл с базой делал загрузку и выгрузку, если видел что файл большого размера (были изменения в конфе) по net send рассылал сообщения чтобы все выходили нафик. Можно кстати автовыгонялку написать, если есть желание. Центральная база по мере поступления ответов загружала их. Единственная проблема тут будет с терминалом и кроном, глючат все планировщики в терминале и он в том числе. Мне приходилось быть постоянно залогиненым на серваке, потому как в автозагрузке у меня стояла комманда по запуску крона как в консоли... |
Cartman Насколько я понял, этот скрипт должен выполняться не посредственно на самом сервере? Так как запуская его на удаленном компьютере (в локальной сети) и указывая сетевые пути, он не срабатывает. Т.е. срабатывает но не так как должен. При запуске скрипта, запускается 1с, и останавливается на выборе базы 1с, выбираю базу, жму "ОК", автоматически заходит, но не в конфигуратор, а просто в базу, и на этом останавливается, не загружается, не выгружается.
Вся трабла в том, что файлы выгрузки/загрузки лежат на удаленных серверах (в одной локальной сети) т.е. путь к ним идет сетевой (\\ххх.ххх.ххх.ххх\путь\к\базе\1с\) для наглядности выложу как я сделал: start.bat "C:\Program Files\1Cv77\BIN\1cv7.exe" /d"\\xxx.xxx.xxx.xxx\путь\к\базе\1с\" /Nлогин /Pпароль /@"D:\_BackUp\obmen.prm" obmen.prm [General] Quit=1 AutoExchange=1 [AutoExchange] SharedMode=1 ReadFrom=\\xxx.xxx.xxx.xxx\путь\к обмену\SKL1.zip WriteTo=\\xxx.xxx.xxx.xxx\путь\к обмену\SKl0.zip И еще, у меня не одна перефирийная база, а пять, две из них в локальной сети, если я добавлю в [AutoExchange] строчки вида: ReadFrom=\\xxx.xxx.xxx.xxx\путь\к обмену\SKL1.zip WriteTo=\\xxx.xxx.xxx.xxx\путь\к обмену\SKl0.zip ReadFrom=\\xxx.xxx.xxx.xxx\путь\к обмену\SDF1.zip WriteTo=\\xxx.xxx.xxx.xxx\путь\к обмену\SDF0.zip ReadFrom=\\xxx.xxx.xxx.xxx\путь\к обмену\RTH1.zip WriteTo=\\xxx.xxx.xxx.xxx\путь\к обмену\RTH0.zip То скрипт сработает? Или на каждый обмен нужно запускать новый скрипт? Цитата:
|
Все разобрался где был косяк:
ReadFrom=\\xxx.xxx.xxx.xxx\путь\к обмену\RTH1.zip WriteTo=\\xxx.xxx.xxx.xxx\путь\к обмену\RTH0.zip Вместо пути нужно рисовать звездочку "*" так как все пути уже прописаны в самой 1с. |
Цитата:
Вместо путей, если выборочно хочешь, надо писать идентификаторы баз так как они заданы в управлении Распределенными ИБ. |
Часовой пояс GMT +4, время: 19:10. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.