Имя: Пароль:
1C
 
Прошу помощи с кодом выборки организации
↓ (Волшебник 16.12.2025 17:10)
0 Aleks_0684
 
15.12.25
10:01
Добрый день. Такой вопрос в 1с Бухгалтерия заведены 2 организации. У каждой свой префикс. Есть справочник авансовых отчетов, где нумерация сбилась, необходимо установить правильную нумерацию.
Использую такой код:

начатьтранзакцию();
Выборка = Документы.АвансовыйОтчет.Выбрать(Дата(2025,1,1),ТекущаяДата(),,"Дата");
Номер = 1;
Пока Выборка.Следующий() Цикл
Сообщить(Выборка);
Док = Выборка.ПолучитьОбъект();
Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0");
Док.Комментарий ="#Номер изменен";
Док.Записать();
Сообщить(Док.Номер);
Номер = Номер+1;
КонецЦикла;
зафиксироватьтранзакцию();

Он переименовывает все документы авансового отчета, соответственно изменяя префикс у обеих организаций.
Как мне сделать что б данная обработка затрагивала только документы одной из организаций, при этом не трогая документы другой?
1 Aleks_0684
 
15.12.25
10:02
Я так понимаю нужно добавить выборку по организации.
Выбор = Организация.Наименование=Организация1

Выдает синтаксическую ошибку что переменная не определена.
2 Табуретко
 
15.12.25
10:04
а запросом религия не позволяет?
3 Aleks_0684
 
15.12.25
10:07
Мозгов у меня не хватает. Поэтому и прошу помощи.
4 Волшебник
 
15.12.25
10:09
Говнокод без лесенки
5 AAA
 
15.12.25
10:13
(3)Какие тут мозги нужны? В цикл вставляете условие Выборка.Организация. Либо в запрос, как тут правильно советовали. Непосредственно в выборке лучше не менять объект
Не Наименование у Организации сравнивать, а ссылку
6 Fish
 
гуру
15.12.25
10:15
(1) Ну так почитай СП. У метода Выбрать() есть параметр "Отбор". Его и задавай.
7 Волшебник
 
15.12.25
10:16
(6) При этом реквизит должен быть проиндексирован
8 Табуретко
 
15.12.25
10:20
Запрос = Новый Запрос;
Запрос.Текст =  "ВЫБРАТЬ
|    АвансовыйОтчет.Ссылка КАК Авансовый
|ИЗ
|    Документ.АвансовыйОтчет КАК АвансовыйОтчет
|ГДЕ
|    АвансовыйОтчет.Организация = &Организация
|    И АвансовыйОтчет.Дата >= &ВыбДата
|
|УПОРЯДОЧИТЬ ПО
|    АвансовыйОтчет.Дата";

Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("ООО Рога и Копыта");
Запрос.Параметры.Вставить("ВыбДата", '20250101');
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Авансовый);    
//далее ваш код

но я бы реквизиты отбора на форму повесил...
9 Ногаминебить
 
15.12.25
10:31
(0) Просто чтоб разбавить общий хор.
Завести отдельный счетчик нумератора под каждую организацию, проверять какая в конкретном документе и его плюсовать. :)
10 Aleks_0684
 
15.12.25
10:32
(8) Все равно меняет нумерацию и префикс сразу у обеих организаций
11 Kigo_Kigo
 
15.12.25
10:36
(10) А ты "ООО Рога и Копыта" ищешь? бгггг
12 Aleks_0684
 
15.12.25
10:38
Нет конечно. поставил наименование своей организации
13 Fish
 
гуру
15.12.25
10:45
(10) А у второй организации наименование отличается?
14 Aleks_0684
 
15.12.25
10:55
(13) Конечно. 2 разные организации с разным наименованием
15 Табуретко
 
15.12.25
10:57
(14) можно еще раз код в студию?
16 Fish
 
гуру
15.12.25
10:58
(14) Тогда не может быть такого. Показывай свой код.
17 Aleks_0684
 
15.12.25
11:01
Запрос = Новый Запрос;
Запрос.Текст =  "ВЫБРАТЬ
|    АвансовыйОтчет.Ссылка КАК Авансовый
|ИЗ
|    Документ.АвансовыйОтчет КАК АвансовыйОтчет
|ГДЕ
|    АвансовыйОтчет.Организация = &Организация
|    И АвансовыйОтчет.Дата >= &ВыбДата
|
|УПОРЯДОЧИТЬ ПО
|    АвансовыйОтчет.Дата";

Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток"));
Запрос.Параметры.Вставить("ВыбДата", '20250101');
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Авансовый);  

