Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запись и чтение на языке 1С:Предприятие 8.3
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
nickolas
Создал в справочниках доп.пункт
выглядит так: Справочники.ШтрихкодыНоменклатуры
- Реквизиты
-КодШтрихкодаНоменклатуры
-КодНоменклатуры
-НомерДокументаНоменклатуры
-НазваниеДокументаНоменклатуры

больше ничего не добавлял, все реквизиты Строка, разница лиш в длине.

Далее делаю запись в бд из модуля объекта
Процедура ЗаписьВБД(Штрихкод, КодНом, НомерДокНом, НазвДокНом) Экспорт
СправочникОбъект = Справочники.ШтрихкодыНоменклатуры.СоздатьЭлемент();
СправочникОбъект.КодШтрихкодаНоменклатуры = Штрихкод;
СправочникОбъект.КодНоменклатуры = КодНом;
СправочникОбъект.НомерДокументаНоменклатуры = НомерДокНом;
СправочникОбъект.НазваниеДокументаНоменклатуры = НазвДокНом;
СправочникОбъект.Записать();
КонецПроцедуры

Процедуру вызываю из Процедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)Экспорт    

Если ЭтоНовый() Тогда
Штрихкод = ПолучитьШКПоУникальномуЗначению(); ///тут 13-ти числовой правильный EAN-13 номер штрихкода тип Строка
ЗаписьВБД(Штрихкод, "201", "0000000001", "РасходныйОрдерНаТоварыОпер"); // вызов процедуры для записи уникального значения ШК и присвоение его к номеру документа
КонецЕсли;

    Если ОбменДанными.Загрузка  Тогда
        Возврат;
    КонецЕсли;
    
    мУдалятьДвижения = НЕ ЭтоНовый();
    
КонецПроцедуры // ПередЗаписью

Потом, в месте вывода картинки штрихкода пишу запрос
ЗапросШтрихкода = Новый Запрос;
ЗапросШтрихкода.Текст = "ВЫБРАТЬ
                      |    ШтрихкодыНоменклатуры.КодШтрихкодаНоменклатуры
                      |ИЗ
                      |    Справочник.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
                      |ГДЕ
                      |    ШтрихкодыНоменклатуры.НомерДокументаНоменклатуры = ""0000000001""";
                      |    ШтрихкодыНоменклатуры.КодНоменклатуры = "201";
ВыборкаШтрихкода = ЗапросШтрихкода.Выбрать();

ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкод");
ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.ТипКода = 1;

// тут я просто не знаю что писать, нужно данные реквизита КодШтрихкодаНоменклатуры
// те самые 13 цифр которые я "записал" в модуле объекта перед записю, который я должен взять по номеру документа и коду номенклатуры
ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.Сообщение = ???;

ТабДок.Вывести(ОбластьМакета);


вот собственно вопрос, я не могу, пока что, разобраться с запросами, самое элементарное - записать и прочитать данные из БД.
Vofka
ЗапросШтрихкода = Новый Запрос;
ЗапросШтрихкода.Текст =
"ВЫБРАТЬ
|    ШтрихкодыНоменклатуры.КодШтрихкодаНоменклатуры
|ИЗ
|    Справочник.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
|    ШтрихкодыНоменклатуры.НомерДокументаНоменклатуры = ""0000000001""";
|    ШтрихкодыНоменклатуры.КодНоменклатуры = "201";

ВыборкаШтрихкода = ЗапросШтрихкода.Выполнить().Выбрать();
Пока ВыборкаШтрихкода.Следующий() Цикл
    ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкод");
    ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.ТипКода = 1;
    ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.Сообщение = ВыборкаШтрихкода.КодШтрихкодаНоменклатуры;
    ТабДок.Вывести(ОбластьМакета);
КонецЦикла;
nickolas
Пишу так
ЗапросШтрихкода = Новый Запрос;
ЗапросШтрихкода.Текст = "ВЫБРАТЬ
                      |    ШтрихкодыНоменклатуры.КодШтрихкодаНоменклатуры
                      |ИЗ
                      |    Справочник.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
                      |ГДЕ
                      |    ШтрихкодыНоменклатуры.НомерДокументаНоменклатуры = 000000002 И ШтрихкодыНоменклатуры.КодНоменклатуры = 201";

ВыборкаШтрихкода = ЗапросШтрихкода.Выполнить().Выбрать();                      
Пока ВыборкаШтрихкода.Следующий() Цикл
    ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкод");
    ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.ТипКода = 1;
    ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.Сообщение = ВыборкаШтрихкода.КодШтрихкодаНоменклатуры;
    ТабДок.Вывести(ОбластьМакета);
КонецЦикла;

в предыдущем в условии были ошибки, думаю так будет правильнее как выше, но дает пустой результат в строке
logist
Цитата(nickolas @ 19.10.16, 14:51) необходимо зарегистрироваться для просмотра ссылки
пустой результат


Цитата(nickolas @ 19.10.16, 14:51) необходимо зарегистрироваться для просмотра ссылки
НомерДокументаНоменклатуры = 000000002

не может быть так, если НомерДокументаНоменклатуры строка то ""000000002"" (с кавычкам) если число то "2" (без нулей), с остальным так же
nickolas
logist @ Сегодня, 15:06 необходимо зарегистрироваться для просмотра ссылки ,
как получить данные без цикла?
nickolas
Еще вопрос
Как в запрос в условие поместить переменную по примеру ниже?
Переменная1 = "201";
Переменная2 = "00000000001";
ЗапросШтрихкода = Новый Запрос;
ЗапросШтрихкода.Текст = "ВЫБРАТЬ
                      |    ШтрихкодыНоменклатуры.КодШтрихкодаНоменклатуры
                      |ИЗ
                      |    Справочник.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
                      |ГДЕ
                      |    ШтрихкодыНоменклатуры.НомерДокументаНоменклатуры = Переменная2 И ШтрихкодыНоменклатуры.КодНоменклатуры = Переменная1";

ВыборкаШтрихкода = ЗапросШтрихкода.Выполнить().Выбрать();
Vofka
Цитата(nickolas @ 19.10.16, 23:33) необходимо зарегистрироваться для просмотра ссылки
как получить данные без цикла?

Зачем?

Цитата(nickolas @ 20.10.16, 10:00) необходимо зарегистрироваться для просмотра ссылки
Как в запрос в условие поместить переменную по примеру ниже?

...
|ГДЕ
|    ШтрихкодыНоменклатуры.НомерДокументаНоменклатуры = &НомерДокументаНоменклатуры
...
ЗапросШтрихкода.УстановитьПараметр("НомерДокументаНоменклатуры", "12345");


Вы пробовали хоть какую-то книжку по 1С открывать?

nickolas
Vofka @ Сегодня, 10:54 необходимо зарегистрироваться для просмотра ссылки ,
К примеру взять php, который я знаю, на нем пишу и неплохо читаю код.
Через цикл примерно как в 1С на php будет так:
<?php
$d = 1;
$query = "SELECT * FROM `sql_table` WHERE `id` = '.$id.'";
$res = mysql_query($query);
while($row = mysql_fetch_array($res))
{
echo "Номер: ".$row['id']."<br>\n";
echo "Имя: ".$row['firstname']."<br>\n";
echo "Фамилия: ".$row['surname']."<br><hr>\n";
}
?>

ну и можно так реализовать, дабы не тягать всю таблицу и выбирать то что нужно
<?php
$id = 1;
$query = "SELECT `id`,`firstname`,`surname` FROM `sql_table` where id='.$id.'";

$res =  mysql_query($query);
$row = mysql_fetch_row($res);
echo "Идентификатор:  ".$row[0]."\n";
echo "Имя:  ".$row[1]."\n";
echo "Фамилия:  ".$row[2]."\n";
?>