начатьтранзакцию();
Выборка = Документы.АвансовыйОтчет.Выбрать(Дата(2025,1,1),ТекущаяДата(),,"Дата");
Номер = 1;
Пока Выборка.Следующий() Цикл
Сообщить(Выборка);
Док = Выборка.ПолучитьОбъект();
Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0");
Док.Комментарий ="#Номер изменен";
Док.Записать();
Сообщить(Док.Номер);
Номер = Номер+1;
КонецЦикла;
зафиксироватьтранзакцию();    
КонецЦикла;
18 Kigo_Kigo
 
15.12.25
11:02
(12) Дак встань отладчиком,проверь, ищется организация или там пусто?
19 Табуретко
 
15.12.25
11:05
Выборка = Документы.АвансовыйОтчет.Выбрать(Дата(2025,1,1),ТекущаяДата(),,"Дата");
свою выборку с циклом накой поставили?
Вы точно программист?
20 Aleks_0684
 
15.12.25
11:06
(8) Так написали же //Далее ваш код. Я кстати подумал еще зачем два раза выборка по дате...
21 Табуретко
 
15.12.25
11:08
транзакцию за цикл вынесите и замените
Док = Выборка.ПолучитьОбъект();
на
Док = Выборка.Авансовый.ПолучитьОбъект();
22 Aleks_0684
 
15.12.25
11:10
Запрос = Новый Запрос;
Запрос.Текст =  "ВЫБРАТЬ
|    АвансовыйОтчет.Ссылка КАК Авансовый
|ИЗ
|    Документ.АвансовыйОтчет КАК АвансовыйОтчет
|ГДЕ
|    АвансовыйОтчет.Организация = &Организация
|    И АвансовыйОтчет.Дата >= &ВыбДата
|
|УПОРЯДОЧИТЬ ПО
|    АвансовыйОтчет.Дата";

Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток"));
Запрос.Параметры.Вставить("ВыбДата", '20250101');
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Авансовый);  

начатьтранзакцию();
Номер = 1;
Пока Выборка.Следующий() Цикл
Сообщить(Выборка);
Док = Выборка.Авансовый.ПолучитьОбъект();
Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0");
Док.Комментарий ="#Номер изменен";
Док.Записать();
Сообщить(Док.Номер);
Номер = Номер+1;
КонецЦикла;
зафиксироватьтранзакцию();    
КонецЦикла;

Так?
23 Fish
 
гуру
15.12.25
11:11
(20) Тщательнее надо думать.
24 Fish
 
гуру
15.12.25
11:11
(22) Нет, не так. Думай лучше.
25 Aleks_0684
 
15.12.25
11:11
начатьтранзакцию();

Запрос = Новый Запрос;
Запрос.Текст =  "ВЫБРАТЬ
|    АвансовыйОтчет.Ссылка КАК Авансовый
|ИЗ
|    Документ.АвансовыйОтчет КАК АвансовыйОтчет
|ГДЕ
|    АвансовыйОтчет.Организация = &Организация
|    И АвансовыйОтчет.Дата >= &ВыбДата
|
|УПОРЯДОЧИТЬ ПО
|    АвансовыйОтчет.Дата";

Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток"));
Запрос.Параметры.Вставить("ВыбДата", '20250101');
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Авансовый);  
Номер = 1;
Пока Выборка.Следующий() Цикл
Сообщить(Выборка);
Док = Выборка.Авансовый.ПолучитьОбъект();
Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0");
Док.Комментарий ="#Номер изменен";
Док.Записать();
Сообщить(Док.Номер);
Номер = Номер+1;
КонецЦикла;
зафиксироватьтранзакцию();    
КонецЦикла;
26 AAA
 
15.12.25
11:12
(10)Возьмите себя в руки ) Напишите сначала просто запрос или выборку документов по требуемой организации. Это пара минут
Потом уже меняйте что либо
27 Табуретко
 
15.12.25
11:12
(25)да как-же так? Может позовем специалиста?
28 Fish
 
гуру
15.12.25
11:17
(25) Убери цикл в цикле.
29 Aleks_0684
 
15.12.25
11:19
(27) Так я за этим сюда и обратился )
30 Aleks_0684
 
15.12.25
11:20
(28) начатьтранзакцию();

Запрос = Новый Запрос;
Запрос.Текст =  "ВЫБРАТЬ
|    АвансовыйОтчет.Ссылка КАК Авансовый
|ИЗ
|    Документ.АвансовыйОтчет КАК АвансовыйОтчет
|ГДЕ
|    АвансовыйОтчет.Организация = &Организация
|    И АвансовыйОтчет.Дата >= &ВыбДата
|
|УПОРЯДОЧИТЬ ПО
|    АвансовыйОтчет.Дата";

Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток"));
Запрос.Параметры.Вставить("ВыбДата", '20250101');
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Авансовый);  
Номер = 1;
Сообщить(Выборка);
Док = Выборка.Авансовый.ПолучитьОбъект();
Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0");
Док.Комментарий ="#Номер изменен";
Док.Записать();
Сообщить(Док.Номер);
Номер = Номер+1;
КонецЦикла;
зафиксироватьтранзакцию();
31 Табуретко
 
15.12.25
11:20
неправильно
32 Fish
 
гуру
15.12.25
11:21
(29) Так тебе уже все советы дали. Осталось немного голову включить. Или ты хочешь, чтобы тут за тебя твою работу сделали?
33 Табуретко
 
15.12.25
11:21
Номер = 1; куда нужно вынести?
34 Aleks_0684
 
15.12.25
11:28
(33) Я так понимаю за цикл?
35 1cVandal
 
15.12.25
11:34
(34) правильно
36 Табуретко
 
15.12.25
11:34
(34) а почему?
37 1cVandal
 
15.12.25
11:35
интересно он попадет на ошибку что номер не уникален....
38 Aleks_0684
 
15.12.25
11:36
Потому что так будет правильно )
Но при выполнении запроса 1с выдает ошибку теперь.
39 Волшебник
 
15.12.25
11:40
(25) му-ха-ха
40 1cVandal
 
15.12.25
11:37
когда пишешь про ошибку, ты её текст сразу публикуй
41 1cVandal
 
15.12.25
11:41
в Сообщить(Выборка) падает?) убери нафиг
42 Fish
 
гуру
15.12.25
11:41
Какой-то миста-кодинг получается (по аналогии с вайб-кодингом).
Пациент думать не хочет, только даёт директивы, как ИИ.
43 1cVandal
 
15.12.25
11:44
(42) все когда то начинали)
44 Волшебник
 
15.12.25
12:24
(42) ОНИ нас воспринимают как ботов.
wiki:Чужие_среди_нас
45 craxx
 
15.12.25
12:40
(0) а Вы кем там в этой организации?
46 Aleks_0684
 
15.12.25
13:31
Спасибо огромное. По одной организации всё по лучилось. А вот по второй никак. Там в наименовании организации кавычки и наверно из-за этого вываливается ошибка.
Вот тут что я не так делаю?

Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("ООО "Рога и опыта""));
47 Telcher
 
15.12.25
13:35
(46) Справочники.Организации.НайтиПоНаименованию("ООО ""Рога и опыта""");
48 Fish
 
гуру
15.12.25
13:42
(46) "Вот тут что я не так делаю?" - лучше то искать организацию не по наименованию. В твоей ситуации, имхо, лучше искать по коду. А в общей - по уникальным реквизитам (ИНН/КПП)
49 Fish
 
гуру
15.12.25
13:45
+(48) Ну а если это обработка для разовой перенумерации, то лучше всего вообще не искать организацию, а воспользоваться советом из (8) и выбирать организацию в реквизит.
50 Aleks_0684
 
15.12.25
13:45
Пробовал по ИНН тоже вываливается в ошибку
ТОчное название органицации вот: АО "ППЭП "Мир"
Пробовал по ИНН вот так:
Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоИНН("123465879"));
51 Aleks_0684
 
15.12.25
13:51
В данной транзакции уже происходили ошибки!
{ОбщийМодуль.ДлительныеОперации.Модуль(2866)}:Блокировка.Заблокировать();
{ОбщийМодуль.ДлительныеОперации.Модуль(1927)}:УстановитьРезультатПотока(ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации, Результат);
{ОбщийМодуль.ДлительныеОперации.Модуль(1898)}:УстановитьРезультатВызоваФункции(Результат, ПараметрыВыполнения);
{ОбщийМодуль.ДлительныеОперации.Модуль(1746)}:ВызватьФункцию(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);
{ОбщийМодуль.ДлительныеОперации.Модуль(1761)}:ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,, СтекЗапуска, ИнформацияОбОшибке);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка, ОшибкаКонфигурации]
по причине:
Ошибка при вызове метода контекста (Заблокировать)
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
В данной транзакции уже происходили ошибки!
52 Kigo_Kigo
 
15.12.25
13:58
(50) НайтиПоИНН Ухааааа, ищи по коду
Справочники.Организации.НайтиПоКоду("00000001")
Господа, долго издеваться будем?
А вобще бы реквизит вытащил бы на форму и там выбирал организацию
53 Aleks_0684
 
15.12.25
14:00
УРА!!! Заработало!!!!
Спасибо Всем Огромное!!!! Ребят, вы супер. Я вообще в этом деле нихрена не понимаю! ) Вчера в первый раз открыл для себя  это всё. Всю ночь сидел учился )
В итоге я просто убрал все кавычки из названия организации, сменил нумерацию и просто снова добавил кавычки в названии организации.
Спасибо всем огромное за терпение и помощь. Ну и простите, что вот с такими глупыми вопросами обратился.
54 StanLee
 