Теперь зачем, потому как к примеру счас мне нада вытянуть всего лиш одну запись из другой таблици и с ней работать по всему коду. А другого способа передачи содержимого как не через бд я не вижу вообще в 1С. Ну или может не знаю про такие еще. Покажите мне вот эти два запроса как их реализовать в 1С.
Petre
nickolas @ Сегодня, 13:17 необходимо зарегистрироваться для просмотра ссылки ,
Если предполагается выборка одной записи, то достаточно такого:
Если ВыборкаШтрихкода.Следующий() Тогда
    ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкод");
    ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.ТипКода = 1;
    ОбластьМакета.Рисунки.РисунокШтрихкод.Объект.Сообщение = ВыборкаШтрихкода.КодШтрихкодаНоменклатуры;
    ТабДок.Вывести(ОбластьМакета);
КонецЕсли;
nickolas
Еще созрел такой вопрос у меня, вот к примеру есть у меня такой код в модуле менеджера
ЗапросШтрихкода = Новый Запрос;
ЗапросШтрихкода.Текст =
"ВЫБРАТЬ
|    ШтрихкодыНоменклатуры.Штрихкод // сгенерировано и заполнено с самого начала работы
|    ШтрихкодыНоменклатуры.Номер //добавилось при записи
|    ШтрихкодыНоменклатуры.КодДокумента // добавилось при записи
|ИЗ
|    Справочник.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
|ШтрихкодыНоменклатуры.Ссылка В (&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();


Пока Выборка.Следующий() Цикл
/// тут всякие мои манипуляции с данными
/// в результате чего у меня есть данные
НомерДок = Выборка.Номер;
КоДок = Выборка.КодДокумента;

/// тут момент вопроса***
/// как в уже заполненой бд изменить например Выборка.Штрихкод чтоб было = ""+КодДок+НомерДок;
/// и затем его запросить
ШтрихкодДок = Выборка.Штрихкод; // и чтоб вывелся уже новый ШК, который я буду использовать далее
КонецЦикла;

Атрибут "Штрихкод" у мня прописался у меня в Модуде Объекта в Процедуре ПередЗаписью(), тоисть он добавился в бд и прикрепился к будующей записи, и так как я не знаю какой будет новый порядковый номер документа то я его не могу туда вписать в сам штрихкод, поэтому генернирую штрихкод по другому уникальному значению, так сказать не чичтабельный выходит.
Вопрос, как выше, где находиться *** прописать перезапись штрихкода, и птстроить его из тех данных которые я достал запросом.

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

Я пробовал вот так:
Если Выборка.Следующий() Тогда
    СправочникОбъект = Выборка.Штрихкод;
    СправочникОбъект.Штрихкод = ""+КодДок+НомерДок;
    СправочникОбъект.Записать();
КонецЕсли;


но не робит, что я делаю не так?
sava1
ЗапросШтрихкода = Новый Запрос;
ЗапросШтрихкода.Текст = "ВЫБРАТЬ
|    ШтрихкодыНоменклатуры.Ссылка,
|    ШтрихкодыНоменклатуры.Штрихкод // сгенерировано и заполнено с самого начала работы
|    ШтрихкодыНоменклатуры.Номер //добавилось при записи
|    ШтрихкодыНоменклатуры.КодДокумента // добавилось при записи
|ИЗ
|    Справочник.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
|ШтрихкодыНоменклатуры.Ссылка В (&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
   /// тут всякие мои манипуляции с данными /// в результате чего у меня есть данные
НомерДок = Выборка.Номер;
КоДок = Выборка.КодДокумента;

Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Штрихкод = НовыйШтрихкод;
Объект.Записать();

КонецЦикла;
nickolas
sava1 @ Вчера, 14:40 необходимо зарегистрироваться для просмотра ссылки ,
Пишит "Поле обєкта на виявлено (Ссылка)"
sava1
В запросе первая строка
nickolas
sava1 @ Сегодня, 10:12 необходимо зарегистрироваться для просмотра ссылки , так робит, спасибо. Но не пойму откуда взялось поле Ссылка если его нет в бд?
pablo
Откуда в php появляется this, оттуда же в 1с появляется Ссылка.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.