15.12.25
14:18
и тебе спасибо за хорошее настроение, вспомнил каким я был когдато :))) а то понедельник, настроение хмурое, а тут весело
55 Мультук
 
гуру
15.12.25
14:25
Интересно, что будет с нумерацией, когда введут НОВЫЙ документ ?

Хотя, до конца 2025 немного осталось.
56 yurikmellon2
 
15.12.25
14:34
(53) чувак хитёр, далеко пойдёт. Вместо того чтобы обработать входные данные (название организации со спецсимволами), просто изменил входные данные.
Ребёнок у меня начал питон изучать. На днях задачка на преобразование строк. Смотри, говорю, тебе на вход такая последовательность приходит, как её программно обработать чтобы подучилось как надо? Он за ухом почесал и молвит, а давай на вход вот такая последовательность придёт, тогда одна команда, хопа и ответ.
57 Волшебник
 
15.12.25
14:36
Ребят, подскажите. Я выполняю следующий программный код:
Сообщить(""""); // четыре кавычки!

а мне выдаётся
" // одна кавычка!


Куда делись ещё три?!
58 maxab72
 
15.12.25
14:40
(57) 1с это же бухгалтерская программа. одна кавычка пошла на дебет, другая на кредит, третья на забаланс. Вот и осталась одна на вывод.
59 Kigo_Kigo
 
15.12.25
14:41
(57) А и Б сидели на трубе, там же и ковычки🔥
60 AAA
 
15.12.25
15:38
Организацию жалко, хотя сами виноваты )
61 Chameleon1980
 
16.12.25
08:37
(0) выборка может быть неактуальная после записи документа - используйте запросы
62 Alex7771
 
16.12.25
09:18
вот чаво GROK выдал :)) :
Вот полная внешняя обработка для 1С:Бухгалтерия 3.0 с формой выбора организации и периода для перенумерации документов "АвансовыйОтчет". Номер будет "ПОХ1", "ПОХ2", "ПОХ3" и т.д.​

Форма обработки (реквизиты формы)
Создайте внешнюю обработку с реквизитами:

text
Организация (СправочникСсылка.Организации)
ДатаНач (Дата)
ДатаКон (Дата)
Кнопка "Перенумеровать"
Код модуля формы (клиент-сервер)
text
&НаКлиенте
Процедура Перенумеровать(Команда)
    Если НЕ ЗначениеЗаполнено(Организация) Тогда
        ПоказатьПредупреждение(, "Выберите организацию!");
        Возврат;
    КонецЕсли;
    
    Если ДатаНач > ДатаКон Тогда
        ПоказатьПредупреждение(, "Неверный период!");
        Возврат;
    КонецЕсли;
    
    Состояние("Выполняется перенумерация...");
    ПеренумероватьНаСервере();
    Состояние("Перенумерация завершена");
КонецПроцедуры

&НаСервере
Процедура ПеренумероватьНаСервере()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    АвансовыйОтчет.Ссылка КАК Ссылка,
    |    АвансовыйОтчет.Дата КАК Дата
    |ИЗ
    |    Документ.АвансовыйОтчет КАК АвансовыйОтчет
    |ГДЕ
    |    АвансовыйОтчет.Организация = &Организация
    |    И АвансовыйОтчет.Дата МЕЖДУ &ДатаНач И &ДатаКон
    |    И НЕ АвансовыйОтчет.ПометкаУдаления
    |
    |УПОРЯДОЧИТЬ ПО
    |    Дата";
    
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
    Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    ТекНомер = 1;
    Обработано = 0;
    
    Пока Выборка.Следующий() Цикл
        Попытка
            ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
            ДокОбъект.Номер = "ПОХ" + Формат(ТекНомер, "ЧГ=0");
            ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
            ТекНомер = ТекНомер + 1;
            Обработано = Обработано + 1;
        Исключение
            Сообщить("Ошибка при обработке " + Выборка.Ссылка + ": " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Обработано документов: " + Обработано);
    
КонецПроцедуры
Как использовать
Создайте внешнюю обработку в конфигураторе 1С:Бухгалтерия 3.0

Добавьте форму с реквизитами: Организация, ДатаНач, ДатаКон, кнопка "Перенумеровать"

Вставьте код выше в модуль формы

Сохраните как .epf файл и загрузите в базу​
63 PR
 
16.12.25
09:47
Дожили
60 постов на установку фильтра по организации в выборке
64 Kigo_Kigo
 
16.12.25
10:25
(63) Вопрос подвести джуна, чтобы сам мозгами дошел, как это сделать
65 PR
 
16.12.25
09:58
(64) И как, подвели?
66 Волшебник
 
16.12.25
10:26
(64) Не джуна, а бота
67 Kigo_Kigo
 
16.12.25
17:08
(66) Так бот тупить не может :D
(65) Да притянули к его носу, его ...
Основная теорема систематики: Новые системы плодят новые проблемы.